Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

929386168@qq.com 3 tahun lalu
induk
melakukan
c4014f3a9c

+ 60 - 0
ruoyi-ui/src/api/system/sonnel.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+  return request({
+    url: '/boman-report/statistic/report/reportInfo/' + query,
+    method: 'get',
+    // params: query
+  })
+}
+
+// 查询字典类型详细
+export function getType(id) {
+  return request({
+    url: '/system/dict/type/' + id,
+    method: 'get'
+  })
+}
+
+// 新增字典类型
+export function addType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典类型
+export function updateType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典类型
+export function delType(id) {
+  return request({
+    url: '/system/dict/type/' + id,
+    method: 'delete'
+  })
+}
+
+// 清理参数缓存
+export function clearCache() {
+  return request({
+    url: '/system/dict/type/clearCache',
+    method: 'delete'
+  })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+  return request({
+    url: '/system/dict/type/optionselect',
+    method: 'get'
+  })
+}

+ 34 - 6
ruoyi-ui/src/api/system/tatementsetr.js

@@ -10,11 +10,20 @@ export function tistDept(query) {
 }
 
 // 查询报表列表
-export function reportList(query) {
+export function reportList(data) {
+  return request({
+    url: '/boman-report/statistic/reportPersonnel/list',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询报表列表
+export function reportListrt(data) {
   return request({
     url: '/boman-report/statistic/report/list',
     method: 'post',
-    params: query
+    data: data
   })
 }
 
@@ -29,7 +38,7 @@ export function listDeptExcludeChild(id) {
 // 查询部门详细
 export function getDept(id) {
   return request({
-    url: '/system/dept/' + id,
+    url: '/boman-report/statistic/report/detail/' + id,
     method: 'get'
   })
 }
@@ -59,6 +68,24 @@ export function addDeptiu(data) {
   })
 }
 
+// 新增报表
+export function addDeptiugt(data) {
+  return request({
+    url: '/boman-report/cs/file/import',
+    method: 'post',
+    data: data
+  })
+}
+
+// 改变状态
+export function addDeptiyuit(data) {
+  return request({
+    url: '/boman-web-core/p/cs/update',
+    method: 'post',
+    data: data
+  })
+}
+
 // 修改部门
 export function updateDept(data) {
   return request({
@@ -69,9 +96,10 @@ export function updateDept(data) {
 }
 
 // 删除部门
-export function delDept(id) {
+export function delDept(data) {
   return request({
-    url: '/system/dept/' + id,
-    method: 'delete'
+    url: '/boman-web-core/p/cs/objectLogicDelete',
+    method: 'post',
+    data: data
   })
 }

TEMPAT SAMPAH
ruoyi-ui/src/assets/images/pic_zt_jxz.png


TEMPAT SAMPAH
ruoyi-ui/src/assets/images/pic_zt_jxzhu.png


TEMPAT SAMPAH
ruoyi-ui/src/assets/images/pic_zt_jxzs.png


+ 3 - 3
ruoyi-ui/src/settings.js

@@ -1,8 +1,8 @@
 module.exports = {
   title: 'OA管理系统',
-  // urls: `http://118.178.139.79:5000`,
-  urls: `http://192.168.101.49:8090`,
-   // urls: `http://192.168.101.110:8090`,
+  urls: `http://118.178.139.79:5000`,
+  // urls: `http://192.168.101.49:8090`,
+   // urls: `http://192.168.101.11:8090`,
 
 
 

+ 1229 - 32
ruoyi-ui/src/views/system/eport/index.vue

@@ -1,67 +1,1264 @@
 <template>
   <div class="app-container">
+    <div class="app-containergt"  style="padding: 0;">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-plus"
+            size="mini"
+            @click="handleAdd"
+          >添加报表</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="danger"
+            plain
+            icon="el-icon-delete"
+            size="mini"
+            :disabled="multiple"
+            @click="handleDelete"
+          >删除</el-button>
+        </el-col>
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      </el-row>
+      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+        <el-form-item label="报表标题" prop="reportName">
+          <el-input
+            v-model="queryParams.reportName"
+            placeholder="请输入报表标题"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="开始时间:" prop="sTime">
+          <el-date-picker
+            v-model="queryParams.sTime"
+            type="date"
+            placeholder="选择日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="截止时间:" prop="eTime">
+          <el-date-picker
+            v-model="queryParams.eTime"
+            type="date"
+            placeholder="选择日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-select v-model="queryParams.status" placeholder="状态" clearable size="small">
+            <el-option
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </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-table
+        v-loading="loading"
+        :data="reportList"
+        row-key="id"
+        default-expand-all
+        :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+     @selection-change="handleSelectionChange" >
+       <el-table-column type="selection" width="55" align="center" />
+        <el-table-column prop="id" label="序号" width="60"></el-table-column>
+        <el-table-column prop="reportName" label="标题" width="200" align="center"></el-table-column>
+        <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+          <!-- <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.startTime) }}</span>
+          </template> -->
+        </el-table-column>
+        <el-table-column label="截止时间" align="center" prop="endTime" width="180">
+          <!-- <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.endTime) }}</span>
+          </template> -->
+        </el-table-column>
+        <el-table-column label="当前状态" align="center" prop="reportStatus" width="100">
+          <template slot-scope="scope">
+            <span :class="[scope.row.reportStatus == 1 ? 'jheuy' : scope.row.reportStatus == 2? 'neuiq' : 'bgeyy']">{{scope.row.reportStatus == 1 ? '未开始' : scope.row.reportStatus == 2? '进行中' : '已结束' }}</span>
+          </template>
+          </el-table-column>
+        <!-- //走字典 -->
+       <el-table-column label="状态" align="center" key="status" >
+         <!-- v-if="columns[5].visible" -->
+         <template slot-scope="scope">
+           <el-switch
+             v-model="scope.row.status"
+             active-value="0"
+             inactive-value="1"
+             @change="handleStatusChange(scope.row)"
+           ></el-switch>
+         </template>
+       </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"
+              icon="el-icon-edit"
+              @click="handleUpdatety(scope.row)"
+              v-hasPermi="['sys_dept:M']"
+            >编辑</el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-view"
+              @click="handleAddchak(scope.row)"
+              v-hasPermi="['sys_dept:A']"
+            >查看</el-button>
+            <!-- <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-upload2"
+              @click="handleUpdate(scope.row)"
+              v-hasPermi="['sys_dept:A']"
+            >上传</el-button> -->
+            <el-button
+              v-if="scope.row.id != 0"
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              @click="handleDelete(scope.row)"
+              v-hasPermi="['sys_dept:D']"
+            >删除</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"
+      />
+
+      <!-- 添加或修改部门对话框 -->
+      <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="900px" append-to-body >
+        <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+          <el-row>
+            <el-col :span="24" v-if="!xiug">
+              <el-form-item label="报表名称:" prop="reportName">
+                <el-input v-model="form.reportName" placeholder="请输入报表名称" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" v-if="!xiug">
+              <el-form-item label="报表设计器:" prop="reportId" :rules="[
+      { required: true, message: '请选择报表设计器', trigger: 'blur' },
+    ]">
+                <treeselect v-model="form.reportId" :options="deptOptionstwofr" :normalizer="normalizerghy" placeholder="选择报表设计器" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" v-if="!xiug">
+              <el-form-item label="参与人员:" prop="userName">
+                 <!-- <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择报表设计器" /> -->
+                 <el-button style="padding: 9px 15px; font-size: 12px; border-radius: 3px; margin-bottom: 5px;" size="small" type="primary"  @click="changeren">选择人员</el-button>
+                 <!-- slot="prepend" -->
+                <el-input v-model="messageReun"  :disabled="true" type="textarea" >
+
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item :label="xiug == true? '上传报表:' : '表格模板:'" prop="orderNum">
+                <el-upload
+                 :disabled="false" class="upload-demo" :headers="{Authorization: 'Bearer ' + getToken()}"
+                 :action="process + '/boman-file/upload'" :on-change="handleChangert"
+                 :on-success="upImageFn"
+                 :on-error="err"
+                 :on-remove="reseImage"
+                 :file-list="configtwo"
+                 :on-preview="handlePictureCardPreview"
+                 :before-upload="befors"
+                 :multiple="false" >
+                 <el-button size="small" type="primary">点击上传</el-button>
+                 <div slot="tip" class="el-upload__tip" style="color: red; font-size: 14px;">只能上传xls/xlsx文件,且不超过50MB</div>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" v-if="!xiug">
+              <el-form-item label="开始时间:" prop="startTime" :rules="[
+      { required: true, message: '请选择开始时间', trigger: 'blur' },
+    ]">
+                <el-date-picker
+                      v-model="form.startTime"
+                      type="date"
+                      placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" v-if="!xiug">
+              <el-form-item label="截止时间:" prop="endTime" :rules="[
+      { required: true, message: '请选择截止时间', trigger: 'blur' },
+    ]">
+                <el-date-picker
+                      v-model="form.endTime"
+                      type="date"
+                      placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="24" v-if="!xiug">
+              <el-form-item label="注意事项:">
+                <el-input   type="textarea"
+    :rows="2" v-model="form.remark" placeholder="请输入注意事项" style="width: 100%;" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </el-dialog>
+      <!-- 分配角色数据权限对话框 -->
+      <el-dialog   :close-on-click-modal="false" title="选择人员" :visible.sync="modalShow" width="980px" append-to-body>
+        <!-- <Flowshoe  :instanceId="instanceId"></Flowshoe> -->
+        <div class="tab_bott">
+          <div class="tabBot_oje">
+            <el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
+              <!-- :setCheckedKeys='setCheckedKeys' :getCheckedKeys = "getCheckedKeys" -->
+              <el-tab-pane label="按部门" name="first">
+                <div class="head-container">
+                  <el-input
+                    v-model="deptName"
+                    placeholder="请输入部门名称"
+                    clearable
+                    size="small"
+                    prefix-icon="el-icon-search"
+                    style="margin-bottom: 20px"
+                  />
+                </div>
+                <div class="head-container">
+                  <el-tree
+                    :data="deptOptions"
+                    :expand-on-click-node="false"
+                    :props="defaultProps"
+                    :filter-node-method="filterNode"
+                    ref="tree"
+                    default-expand-all
+                    @node-click="handleNodeClick"
+                  />
+                </div>
+              </el-tab-pane>
+              <el-tab-pane label="按角色" name="second" style="height: 400px;">
+                 <treeselect v-model="form.parentId" :options="deptOptionstwo" :normalizer="normalizer" :flat="true" :maxHeight="150" @select="djieskle" placeholder="点击选择角色" />
+              </el-tab-pane>
+              <el-tab-pane label="按组" name="third" style="height: 400px;">
+               <treeselect  v-model="form.parentIdty" :options="deptOptionsthre" :normalizer="normalizerty" :flat="true" @select="djieskletwo" :maxHeight="350" placeholder="点击选择组" />
+              </el-tab-pane>
+            </el-tabs>
+          </div>
+          <div class="tabBot_two">
+            <el-card class="box-card box-cardtt" shadow="always">
+                <div slot="header" class="clearfix">
+                  <span>人员</span>
+                 <el-button style=" float: right;  padding: 3px 10px;" type="danger" plain @click="eledelte">删除</el-button>
+                 <el-button style=" float: right; padding: 3px 10px;margin-right: 20px;" type="primary" plain @click="quande">全选</el-button>
+                </div>
+                <ul class="infinite-list infinite-listty" v-infinite-scroll="load" style="overflow:auto">
+                    <li
+                      v-for="(item, index) in liseh"
+                      :class="[ quandet==true? 'infinite-list-itemty infinite-list-itemss' : item.id == idneese.id ? 'infinite-list-itemty infinite-list-itemss' : 'infinite-list-itemty']"
+                      :key="index"
+                      @click="reyantt(item)"
+                    >
+                      {{ item.nickName }}
+                    </li>
+                  </ul>
+                </el-card>
+                <el-card class="box-card box-cardtt" shadow="always">
+                  <div slot="header" class="clearfix">
+                    <span>已选择</span>
+                    <el-button style="float: right; padding: 3px 0" type="text" @click = 'determine'>确定</el-button>
+                  </div>
+                  <ul class="infinite-list infinite-listty" v-infinite-scroll="load" style="overflow:auto">
+                    <li v-for="item in lisehtwo" @click="lidele(item)" :key="item.id" class="infinite-list-item">
+                      {{ item.nickName }}
+                      <img src="../../../assets/images/dele.png" alt="" class="index_navTimeimg" />
+                    </li>
+                  </ul>
+                </el-card>
+          </div>
+        </div>
+      </el-dialog>
+
+    <!-- 修改 -->
+    <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="opentr" width="900px" append-to-body >
+        <el-form ref="formty" :model="formty" :rules="rulesty" label-width="120px">
+          <el-row>
+            <el-col :span="24" >
+              <el-form-item label="报表名称:" prop="reportName" >
+                <el-input v-model="formty.reportName" placeholder="请输入报表名称" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item label="报表设计器:" prop="reportId" :rules="[
+      { required: true, message: '请选择报表设计器', trigger: 'blur' },
+    ]">
+                <treeselect v-model="formty.reportId" :options="deptOptionstwofr" :normalizer="normalizerghy" placeholder="选择报表设计器" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item label="参与人员:" prop="userName">
+                 <!-- <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择报表设计器" /> -->
+                <el-button style="padding: 9px 15px; font-size: 12px; border-radius: 3px; margin-bottom: 5px;" size="small" type="primary"  @click="changeren">选择人员</el-button>
+                 <!-- slot="prepend" -->
+                <el-input v-model="messageReun"  :disabled="true" type="textarea" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item label="'表格模板:"  prop="repUploadFile" :rules="[
+      { required: true, message: '请上传表格模板', trigger: 'blur' },
+    ]">
+                <el-upload
+                 :disabled="false" class="upload-demo" :headers="{Authorization: 'Bearer ' + getToken()}"
+                 :action="process + '/boman-file/upload'" :on-change="handleChangert"
+                 :on-success="upImageFn"
+                 :on-error="err"
+                 :on-remove="reseImage"
+                 :file-list="configtwo"
+                 :on-preview="handlePictureCardPreview"
+                 :before-upload="befors"
+                 :multiple="false" >
+                 <el-button size="small" type="primary">点击上传</el-button>
+                 <div slot="tip" class="el-upload__tip" style="color: red; font-size: 14px;">只能上传xls/xlsx文件,且不超过50MB</div>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item label="开始时间:" prop="startTime" :rules="[
+      { required: true, message: '请选择开始时间', trigger: 'blur' },
+    ]">
+                <el-date-picker
+                      v-model="formty.startTime"
+                      type="date"
+                      placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item label="截止时间:" prop="endTime" :rules="[
+      { required: true, message: '请选择截止时间', trigger: 'blur' },
+    ]">
+                <el-date-picker
+                      v-model="formty.endTime"
+                      type="date"
+                      placeholder="选择日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12" >
+              <el-form-item label="注意事项:">
+                <el-input   type="textarea"
+    :rows="2" v-model="formty.remark" placeholder="请输入注意事项" style="width: 100%;" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitFormty">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </el-dialog>
+
+    </div>
   </div>
 </template>
 
 <script>
