Lijy 3 lat temu
rodzic
commit
603e9aedd0

+ 32 - 17
fhKeeper/formulahousekeeper/timesheet/src/main.js

@@ -123,30 +123,45 @@ router.beforeEach((to, from, next) => {
                         filterRouter = filterRouter.filter(r=>{return r.name != '自定义数值统计'});
                     } else {
                         var customMenu = filterRouter.filter(r=>{return r.name == '自定义数值统计'});
-                        if (customMenu.length > 0) {
+                        if (customMenu.length > 0) {    
                             console.log(customMenu,'111');
                             customMenu[0].children[0].name = user.timeType.customDataName + '统计';
                         }
                         
                     }
                     
-                    if (user.role == 1 || user.role == 2) {
-                        getRoutes = filterRouter;
-                    } else {
-                        var modules = userModules.filter(u=>u.role == user.role)[0].modules;
-                        if (user.leader) {
-                            modules.push(2, "项目报告审核");
-                        } else if (user.hasAuditDept) {
-                            modules.push(2, "项目报告审核");
-                        }
-                        if (user.role == 6 && user.timeType.needDeptAudit == 1) {
-                            //公司领导可以进行导入日报的审核
-                            modules.push(2, "导入日报审核");
-                        }
-                        getRoutes = filterRouter.filter(r=>{
-                            return modules.filter(m=>m == r.name).length > 0;
-                        });
+                    // if (user.role == 1 || user.role == 2) {
+                    //     getRoutes = filterRouter;
+                    // } else {
+                    //     var modules = userModules.filter(u=>u.role == user.role)[0].modules;
+                    //     if (user.leader) {
+                    //         modules.push(2, "项目报告审核");
+                    //     } else if (user.hasAuditDept) {
+                    //         modules.push(2, "项目报告审核");
+                    //     }
+                    //     if (user.role == 6 && user.timeType.needDeptAudit == 1) {
+                    //         //公司领导可以进行导入日报的审核
+                    //         modules.push(2, "导入日报审核");
+                    //     }
+                    //     getRoutes = filterRouter.filter(r=>{
+                    //         return modules.filter(m=>m == r.name).length > 0;
+                    //     });
+                    // }
+
+                    // 更据当前登录的权限来显示模块
+                    var arr = []
+                    for(var i in user.moduleList) {
+                        if(user.moduleList[i].isMenu) {
+                            for(var s in filterRouter) {
+                                if(user.moduleList[i].name == filterRouter[s].name) {
+                                    arr.push(filterRouter[s])
+                                }
+                            } 
+                        } 
                     }
+
+                    getRoutes = arr;
+
                     //同步企业微信考勤打卡的情况下,根据深圳赛元微电子的要求,屏蔽项目报告审核模块
                     if (user.timeType.syncCorpwxTime == 1) {
                         getRoutes = getRoutes.filter(r=>{return r.name != '项目报告审核'});

+ 106 - 0
fhKeeper/formulahousekeeper/timesheet/src/permissions.js

@@ -0,0 +1,106 @@
+const StringUtil = {
+    permissions: function(arr) {
+    var obj = {
+        // 项目管理
+        projectNew: false, // 新增项目 // 
+        projectView: false, // 查看全部项目 // 
+        projectManagement: false, // 管理全部项目 (编辑,完成,删除,子项目)(负责人编辑,完成)(创建人编辑 删除  完成,子项目) (负责人只能编辑参与人和审核人) // 
+        projectClassification: false, // 分类管理 // 
+        projectExport: false, // 导出项目 // 
+        projectImport: false, // 导入项目 // 
+        projectResources: false, // 查看资源分配 // 
+        projectCostOfItems: false, // 基线成本项管理 (基本成本项文字) // 
+        projectBaseline: false, // 查看成本基线 (项目里面的成本基线) //
+        projectCorrection: false, // 校正成本基线 (项目里面的成本基线的编辑) //
+        projectContract: false, // 查看合同金额 //
+
+        // 组织架构
+        structurePersonnel: false, // 人员成本管理 (月成本,时薪,操作) //
+        structureAdd: false, // 添加人员 // 
+        structureExport: false, // 导出人员 // 
+        structureImport: false, // 导入人员 // 
+
+        // 工时报告
+        reportsCompany: false, // 查看全公司工时 // 后台
+        reportsPersonnel: false, // 查看相关人员工时 // 后台
+        reportsFillOut: false, // 代填日报 //
+
+        // 财务核算成本 
+        financialCustom: false, // 自定义薪资项 // 
+        financialProportion: false, // 分摊比例设置 // 
+        financialUpload: false, // 薪资数据上传 // 
+        financialExport: false, // 薪资数据导出 // 
+        financialShare: false, // 导出分摊数据 // 
+
+        // 项目报表服务 // 
+        reportTask : false, // 项目任务报表 //
+        reportCostOf : false, // 项目成本报表 // 
+        reportBalance : false, // 项目收支平衡表 // 
+        reportProfits : false, // 客户项目利润表 // 
+        reportPhase : false, // 项目阶段工时表 // 
+        reportOvertime : false, // 加班情况统计表 //
+
+        // 请假模块
+        leaveFil : false, // 请假填报 // 
+        leaveAudit : false, // 请假审核 //
+        leaveAll : false, // 查看全部请假单 //
+        leaveStatistical : false, // 请假统计 //
+        leaveProcess : false, // 审批流程设置 // 
+        leaveAnnual : false, // 年假管理 //
+
+        // 费用报销
+        costFil : false, // 费用填报 //
+        costAudit : false, // 费用审核 //
+        costAll : false, // 查看全部报销单 //
+
+        // 项目报告审核
+        projectReportReview: false, // 审核全员日报
+    }
+
+    for(var i in arr) {
+        arr[i] == '新增项目' ? obj.projectNew = true : ''
+        arr[i] == '查看全部项目' ? obj.projectView = true : ''
+        arr[i] == '管理全部项目' ? obj.projectManagement = true : ''
+        arr[i] == '分类管理' ? obj.projectClassification = true : ''
+        arr[i] == '导出项目' ? obj.projectExport = true : ''
+        arr[i] == '导入项目' ? obj.projectImport = true : ''
+        arr[i] == '查看资源分配' ? obj.projectResources = true : ''
+        arr[i] == '基线成本项管理' ? obj.projectCostOfItems = true : ''
+        arr[i] == '查看成本基线' ? obj.projectBaseline = true : ''
+        arr[i] == '校正成本基线' ? obj.projectCorrection = true : ''
+        arr[i] == '查看合同金额' ? obj.projectContract = true : ''
+        arr[i] == '人员成本管理' ? obj.structurePersonnel = true : ''
+        arr[i] == '添加人员' ? obj.structureAdd = true : ''
+        arr[i] == '导出人员' ? obj.structureExport = true : ''
+        arr[i] == '导入人员' ? obj.structureImport = true : ''
+        arr[i] == '查看全公司工时' ? obj.reportsCompany = true : ''
+        arr[i] == '查看相关人员工时' ? obj.reportsPersonnel = true : ''
+        arr[i] == '代填日报' ? obj.reportsFillOut = true : ''
+        arr[i] == '自定义薪资项' ? obj.financialCustom = true : ''
+        arr[i] == '分摊比例设置' ? obj.financialProportion = true : ''
+        arr[i] == '薪资数据上传' ? obj.financialUpload = true : ''
+        arr[i] == '薪资数据导出' ? obj.financialExport = true : ''
+        arr[i] == '导出分摊数据' ? obj.financialShare = true : ''
+        arr[i] == '项目任务报表' ? obj.reportTask = true : ''
+        arr[i] == '项目成本报表' ? obj.reportCostOf = true : ''
+        arr[i] == '项目收支平衡表' ? obj.reportBalance = true : ''
+        arr[i] == '客户项目利润表' ? obj.reportProfits = true : ''
+        arr[i] == '项目阶段工时表' ? obj.reportPhase = true : ''
+        arr[i] == '加班情况统计表' ? obj.reportOvertime = true : ''
+        arr[i] == '请假填报' ? obj.leaveFil = true : ''
+        arr[i] == '请假审核' ? obj.leaveAudit = true : ''
+        arr[i] == '查看全部请假单' ? obj.leaveAll = true : ''
+        arr[i] == '请假统计' ? obj.leaveStatistical = true : ''
+        arr[i] == '审批流程设置' ? obj.leaveProcess = true : ''
+        arr[i] == '年假管理' ? obj.reportTask = true : ''
+        arr[i] == '费用填报' ? obj.costFil = true : ''
+        arr[i] == '费用审核' ? obj.costAudit = true : ''
+        arr[i] == '查看全部报销单' ? obj.costAll = true : ''
+        arr[i] == '审核全员日报' ? obj.projectReportReview = true : ''
+    }
+
+    return obj
+  }
+};
+Vue.prototype.StringUtil = StringUtil;
+export default {};

+ 13 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue

@@ -44,6 +44,7 @@
 
 <script>
     import * as dd from 'dingtalk-jsapi';
+    import "../permissions.js"
     export default {
         data() {
             return {
@@ -260,6 +261,7 @@
                             if (res.code == "ok") {
                                 var user = res.data;
                                 sessionStorage.setItem('user', JSON.stringify(res.data));
+                                this.permissionsList(res.data)
                                 if (user.company.packageSimple == 1) {
                                     //简易模式,直接进入工时统计表
                                     this.$router.push({ path: '/simple' });
@@ -272,7 +274,6 @@
                                 } else {
                                     this.$router.push({ path: '/daily' });
                                 }
-                                
                             } else {
                                 this.$message({
                                     message: res.msg,
@@ -289,6 +290,17 @@
                     }
                 });
             },
+            // 权限控制
+            permissionsList(item) {
+                var arr = []
+                var ss = item.functionList
+                for(var i in ss) {
+                    arr.push(ss[i].name)
+                }
+                var ssAkl = this.StringUtil.permissions(arr)
+                sessionStorage.setItem('permissions', JSON.stringify(ssAkl));
+                console.log(ssAkl, '返回过来的数据原--------')
+            },
         },
     }
 </script>

+ 7 - 6
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -17,12 +17,12 @@
               <span>项目报表服务</span>
             </template>
               <el-menu-item index="1-1"><p @click="ssl(0)">项目报表</p></el-menu-item>
-              <el-menu-item index="1-2"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
-              <el-menu-item index="1-3"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
-              <el-menu-item index="1-4"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
-              <el-menu-item index="1-5" v-if="user.company.packageCustomer == 1"><p @click="ssl(4)">客户项目利润表</p></el-menu-item>
-              <el-menu-item index="1-6"><p @click="ssl(5)">项目阶段工时表</p></el-menu-item>
-              <el-menu-item index="1-7"><p @click="ssl(6)">加班情况统计表</p></el-menu-item>
+              <el-menu-item index="1-2" v-if="permissions.reportTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
+              <el-menu-item index="1-3" v-if="permissions.reportCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
+              <el-menu-item index="1-4" v-if="permissions.reportBalance"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
+              <el-menu-item index="1-5" v-if="user.company.packageCustomer == 1 && permissions.reportProfits"><p @click="ssl(4)">客户项目利润表</p></el-menu-item>
+              <el-menu-item index="1-6" v-if="permissions.reportPhase"><p @click="ssl(5)">项目阶段工时表</p></el-menu-item>
+              <el-menu-item index="1-7" v-if="permissions.reportOvertime"><p @click="ssl(6)">加班情况统计表</p></el-menu-item>
             </el-submenu>
           </el-menu>
       </el-col>
@@ -423,6 +423,7 @@ export default {
   props: {},
   data() {
     return {
+      permissions: JSON.parse(sessionStorage.getItem("permissions")),
       curProject:{},
       feeType:['一般费用', '差旅费用', '外包费用'],
       detailListLoading: false,

+ 7 - 6
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -12,7 +12,7 @@
           text-color="#666666"
           active-text-color="#20A0FF"
           style="width:100%">
-          <el-submenu index="1">
+          <el-submenu index="1" v-if="permissions.costFil">
             <template slot="title">
               <i class="iconfont firerock-icontianbao"></i>
               <span>员工费用填报</span>
@@ -21,18 +21,18 @@
               <el-menu-item index="1-2"><p @click="ssl(1)">差旅费用填报</p></el-menu-item>
               <el-menu-item index="1-3"><p @click="ssl(2)">外包费用填报</p></el-menu-item>
           </el-submenu>
-          <el-submenu index="2" v-if="user.role == 1 || user.role == 2 || user.role == 4 || user.role == 5 || user.role == 6 ">
+          <el-submenu index="2">
             <template slot="title">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
               <span>{{user.role == 0?"我的报销凭证":"报销凭证列表"}}</span>
             </template>
-            <el-menu-item index="2-1" ><p @click="bills(false)" >单据列表</p></el-menu-item>
-            <el-menu-item index="2-2" v-if="user.role != 6"><p @click="bills(true)">单据审核</p></el-menu-item>
+            <el-menu-item index="2-1" v-if="permissions.costAll"><p @click="bills(false)" >单据列表</p></el-menu-item>
+            <el-menu-item index="2-2" v-if="permissions.costAudit"><p @click="bills(true)">单据审核</p></el-menu-item>
           </el-submenu>
-            <el-menu-item index="3" @select="bills" @click="bills(false)" v-if="user.role == 0">
+            <!-- <el-menu-item index="3" @select="bills" @click="bills(false)" v-if="user.role == 0">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
               <span slot="title">{{user.role == 0?"我的报销凭证":"报销凭证列表"}}</span>
-            </el-menu-item>
+            </el-menu-item> -->
           </el-menu>
       </el-col>
     </div>
@@ -441,6 +441,7 @@ export default {
       isAuditList: false,
       statusTxt:["审核通过","待审核", "已驳回", "已撤销"],
       user: JSON.parse(sessionStorage.getItem("user")),
+      permissions: JSON.parse(sessionStorage.getItem("permissions")),
       allExpList:[],
       expenseTypeList:[],
       tian:{a: null,b: null,c: null,d: null,e: null,f: null,g: null,h: null,},

+ 9 - 8
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -15,7 +15,7 @@
               <el-menu-item index="1-3"><p @click="ssl(2)">请年假</p></el-menu-item>
               <el-menu-item index="1-4"><p @click="ssl(3)">请产假</p></el-menu-item>
           </el-submenu> -->
-          <el-menu-item index="1">
+          <el-menu-item index="1" v-if="permissions.leaveFil">
             <i class="iconfont firerock-icontianbao"></i>
             <span slot="title">员工请假填报</span>
           </el-menu-item>
@@ -24,28 +24,28 @@
               <i class="iconfont firerock-iconbaoxiaodan"></i>
               <span>{{user.role == 0?"我的请假单":"请假单列表"}}</span>
             </template>
-            <el-menu-item index="2-1" ><p @click="bills(false, 2)" >全部</p></el-menu-item>
-            <el-menu-item index="2-2" v-if="user.role != 6"><p @click="bills(true, 1)">待审核</p></el-menu-item>
+            <el-menu-item index="2-1" ><p @click="bills(false, 2)" v-if="permissions.leaveAll">全部</p></el-menu-item>
+            <el-menu-item index="2-2" ><p @click="bills(true, 1)" v-if="permissions.leaveAudit">待审核</p></el-menu-item>
           </el-submenu>
-            <el-menu-item index="3" @select="bills" @click="bills(false, 2)" v-if="user.role == 0">
+            <!-- <el-menu-item index="3" @select="bills" @click="bills(false, 2)" v-if="user.role == 0">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
               <span slot="title">{{user.role == 0?"我的请假单":"请假单列表"}}</span>
-            </el-menu-item>
-            <el-menu-item index="4" v-if="user.role != 0">
+            </el-menu-item> -->
+            <el-menu-item index="4" v-if="permissions.leaveStatistical">
               <template slot="title">
                 <i class="iconfont firerock-icontianbao"></i>
                 <span slot="title">请假统计</span>
               </template>
           </el-menu-item>
 
-          <el-menu-item index="5" v-if="user.role == 1 || user.role == 2">
+          <el-menu-item index="5" v-if="permissions.leaveProcess">
               <template slot="title">
                 <i class="iconfont firerock-iconliucheng"></i>
                 <span slot="title">请假审批流程</span>
               </template>
           </el-menu-item>
 
-          <el-menu-item index="6" v-if="user.role != 0">
+          <el-menu-item index="6" v-if="permissions.leaveAnnual">
               <template slot="title">
                 <i class="iconfont firerock-icontianbao"></i>
                 <span slot="title">年假管理</span>
@@ -625,6 +625,7 @@ export default {
       statisticalList: [],
       loading: false,
       timeChoose: 1,
+      permissions: JSON.parse(sessionStorage.getItem("permissions")),
       // typess: [{
       //   name: '事假',
       //   id: 0

+ 7 - 6
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -13,11 +13,11 @@
                 <el-radio-button label="全部人员" >全部人员({{allFinanceList.length}})</el-radio-button>
                 <el-radio-button label="无项目工时人员">无项目工时人员({{noReportUserList.length}})</el-radio-button>
             </el-radio-group>
-            <el-form-item v-if="user.role == 1 || user.role == 2 || user.role == 4" style="margin-left:5px;">
+            <el-form-item v-if="permissions.financialProportion" style="margin-left:5px;">
                 <el-link type="primary" :underline="false" @click="showSettingDialog()" >分摊比例设置</el-link>
             </el-form-item>
 
-            <el-form-item style="float:right;" v-if="user.role == 1 || user.role == 2 || user.role == 4">
+            <el-form-item style="float:right;" v-if="permissions.financialUpload">
                 <el-link type="primary" :underline="false" @click="getTemplate()" >模板下载</el-link>
             </el-form-item>
             <!-- <el-form-item style="float:right;">
@@ -25,13 +25,13 @@
                         <el-link type="primary" :underline="false" >财务数据上传</el-link>
                     </el-upload>
             </el-form-item> -->
-            <el-form-item style="float:right;" v-if="user.role == 1 || user.role == 2 || user.role == 4">
+            <el-form-item style="float:right;" v-if="permissions.financialUpload">
                 <el-link type="primary" :underline="false" @click="importDialog = true;isUploading=false;">数据上传</el-link>
             </el-form-item>
-            <el-form-item style="float:right;" v-if="(user.role == 1 || user.role == 2 || user.role == 4)">
+            <el-form-item style="float:right;" v-if="permissions.financialExport">
                 <el-link type="primary" :underline="false" @click="exportDialog = true;exportMonth = date;">数据导出</el-link>
             </el-form-item>
-            <el-form-item style="float:right;" v-if="user.role == 1 || user.role == 2 || user.role == 4">
+            <el-form-item style="float:right;" v-if="permissions.financialCustom">
                 <el-link type="primary" :underline="false" @click="showItemDialog">自定义薪资项</el-link>
             </el-form-item>
             <el-form-item style="float:right;" v-if="(user.role == 1 || user.role == 2 || user.role == 4) && user.timeType.financeAudit == '1'">
@@ -212,7 +212,7 @@
 
             </el-form-item>
 
-            <el-form-item style="float:right;margin-right:20px;">
+            <el-form-item style="float:right;margin-right:20px;" v-if="permissions.financialShare">
                 <el-link type="primary" :underline="false" @click="exportData">导出分摊数据</el-link>
             </el-form-item>
             
@@ -477,6 +477,7 @@ import { error } from 'dingtalk-jsapi';
                 importDialog: false,
                 importParam:{syncUserCost:true, syncHistoryReport:true},
                 user: JSON.parse(sessionStorage.getItem("user")),
+                permissions: JSON.parse(sessionStorage.getItem("permissions")),
                 userDetailVisible: false,
                 userDetail:{},
                 date: null,

+ 5 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -16,9 +16,9 @@
                     </el-row>
                     <el-row :gutter="10">
                         <el-col :span="5" ><span class="gray_label">项目编号: </span></el-col><el-col :span="7" ><span >{{project.projectCode}}&nbsp;</span></el-col>
-                        <el-col :span="5" v-if="user.role>0 || user.id == project.creatorId || user.id == project.inchargerId"><span class="gray_label">合同金额:</span></el-col>
+                        <el-col :span="5" v-if="permissions.projectContract"><span class="gray_label">合同金额:</span></el-col>
                         <el-col :span="7" v-if="user.role>0 || user.id == project.creatorId || user.id == project.inchargerId">
-                        <span >{{project.contractAmount == null?'-':project.contractAmount | numberToCurrency}} 元</span></el-col>
+                        <span v-if="permissions.projectContract">{{project.contractAmount == null?'-':project.contractAmount | numberToCurrency}} 元</span></el-col>
                     </el-row>
                     <el-row :gutter="10">
                         <el-col :span="5" ><span class="gray_label">项目级别: </span></el-col><el-col :span="7" ><span >{{levelTxt[project.level]}}</span></el-col>
@@ -57,8 +57,8 @@
                         <el-button class="el-icon-plus" @click="addMembVisible=true" size="mini"></el-button>
                     </div>
                 </div>
-                <div class="box info" style="margin-top:10px;" v-if="user.id == project.creatorId || user.id == project.inchargerId || user.role > 0">
-                    <div><label>成本基线<el-link v-if="user.id == project.creatorId || user.id == project.inchargerId" @click="showEditBase" style="float:right;"><i class="el-icon-edit"  ></i></el-link></label>
+                <div class="box info" style="margin-top:10px;" v-if="permissions.projectBaseline">
+                    <div><label>成本基线<el-link v-if="permissions.projectCorrection" @click="showEditBase" style="float:right;"><i class="el-icon-edit"  ></i></el-link></label>
                     <el-row :gutter="10">
                         <div v-for="item in projectBaseCostData" :key="item.id">
                         <el-col :span="5" ><span class="gray_label">{{item.baseName}}:</span></el-col>
@@ -413,6 +413,7 @@
     export default {
         data() {
             return {
+                permissions: JSON.parse(sessionStorage.getItem("permissions")),
                 remark:null,
                 progressData:{},
                 deptMembData: [

+ 12 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -35,29 +35,30 @@
                     </el-select>
                 </el-form-item>
                 <!-- 分类条目 -->
-                <el-form-item style="float:right;"  v-if="(user.role == 1||user.role == 2||user.role == 5)">
+                <el-form-item style="float:right;"  v-if="permissions.projectClassification">
                     <el-link type="primary" :underline="false" @click="showClfDialog = true">分类管理</el-link>
                 </el-form-item>
                 <!-- 项目成本基线条目 -->
-                <el-form-item style="float:right;"  v-if="user.company.packageProject == 1 && (user.role == 1||user.role == 2||user.role == 5)">
+                <el-form-item style="float:right;"  v-if="user.company.packageProject == 1 && permissions.projectCostOfItems">
                     <el-link type="primary" :underline="false" @click="showBaseCostItemDialog">基线成本项</el-link>
                 </el-form-item>
                 
-                <el-form-item style="float:right;" v-if="user.role == 1||user.role == 2||user.role == 5">
+                <el-form-item style="float:right;" v-if="permissions.projectExport">
                     <el-link type="primary" style="margin-left:5px;" :underline="false" @click="exportProjectData" download="项目导出.xlsx">导出项目</el-link>
                 </el-form-item>
-                <el-form-item style="float:right;" v-if="user.role == 1||user.role == 2||user.role == 5">
+                <el-form-item style="float:right;" v-if="permissions.projectImport">
                     <el-link type="primary" style="margin-left:5px;" :underline="false" href="./upload/项目导入模板.xlsx" download="项目导入模板.xlsx">模板下载</el-link>
                 </el-form-item>
-                <el-form-item style="float:right;" v-if="user.role == 1||user.role == 2||user.role == 5">
+                <el-form-item style="float:right;" v-if="permissions.projectImport">
                     <el-upload ref="upload" style="margin-left:5px;" action="#" :limit="1" :http-request="importProject" :show-file-list="false">
                         <el-link type="primary" :underline="false" >导入项目</el-link>
                     </el-upload>
                 </el-form-item> 
-                <el-form-item style="float:right;" v-if="user.role == 1||user.role == 2||user.role == 5">
+                <!-- <el-form-item style="float:right;" v-if="user.role == 1||user.role == 2||user.role == 5"> -->
+                <el-form-item style="float:right;" v-if="permissions.projectNew">
                     <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">新增项目</el-link>
                 </el-form-item>
-                <el-form-item style="float:right;" v-if="user.company.packageProject==1">
+                <el-form-item style="float:right;" v-if="permissions.projectResources">
                     <!-- <router-link to="/projectGantt"> -->
                         <el-link type="primary" :underline="false" @click="isganttshow = true">资源分配</el-link>
                     <!-- </router-link> -->
@@ -148,7 +149,7 @@
                     {{scope.row.progress==null?"-":scope.row.progress}}%
                 </template>
             </el-table-column>
-            <el-table-column label="操作" width="390"  align="left" v-if="user.role == 1||user.role == 2||user.role == 5 || user.leader">
+            <el-table-column label="操作" width="390"  align="left" v-if="permissions.projectManagement">
                 <template slot-scope="scope">
                     <el-button v-if="user.role>0" size="mini"  @click="subProject(scope.row)">子项目</el-button>
                     <el-button size="mini" v-if="user.role>0 || user.id==scope.row.inchargerId" type="primary" @click="handleAdd(scope.$index, scope.row)">编辑</el-button>
@@ -626,6 +627,7 @@ a {
                 searchField:null,
                 keyword:null,
                 user: JSON.parse(sessionStorage.getItem("user")),
+                permissions: JSON.parse(sessionStorage.getItem("permissions")),
                 userDetailVisible: false,
                 userDetail:{},
                 date: new Date(),
@@ -664,7 +666,8 @@ a {
                 showClfDialog: false,
                 addClfDialog:false,
                 addClf:{name:'',id:''},
-                statusClf:null
+                statusClf:null,
+                permissionsObj: {},
             };
         },
         // 过滤器

+ 67 - 8
fhKeeper/formulahousekeeper/timesheet/src/views/quanx/quanx.vue

@@ -14,6 +14,7 @@
               </el-form-item>
               <el-form-item>
                   <el-link type="primary" :underline="false" @click="handleAdd('添加角色', '立即添加')">添加角色</el-link>
+                  <el-link type="primary" :underline="false" @click="modify()" style="margin-left: 20px;">修改默认角色</el-link>
               </el-form-item>
           </el-form>
       </el-col>
@@ -52,14 +53,18 @@
                 <!-- 分模块展示功能项 -->
                 <el-form-item>
                   <ul>
-                    <li v-for="mainMenu in moduleList" :key="mainMenu.id" style="display: flex;">
-                      <div style="width: 20px; display: inline-block;height: 10px">
+                    <!-- <li v-for="mainMenu in moduleList" :key="mainMenu.id" style="display: flex;"> -->
+                    <li v-for="mainMenu in moduleList" :key="mainMenu.id">
+                      <!-- <div style="width: 20px; display: inline-block;height: 10px"> -->
+                      <div style="display: inline-block; float: left;width: 20px;height: 10px">
                         <span v-if="mainMenu.children.length > 0" @click="dianji(mainMenu)" style="cursor:pointer;"><i :class="mainMenu.useState ? 'el-icon-caret-bottom' : 'el-icon-caret-right'"></i></span>
                       </div>
-                      <el-checkbox :label="mainMenu.name" name="type" v-model="mainMenu.checked" style="font-weight:bold;" @change="mainChange(mainMenu)"></el-checkbox>
-                      <span v-if="mainMenu.functionList && mainMenu.functionList.length > 0" style="margin-right:10px;margin-left:10px;">
-                        <!-- <div></div>(功能:  <el-checkbox v-for="fun in mainMenu.functionList" :key="fun.id" :label="fun.name" name="type" v-model="fun.checked" @change="subChanges(fun, mainMenu.id)"></el-checkbox>) -->
-                        <span class="gongn">(功能:  <el-checkbox v-for="fun in mainMenu.functionList" :key="fun.id" :label="fun.name" name="type" v-model="fun.checked"></el-checkbox>)</span>
+                      <span style="display: flex;">
+                        <el-checkbox :label="mainMenu.name" name="type" v-model="mainMenu.checked" style="font-weight:bold;width: 160px" @change="mainChange(mainMenu)"></el-checkbox>
+                        <span v-if="mainMenu.functionList && mainMenu.functionList.length > 0" style="margin-right:10px;margin-left:10px;">
+                          <!-- <div></div>(功能:  <el-checkbox v-for="fun in mainMenu.functionList" :key="fun.id" :label="fun.name" name="type" v-model="fun.checked" @change="subChanges(fun, mainMenu.id)"></el-checkbox>) -->
+                          <span class="gongn"><el-checkbox v-for="fun in mainMenu.functionList" :key="fun.id" :label="fun.name" name="type" v-model="fun.checked" style="width: 130px"></el-checkbox></span>
+                        </span>
                       </span>
                       <ul v-if="mainMenu.children && mainMenu.useState">
                         <li v-for="subMenu in mainMenu.children" :key="subMenu.id">
@@ -93,6 +98,21 @@
                 </el-form>
             </div>
         </el-dialog>
+        <!-- 修改默认角色弹窗 -->
+        <el-dialog title="默认角色" :visible.sync="defaultRole" width="400px" :before-close="handleClose">
+            <div>
+              <el-form label-width="80px">
+                <el-form-item label="默认角色">
+                  <el-select v-model="roleId" placeholder="请选择默认角色" @change="getUser()">
+                      <el-option v-for="item in auseList" :key="item.id" :label="item.rolename" :value="item.id"></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-form>
+            </div>
+            <span slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="determine()">确 定</el-button>
+            </span>
+        </el-dialog>
   </div>
 </template>
 
@@ -123,7 +143,9 @@ export default {
         titles: '',
         addTil: '立即添加',
         keyword: '',
-        auseList: []
+        auseList: [],
+        defaultRole: false,
+        roleId: ''
     };
   },
   computed: {},
@@ -143,6 +165,43 @@ export default {
     // this.shisha()
   },
   methods: {
+      // 默认角色点击确定
+      determine() {
+        this.http.post('/permission/setDefaultRole', {
+          companyId: this.user.companyId,
+          id: this.roleId
+        },
+        res => {
+            if (res.code == "ok") {
+                this.$message({
+                    message: '操作成功',
+                    type: "success"
+                });
+                this.defaultRole = false
+                this.getRole()
+            } else {
+                this.$message({
+                    message: res.msg,
+                    type: "error"
+                });
+            }
+        },
+        error => {
+            this.$message({
+                message: error,
+                type: "error"
+            });
+        });
+      },
+      // 默认角色
+      modify() {
+        for(var i in this.auseList) {
+          if(this.auseList[i].isDefault == '1') {
+            this.roleId = this.auseList[i].id
+          }
+        }
+        this.defaultRole = true
+      },
       // 模糊匹配
       mohu() {
         console.log(this.keyword)
@@ -396,6 +455,6 @@ export default {
   }
   .gongn {
     display: inline-block;
-    width: 550px;
+    width: 500px;
   }
 </style>

+ 141 - 24
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -51,10 +51,10 @@
                     <el-form-item>
                         <div style="color:#999;font-size:13px;">共{{total}}人</div>
                     </el-form-item>
-                    <el-form-item style="float:right;">
+                    <el-form-item style="float:right;" v-if="permissions.structureExport">
                         <el-link type="primary" :underline="false" @click="showExportDialog">导出人员</el-link>
                     </el-form-item>
-                    <el-form-item style="float:right;" v-if="!isDingShow">
+                    <el-form-item style="float:right;" v-if="!isDingShow && permissions.structureAdd">
                         <el-link type="primary" :underline="false" @click="openInsertDialog(null)">添加人员</el-link>
                     </el-form-item>
                     <!-- 原来的 -->
@@ -63,13 +63,13 @@
                             <el-link type="primary" :underline="false">批量导入</el-link>
                         </el-upload>
                     </el-form-item> -->
-                    <el-form-item style="float:right;" v-if="!isDingShow">
+                    <el-form-item style="float:right;" v-if="!isDingShow && permissions.structureImport">
                         <el-upload ref="upload" action="#" :limit="1" :http-request="importUser" :show-file-list="false">
                             <el-link type="primary" :underline="false">批量导入</el-link>
                         </el-upload>
                     </el-form-item>
 
-                    <el-form-item style="float:right;" v-if="!isDingShow">
+                    <el-form-item style="float:right;" v-if="!isDingShow && permissions.structureImport">
                         <el-link type="primary" :underline="false" href="./upload/人员导入模板.xlsx" download="人员导入模板.xlsx">模板下载</el-link>
                     </el-form-item>
                     <!-- <el-form-item  v-if="depData != null && depData.id != -1 && depData.id != 0" style="float:right;border: 0.5px solid #20a0ff;height: 27px;margin-top: 6px;">
@@ -82,13 +82,14 @@
                     </el-form-item> -->
                     <el-form-item style="float:right;">
                         <span style="color: #666666">角色</span>
-                        <el-select v-model="role" placeholder="请选择" @change="getUser()" style="width: 120px">
-                            <el-option
+                        <el-select v-model="roleId" placeholder="请选择" @change="getUser()" style="width: 120px" clearable>
+                            <!-- <el-option
                             v-for="item in rolesa"
                             :key="item.value"
                             :label="item.label"
                             :value="item.value">
-                            </el-option>
+                            </el-option> -->
+                            <el-option v-for="item in acquireRoleList" :key="item.id" :label="item.rolename" :value="item.id"></el-option>
                         </el-select>
                     </el-form-item>
                     <el-form-item style="float:right;">
@@ -124,17 +125,17 @@
                 <el-table-column prop="phone" label="手机" width="120"></el-table-column>
                 <el-table-column prop="departmentName" label="部门" sortable></el-table-column>
                 <el-table-column label="角色" width="100">
-                    <template slot-scope="scope">{{roleArray[scope.row.role]}}</template>
+                    <template slot-scope="scope">{{scope.row.roleId | acquireRoleName}}</template>
                 </el-table-column>
-                <el-table-column prop="monthCost" label="月成本" sortable>
+                <el-table-column prop="monthCost" label="月成本" sortable v-if="permissions.structurePersonnel">
                     <template slot-scope="scope">{{scope.row.monthCost==null?0:scope.row.monthCost}} 元</template>
                 </el-table-column>
-                <el-table-column prop="cost" label="时薪" sortable>
+                <el-table-column prop="cost" label="时薪" sortable v-if="permissions.structurePersonnel">
                     <template slot-scope="scope">{{scope.row.cost==null?0:scope.row.cost}} 元
                         <el-link @click.native="showSalaryList(scope.row)"><i class="iconfont firerock-iconrecord"></i></el-link>
                     </template>
                 </el-table-column>
-                <el-table-column label="操作" width="330">
+                <el-table-column label="操作" width="330" v-if="permissions.structurePersonnel">
                     <template slot-scope="scope">
                         <!-- <el-button size="small" v-if="scope.row.role == 0 && user.role == 1" @click="switchRole(scope.$index)">切换为管理员</el-button>
                         <el-button size="small" v-if="scope.row.role == 2 && user.role == 1" @click="switchRole(scope.$index)">切换为员工</el-button> -->
@@ -158,6 +159,7 @@
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn2">修改</el-button> -->
                     
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn3">批量修改部门</el-button>
+                <el-button size="small" type="primary" @click="handJue">批量修改角色</el-button>
                
                 
                 
@@ -189,6 +191,21 @@
             </div>
         </el-dialog>
 
+        <!-- 批量修改角色弹出框 -->
+        <el-dialog title="批量修改" :visible.sync="handljues" v-if="handljues" width="30%">
+            <el-form model="" label-width="20%">
+                <el-form-item label="修改角色">
+                    <el-select v-model="xiuRoleId" placeholder="请选择" style="width: 120px" clearable>
+                        <el-option v-for="(item, index) in acquireRoleLists" :key="index" :label="item.rolename" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="handljues = false">取消</el-button>
+                <el-button type="primary" @click="handTrue">确定</el-button>
+            </div>
+        </el-dialog>
+
         <!-- 新增部门 -->
         <el-dialog :title="depTitle" :visible.sync="departmentVisible" width="400px" >
             <el-form ref="depForm" :model="depForm" :rules="depRules" label-width="80px">
@@ -246,8 +263,8 @@
                     <el-cascader v-model="insertForm.departmentId" placeholder="请选择部门" style="width: 100%"
                     :options="option" :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false" clearable></el-cascader>
                 </el-form-item>
-                <el-form-item label="角色" prop="role">
-                    <el-select v-model="insertForm.role" placeholder="请选择角色" style="width: 100%">
+                <el-form-item label="角色" prop="roleId">
+                    <el-select v-model="insertForm.roleId" placeholder="请选择角色" style="width: 100%">
                         <!-- <el-option label="普通员工" :value="0">
                             <span style="float: left">普通员工</span>
                             <span style="float: right; color: #8492a6; font-size: 13px">具有填报日报,参与项目协作基础功能</span>
@@ -259,9 +276,13 @@
                         <el-option label="公司高层" :value="3"></el-option>
                         <el-option label="财务管理员" :value="4"></el-option>
                         <el-option label="项目管理员" :value="5"></el-option> -->
-                        <el-option v-for="item in roleDescArray" :label="item.label" :disabled="item.value==2&&user.role != 1" :value="item.value" :key="item.name">
+                        <!-- <el-option v-for="item in roleDescArray" :label="item.label" :disabled="item.value==2&&user.role != 1" :value="item.value" :key="item.name">
                             <span style="float: left">{{item.label}}</span>
                             <span style="float: right; color: #8492a6; font-size: 13px">{{item.desc}}</span>
+                        </el-option> -->
+                        <el-option v-for="item in acquireRoleList" :label="item.rolename" :disabled="item.value==2&&user.role != 1" :value="item.id" :key="item.name">
+                            <span style="float: left">{{item.rolename}}</span>
+                            <span style="float: right; color: #8492a6; font-size: 13px">{{item.roleDescribe}}</span>
                         </el-option>
                     </el-select>
                 </el-form-item>
@@ -389,11 +410,14 @@
 
 <script>
     import util from "../../common/js/util";
+    let that
     export default {
         data() {
             return {
+                permissions: JSON.parse(sessionStorage.getItem("permissions")),
                 isDingShow : false,
                 handleSelectionZzjgshow: false,
+                handljues: false,
                 submitLoading:false,
                 deactiveUser:null,
                 deactiveDate:null,
@@ -450,7 +474,8 @@
                     id: null,
                     name: null,
                     phone: null,
-                    role: null,
+                    // role: null,
+                    roleId: null,
                     monthCost:null,
                     cost: null,
                     departmentId: null,
@@ -460,7 +485,8 @@
                 rules: {
                     name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
                     // phone: [{ required: true, message: "请输入电话", trigger: "blur" }],
-                    role: [{ required: true, message: "请选择角色", trigger: "blur" }],
+                    // role: [{ required: true, message: "请选择角色", trigger: "blur" }],
+                    roleId: [{ required: true, message: "请选择角色", trigger: "blur" }],
                     cost: [{ required: true, message: "请输入成本", trigger: "blur" }],
                     monthCost:[{ required: true, message: "请输入月成本", trigger: "blur" }]
                 },
@@ -513,11 +539,26 @@
                 role: '',
                 jDarr: [],
                 handleSelectionZzjgDate:[],
-                handleSelectionZzjgwillchange : null
+                handleSelectionZzjgwillchange : null,
+                acquireRoleList: [], // 角色列表
+                acquireRoleLists: [], // 没有超级管理员
+                roleId: '',
+                xiuRoleId: ''
             };
         },
+        filters: {
+            acquireRoleName(value) {
+                for(var i in that.acquireRoleList) {
+                    if(that.acquireRoleList[i].id == value) {
+                        return that.acquireRoleList[i].rolename
+                    }
+                }
+            }
+        },
+        beforeCreate: function () {
+            that = this;
+        },
         methods: {
-
             // 批量修改部门
             handleSelectionZzjg(e){
                 // if (e.length == 0) {
@@ -586,7 +627,46 @@
                 }
                 this.handleSelectionZzjgshow = true
             },
-
+            handJue() {
+                if(this.handleSelectionZzjgDate.length == 0){
+                    this.$message('请选择');
+                    return
+                }
+                this.xiuRoleId = this.acquireRoleList[0].id
+                this.handljues = true
+                console.log('触发了')
+            },
+            handTrue() {
+                var arr = []
+                for(var i in this.handleSelectionZzjgDate) {
+                    arr.push(this.handleSelectionZzjgDate[i].id)
+                }
+                this.http.post('/user/batchUpdateRole', {
+                    userIds: JSON.stringify(arr),
+                    roleId: this.xiuRoleId
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.$message({
+                            message: '操作成功',
+                            type: "success"
+                        });
+                        this.handljues = false
+                        this.getUser()
+                    } else {
+                        this.$message({
+                        message: res.msg,
+                        type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
 
             deleteUser(targetUser) {
                 this.$confirm("确定要删除该员工吗?", "提示", {
@@ -928,7 +1008,8 @@
                     pageSize: this.size,
                     keyword: this.keyword,
                     status: this.status,
-                    role: this.role
+                    // role: this.role
+                    roleId: this.roleId
                 },
                 res => {
                     this.listLoading = false;
@@ -1002,7 +1083,8 @@
                         id: list.id,
                         name: list.name,
                         phone: list.phone,
-                        role: list.role,
+                        // role: list.role,
+                        roleId: list.roleId,
                         monthCost:list.monthCost,
                         cost: list.cost,
                         departmentId: array.reverse(),
@@ -1016,7 +1098,8 @@
                         id: null,
                         name: null,
                         phone: null,
-                        role: null,
+                        // role: null,
+                        roleId: null,
                         monthCost:null,
                         cost: null,
                         departmentId: null,
@@ -1036,7 +1119,8 @@
                         form = {
                             name: this.insertForm.name,
                             phone: this.insertForm.phone,
-                            role: this.insertForm.role,
+                            // role: this.insertForm.role,
+                            roleId: this.insertForm.roleId,
                             monthCost: this.insertForm.monthCost,
                             cost: this.insertForm.cost,
                             salaryType: this.insertForm.salaryType,
@@ -1186,7 +1270,8 @@
                             id: this.insertForm.id,
                             name: this.insertForm.name,
                             phone: this.insertForm.phone,
-                            role: this.insertForm.role,
+                            // role: this.insertForm.role,
+                            roleId: this.insertForm.roleId,
                             monthCost: this.insertForm.monthCost,
                             cost: this.insertForm.cost
                         };
@@ -1533,6 +1618,37 @@
                         type: "error"
                     });
                 });
+            },
+            // 获取角色
+            acquireRole() {
+                // this.http.post('/permission/getFrontRoleList', {
+                this.http.post('/permission/getFrontRoleList', {
+                    companyId: this.user.companyId
+                },
+                res => {
+                    if (res.code == "ok") {
+                        console.log(res.data, '获取角色')
+                        this.acquireRoleList = res.data
+                        var arr = []
+                        for(var i in res.data) {
+                            if(res.data[i].rolename != '系统管理员') {
+                                arr.push(res.data[i])
+                            }
+                        }
+                        this.acquireRoleLists = arr
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
             }
         },
 
@@ -1550,6 +1666,7 @@
             this.getUser();
             this.getCompanyTimeSetting();
             this.getUsers();
+            this.acquireRole();
             this.isDingShow = this.$store.state.isDing;
         }
     };

+ 3 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -83,7 +83,8 @@
                         <span style="float:right;">
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
                             <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
-                            <el-link type="primary" v-if="user.role==1||user.role==2||user.leader==1||user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link>
+                            <!-- <el-link type="primary" v-if="user.role==1||user.role==2||user.leader==1||user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link> -->
+                            <el-link type="primary" v-if="permissions.reportsFillOut" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link>
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
                             <el-link type="primary" v-if="user.role==1||user.role==2||user.role==6||user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="imports()">工时导入</el-link>
                             <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
@@ -1168,6 +1169,7 @@
                 checkinLoading:false,
                 importWxParam:{date:null,},
                 active:0,
+                permissions: JSON.parse(sessionStorage.getItem("permissions")),
                 importWxDialog:false,
                 importDialog:false,
                 denyForm:null,