Browse Source

Merge branch 'V0.0.2' of http://10.87.10.227:4000/jzyd_yyds/soc_web into V0.0.2

jiawuxian 2 years ago
parent
commit
fa47baf901

+ 20 - 0
src/api/core/letter.js

@@ -9,6 +9,13 @@ export function listLetter(query) {
   })
 }
 
+export function auditListLetter(query) {
+  return request({
+    url: '/core/letter/auditList',
+    method: 'get',
+    params: query
+  })
+}
 // 查询详细介绍信
 export function getLetter(id) {
   return request({
@@ -16,6 +23,12 @@ export function getLetter(id) {
     method: 'get'
   })
 }
+export function auditAllList(id) {
+  return request({
+    url: '/core/letter/auditAllList/' + id,
+    method: 'get'
+  })
+}
 
 // 新增介绍信
 export function addLetter(data) {
@@ -34,6 +47,13 @@ export function updateLetter(data) {
     data: data
   })
 }
+export function auditLetter(data) {
+  return request({
+    url: '/core/letter/auditLetter',
+    method: 'post',
+    data: data
+  })
+}
 
 // 删除介绍信
 export function delLetter(id) {

+ 204 - 0
src/views/core/letter/letterAudit/dialog.letterview.vue

@@ -0,0 +1,204 @@
+<template>
+  <div class="edu-training-edit">
+    <DialogCom :title="title" @close="onHide" :visible.sync="isShow" width="800px">
+      <div class="page-body">
+        <el-form ref="form" :model="formData"  label-width="150px">
+          <el-row>
+            <el-col :span="24">
+              <el-form-item  label="介绍信名称:">
+                {{formData.letterName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item   label="介绍信有效期限:">
+                {{formData.startTimeStr}}~{{formData.endTimeStr}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="创建机构:">
+                {{formData.orgName}}
+              </el-form-item>
+            </el-col>
+<!--            <el-col :span="24">
+              <el-form-item label="接待机构:">
+                {{formData.orgNames}}
+              </el-form-item>
+            </el-col>-->
+
+          <el-form-item label="介绍信文件:" >
+            <K-file-upload ref="upload" :defaultValue="formFileListDefualtValue" :disabled="true"  :isShowUploadBtn="false" v-model="formData.letterFile"/>
+          </el-form-item>
+
+          <el-form-item label="备注:" >
+            {{formData.description}}
+          </el-form-item>
+          </el-row>
+          <el-table  :data="formData.userInfos">
+            <el-table-column label="人员姓名" align="center" prop="userName" />
+            <el-table-column label="单位" align="center" prop="companyName" />
+            <el-table-column label="证据号码" align="center" prop="idCard">
+            </el-table-column>
+            <el-table-column label="证件" align="center" prop="imgFile" >
+              <template slot-scope="scope">
+                <img width="50" height="50" :src="splitImgFilePath(scope.row.imgFile,0)">
+                <img width="50" height="50" :src="splitImgFilePath(scope.row.imgFile,1)">
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-row v-if="!showAudit">
+            <el-form-item label="审核:"  prop="checkStatus">
+              {{formData.checkLog.checkStatus==null?"":formData.checkLog.checkStatus===1?"通过":"不通过"}}
+            </el-form-item>
+            <el-form-item label="审核意见:"  prop="checkRemark">
+             {{formData.checkLog.checkRemark}}
+            </el-form-item>
+          </el-row>
+
+
+          <el-row v-if="showAudit">
+            <el-form-item label="审核:"  prop="checkStatus">
+              <template>
+                <el-radio-group v-model="formData.checkLog.checkStatus">
+                  <el-radio  :label="1">通过</el-radio>
+                  <el-radio  :label="2">不通过</el-radio>
+                </el-radio-group>
+              </template>
+            </el-form-item>
+          <el-form-item label="审核意见:"  prop="checkRemark">
+            <el-input v-model="formData.checkLog.checkRemark" type="textarea" placeholder="请输入内容" />
+          </el-form-item>
+          </el-row>
+        </el-form>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHide">取 消</el-button>
+        <el-button type="primary" @click="submitForm" v-if="showAudit">确 定</el-button>
+      </div>
+    </DialogCom>
+  </div>
+
+</template>
+<script>
+import {mapState, mapMutations} from "vuex";
+import { getLetter,auditLetter} from "@/api/core/letter";
+import KFileUpload from "@/components/K-FileUpload";
+export default {
+  components: {KFileUpload},
+  data() {
+    const params = this.$route.params;
+    return {
+      id: params ? params.id : null,
+      isShow: false,
+      formData: this.reset(),
+      formFileListDefualtValue: [],
+      open: false,
+      userInfo:this.resetUserInfo(),
+      imageList:[],
+      title:null,
+      index:null,
+      showAudit:false
+    };
+  },
+  dicts: ['letter_status'],
+  props: {},
+  watch: {},
+  created() {
+  },
+  computed: {
+    ...mapState(["loginUser", "org",]),
+
+  },
+  methods: {
+    ...mapMutations([]),
+    reset(other = {}) {
+      return {
+        letterName:null,
+        orgIds:null,
+        startTime: null,
+        endTime: null,
+        fileList: [],
+        userInfos:[],
+        checkLog:this.resetCheckLog(),
+        letterFile:null,
+        startTimeStr:null,
+        endTimeStr:null,
+        orgName:null,
+        orgNames:null,
+        description:null,
+        ...other,
+      };
+    },
+    resetUserInfo(){
+      return {
+        userName: null,
+        companyName:null,
+        idCard:null,
+        imgFile:null,
+      }
+    },
+    resetCheckLog(){
+      return {
+        id: null,
+        checkUser:null,
+        checkTime:null,
+        checkStatus:null,
+        checkRemark:null,
+        letterId:null,
+        orgId:null,
+        status:null,
+      }
+    },
+    splitImgFilePath(imgPaths,index){
+      if(imgPaths==null){
+        return null;
+      }
+      return imgPaths.split(',')[index];
+    },
+    async show(id,type, other = {}) {
+      this.isShow = true;
+      if(type===0){
+        this.title = "介绍信详情";
+        this.showAudit=false;
+      }else{
+        this.title = "介绍信审批";
+        this.showAudit=true;
+      }
+          getLetter(id).then(response => {
+          this.formData = response.data;
+          this.userInfo = response.data.userInfos;
+          this.formFileListDefualtValue = response.data.letterFile;
+        });
+
+
+    },
+    onHide() {
+      this.isShow = false;
+      this.showAudit=false;
+      this.formData = this.reset();
+     /* this.userInfo = this.resetUserInfo();*/
+      this.$emit('closed')
+    },
+    submitForm(){
+       if(this.formData.checkLog.checkStatus==null){
+         this.$message.error("请选择审核状态");
+         return;
+       }
+       if(this.formData.checkLog.checkStatus==2&&!this.formData.checkLog.checkRemark){
+         this.$message.error("请填写审批意见");
+         return;
+       }
+       auditLetter(this.formData).then(response => {
+         this.$modal.msgSuccess("审批成功");
+       });
+       this.onHide();
+    },
+  },
+  mounted() {
+  },
+};
+</script>
+
+
+
+

+ 61 - 35
src/views/core/letter/index.vue → src/views/core/letter/letterAudit/index.vue

@@ -9,8 +9,8 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="状态" prop="checkStatus">
-        <el-select v-model="queryParams.checkStatus" placeholder="请选择状态" clearable>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
           <el-option
             v-for="dict in dict.type.letter_status"
             :key="dict.value"
@@ -26,46 +26,49 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['core:letter:add']"
-        >录入介绍信</el-button>
-      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="letterList" @selection-change="handleSelectionChange">
       <el-table-column label="介绍信名称" align="center" prop="letterName" />
-      <el-table-column label="介绍信有效期" align="center" prop="startTime" width="180">
+      <el-table-column label="介绍信有效期" align="center" prop="startTime" width="250">
         <template slot-scope="scope">
           <span>{{ scope.row.startTime}}~{{scope.row.endTime}}</span>
         </template>
       </el-table-column>
-      <el-table-column label="接待机构" align="center" prop="checkStatus" />
-      <el-table-column label="创建机构" align="center" prop="checkStatus" />
-      <el-table-column label="状态" align="center" prop="checkStatus" />
-      <el-table-column label="备注" align="center" prop="checkRemark" />
+<!--      <el-table-column label="接待机构" align="center" prop="orgNames" >
+        <template slot-scope="r">
+          <span class="text-style" :title="r.row.orgNames">{{ r.row.orgNames }}</span>
+        </template>
+      </el-table-column>-->
+      <el-table-column label="创建机构" align="center" prop="orgName" />
+      <el-table-column label="状态" width="80" align="center" prop="status" >
+        <template slot-scope="r">
+          <dict-tag :options="dict.type.letter_status" :value="r.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="审批意见" align="center" prop="description" >
+        <template slot-scope="r">
+          <span class="text-style" :title="r.row.checkRemark">{{ r.row.checkRemark }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
+        <template slot-scope="r">
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['core:letter:edit']"
-          >修改</el-button>
+            icon="el-icon-view"
+            @click="LookOrAudit(r.row.id,0)"
+            v-hasPermi="['core:letter:query']"
+          >详情</el-button>
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['core:letter:remove']"
-          >删除</el-button>
+            icon="el-icon-edit"
+            @click="LookOrAudit(r.row.id,1)"
+            v-hasPermi="['core:letter:audit']"
+            v-if="r.row.status=== 0"
+          >审批</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -77,16 +80,16 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-    <dialog-add-letter ref="dialogAddLetter" @success="handleQuery(true)"></dialog-add-letter>
+    <dialog-letter-view ref="dialogLetterView" @success="handleQuery(true)" @closed="getList"></dialog-letter-view>
   </div>
 </template>
 
 <script>
-import { listLetter, getLetter, delLetter, addLetter, updateLetter } from "@/api/core/letter";
-import dialogAddLetter from "./dialog.addletter";
+import { auditListLetter, getLetter, delLetter, addLetter, updateLetter } from "@/api/core/letter";
+import dialogLetterView from "./dialog.letterview";
 
 export default {
-  components: {dialogAddLetter},
+  components: {dialogLetterView},
   dicts: ['letter_status'],
   name: "Letter",
   data() {
@@ -114,7 +117,8 @@ export default {
         pageNum: 1,
         pageSize: 10,
         letterName: null,
-        checkStatus: null,
+        status: null,
+        orgId:null,
       },
       // 表单参数
       form: {},
@@ -124,13 +128,14 @@ export default {
     };
   },
   created() {
+    this.queryParams.orgId = this.$store.getters.orgId;
     this.getList();
   },
   methods: {
     /** 查询介绍信列表 */
     getList() {
       this.loading = true;
-      listLetter(this.queryParams).then(response => {
+      auditListLetter(this.queryParams).then(response => {
         this.letterList = response.rows;
         this.total = response.total;
         this.loading = false;
@@ -155,7 +160,8 @@ export default {
         checkUser: null,
         checkTime: null,
         checkStatus: null,
-        checkRemark: null,
+        status:null,
+        description: null,
         createBy: null,
         createTime: null
       };
@@ -178,9 +184,13 @@ export default {
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
-    handleAdd(id) {
+    handleAddOrUpdate(id) {
       this.$refs["dialogAddLetter"].show(id,{});
     },
+    LookOrAudit(id,type) {
+      this.$refs["dialogLetterView"].show(id,type,{});
+    },
+
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -214,7 +224,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;
-      this.$modal.confirm('是否确认删除介绍信编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除该介绍信记录?').then(function() {
         return delLetter(ids);
       }).then(() => {
         this.getList();
@@ -230,3 +240,19 @@ export default {
   }
 };
 </script>
+
+<style lang="scss">
+.title {
+clear: both;
+margin: auto;
+text-align: center;
+color: black;
+font-size: xx-large;
+letter-spacing: 3px;
+}
+.text-style{
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+</style>

+ 110 - 0
src/views/core/letter/letterIndex/dialog.auditview.vue

@@ -0,0 +1,110 @@
+<template>
+  <div class="edu-training-edit">
+    <DialogCom title="审核情况" @close="onHide" :visible.sync="isShow" width="960px">
+      <div class="page-body">
+        <el-form ref="form" :model="formData"  label-width="150px">
+          <el-table  :data="formData">
+            <el-table-column label="接待机构" align="center" prop="orgName" />
+            <el-table-column label="审核状态" align="center" prop="status" width="80" >
+              <template slot-scope="r">
+                <dict-tag :options="dict.type.letter_status" :value="r.row.status"/>
+              </template>
+            </el-table-column>
+            <el-table-column label="审核结果" align="center" prop="checkStatus" width="80">
+              <template slot-scope="r">
+                <span>{{r.row.checkStatus==null?"待审批":r.row.checkStatus===1?"通过":"不通过"}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="审核人" align="center" prop="checkUser" width="100"/>
+            <el-table-column label="审核时间" align="center" prop="checkTime"/>
+            <el-table-column label="审核意见" align="center" prop="checkRemark">
+            <template slot-scope="r">
+              <span class="text-style" :title="r.row.checkRemark">{{ r.row.checkRemark }}</span>
+            </template>
+            </el-table-column>
+          </el-table>
+        </el-form>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHide">取 消</el-button>
+<!--        <el-button type="primary" @click="submitForm" v-if="showAudit">确 定</el-button>-->
+      </div>
+    </DialogCom>
+  </div>
+
+</template>
+<script>
+import {mapState, mapMutations} from "vuex";
+import {auditAllList} from "@/api/core/letter";
+export default {
+  components: {},
+  data() {
+    const params = this.$route.params;
+    return {
+      id: params ? params.id : null,
+      isShow: false,
+      formData: this.reset(),
+    };
+  },
+  dicts: ['letter_status'],
+  props: {},
+  watch: {},
+  created() {
+  },
+  computed: {
+    ...mapState(["loginUser", "org",]),
+
+  },
+  methods: {
+    ...mapMutations([]),
+    reset(other = {}) {
+      return {
+        id: null,
+        checkUser:null,
+        checkTime:null,
+        checkStatus:null,
+        checkRemark:null,
+        letterId:null,
+        orgId:null,
+        status:null,
+        ...other,
+      };
+    },
+
+
+    async show(id, other = {}) {
+      this.isShow = true;
+       auditAllList(id).then(response => {
+          this.formData = response.data;
+        });
+
+
+    },
+    onHide() {
+      this.isShow = false;
+      this.formData = this.reset();
+      this.$emit('closed')
+    },
+  },
+  mounted() {
+  },
+};
+</script>
+<style lang="scss">
+.title {
+  clear: both;
+  margin: auto;
+  text-align: center;
+  color: black;
+  font-size: xx-large;
+  letter-spacing: 3px;
+}
+.text-style{
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+</style>
+
+

+ 79 - 50
src/views/core/letter/dialog.addletter.vue → src/views/core/letter/letterIndex/dialog.editletter.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="edu-training-edit">
-    <DialogCom :title="'录入介绍信'" :close="onHide" :visible.sync="isShow" width="960px">
+    <DialogCom :title="title" @close="onHide" :visible.sync="isShow" width="800px">
       <div class="page-body">
         <el-form ref="form" :model="formData" :rules="formDataRules" label-width="100px">
           <el-row>
@@ -11,10 +11,11 @@
             </el-col>
 
             <el-col :span="12">
-              <el-form-item label="接待机构" prop="orgId">
+              <el-form-item label="接待机构" prop="orgIds">
                 <org-tree-select
-                  v-model="formData.orgId"
+                  v-model="formData.orgIds"
                   ref="orgTreeSelect"
+                  :enabledCheckOrgTypes="orgType"
                 >
                 </org-tree-select>
               </el-form-item>
@@ -28,7 +29,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item prop="endTime" label="培训结束时间">
+              <el-form-item prop="endTime" label="有效结束时间">
                 <el-date-picker required v-model="formData.endTime" :picker-options="endDatepickerOptions" @change="endDateChanged"
                                 type="date" placeholder="选择日期">
                 </el-date-picker>
@@ -43,8 +44,8 @@
             <K-file-upload ref="upload" :defaultValue="formFileListDefualtValue" v-model="formData.letterFile"/>
           </el-form-item>
 
-          <el-form-item label="备注" prop="checkRemark">
-            <el-input v-model="formData.checkRemark" type="textarea" placeholder="请输入内容" />
+          <el-form-item label="备注" prop="description">
+            <el-input v-model="formData.description" type="textarea" placeholder="请输入内容" />
           </el-form-item>
           <el-row :gutter="10" class="mb8">
             <el-col :span="1.5">
@@ -58,22 +59,23 @@
             </el-col>
           </el-row>
 
-          <el-table v-loading="loading" :data="formData.userInfos">
+          <el-table  :data="formData.userInfos">
             <el-table-column label="人员姓名" align="center" prop="userName" />
             <el-table-column label="单位" align="center" prop="companyName" />
             <el-table-column label="证据号码" align="center" prop="idCard">
             </el-table-column>
             <el-table-column label="证件" align="center" prop="imgFile" >
               <template slot-scope="scope">
-                <img width="50" height="50" :src="scope.row.imgFile">
+                <img width="50" height="50" :src="splitImgFilePath(scope.row.imgFile,0)">
+                <img width="50" height="50" :src="splitImgFilePath(scope.row.imgFile,1)">
               </template>
-            </el-table-column>>
+            </el-table-column>
             <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
               <template slot-scope="scope">
               <el-button
                 size="mini"
                 type="text"
-                @click="editUser(scope.row)"
+                @click="editUser(scope.row,scope.$index)"
               >编辑</el-button>
                 <el-button
                   size="mini"
@@ -86,31 +88,32 @@
         </el-form>
       </div>
 
-      <DialogCom title="添加出入人员" :visible.sync="open" width="800px" append-to-body @close="onHideUser">
-        <el-form ref="formUser" :model="userInfo" :rules="userInfoRules" label-width="80px">
-          <el-form-item label="人员姓名" prop="userName">
-            <el-input v-model="userInfo.userName" placeholder="请输入姓名" />
-          </el-form-item>
-          <el-form-item label="单位" prop="companyName">
-            <el-input v-model="userInfo.companyName" placeholder="请输入单位" />
-          </el-form-item>
-          <el-form-item label="证件号码" prop="idCard">
-            <el-input v-model="userInfo.idCard" placeholder="请输入证件号码" />
-          </el-form-item>
-          <el-form-item prop="imgFile" label="上传图片">
-            <imgUpload ref="uploadimage" type="alone" :value="userInfo.imgFile"
-                       @input="imageListChanged"></imgUpload>
-          </el-form-item>
-        </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitUser">确 定</el-button>
-          <el-button @click="onHideUser">取 消</el-button>
-        </div>
-      </DialogCom>
-
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="onHide">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </div>
+    </DialogCom>
+
+
+    <DialogCom title="添加出入人员" :visible.sync="open" width="800px" append-to-body @close="onHideUser">
+      <el-form ref="formUser" :model="userInfo" :rules="userInfoRules" label-width="80px">
+        <el-form-item label="人员姓名" prop="userName">
+          <el-input v-model="userInfo.userName" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="单位" prop="companyName">
+          <el-input v-model="userInfo.companyName" placeholder="请输入单位" />
+        </el-form-item>
+        <el-form-item label="证件号码" prop="idCard">
+          <el-input v-model="userInfo.idCard" placeholder="请输入证件号码" />
+        </el-form-item>
+        <el-form-item prop="imgFile" label="上传图片">
+          <imgUpload ref="imgUpload" :limit="2" type="more" :value="userInfo.imgFile"
+                     @input="imageListChanged"></imgUpload>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHideUser">取 消</el-button>
+        <el-button type="primary" @click="submitUser">确 定</el-button>
       </div>
     </DialogCom>
   </div>
@@ -120,7 +123,7 @@
 import {mapState, mapMutations} from "vuex";
 import { listLetter, getLetter, delLetter, addLetter, updateLetter } from "@/api/core/letter";
 import OrgTreeSelect from "@/components/orgTreeSelect";
-import KFileUpload from "@/components/K-FileUpload/index.vue";
+import KFileUpload from "@/components/K-FileUpload";
 import dayjs from "dayjs";
 import imgUpload from "@/components/ImageUpload";
 export default {
@@ -133,7 +136,7 @@ export default {
       formData: this.reset(),
       formDataRules: {
         letterName: [{required: true, message: "请输入介绍信名称"}],
-        orgId: [{required: true, message: "请选择接待机构"}],
+        orgIds: [{required: true, message: "请选择接待机构"}],
         startTime: [{required: true,  message: "请选择有效开始时间"}],
         endTime: [{required: true, message: "请选择有效结束时间"}],
         userInfos:[{required: true, message: "请添加出入人员"}],
@@ -151,8 +154,11 @@ export default {
       },
       formFileListDefualtValue: [],
       open: false,
-      userInfo:this.resetUserInfo(),
-      imageList:[]
+      userInfo: this.resetUserInfo(),
+      imageList:[],
+      title:null,
+      index:null,
+      orgType:4
     };
   },
   dicts: ['letter_status'],
@@ -169,12 +175,13 @@ export default {
     reset(other = {}) {
       return {
         letterName:null,
-        orgId:null,
+        orgIds:null,
         startTime: null,
         endTime: null,
-        checkRemark: null,
+        description: null,
         fileList: [],
-        userInfos:[],
+        userInfos:null,
+        letterFile:null,
         ...other,
       };
     },
@@ -186,12 +193,28 @@ export default {
         imgFile:null,
       }
     },
-
+    splitImgFilePath(imgPaths,index){
+      return imgPaths.split(',')[index];
+    },
     async show(id, other = {}) {
       this.isShow = true;
+      this.title = "新增介绍信";
+      console.log("-----------------",id);
+      if(id){
+          getLetter(id).then(response => {
+          this.formData = response.data;
+          this.userInfos = response.data.userInfos;
+          this.orgIds = response.data.orgIds;
+          this.formFileListDefualtValue = response.data.letterFile;
+          this.title = "修改介绍信";
+          console.log("-----------------",this.formFileListDefualtValue);
+        });
+      }
+
     },
     handleAddUser() {
       this.open = true;
+      console.log(this.userInfo,'hhhh')
     },
     imageListChanged(list) {
       this.userInfo.imgFile = list;
@@ -220,6 +243,8 @@ export default {
     onHide() {
       this.isShow = false;
       this.formData = this.reset();
+      this.$refs["upload"].clearFiles();
+      this.$emit('closed')
     },
     onHideUser() {
       this.open = false;
@@ -231,9 +256,14 @@ export default {
           if (valid) {
             this.open = false;
             console.log("================",this.userInfo);
-            this.formData.userInfos.push(this.userInfo);
+            if(this.index==null){
+              this.formData.userInfos.push(this.userInfo);
+            }else{
+              this.formData.userInfos[this.index]=this.userInfo;
+            }
             this.userInfo = this.resetUserInfo();
             this.imageList=[];
+            this.index=null;
           }})
     },
     submitForm(){
@@ -247,24 +277,23 @@ export default {
           if (this.formData.id != null) {
             updateLetter(this.formData).then(response => {
               this.$modal.msgSuccess("修改成功");
-              this.isShow = false;
-              this.formData = this.reset();
-              this.getList();
             });
           } else {
             addLetter(this.formData).then(response => {
               this.$modal.msgSuccess("新增成功");
-              this.isShow = false;
-              this.formData = this.reset();
-              this.getList();
             });
           }
-
+          this.onHide();
+         /* this.isShow = false;
+          this.formData = this.reset();
+          this.getList();
+          this.$refs["upload"].clearFiles();*/
         }})
     },
-    editUser(row){
+    editUser(row,index){
       this.open = true;
       this.userInfo = row;
+      this.index=index;
     },
     remove(row){
       console.log("================",row);

+ 194 - 0
src/views/core/letter/letterIndex/dialog.letterview.vue

@@ -0,0 +1,194 @@
+<template>
+  <div class="edu-training-edit">
+    <DialogCom :title="title" @close="onHide" :visible.sync="isShow" width="800px">
+      <div class="page-body">
+        <el-form ref="form" :model="formData"  label-width="150px">
+          <el-row>
+            <el-col :span="24">
+              <el-form-item  label="介绍信名称:">
+                {{formData.letterName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item   label="介绍信有效期限:">
+                {{formData.startTimeStr}}~{{formData.endTimeStr}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="创建机构:">
+                {{formData.orgName}}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="接待机构:">
+                {{formData.orgNames}}
+              </el-form-item>
+            </el-col>
+
+          <el-form-item label="介绍信文件:" >
+            <K-file-upload ref="upload" :defaultValue="formFileListDefualtValue" :disabled="true"  :isShowUploadBtn="false" v-model="formData.letterFile"/>
+          </el-form-item>
+
+          <el-form-item label="备注:" >
+            {{formData.description}}
+          </el-form-item>
+          </el-row>
+          <el-table  :data="formData.userInfos">
+            <el-table-column label="人员姓名" align="center" prop="userName" />
+            <el-table-column label="单位" align="center" prop="companyName" />
+            <el-table-column label="证据号码" align="center" prop="idCard">
+            </el-table-column>
+            <el-table-column label="证件" align="center" prop="imgFile" >
+              <template slot-scope="scope">
+                <img width="50" height="50" :src="splitImgFilePath(scope.row.imgFile,0)">
+                <img width="50" height="50" :src="splitImgFilePath(scope.row.imgFile,1)">
+              </template>
+            </el-table-column>
+          </el-table>
+<!--          <el-row v-if="!showAudit">
+            <el-form-item label="审核:"  prop="checkStatus">
+              {{formData.checkStatus==null?"":formData.checkStatus===1?"通过":"不通过"}}
+            </el-form-item>
+            <el-form-item label="审核意见:"  prop="checkRemark">
+             {{formData.checkRemark}}
+            </el-form-item>
+          </el-row>-->
+
+
+<!--          <el-row v-if="showAudit">
+            <el-form-item label="审核:"  prop="checkStatus">
+              <template>
+                <el-radio-group v-model="formData.checkStatus">
+                  <el-radio  :label="1">通过</el-radio>
+                  <el-radio  :label="2">不通过</el-radio>
+                </el-radio-group>
+              </template>
+            </el-form-item>
+          <el-form-item label="审核意见:"  prop="checkRemark">
+            <el-input v-model="formData.checkRemark" type="textarea" placeholder="请输入内容" />
+          </el-form-item>
+          </el-row>-->
+        </el-form>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHide">取 消</el-button>
+<!--        <el-button type="primary" @click="submitForm" v-if="showAudit">确 定</el-button>-->
+      </div>
+    </DialogCom>
+  </div>
+
+</template>
+<script>
+import {mapState, mapMutations} from "vuex";
+import { getLetter,auditLetter} from "@/api/core/letter";
+import OrgTreeSelect from "@/components/orgTreeSelect";
+import KFileUpload from "@/components/K-FileUpload";
+import dayjs from "dayjs";
+import imgUpload from "@/components/ImageUpload";
+export default {
+  components: {KFileUpload},
+  data() {
+    const params = this.$route.params;
+    return {
+      id: params ? params.id : null,
+      isShow: false,
+      formData: this.reset(),
+      formFileListDefualtValue: [],
+      open: false,
+      userInfo:this.resetUserInfo(),
+      imageList:[],
+      title:null,
+      index:null,
+      showAudit:false
+    };
+  },
+  dicts: ['letter_status'],
+  props: {},
+  watch: {},
+  created() {
+  },
+  computed: {
+    ...mapState(["loginUser", "org",]),
+
+  },
+  methods: {
+    ...mapMutations([]),
+    reset(other = {}) {
+      return {
+        letterName:null,
+        orgIds:null,
+        startTime: null,
+        endTime: null,
+        checkRemark: null,
+        fileList: [],
+        userInfos:[],
+        letterFile:null,
+        startTimeStr:null,
+        endTimeStr:null,
+        orgName:null,
+        orgNames:null,
+        description:null,
+        ...other,
+      };
+    },
+    resetUserInfo(){
+      return {
+        userName: null,
+        companyName:null,
+        idCard:null,
+        imgFile:null,
+      }
+    },
+
+    async show(id,type, other = {}) {
+      this.isShow = true;
+      if(type===0){
+        this.title = "介绍信详情";
+        this.showAudit=false;
+      }else{
+        this.title = "介绍信审批";
+        this.showAudit=true;
+      }
+          getLetter(id).then(response => {
+          this.formData = response.data;
+          this.userInfo = response.data.userInfos;
+          this.orgIds = response.data.orgIds;
+          this.formFileListDefualtValue = response.data.letterFile;
+            console.log("-----------------",this.formFileListDefualtValue);
+        });
+
+
+    },
+    splitImgFilePath(imgPaths,index){
+      return imgPaths.split(',')[index];
+    },
+    onHide() {
+      this.isShow = false;
+      this.showAudit=false;
+      this.formData = this.reset();
+      this.$emit('closed')
+    },
+    submitForm(){
+       if(this.formData.checkRemark==null){
+         this.$message.error("请选择审核状态");
+         return;
+       }
+       if(this.formData.checkStatus==2&&!this.formData.checkRemark){
+         this.$message.error("请填写审批意见");
+         return;
+       }
+       auditLetter(this.formData).then(response => {
+         this.$modal.msgSuccess("审批成功");
+       });
+       this.onHide();
+    },
+  },
+  mounted() {
+  },
+};
+</script>
+
+
+
+

+ 301 - 0
src/views/core/letter/letterIndex/index.vue

@@ -0,0 +1,301 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
+      <el-form-item label="介绍信名称" prop="letterName">
+        <el-input
+          v-model="queryParams.letterName"
+          placeholder="请输入介绍信名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+<!--      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.letter_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>-->
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAddOrUpdate(null)"
+          v-hasPermi="['core:letter:add']"
+        >录入介绍信</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="letterList" @selection-change="handleSelectionChange">
+      <el-table-column label="介绍信名称" align="center" prop="letterName" />
+      <el-table-column label="介绍信有效期" align="center" prop="startTime" width="250">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime}}~{{scope.row.endTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="接待机构" align="center" prop="orgNames" >
+        <template slot-scope="r">
+          <span class="text-style" :title="r.row.orgNames">{{ r.row.orgNames }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建机构" align="center" prop="orgName" />
+<!--      <el-table-column label="状态" width="80" align="center" prop="status" >
+        <template slot-scope="r">
+          <dict-tag :options="dict.type.letter_status" :value="r.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="审批状态" width="80" align="center" prop="checkStart" >
+        <template slot-scope="r">
+          <span>{{r.row.checkStatus==null?"待审批":r.row.checkStatus===1?"通过":"不通过"}}</span>
+        </template>
+      </el-table-column>-->
+      <el-table-column label="备注" align="center" prop="description" >
+        <template slot-scope="r">
+          <span class="text-style" :title="r.row.description">{{ r.row.description }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="r">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="LookOrAudit(r.row.id,0)"
+            v-hasPermi="['core:letter:query']"
+          >详情</el-button>
+<!--          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="LookOrAudit(r.row.id,1)"
+            v-hasPermi="['core:letter:audit']"
+          >审批</el-button>-->
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="auditAllList(r.row.id)"
+            v-hasPermi="['core:letter:auditAllList']"
+          >审批情况</el-button>
+
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleAddOrUpdate(r.row.id)"
+            v-hasPermi="['core:letter:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(r.row)"
+            v-hasPermi="['core:letter:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <dialog-edit-letter ref="dialogAddLetter" @success="handleQuery(true)" @closed="getList"></dialog-edit-letter>
+    <dialog-letter-view ref="dialogLetterView" @success="handleQuery(true)" @closed="getList"></dialog-letter-view>
+    <dialog-audit-view ref="dialogAuditView" @success="handleQuery(true)" @closed="getList"></dialog-audit-view>
+  </div>
+</template>
+
+<script>
+import { listLetter, getLetter, delLetter, addLetter, updateLetter } from "@/api/core/letter";
+import dialogEditLetter from "./dialog.editletter";
+import dialogLetterView from "./dialog.letterview";
+import dialogAuditView from "./dialog.auditview";
+
+export default {
+  components: {dialogEditLetter,dialogLetterView,dialogAuditView},
+  dicts: ['letter_status'],
+  name: "Letter",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 介绍信表格数据
+      letterList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        letterName: null,
+        status: null,
+        orgId:null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.queryParams.orgId = this.$store.getters.orgId;
+    this.getList();
+  },
+  methods: {
+    /** 查询介绍信列表 */
+    getList() {
+      this.loading = true;
+      listLetter(this.queryParams).then(response => {
+        this.letterList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        letterName: null,
+        startTime: null,
+        endTime: null,
+        letterFile: null,
+        orgId: null,
+        orgPath: null,
+        orgName: null,
+        checkUser: null,
+        checkTime: null,
+        checkStatus: null,
+        status:null,
+        description: null,
+        createBy: null,
+        createTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAddOrUpdate(id) {
+      this.$refs["dialogAddLetter"].show(id,{});
+    },
+    LookOrAudit(id,type) {
+      this.$refs["dialogLetterView"].show(id,type,{});
+    },
+    auditAllList(id) {
+      this.$refs["dialogAuditView"].show(id,{});
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getLetter(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改介绍信";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateLetter(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addLetter(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除该介绍信记录?').then(function() {
+        return delLetter(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/letter/export', {
+        ...this.queryParams
+      }, `letter_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+
+<style lang="scss">
+.title {
+clear: both;
+margin: auto;
+text-align: center;
+color: black;
+font-size: xx-large;
+letter-spacing: 3px;
+}
+.text-style{
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+</style>