Bladeren bron

2022.5.17 18.42

山水共长天一色 3 jaren geleden
bovenliggende
commit
9392f93666

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -1,18 +1,18 @@
 var path = require('path')
 
 //  var ip = '127.0.0.1'
-var ip = '192.168.2.36'
+// var ip = '192.168.2.36'
 // var ip = '192.168.2.12'// var ip = '47.100.37.243' 
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 module.exports = {
   build: {

+ 156 - 43
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -191,8 +191,16 @@
                 <el-table :data="tableList" style="width: 100%" height="90%">
                     <el-table-column prop="ownerName" label="出差人员" width="100" fixed="left" align="center"></el-table-column>
                     <el-table-column prop="reason" label="出差事由" width="150" header-align="center"></el-table-column>
-                    <el-table-column prop="projectName" label="投入项目" width="150" align="center"></el-table-column>
-                    <el-table-column prop="degreeName" :label="wuduData.customDegreeName" width="150" align="center"></el-table-column>
+                    <el-table-column prop="projectName" label="投入项目" width="150" align="center" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <span v-for="item in scope.row.projectList" :key="item.projectId">{{item.projectName + ','}}</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="degreeName" :label="wuduData.customDegreeName" width="150" align="center" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <span v-for="item in scope.row.projectList" :key="item.projectId">{{item.degreeName == null ? '' : item.degreeName + ','}}</span>
+                        </template>
+                    </el-table-column>
                     <el-table-column label="交通工具" width="120" align="center">
                         <template slot-scope="scope">
                             <span v-if="scope.row.way == 0">飞机</span>
@@ -525,10 +533,14 @@
     <!-- 钉钉环境交互效果切换 -->
     <el-dialog title="项目关联信息" v-if="DingdingEditDialog" :close-on-click-modal="false" :visible.sync="DingdingEditDialog" width="800px" customClass="customWidth">
         
-        <el-table data="" :loading="DingdingTableLoading">
-            <el-table-column label="时间段"></el-table-column>
-            <el-table-column label="关联项目"></el-table-column>
-            <el-table-column :label="wuduData.customDegreeName"></el-table-column>
+        <el-table :data="relationList" :loading="DingdingTableLoading">
+            <el-table-column label="时间段">
+                <template slot-scope="scope">
+                    <span>{{scope.row.startDate + '至' + scope.row.endDate}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="关联项目" prop="projectName" show-overflow-tooltip></el-table-column>
+            <el-table-column :label="wuduData.customDegreeName" prop="degreeName" show-overflow-tooltip></el-table-column>
             <el-table-column label="操作" width="150">
                 <template slot-scope="scope">
                     <el-button size="small" type="primary" @click="DingdingAddorMod(scope.row)">编辑</el-button>
@@ -541,28 +553,48 @@
             <el-button type="primary" @click="DingdingAddorMod()">新增关联项目</el-button>
         </div>
 
-        <el-dialog append-to-body title="新增/修改关联项目" v-if="appendAddorModDialog" :visible.sync="appendAddorModDialog" width="600px" customClass="customWidth">
-            <el-form label-width="100" :inline="true" style="margin-top:20px">
-                <el-form-item label="开始日期">
+        <el-dialog append-to-body title="新增/修改关联项目" v-if="appendAddorModDialog" :visible.sync="appendAddorModDialog" width="700px" customClass="customWidth">
+            <el-form label-width="100" :inline="true" style="margin-top:20px" :model="relationItem" :rules="relationItemRules" ref="relationItemForm">
+                <el-form-item label="开始日期" prop="startDate">
                     <el-date-picker
-                    style="width:150px"
+                    style="width:220px"
                     v-model="relationItem.startDate"
+                    value-format="yyyy-MM-dd"
                     type="date"
+                    @change="datechg3(1)"
                     placeholder="请选择日期"></el-date-picker>
                 </el-form-item>
-                <el-form-item label="结束日期" style="margin-left:50px">
+                <el-form-item label="结束日期" prop="endDate" style="margin-left:35px">
                     <el-date-picker
-                    style="width:150px"
+                    style="width:220px"
                     v-model="relationItem.endDate"
+                    value-format="yyyy-MM-dd"
                     type="date"
+                    @change="datechg3(0)"
                     placeholder="请选择日期"></el-date-picker>
                 </el-form-item><br>
-                <el-form-item label="关联项目"></el-form-item>
-                <el-form-item label="自定义维度" style="margin-left:50px"></el-form-item>
+                <el-form-item label="关联项目" prop="projectId">
+                    <el-select v-model="relationItem.projectId" placeholder="请选择项目" @change="getwuduList(2)" style="width:220px">
+                        <el-option
+                        v-for="item in projectList"
+                        :key="item.id"
+                        :value="item.id"
+                        :label="item.projectName"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item :label="wuduData.customDegreeName" prop="degreeId" style="margin-left:44.5px">
+                    <el-select v-model="relationItem.degreeId" :placeholder="'请选择' + wuduData.customDegreeName" style="width:220px">
+                        <el-option
+                        v-for="item in wuduList"
+                        :key="item.id"
+                        :value="item.id"
+                        :label="item.name"></el-option>
+                    </el-select>
+                </el-form-item>
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button @click="appendAddorModDialog = false">取消</el-button>
-                <el-button type="primary" @click="appendAddorModSure()">提交</el-button>
+                <el-button type="primary" @click="appendAddorModSure('relationItemForm')">提交</el-button>
             </div>
         </el-dialog>
     </el-dialog>
@@ -683,13 +715,20 @@ export default {
             DingdingEditDialog: false,
             DingdingTableLoading: false,
             appendAddorModDialog: false,
+            relationList: [],
             relationItem: {
-                bustripId: '', //出差记录id
-                startDate: '',
-                endDate: '',
-                projectId: '',
-                degreeId: ''
-            }
+                bustripId: null, //出差记录id
+                startDate: null,
+                endDate: null,
+                projectId: null,
+                degreeId: null
+            },
+            relationItemRules: {
+                startDate:[{required: true,message: '请选择开始日期',trigger: 'change'}],
+                endDate:[{required: true,message: '请选择结束日期',trigger: 'change'}],
+                projectId:[{required: true,message: '请选择要关联的项目',trigger: 'change'}],
+            },
+            relationItemTemporaryDate: {}
         }
     },
     created(){
@@ -717,14 +756,24 @@ export default {
     methods: {
         // 钉钉环境交互
         DingdingEditor(e){
+            console.log(e);
             this.DingdingEditDialog = true
+            this.relationItem.bustripId = e.id
+            this.relationItemTemporaryDate = {
+                startDate: e.startDate,
+                endDate: e.endDate
+            }
+            this.getRelationList()
+        },
+        getRelationList(){
             this.DingdingTableLoading = true
             this.http.post('/bustrip-project/list',{
-                bustripId: e.id
+                bustripId: this.relationItem.bustripId
             },res => {
                 if(res.code == 'ok'){
                     this.DingdingTableLoading = false
                     console.log('getlist',res.data);
+                    this.relationList = res.data
                 }else {
                     this.DingdingTableLoading = false
                     this.$message({
@@ -740,30 +789,77 @@ export default {
                 })
             })
         },
-        DingdingAddorMod(){
+        DingdingAddorMod(row){
             this.appendAddorModDialog = true
-            
+            if(row == null){
+                this.relationItem.startDate = this.relationItemTemporaryDate.startDate
+                this.relationItem.endDate = this.relationItemTemporaryDate.endDate
+                this.relationItem.projectId = null
+                this.relationItem.degreeId = null
+            }else {
+                this.relationItem.id = row.id
+                this.relationItem.projectId = row.projectId
+                this.getwuduList(2,1)
+                this.relationItem.startDate = row.startDate
+                this.relationItem.endDate = row.endDate
+                this.relationItem.degreeId = row.degreeId == null ? row.degreeId : row.degreeId.toString()
+                // console.log('degreeId',this.relationItem.degreeId);
+                
+            }
         },
-        appendAddorModSure(){
-            this.http.post('/bustrip-project/addOrMod',{
-                bustripId: '', //出差记录id
-                startDate: '',
-                endDate: '',
-                projectId: '',
-                degreeId: ''
-            },res => {
-                if(res.code == 'ok'){
-
+        appendAddorModSure(formname){
+            this.$refs[formname].validate((valid)=>{
+                if(valid){
+                    this.http.post('/bustrip-project/addOrMod',this.relationItem,
+                        res => {
+                            if(res.code == 'ok'){
+                                this.appendAddorModDialog = false
+                                this.getRelationList()
+                            }else {
+                                this.$message({
+                                    message: res.msg,
+                                    type: 'error'
+                                })
+                            }
+                        },err => {
+                            this.$message({
+                                message: err,
+                                type: 'error'
+                            })
+                        })
                 }else {
+                    return false
+                }
+            })
+            
+        },
+        DingdingDelete(row){
+            console.log('row',row);
+            this.$confirm('是否确认删除?','提示',{
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(()=>{
+                this.http.post('/bustrip-project/delete',{
+                    id:row.id
+                },res => {
+                    if(res.code == 'ok'){
+                        // this.$message({
+                        //     message: '删除成功',
+                        //     type: 'success'
+                        // })
+                        this.getRelationList()
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
                     this.$message({
-                        message: res.msg,
+                        message: err,
                         type: 'error'
                     })
-                }
-            },err => {
-                this.$message({
-                    message: err,
-                    type: 'error'
                 })
             })
         },
@@ -945,6 +1041,18 @@ export default {
                     this.editItemForm.dayCount = null
                 }
         },
+        datechg3(e){
+            if(this.relationItem.endDate != null && this.relationItem.startDate != null){
+                    let days = this.autoCountDay(this.relationItem.startDate,this.relationItem.endDate)
+                    if(days <= 0){
+                        if(e){
+                            this.relationItem.endDate = this.relationItem.startDate
+                        }else{
+                            this.relationItem.startDate = this.relationItem.endDate
+                        }
+                    }
+                }
+        },
         // 自动计算天数
         autoCountDay(st,ed){
             let differDay = new Date(ed).getTime() - new Date(st).getTime()
@@ -1387,7 +1495,7 @@ export default {
                 res => {
                     if (res.code == "ok") {
                         this.projectList = res.data;
-                        // console.log("项目列表",this.projectList);
+                        console.log("项目列表",this.projectList);
                     } else {
                         this.$message({
                             message: res.msg,
@@ -1419,6 +1527,12 @@ export default {
                     }
                     var pId = this.editItemForm.projectId
                 }else{
+                    if(i != 1){this.relationItem.degreeId = null}
+                    
+                    if(this.relationItem.projectId == '' || this.relationItem.projectId == null){
+                        return
+                    }
+                    var pId = this.relationItem.projectId
                     // if(i == 1){
                     //     this.DingdingForm.degreeId = null
                     // }
@@ -1433,9 +1547,8 @@ export default {
                 },
                 res => {
                     if (res.code == "ok") {
-                        // console.log("维度数据",res.data);
+                        console.log("维度数据",res.data[0].id);
                         this.wuduList = res.data
-                        this.$forceUpdate()
                     } 
                 },
                 error => {

+ 11 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -22,18 +22,20 @@
                     <el-option v-for="item in times" :key="item" :label="item.toFixed(1)" :value="item"></el-option>
                 </el-select>
                 小时
-                <span class="lockworktime">锁定工作时长
-                <el-switch v-model="timeType.lockWorktime" :active-value="1" :inactive-value="0" active-color="#13ce66" inactive-color="#ff4949" style="margin:0 10px;"></el-switch>
+                <span class="lockworktime"><el-checkbox v-model="timeType.lockWorktime" label="锁定工作时长" />
                 
                 <el-tooltip effect="dark" content="锁定每日填报工时的上限" placement="top-start">
                     <i class="el-icon-question" style="color:#606266"></i>
                 </el-tooltip>
                 </span>
             </el-form-item><br>
-            <el-form-item label="加班设置" prop="allday">
+            <el-form-item label="加班设置" prop="allday" v-if="!timeType.lockWorktime">
+                <el-checkbox v-model="timeType.fillOvertime" label="可填报加班时长" />
+                <template v-if="timeType.fillOvertime">
                 <el-checkbox v-model="timeType.payOvertime" label="加班工时记入成本" />
-                <!-- <el-checkbox v-model="timeType.doubleOvertime" label="加班双倍成本" :disabled="!timeType.payOvertime"/> -->
+                <!-- <el-checkbox v-model="timeType.doubleOvertime" label="加班双倍成本" :disabled="!timeType.payOvertime"/> -->`
                 <el-input v-model="timeType.overtimeRatio" placeholder="" clearable style="width: 100px;margin: 0 10px 0 20px" v-if="timeType.payOvertime" @keyup.native="timeType.overtimeRatio = oninput(timeType.overtimeRatio, 1)"></el-input> <span v-if="timeType.payOvertime">倍工资</span>
+                </template>
             </el-form-item>
             </el-form>
             
@@ -369,7 +371,7 @@
                     monthDays: 21.75,
                     pm: 4,
                     type: 0,
-                    lockWorktime: 0
+                    lockWorktime: true
                 },
                 customDegreeActive: false,
                 needDeptAudit: false,
@@ -704,6 +706,8 @@
                         } else {
                             param.customTextActive = 0
                         }
+                        param.fillOvertime = param.fillOvertime ? 1 : 0
+                        param.lockWorktime = param.lockWorktime ? 1 : 0
                         if(param.payOvertime) {
                             if(param.overtimeRatio == 0 || param.overtimeRatio == '') {
                                 this.$message({
@@ -753,6 +757,8 @@
                         this.listLoading = false;
                         if (res.code == "ok") {
                             this.timeType = res.data;
+                            this.timeType.fillOvertime = this.timeType.fillOvertime ? true : false
+                            this.timeType.lockWorktime = this.timeType.lockWorktime ? true : false
                             this.timeChange();
                         } else {
                             this.$message({

+ 41 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -19,7 +19,7 @@
                          @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份"></el-date-picker>
                          <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini"  @click="showWorkTime"></el-button>
                     </div> -->
-                        <span v-for="(item,index) in allDate" :id="'day'+index" :class="index==choseDay?'chooseDate date_item':'date_item'" 
+                        <span v-for="(item,index) in allDate" :id="'day'+index" :class="index==choseDay?'chooseDate date_item':'date_item'"
                         @click="choseDate(index, item)" :key="index" style="padding:0 6px;display: inline-block;width: 46px;text-align: center;">
                         <div :style="'display:inline-block;text-align: center;'+(item.state == null?'':'')" >
                             <div style="text-align:center;position:relative;"><span>{{item.showDate}}</span>
@@ -308,7 +308,7 @@
                             @change="iptChang()">
                         </el-time-picker>
                         </span>
-                        <div class="overtime">
+                        <div class="overtime" v-if="user.timeType.fillOvertime">
                             <el-checkbox :disabled="!canEdit" v-model="domain.isOvertime">加班</el-checkbox>
                             <el-input :disabled="!canEdit || domain.isOvertime==null || domain.isOvertime==0" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">小时</span>
                         </div>
@@ -389,7 +389,7 @@
                             <el-col span="14"><el-slider :disabled="!canEdit" v-model="domain.progress" :min="10" :show-tooltip="false" :step="10" style="width:180px;" @input="domain.workingTime = (reportTimeType.allday*domain.progress/100).toFixed(1)" @change="seleChn(0)"></el-slider></el-col>
                             <el-col span="10"><span style="margin-left:10px;float:right;"><span style="margin-right:10px;">{{domain.progress}}%</span>{{domain.workingTime}}小时</span></el-col>
                         </div>
-                        <div class="overtime"><el-checkbox :disabled="!canEdit" v-model="domain.isOvertime">加班</el-checkbox>
+                        <div class="overtime" v-if="user.timeType.fillOvertime"><el-checkbox :disabled="!canEdit" v-model="domain.isOvertime">加班</el-checkbox>
                         <el-input :disabled="!canEdit || domain.isOvertime==null || domain.isOvertime==0" v-model="domain.overtimeHours"  @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">小时</span>
                         </div>
                     </el-form-item>
@@ -438,7 +438,7 @@
                                 <i class="fa fa-trash" style="color: red;;font-size:18px;"></i>
                             </el-link>
 
-                            <div class="overtime"><el-checkbox :disabled="!canEdit" v-model="domain.isOvertime">加班</el-checkbox>
+                            <div class="overtime" v-if="user.timeType.fillOvertime"><el-checkbox :disabled="!canEdit" v-model="domain.isOvertime">加班</el-checkbox>
                             <el-input :disabled="!canEdit || domain.isOvertime==null || domain.isOvertime==0" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">小时</span>
                             </div>
                             
@@ -1838,6 +1838,7 @@
                     }
                 }
                 this.jsTime = quanbu
+
             },
             removeTimeItem(item, index) {
                 item.worktimeList.splice(index, 1);
@@ -3157,6 +3158,39 @@
 
             // 选择日期
             choseDate(i, item) {
+                
+                let nowDate = new Date()
+                let nowDateYear = nowDate.getFullYear()
+                let itemYear = parseInt(this.date.split('-')[0])
+                let nowDateMonth = nowDate.getMonth() + 1
+                let itemMonth = parseInt(this.date.split('-')[1])
+                let nowDateDay = nowDate.getDate()
+                let itemDay = parseInt(item.showDate.split('.')[1])
+                if(nowDateYear < itemYear){
+                    this.$message({
+                        message: '无法填报',
+                        type: 'warning'
+                    })
+                    return
+                }else if(nowDateYear == itemYear){
+                    if(nowDateMonth < itemMonth){
+                        this.$message({
+                            message: '无法填报',
+                            type: 'warning'
+                        })
+                        return
+                    }else if(nowDateMonth == itemMonth){
+                        if(nowDateDay < itemDay){
+                            this.$message({
+                                message: '无法填报',
+                                type: 'warning'
+                            })
+                            return
+                        }
+                    }
+                }
+
+                console.log(nowDateYear,nowDateMonth,nowDateDay,'..',itemYear,itemMonth,itemDay);
                 this.choseDay = i;
                 let day = (this.choseDay +1)> 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
                 sessionStorage.msg = this.date + day,
@@ -4781,6 +4815,9 @@
             this.getDepartment();
             this.scrollFunction()
             this.userssHu();
+            if(this.user.timeType.lockWorktime){
+                this.timeRange = this.timeRange.filter(item => {return item <= this.user.timeType.allday})
+            }
         }
     };
 </script>