-import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import IconSelect from "@/components/IconSelect";
-
+import { listDept,   updateDept, listDeptExcludeChild } from "@/api/system/dept";
+import { tistDept,addDeptiu,reportList,reportListrt,delDept,addDeptiugt,getDept,addDeptiyuit } from "@/api/system/tatementsetr";
+import { listRoles,listIndex,   delRole, addRole,addbjectSave, updateRole, exportRole, dataScope, changeRoleStatus, buent,issdanelist,issdaneid,weiduhegw,addbjectSawen } from "@/api/system/isses";
+import { treeselect } from "@/api/system/dept";
+  import Treeselect from "@riophae/vue-treeselect";
+  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {
+    getToken
+  } from "@/utils/auth";
+  import { group , getRole, getPersonnel, getMembers,delRoleses } from '@/api/system/election';
+  import { listRole } from "@/api/system/role";
 export default {
-  name: "Menu",
-  components: { Treeselect, IconSelect },
+  name: "Dept",
+  components: { Treeselect },
   data() {
     return {
       // 遮罩层
       loading: true,
       // 显示搜索条件
       showSearch: true,
-      // 菜单表格树数据
-      menuList: [],
-      // 菜单树选项
-      menuOptions: [],
+      // 表格树数据
+      reportList: [],
+      deptOptionstwofr:[],
+      // 总条数
+      total: 0,
+      opentr:false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 部门树选项
+      deptOptions: [],
+      // 角色
+      deptOptionstwo:[],
+      deptOptionsthre:[],
+      configtwo: [],
       // 弹出层标题
-      title: "",
+      title: "添加报表",
+      process: process.env.VUE_APP_BASE_API,
       // 是否显示弹出层
       open: false,
-      // 显示状态数据字典
-      visibleOptions: [],
-      // 菜单状态数据字典
+      // 状态数据字典
       statusOptions: [],
       // 查询参数
       queryParams: {
-        menuName: undefined,
-        visible: undefined
+        pageNum: 1,
+        pageSize: 10,
+        reportName: undefined,
+        startTime: undefined,
+        endTime: undefined,
+        status: undefined
+      },
+      queryParamsjuegt:{
+       pageNum:1,
+       pageSize:1000,
+       reportType:'datainfo'
       },
+      deptName:undefined,
       // 表单参数
-      form: {},
+      form: {
+        personnels:[{
+           deptId: 0,
+           deptName: "",
+           userId: 0,
+           userName: ""
+        }]
+      },
+      formty:{
+
+      },
+      activeName:'first',
+      modalShow:false,
       // 表单校验
       rules: {
-        menuName: [
-          { required: true, message: "菜单名称不能为空", trigger: "blur" }
+        reportName: [
+          { required: true, message: "报表名称不能为空", trigger: "blur" }
         ],
-        orderNum: [
-          { required: true, message: "菜单顺序不能为空", trigger: "blur" }
+
+      },
+      rulesty:{
+        reportName: [
+          { required: true, message: "报表名称不能为空", trigger: "blur" }
         ],
-        path: [
-          { required: true, message: "路由地址不能为空", trigger: "blur" }
-        ]
-      }
+      },
+       quandet:false,
+       lisehtwo:[
+       ],
+       liseh: [
+             ],
+      idneese: {},
+      messageReun:'',
+      frowtse:{
+
+      },
+      // 单位  名称
+      mpany:{
+        ompany:[],
+        name:[]
+        },
+        config:[],
+        defaultProps: {
+          children: "children",
+          label: "label"
+        },
+       xiug:false, //false为新增报表   true 为上传报表
+       bieoa:{
+         tableName:'',
+         personnelId:undefined,
+       },
+       hyeqa:false, //false 修改取消  true 修改确定
     };
   },
   created() {
-   // window.location.href = 'http://118.178.139.79:5000/prod-api/boman-report/jmreport/list'
-
-    window.open('http://118.178.139.79:5000/prod-api/boman-report/jmreport/list','_blank');
-    console.log(123);
-    this.$router.replace('/index')
+    //this.getList();
+    this.getReportList();
+    this.getDicts("sys_normal_disable").then(response => {
+      this.statusOptions = response.data;
+    });
+    this.getTreeselect()
   },
-
   methods: {
+    /** 查询部门列表 */
+    getList() {
+      this.loading = true;
+      tistDept().then(response => {
+        this.deptOptionstwofr = response.data.reports
+        this.loading = false;
+      });
+    },
+
+    /** 查询报表列表 */
+    getReportList() {
+      this.loading = true;
+      reportListrt(this.queryParams).then(response => {
+        this.reportList = response.rows
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 转换部门数据结构 */
+    /** 转换角色数据结构 */
+    normalizer(node) {
+      // if (node.children && !node.children.length) {
+      //   delete node.children;
+      // }
+      return {
+        id: node.id,
+        label: node.roleName,
+      };
+    },
+    /** 转换组数据结构 */
+    normalizerty(node) {
+      return {
+        id: node.id,
+        label: node.groupName,
+      };
+    },
+    normalizerghy(node){
+      return {
+        id: node.id,
+        label: node.name,
+      };
+    },
+    // 字典状态字典翻译
+    statusFormat(row, column) {
+      return this.selectDictLabel(this.statusOptions, row.status);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.opentr = false;
+      this.hyeqa = false;
+      this.messageReun = ''
+      this.configtwo = []
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        personnels:[{
+           deptId: 0,
+           deptName: "",
+           userId: 0,
+           userName: ""
+        }]
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.getReportList();
+
+     // this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd(row) {
+      this.reset();
+      if (row != undefined) {
+        // this.form.parentId = row.id;
+      }
+      this.open = true;
+      this.title = "添加报表";
+      this.xiug = false
+      this.configtwo = []
+      this.messageReun = ''
+      this.lisehtwo = []
+      this.getList()
+      // listDept().then(response => {
+	     //    this.deptOptions = this.handleTree(response.data, "id");
+      // });
+    },
+    /** 上传按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      // getDept(row.id).then(response => {
+        // this.form = response.data;
+        this.open = true;
+        this.title = "上传报表";
+        this.bieoa.personnelId = row.personnelId
+        this.bieoa.tableName = row.tableName
+        this.configtwo = []
+        this.xiug = true
+        // this.getList()
+      // });
+      // listDeptExcludeChild(row.id).then(response => {
+	     //    this.deptOptions = this.handleTree(response.data, "id");
+      // });
+    },
+    /** 修改按钮操作 */
+    handleUpdatety(row){
+      this.reset();
+      console.log(row,34)
+      this.hyeqa =  true
+      this.formty.startTime = row.startTime
+      this.formty.endTime = row.endTime
+      this.formty.reportName = row.reportName
+      this.formty.reportId = row.reportId
+      this.formty.templateName = row.templateName
+      this.formty.remark = row.remark
+
+
+      if(row.repUploadFile !== null){
+
+      }
+
+      getDept(row.id).then(response => {
+        // this.form = response.data;
+        this.formty = response.data;
+        if(response.data.personnels !== null){
+            let jues = []
+            response.data.personnels.filter( route=>{
+              jues.push(route.userName)
+            })
+           console.log(jues)
+           let nahe = jues.join(',')
+           this.messageReun = '已选择' +nahe
+
+        }
+        if(response.data.repUploadFile !== null){
+          console.log(JSON.parse(response.data.repUploadFile).name)
+           this.configtwo = [{name:'',url:''}]
+           this.configtwo[0].url = JSON.parse(response.data.repUploadFile).url
+           this.configtwo[0].name = JSON.parse(response.data.repUploadFile).name
+           // this.formty.repUploadFile = row.repUploadFile
+           console.log(this.configtwo)
+
+        }
+        this.opentr = true;
+        this.title = "编辑信息";
+        // this.xiug = false
+        this.getList()
+        // this.getList()
+        });
+        // listDeptExcludeChild(row.id).then(response => {
+         //    this.deptOptions = this.handleTree(response.data, "id");
+        // });
+    },
+    // 查看按钮
+    handleAddchak(row){
+      this.$router.push({
+        path: '/business/sonnel',
+        query: {
+          id:row.id,
+        },
+      })
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      if(this.xiug == false){
+       this.$refs["form"].validate(valid => {
+        console.log(this.lisehtwo)
+        if(this.form.templateName == undefined || this.form.templateName == ''){
+          this.msgSuccess("请上传表格模板");
+          return false
+        }
+       if(this.lisehtwo.length == 0){
+          this.msgSuccess("请选择分发人员");
+          return false
+       }
+       for(var i = 0 ; i < this.lisehtwo.length; i++){
+         this.form.personnels[i] = {deptId:0,deptName:'',userId:0,userName:''}
+         this.form.personnels[i].userId = this.lisehtwo[i].id
+         this.form.personnels[i].userName = this.lisehtwo[i].userName
+         this.form.personnels[i].deptId  = this.lisehtwo[i].deptId
+         if(this.lisehtwo[i].dept !== undefined && this.lisehtwo[i].dept !==null){
+           this.form.personnels[i].deptName = this.lisehtwo[i].dept.deptName
+           // this.form.personnels[i].deptId  = this.lisehtwo[i].dept.deptId
+         }else{
+           this.form.personnels[i].deptName = this.lisehtwo[i].deptName
+
+         }
+       }
+       console.log(this.form)
+           addDeptiu(this.form).then(response => {
+             this.msgSuccess("新增成功");
+             this.open = false;
+             this.getReportList();
+            // this.getList();
+           });
+         // if (valid) {
+         //   if (this.form.id != undefined) {
+         //     updateDept(this.form).then(response => {
+         //       this.msgSuccess("修改成功");
+         //       this.open = false;
+         //       this.getList();
+         //     });
+         //   } else {
+         //     addDept(this.form).then(response => {
+         //       this.msgSuccess("新增成功");
+         //       this.open = false;
+         //       this.getList();
+         //     });
+         //   }
+         // }
+       });
+      }else{
+        if(this.bieoa.file == undefined || this.form.templateName == '{}'){
+          this.msgSuccess("请上传报表");
+          return false
+        }
+        addDeptiugt(this.bieoa).then(response => {
+          this.msgSuccess("新增成功");
+          this.open = false;
+          this.getReportList();
+         // this.getList();
+        });
+      }
+
+    },
+    /** 修改按钮 */
+    submitFormty: function() {
+      // if(this.xiug == false){
+       this.$refs["formty"].validate(valid => {
+        console.log(this.lisehtwo)
+        if(this.formty.personnels == null){
+          if(this.lisehtwo.length == 0){
+             this.msgSuccess("请选择分发人员");
+             return false
+          }
+          for(var i = 0 ; i < this.lisehtwo.length; i++){
+            this.formty.personnels[i] = {deptId:0,deptName:'',userId:0,userName:''}
+            this.formty.personnels[i].userId = this.lisehtwo[i].id
+            this.formty.personnels[i].userName = this.lisehtwo[i].userName
+            this.formty.personnels[i].deptId  = this.lisehtwo[i].deptId
+            if(this.lisehtwo[i].dept !== undefined && this.lisehtwo[i].dept !==null){
+              this.formty.personnels[i].deptName = this.lisehtwo[i].dept.deptName
+              // this.form.personnels[i].deptId  = this.lisehtwo[i].dept.deptId
+            }else{
+              this.formty.personnels[i].deptName = this.lisehtwo[i].deptName
+
+            }
+          }
+        }else{
+          if(this.lisehtwo.length !== 0){
+            console.log(345)
+            for(var i = 0 ; i < this.lisehtwo.length; i++){
+              this.formty.personnels[i] = {deptId:0,deptName:'',userId:0,userName:''}
+              this.formty.personnels[i].userId = this.lisehtwo[i].id
+              this.formty.personnels[i].userName = this.lisehtwo[i].userName
+              this.formty.personnels[i].deptId  = this.lisehtwo[i].deptId
+              if(this.lisehtwo[i].dept !== undefined && this.lisehtwo[i].dept !==null){
+                this.formty.personnels[i].deptName = this.lisehtwo[i].dept.deptName
+                // this.form.personnels[i].deptId  = this.lisehtwo[i].dept.deptId
+              }else{
+                this.formty.personnels[i].deptName = this.lisehtwo[i].deptName
+
+              }
+            }
+          }
+        }
+
+       console.log(this.formty)
+           addDeptiu(this.formty).then(response => {
+             this.msgSuccess("修改成功");
+             this.opentr = false;
+             this.hyeqa = false;
+             this.getReportList();
+            // this.getList();
+           });
+         // if (valid) {
+         //   if (this.form.id != undefined) {
+         //     updateDept(this.form).then(response => {
+         //       this.msgSuccess("修改成功");
+         //       this.open = false;
+         //       this.getList();
+         //     });
+         //   } else {
+         //     addDept(this.form).then(response => {
+         //       this.msgSuccess("新增成功");
+         //       this.open = false;
+         //       this.getList();
+         //     });
+         //   }
+         // }
+       });
+      // }else{
+
+      // }
+
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      let ids = []
+      if(row.id !== undefined){
+        const id = []
+        id.push(row.id)
+        ids = id
+      }else{
+        ids = this.ids
+      }
+      let hue= {}
+      hue.idList = ids
+      hue.table = 'statistic_report'
+      hue.logicDelName ="is_del",
+       hue.logicDelValue ="Y",
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDept(hue);
+        }).then(() => {
+        this.getReportList();
+        //this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    // 上传文件
+    handleChangert(file, fileList) {
+      // this.configtwo = []
+      const jieg = []
+      jieg.push(fileList[fileList.length - 1])
+      console.log(jieg)
+      this.configtwo = jieg.slice(-3);
+    },
+    upImageFn(res, file) {
+      if(res.code !== 200){
+        this.msgSuccess('上传失败');
+        return false
+      }else{
+        this.msgSuccess('上传成功');
+        this.config= res.data
+        console.log(res.data)
+        console.log(res.data.name.substr(0,res.data.name.length-4))
+        // this.querjtgoe.message_upload = this.config
+        // console.log(this.querjtgoe.message_upload)
+        if(this.xiug == false){
+          console.log(3456)
+          this.form.templateName = res.data.name
+          this.form.repUploadFile = JSON.stringify(this.config)
+        }else{
+           this.bieoa.file = this.config
+        }
+
+        if(this.hyeqa == true){
+          this.formty.templateName = res.data.name
+          this.formty.repUploadFile = JSON.stringify(this.config)
+        }
 
+        // this.querjtgoe.message_title = res.data.name.substr(0,res.data.name.length-4)
+        // this.querjtgoe.message_upload = JSON.stringify(this.querjtgoe.message_upload)
+      }
+      // querjtgoe.message_title
+      console.log(res)
+      // console.log(res.data.name.substr(-4))
+    },
+    err(){
+      this.msgSuccess("上传失败");
+     console.log(35)
+    },
+    reseImage(file, fileList) {
+      let urls = ""
+      this.configtwo = []
+      // if (file.response) {
+      //   urls = file.response.url
+      // } else {
+      //   urls = file.url
+      // }
+      // for (let i = this.configtwo.length - 1; i >= 0; i--) {
+      //   if (this.configtwo[i].url == urls) {
+      //     this.configtwo.splice(i, 1);
+      //   }
+      // }
+     console.log(this.configtwo)
+     // if(this.configtwo.length == 0){
+     //   this.querjtgoe.message_enclosure = undefined
+     // }else{
+     //   this.querjtgoe.message_enclosure = JSON.stringify(this.configtwo)
+     // }
+
+    },
+    getToken() {
+      return getToken()
+    },
+    // 上传前控制
+    befors(res, file){
+      console.log(res,file)
+      console.log(res.name.substr(0,res.name.length-4))
+      if(res.type !== 'application/vnd.ms-excel'  ){
+        if(res.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){
+          this.msgSuccess('只能上传xls文件');
+          return false
+        }
+
+      }else{
+        return true
+      }
+      // return   true
+    },
+    // 图片预览
+    handlePictureCardPreview(file) {
+      console.log(file,87)
+      console.log(file.name.split('.'))
+      let hegs = file.name.split('.')
+      console.log(hegs[hegs.length - 1])
+      // if(hegs[hegs.length - 1] == 'pdf'){
+      //   this.shouewhu = true
+      // }else{
+      //   this.shouewhu = false
+      // }
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = true;
+      this.imashow = true
+    },
+    // 人员选择
+    changeren(){
+    this.modalShow = true
+    },
+    handleClick(index){
+    if(index.index == 0){
+      this.getTreeselect()
+    }else if(index.index == 1){
+      this.getTreeselectjue()
+    }else if(index.index == 2){
+      this.getTreeselecu()
+    }
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 查询角色
+    getTreeselectjue() {
+      this.loading = true;
+      listRole(this.queryParams).then(response => {
+        this.deptOptionstwo = this.handleTree(response.rows, "id");
+        this.loading = false;
+      });
+    },
+    // 查询组
+    getTreeselecu() {
+      this.loading = true;
+      group(this.queryParams).then(response => {
+        this.deptOptionsthre = this.handleTree(response.data, "id");
+        this.loading = false;
+      });
+    },
+    // 筛选节点
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 节点单击事件
+    handleNodeClick(data) {
+      console.log(data);
+      // this.queryParams.deptId = data.id;
+      this.staff(data.id);
+      this.quandet = false
+      // this.getList();
+    },
+    // 点击组/角色
+      djieskle(node, instanceId) {
+        this.personnel(node.id);
+        console.log(node, instanceId);
+      },
+      djieskletwo(node, instanceId) {
+        this.members(node.id);
+        this.elezu = node.id
+        console.log(node, instanceId);
+      },
+      // 点击全部删除
+      eledelte(){
+       this.lisehtwo = []
+      },
+      // 点击全选
+      quande(){
+        var dueg = []
+        dueg = (this.dhiuw)
+       this.quandet = true
+       var that =  this
+       // dueg.push(index)
+       // this.lisehtwo = dueg
+       // this.lisehtwo.push(index);
+       // this.lisehtwo = [...new Set(this.lisehtwo)];
+       // that.positions.map(train => {
+       //   that.new_Positions.push(train.trainId);
+       // });
+       // that.resultArr = []; //去重后的数组
+       var flag;
+       for (var i in dueg) {
+         flag = true;
+         for (var j in that.lisehtwo) {
+           if (that.lisehtwo[j].id == dueg[i].id) {
+             flag = false;
+             break;
+           }
+         }
+         if (flag) {
+           that.lisehtwo.push(dueg[i]);
+         }
+       }
+      },
+      // 点击添加
+      reyantt(index) {
+        var dueg = [];
+        this.idneese = index;
+        var that =  this
+        dueg.push(index)
+        // this.lisehtwo = dueg
+        // this.lisehtwo.push(index);
+        // this.lisehtwo = [...new Set(this.lisehtwo)];
+        // that.positions.map(train => {
+        //   that.new_Positions.push(train.trainId);
+        // });
+        // that.resultArr = []; //去重后的数组
+        var flag;
+        for (var i in dueg) {
+          flag = true;
+          for (var j in that.lisehtwo) {
+            if (that.lisehtwo[j].id == dueg[i].id) {
+              flag = false;
+              break;
+            }
+          }
+          if (flag) {
+            that.lisehtwo.push(dueg[i]);
+          }
+        }
+        // for(var i = 0 ; i <this.lisehtwo.length; i++ ){
+        //   if(this.lisehtwo[i].id == index.id){
+        //     this.lisehtwo.splice(i,1)
+        //   }
+        // }
+        // })
+      },
+      // 点击确定
+      determine(){
+        var eledete = []
+       this.lisehtwo.filter(route=>{
+         eledete.push(route.id)
+       })
+       eledete  = eledete.join(',')
+       console.log(this.lisehtwo)
+
+
+       // this.elezu
+       this.loading = true;
+       buent(this.lisehtwo).then(response => {
+         // this.lisehtwo = response.data;
+         // this.dhiuw = response.data
+         this.mpany.ompany = response.deptNameList
+         this.mpany.name = response.nikeNameList
+         console.log( this.mpany.ompany)
+
+         let nahe = this.mpany.name.join(',')
+         console.log( nahe)
+         this.messageReun = '已选择' +nahe
+         if(response.code == 200){
+           this.msgSuccess('操作成功');
+           this.modalShow = false
+         }
+         this.loading = false;
+       });
+      },
+      load(){
+
+      },
+      // 按照部门查询人员
+      staff(index) {
+        this.loading = true;
+        var that = this;
+        getRole(index).then(response => {
+          // this.deptOptionsthre = this.handleTree(response.data, "id");
+          // this.rtuer = true
+          this.liseh = []
+          this.liseh = response.data;
+          this.dhiuw = response.data
+          this.loading = false;
+        });
+      },
+      // 按照角色查询人员
+      personnel(index) {
+        this.loading = true;
+        getPersonnel(index).then(response => {
+          // this.deptOptionsthre = this.handleTree(response.data, "id");        this.liseh = response.data;
+          this.liseh = []
+          this.liseh = response.data;
+          this.dhiuw = response.data
+          this.loading = false;
+        });
+      },
+      // 按照组查询人员
+      members(index) {
+        this.loading = true;
+        getMembers(index).then(response => {
+          // this.deptOptionsthre = this.handleTree(response.data, "id");
+          // this.liseh = response.data;
+          // response.data
+          // this.lisehtwo.push(response.data)
+          this.liseh = []
+          this.liseh = response.data;
+          this.dhiuw = response.data
+          // this.dhiuw.filter(route=>{
+          //   this.lisehtwo.push(route)
+          // })
+          this.loading = false;
+        });
+      },
+      // 点击删除
+      lidele(index) {
+        for (let i = this.lisehtwo.length - 1; i >= 0; i--) {
+          if (this.lisehtwo[i].id == index.id) {
+            this.lisehtwo.splice(i, 1)
+          }
+        }
+        this.jeihqdcee = this.lisehtwo
+      },
+      handleStatusChange(row) {
+        let text = row.status === "0" ? "启用" : "停用";
+        let nheu = {
+          condition:{
+
+          },
+          commitData:{
+
+          }
+        }
+        nheu.tableName = 'statistic_report'
+        nheu.condition.id = row.id
+        nheu.commitData.status = row.status
+        this.$confirm('确认要改变此用户状态值吗?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            return addDeptiyuit(nheu);
+          }).then(() => {
+            this.msgSuccess('操作成功');
+          }).catch(function() {
+            row.status = row.status === "0" ? "1" : "0";
+          });
+      },
   }
 };
 </script>
+<style lang="scss">
+  .infinite-list {
+    // height: 150px;
+    margin-bottom: 20px;
+    flex-wrap: wrap;
+    .infinite-list-item {
+      // flex:1!important;
+      display: flex;
+      // justify-content: space-between;
+      align-items: center;
+      text-align: center;
+      list-style: none;
+      height: 23px;
+      margin-left: 10px;
+      // line-height: 30px;
+    }
+    .infinite-list-itemss {
+      color: #1890ff;
+    }
+  }
+  .infinite-listty {
+    display: flex;
+    flex-wrap: wrap;
+    .infinite-list-itemty {
+      // flex:1;
+      display: flex;
+      // justify-content: space-between;
+      height: 23px;
+      line-height: 23px;
+      // text-align: center;
+      list-style: none;
+      margin-left: 10px;
+      // border-radius: 40px;
+      // border: 1px solid #eee;
+      // border-bottom: 1px solid #eee;
+    }
+
+  }
+  // 分发人员
+  .infinite-listopma{
+   width: 100%;
+   display: flex;
+   flex-wrap: wrap;
+   justify-content: flex-start;
+   align-items: center;
+   li{
+     list-style: none;
+     // width: 20%;
+     margin-left: 10px;
+     line-height: 23px;
+   }
+  }
+
+</style>
+<style lang="scss" scoped="">
+  .app-container{
+    padding: 0 20px !important;
+    padding-top: 20px !important;
+    background-color: #eef0ff;
+  }
+  .app-containergt{
+    background-color: #fff;
+    border-radius: 6px;
+    padding: 23px !important;
+  }
+
+  .tab_bott {
+    display: flex;
+  }
+  .tabBot_oje {
+    width: 40%;
+  }
+  .tabBot_two {
+    width: 50%;
+    margin-left: 30px;
+  }
+  .box-cardtt{
+    margin-top: 30px;
+  }
+  .index_navTimeimg {
+    width: 10px;
+    height: 10px;
+    margin-left: 5px;
+  }
+  .jheuy{
+    color: #FE4141;
+  }
+  .neuiq{
+    color: #FE9A41;
+  }
+  .bgeyy{
+    color: #27C949;
+  }
+</style>

+ 10 - 2
ruoyi-ui/src/views/system/issue/index.vue

@@ -478,7 +478,8 @@ export default {
         recieve_user_name:''
         }]
       },
-      jeogq:{}
+      jeogq:{},
+      nuki:0
     };
   },
   created() {
@@ -663,6 +664,7 @@ export default {
     },
     /** 提交按钮 */
     submitForm: function() {
+
       // 获取当前时间戳
       var  date1 =new Date();
       // let tmie = Date.parse(date1) / 1000
@@ -715,7 +717,13 @@ export default {
       }
 
       this.faerform.fixedData = this.querjtgoe
-      console.log(this.faerform)
+      console.log(this.faerform)   
+      this.nuki = this.nuki + 1
+      console.log(this.nuki)
+      if(this.nuki > 1){
+        this.msgSuccess("请勿重复提交");
+        return false
+      }
       this.$refs["querjtgoe"].validate(valid => {
       //   if (valid) {
       //     if (this.form.roleId != undefined) {

+ 19 - 0
ruoyi-ui/src/views/system/reportDesign/index.vue

@@ -0,0 +1,19 @@
+<template>
+  <div id="ouie">
+
+  </div>
+</template>
+
+<script>
+  export default {
+    created() {
+      //this.getList();
+      window.open('http://118.178.139.79:5000/prod-api/boman-report/jmreport/list','_blank');
+          console.log(123);
+      this.$router.replace('/index')
+    },
+  };
+</script>
+
+<style>
+</style>

+ 235 - 22
ruoyi-ui/src/views/system/sonnel/index.vue

@@ -5,66 +5,248 @@
        <div class="sonnelNave">
          <div class="sonnelacr">
            <p>报表名称:</p>
-           <p>潜山市教育局 人员信息列表</p>
+           <p>{{queryParams.reportName}}</p>
          </div>
          <div class="sonnelacr">
            <p>报表模板:</p>
            <p class="aet">
-             <a href="#">下载模板</a>
+             <a :href="queryParams.repUploadFile !== null? queryParams.repUploadFile.url : '#'" :download="queryParams.repUploadFile !== null? queryParams.repUploadFile. name : '暂无数据'" >下载模板</a>
              <span>
                 <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
-                <i>潜山市教育局 人员信息报表.xls</i>
+                <i>{{queryParams.repUploadFile !== null? queryParams.repUploadFile. name : '暂无数据'}}</i>
              </span>
            </p>
          </div>
          <div class="sonnelacr">
            <p>开始时间:</p>
-           <p>2021-08-17</p>
+           <p>{{queryParams.startTime== null? '暂无数据' : queryParams.startTime}}</p>
          </div>
          <div class="sonnelacr">
            <p>截止时间:</p>
-           <p>2021-08-23</p>
+           <p>{{queryParams.endTime == null ? '暂无数据': queryParams.endTime}}</p>
          </div>
          <div class="sonnelacr">
            <p>注意事项:</p>
-           <p>请各单位认真如实填写人员信息,务必在截止日期前提交!</p>
+           <p>{{queryParams.remark == null ? '暂无数据': queryParams.remark}}</p>
          </div>
-         <div class="sonnelacr">
+         <div class="sonnelacr sonnelacrty">
            <p>参与人员:</p>
-           <p>潜山市源潭中心小学:沈明熙、刘晓旭、王思、李敏、韩晓辉、李启民、沈明熙、刘晓旭、王思、李敏、韩晓辉、李启民、沈明熙; 潜山市梅</p>
+           <div>
+             <p v-for="(item,index) in queryParams.personnelList" :key="item.deptName">{{item.deptName}}:<span style="margin-right: 5px;" v-for="(itr,indexr) in item.userNameList" :key="indexr">{{itr}}</span></p>
+           </div>
+
          </div>
          <div class="sonnelacr">
            <p>已填报单位:</p>
            <p class="djiwui">
-             <span class="jeiut">
-               <span>潜山市源潭中心小学 沈明熙</span>
-               <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
-               <i>潜山市教育局 人员信息报表.xls</i>
-               <img src="../../../assets/images/icon_xq_xz.png" alt="" class="index_navTimeimgrt" />
+             <span class="jeiut" v-for="(iu,ij) in queryParams.filledInList" :key="ij">
+               <span>{{iu.deptName}}: {{iu.userNameList}}</span>
+                <p>
+                  <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
+                  <a :href=" iu.fileUrlList !== '[]'? iu.fileUrlList[0] : '#'" :download="iu.fileUrlList !== '[]'? iu.fileNameList[0]:'暂无数据'">{{iu.fileUrlList !== '[]'? iu.fileNameList[0]:'暂无数据'}}</a>
+                  <img src="../../../assets/images/icon_xq_xz.png" alt="" class="index_navTimeimgrt" />
+                </p>
+                <!-- <p>
+                  <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
+                  <i>潜山市教育局 人员信息报表.xls</i>
+                  <img src="../../../assets/images/icon_xq_xz.png" alt="" class="index_navTimeimgrt" />
+                </p> -->
              </span>
-             <span class="jeiut">
-               <span>潜山市源潭中心小学 沈明熙</span>
-               <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
-               <i>潜山市教育局 人员信息报表.xls</i>
-               <img src="../../../assets/images/icon_xq_xz.png" alt="" class="index_navTimeimgrt" />
-               </span>
 
              </p>
          </div>
-         <div class="sonnelacr">
+         <!-- <div class="sonnelacr">
            <p>未填报单位:</p>
-           <p>潜山市源潭中心小学:沈明熙、刘晓旭、王思、李敏、韩晓辉、李启民、沈明熙、刘晓旭、王思、李敏、韩晓辉、李启民、沈明熙; 潜山市梅</p>
+           <p>潜山市源潭中心小学:<span>沈明熙、</span></p>
+           <p>潜山市源潭中心小学:<span>沈明熙、</span></p>
+         </div> -->
+         <div class="sonnelacr sonnelacrty">
+           <p>未填报单位:</p>
+           <div>
+             <p v-for="(item,index) in queryParams.filledOutList" :key="item.deptName">{{item.deptName}}:<span style="margin-right: 5px;" v-for="(itr,indexr) in item.userNameList" :key="indexr">{{itr}}</span></p>
+           </div>
+
          </div>
        </div>
        <div style="text-align: center;">
-         <el-button type="success"  size="medium" @click="handleQuery">查看汇总信息</el-button>
+         <el-button type="success"  size="medium" @click="handleQuerygt">查看汇总信息</el-button>
        </div>
+       <img src="../../../assets/images/pic_zt_jxz.png" alt="" class="nyekag" v-if="queryParams.reportStatus == 1">
+       <img src="../../../assets/images/pic_zt_jxzhu.png" alt="" class="nyekag" v-if="queryParams.reportStatus == 2">
+       <img src="../../../assets/images/pic_zt_jxzs.png" alt="" class="nyekag" v-if="queryParams.reportStatus == 3">
      </div>
   </div>
 </template>
 
 <script>
+import { listType, getType, delType, addType, updateType, clearCache } from "@/api/system/sonnel";
 
+export default {
+  name: "name",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 字典表格数据
+      typeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 状态数据字典
+      statusOptions: [],
+      // 日期范围
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+
+      },
+      // 表单参数
+      form: {},
+      shuejy:'',
+      reportId:0
+
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询字典类型列表 */
+    getList() {
+      this.loading = true;
+      listType(this.$route.query.id).then(response => {
+          this.queryParams = response.data;
+          this.reportId = response.data.reportId
+          // if(this.queryParams.personnelList !==null){
+          //   this.queryParams.personnelList.filter(rout=>{
+          //       this.shuejy =  rout.userNameList,jion(',')
+          //   })
+          // }
+          if(this.queryParams.repUploadFile !== null){
+              this.queryParams.repUploadFile = JSON.parse(this.queryParams.repUploadFile)
+            }
+          // this.total = response.total;
+          // this.loading = false;
+          console.log(response)
+        }
+      );
+    },
+    // 字典状态字典翻译
+    statusFormat(row, column) {
+      return this.selectDictLabel(this.statusOptions, row.status);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        dictName: undefined,
+        dictType: undefined,
+        status: "0",
+        remark: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加字典类型";
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getType(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改字典类型";
+      });
+    },
+    handleQuerygt(){
+        window.open('http://118.178.139.79:5000/jmreport/view/' + this.reportId,'_blank');
+    },
+
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateType(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addType(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除字典编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delType(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/dict/type/export', {
+        ...this.queryParams
+      }, `type_${new Date().getTime()}.xlsx`)
+    },
+    /** 清理缓存按钮操作 */
+    handleClearCache() {
+      clearCache().then(response => {
+        this.msgSuccess("清理成功");
+      });
+    }
+  }
+};
 </script>
 
 <style lang="scss" scoped>
@@ -76,6 +258,7 @@
     padding: 30px;
     background-color: #fff;
     border-radius: 6px;
+    position: relative;
     .sonnelacr{
       display: flex;
       margin-bottom: 25px;
@@ -117,6 +300,7 @@
           color: #343434;
           font-style:normal;
         }
+
       }
       .djiwui{
          display: flex;
@@ -135,6 +319,28 @@
         }
       }
     }
+    .sonnelacrty{
+      div:nth-child(2){
+        // display: flex;
+          flex: 1;
+          font-size: 16px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #343434;
+          p{
+            width: 100%;
+            text-align: left;
+            font-size: 16px;
+            font-family: PingFang SC;
+            font-weight: 400;
+            color: #343434;
+            span{
+              text-align: left;
+              flex: 1;
+            }
+          }
+      }
+    }
   }
   .xiangq{
     border-left: 4px solid #1890FF;
@@ -155,4 +361,11 @@
     height: 14px;
     margin: 0 17px;
   }
+  .nyekag{
+    width: 68px;
+    height: 60px;
+    position: absolute;
+    top:40px;
+    right: 50px;
+  }
 </style>

+ 366 - 0
ruoyi-ui/src/views/system/sonnft/index.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="sonnel">
+     <div class="sonnerHeader">
+       <p class="xiangq ">报表详情</p>
+       <div class="sonnelNave">
+         <div class="sonnelacr">
+           <p>报表名称:</p>
+           <p>{{queryParams.reportName}}</p>
+         </div>
+         <div class="sonnelacr">
+           <p>报表模板:</p>
+           <p class="aet">
+             <a :href="queryParams.repUploadFile !== null? queryParams.repUploadFile.url : '#'" :download="queryParams.repUploadFile !== null? queryParams.repUploadFile. name : '暂无数据'" >下载模板</a>
+             <span>
+                <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
+                <i>{{queryParams.repUploadFile !== null? queryParams.repUploadFile. name : '暂无数据'}}</i>
+             </span>
+           </p>
+         </div>
+         <div class="sonnelacr">
+           <p>开始时间:</p>
+           <p>{{queryParams.startTime== null? '暂无数据' : queryParams.startTime}}</p>
+         </div>
+         <div class="sonnelacr">
+           <p>截止时间:</p>
+           <p>{{queryParams.endTime == null ? '暂无数据': queryParams.endTime}}</p>
+         </div>
+         <div class="sonnelacr">
+           <p>注意事项:</p>
+           <p>{{queryParams.remark == null ? '暂无数据': queryParams.remark}}</p>
+         </div>
+         <!-- <div class="sonnelacr sonnelacrty">
+           <p>参与人员:</p>
+           <div>
+             <p v-for="(item,index) in queryParams.personnelList" :key="item.deptName">{{item.deptName}}:<span style="margin-right: 5px;" v-for="(itr,indexr) in item.userNameList" :key="indexr">{{itr}}</span></p>
+           </div>
+
+         </div> -->
+         <!-- <div class="sonnelacr">
+           <p>已填报单位:</p>
+           <p class="djiwui">
+             <span class="jeiut" v-for="(iu,ij) in queryParams.filledInList" :key="ij">
+               <span>{{iu.deptName}}: {{iu.userNameList}}</span>
+                <p>
+                  <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
+                  <a :href=" iu.fileUrlList !== '[]'? iu.fileUrlList[0] : '#'" :download="iu.fileUrlList !== '[]'? iu.fileNameList[0]:'暂无数据'">{{iu.fileUrlList !== '[]'? iu.fileNameList[0]:'暂无数据'}}</a>
+                  <img src="../../../assets/images/icon_xq_xz.png" alt="" class="index_navTimeimgrt" />
+                </p>
+                <!-- <p>
+                  <img src="../../../assets/images/icon_xq_wj.png" alt="" class="index_navTimeimg" />
+                  <i>潜山市教育局 人员信息报表.xls</i>
+                  <img src="../../../assets/images/icon_xq_xz.png" alt="" class="index_navTimeimgrt" />
+                </p> -->
+             </span>
+
+             </p>
+         </div>
+         <!-- <div class="sonnelacr">
+           <p>未填报单位:</p>
+           <p>潜山市源潭中心小学:<span>沈明熙、</span></p>
+           <p>潜山市源潭中心小学:<span>沈明熙、</span></p>
+         </div> -->
+        <!-- <div class="sonnelacr sonnelacrty">
+           <p>未填报单位:</p>
+           <div>
+             <p v-for="(item,index) in queryParams.filledOutList" :key="item.deptName">{{item.deptName}}:<span style="margin-right: 5px;" v-for="(itr,indexr) in item.userNameList" :key="indexr">{{itr}}</span></p>
+           </div>
+
+         </div> -->
+         <img src="../../../assets/images/pic_zt_jxz.png" alt="" class="nyekag" v-if="queryParams.reportStatus == 1">
+         <img src="../../../assets/images/pic_zt_jxzhu.png" alt="" class="nyekag" v-if="queryParams.reportStatus == 2">
+         <img src="../../../assets/images/pic_zt_jxzs.png" alt="" class="nyekag" v-if="queryParams.reportStatus == 3">
+       </div>
+       <!-- <div style="text-align: center;">
+         <el-button type="success"  size="medium" @click="handleQuery">查看汇总信息</el-button>
+       </div> -->
+
+     </div>
+  </div>
+</template>
+
+<script>
+import { listType, getType, delType, addType, updateType, clearCache } from "@/api/system/sonnel";
+
+export default {
+  name: "name",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 字典表格数据
+      typeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 状态数据字典
+      statusOptions: [],
+      // 日期范围
+      dateRange: [],
+      // 查询参数
+      queryParams: {
+
+      },
+      // 表单参数
+      form: {},
+      shuejy:''
+
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询字典类型列表 */
+    getList() {
+      this.loading = true;
+      listType(this.$route.query.id).then(response => {
+          this.queryParams = response.data;
+          // if(this.queryParams.personnelList !==null){
+          //   this.queryParams.personnelList.filter(rout=>{
+          //       this.shuejy =  rout.userNameList,jion(',')
+          //   })
+          // }
+          if(this.queryParams.repUploadFile !== null){
+              this.queryParams.repUploadFile = JSON.parse(this.queryParams.repUploadFile)
+            }
+          // this.total = response.total;
+          // this.loading = false;
+          console.log(response)
+        }
+      );
+    },
+    // 字典状态字典翻译
+    statusFormat(row, column) {
+      return this.selectDictLabel(this.statusOptions, row.status);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined,
+        dictName: undefined,
+        dictType: undefined,
+        status: "0",
+        remark: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加字典类型";
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getType(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改字典类型";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateType(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addType(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除字典编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delType(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/dict/type/export', {
+        ...this.queryParams
+      }, `type_${new Date().getTime()}.xlsx`)
+    },
+    /** 清理缓存按钮操作 */
+    handleClearCache() {
+      clearCache().then(response => {
+        this.msgSuccess("清理成功");
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+  .sonnel{
+    background-color:#eaeefa;
+    padding: 16px;
+  }
+  .sonnerHeader{
+    padding: 30px;
+    background-color: #fff;
+    border-radius: 6px;
+    position: relative;
+    .sonnelacr{
+      display: flex;
+      margin-bottom: 25px;
+      p:nth-child(1){
+        font-size: 16px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: #343434;
+        width: 10%;
+        text-align: right;
+      }
+      p:nth-child(2){
+        flex: 1;
+        font-size: 16px;
+        font-family: PingFang SC;
+        font-weight: 400;
+        color: #343434;
+
+      }
+      .aet{
+        display: flex;
+        align-items: center;
+        a{
+          width: 100px;
+          height: 40px;
+          background: #1890FF;
+          border-radius: 10px;
+          font-size: 16px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #FFFFFF;
+          text-align: center;
+          line-height: 40px;
+        }
+        i{
+          font-size: 13px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #343434;
+          font-style:normal;
+        }
+
+      }
+      .djiwui{
+         display: flex;
+         flex-direction: column;
+         line-height: 25px;
+         .jeiut{
+           display: flex;
+           align-items: center;
+         }
+        i{
+          font-size: 13px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #343434;
+          font-style:normal;
+        }
+      }
+    }
+    .sonnelacrty{
+      div:nth-child(2){
+        // display: flex;
+          flex: 1;
+          font-size: 16px;
+          font-family: PingFang SC;
+          font-weight: 400;
+          color: #343434;
+          p{
+            width: 100%;
+            text-align: left;
+            font-size: 16px;
+            font-family: PingFang SC;
+            font-weight: 400;
+            color: #343434;
+            span{
+              text-align: left;
+              flex: 1;
+            }
+          }
+      }
+    }
+  }
+  .xiangq{
+    border-left: 4px solid #1890FF;
+    padding-left: 6px;
+    font-size: 19px;
+    font-family: PingFang SC;
+    font-weight: bold;
+    color: #343434;
+    margin-bottom: 38px;
+  }
+  .index_navTimeimg{
+    width: 14px;
+    height: 16px;
+    margin: 0 11px;
+  }
+  .index_navTimeimgrt{
+    width: 12px;
+    height: 14px;
+    margin: 0 17px;
+  }
+  .nyekag{
+    width: 68px;
+    height: 60px;
+    position: absolute;
+    top:40px;
+    right: 50px;
+  }
+</style>

File diff ditekan karena terlalu besar
+ 620 - 307
ruoyi-ui/src/views/system/tatementsetr/index.vue


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini