|
@@ -1,43 +1,42 @@
|
|
|
-{{ src/App.vue }}
|
|
|
<template>
|
|
|
<div class="container">
|
|
|
<div class="gantt_head">
|
|
|
<div class="head_RorX">
|
|
|
|
|
|
<el-radio-group v-model="radio1" @change="selChange()" size="small" style="margin-right:9px;width:280px">
|
|
|
- <el-radio-button label="按人员查看" value="renyuan"></el-radio-button>
|
|
|
- <el-radio-button label="按项目查看" value="xiangmu"></el-radio-button>
|
|
|
- <el-radio-button label="资源需求" value="demand"></el-radio-button>
|
|
|
+ <el-radio-button :label="$t('an-ren-yuan-cha-kan')" value="renyuan"></el-radio-button>
|
|
|
+ <el-radio-button :label="$t('an-xiang-mu-cha-kan')" value="xiangmu"></el-radio-button>
|
|
|
+ <el-radio-button :label="$t('zi-yuan-xu-qiu')" value="demand"></el-radio-button>
|
|
|
</el-radio-group>
|
|
|
|
|
|
</div>
|
|
|
<!-- 时间段筛选 -->
|
|
|
<div class="head_date" v-if="isDataLoaded">
|
|
|
- <span>时间段</span>
|
|
|
+ <span>{{ $t('message.period') }}</span>
|
|
|
<el-date-picker
|
|
|
style="margin-left:9px;width:17vw"
|
|
|
size="small"
|
|
|
v-model="valueDate"
|
|
|
type="daterange"
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
+ :range-separator="$t('other.to')"
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
|
value-format="yyyy-MM-dd"
|
|
|
@change="dateupdata()">
|
|
|
</el-date-picker>
|
|
|
</div>
|
|
|
<!-- 任务类型筛选 -->
|
|
|
- <div v-if="radio1 == '按项目查看'" class="head_taskType">
|
|
|
- <span>任务类型</span>
|
|
|
- <el-select clearable filterable v-model="taskType" placeholder="请选择" size="small" style="margin-left:9px;width:10vw" @change="taskTypeSel()">
|
|
|
- <el-option label="任务" :value="0"></el-option>
|
|
|
- <el-option label="里程碑" :value="1"></el-option>
|
|
|
+ <div v-if="radio1 == $t('an-xiang-mu-cha-kan')" class="head_taskType">
|
|
|
+ <span>{{ $t('ren-wu-lei-xing') }}</span>
|
|
|
+ <el-select clearable filterable v-model="taskType" :placeholder="$t('defaultText.pleaseChoose')" size="small" style="margin-left:9px;width:10vw" @change="taskTypeSel()">
|
|
|
+ <el-option :label="$t('other.task')" :value="0"></el-option>
|
|
|
+ <el-option :label="$t('other.milestone')" :value="1"></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<!-- 任务分组筛选 -->
|
|
|
<div v-if="reqpar1" class="head_taskgroup">
|
|
|
- <span>任务分组</span>
|
|
|
- <el-select clearable filterable v-model="valuex2" placeholder="请选择" size="small" style="margin-left:9px;width:10vw" @change="taskgroupSel()">
|
|
|
+ <span>{{ $t('other.taskGroup') }}</span>
|
|
|
+ <el-select clearable filterable v-model="valuex2" :placeholder="$t('defaultText.pleaseChoose')" size="small" style="margin-left:9px;width:10vw" @change="taskgroupSel()">
|
|
|
<el-option
|
|
|
v-for="item in taskgroupList"
|
|
|
:key="item.name"
|
|
@@ -49,8 +48,8 @@
|
|
|
</div>
|
|
|
<!-- 人员/项目筛选 -->
|
|
|
<div class="head_select">
|
|
|
- <span>{{(this.radio1 == "按人员查看" ? "人员" : "项目")}}</span>
|
|
|
- <el-select clearable filterable v-model="valuex" placeholder="请选择" size="small" style="margin-left:9px;width:10vw" @change="optupdata()">
|
|
|
+ <span>{{(this.radio1 == $t('an-ren-yuan-cha-kan') ? $t('ren-yuan') : $t('other.project'))}}</span>
|
|
|
+ <el-select clearable filterable v-model="valuex" :placeholder="$t('defaultText.pleaseChoose')" size="small" style="margin-left:9px;width:10vw" @change="optupdata()">
|
|
|
<el-option
|
|
|
v-for="item in screenList"
|
|
|
:key="item.id"
|
|
@@ -65,13 +64,13 @@
|
|
|
<!-- 资源需求导入/导出 -->
|
|
|
<div class="head_files" v-if="!isDataLoaded">
|
|
|
<div style="margin-left:10px;float:left;">
|
|
|
- <el-link type="primary" :underline="false" href="./upload/资源需求导入模板.xlsx" download="资源需求导入模板.xlsx">模板下载</el-link>
|
|
|
+ <el-link type="primary" :underline="false" :href="'./upload/'+$t('zi-yuan-xu-qiu-dao-ru-mo-ban')+'.xlsx'" download="资源需求导入模板.xlsx">{{ $t('Downloadthetemplate') }}</el-link>
|
|
|
</div>
|
|
|
<el-upload ref="upload" style="margin-left:10px;float:left;" action="#" :limit="1" :http-request="importProject" :show-file-list="false">
|
|
|
- <el-link type="primary" :underline="false" >导入需求</el-link>
|
|
|
+ <el-link type="primary" :underline="false" >{{ $t('dao-ru-xu-qiu') }}</el-link>
|
|
|
</el-upload>
|
|
|
<div style="margin-left:10px;float:left;">
|
|
|
- <el-link type="primary" :underline="false" @click="exportProjectData" download="资源需求导出.xlsx">导出需求</el-link>
|
|
|
+ <el-link type="primary" :underline="false" @click="exportProjectData" download="资源需求导出.xlsx">{{ $t('dao-chu-xu-qiu') }}</el-link>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -83,9 +82,9 @@
|
|
|
|
|
|
<div class="demand-container" v-if="!isDataLoaded">
|
|
|
<el-table height="90%" :loading="demandListLoading" :data="demandList">
|
|
|
- <el-table-column label="项目编号" prop="projectCode" width="160"></el-table-column>
|
|
|
- <el-table-column label="项目名称" prop="projectName" min-width="240"></el-table-column>
|
|
|
- <el-table-column label="近七日活跃人员" prop="activeUsers" min-width="240">
|
|
|
+ <el-table-column :label="$t('Itemno')" prop="projectCode" width="160"></el-table-column>
|
|
|
+ <el-table-column :label="$t('headerTop.projectName')" prop="projectName" min-width="240"></el-table-column>
|
|
|
+ <el-table-column :label="$t('jin-qi-ri-huo-yue-ren-yuan')" prop="activeUsers" min-width="240">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<span v-if="user.userNameNeedTranslate == 1">
|
|
@@ -100,23 +99,23 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="开始时间 - 结束时间" min-width="240">
|
|
|
+ <el-table-column :label="$t('starttimes') - $t('time.endTime')" min-width="240">
|
|
|
<template slot-scope="scope">
|
|
|
<span>{{scope.row.startDate ? scope.row.startDate + ' ~ ' + scope.row.endDate : ''}}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="合同要求" prop="contractReq" min-width="240" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="里程碑进度" prop="milepost" min-width="280">
|
|
|
+ <el-table-column :label="$t('he-tong-yao-qiu')" prop="contractReq" min-width="240" show-overflow-tooltip></el-table-column>
|
|
|
+ <el-table-column :label="$t('li-cheng-bei-jin-du')" prop="milepost" min-width="280">
|
|
|
<template slot-scope="scope">
|
|
|
- <span>{{scope.row.milepost ? scope.row.milepost.name + '\u3000完成时间:' + scope.row.milepost.finishDate : ''}}</span>
|
|
|
+ <span>{{scope.row.milepost ? scope.row.milepost.name + '\u3000'+$t('wan-cheng-shi-jian')+':' + scope.row.milepost.finishDate : ''}}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="人员需求" prop="membReq" min-width="280"></el-table-column>
|
|
|
- <el-table-column label="任务需求" prop="taskReq" min-width="280"></el-table-column>
|
|
|
- <el-table-column label="参与部门进度" prop="departmentSpeed" min-width="280"></el-table-column>
|
|
|
- <el-table-column label="操作" width="120" align="center" fixed="right">
|
|
|
+ <el-table-column :label="$t('ren-yuan-xu-qiu')" prop="membReq" min-width="280"></el-table-column>
|
|
|
+ <el-table-column :label="$t('ren-wu-xu-qiu')" prop="taskReq" min-width="280"></el-table-column>
|
|
|
+ <el-table-column :label="$t('can-yu-bu-men-jin-du')" prop="departmentSpeed" min-width="280"></el-table-column>
|
|
|
+ <el-table-column :label="$t('operation')" width="120" align="center" fixed="right">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-button @click="demandEdit(scope.row)" size="small">修改</el-button>
|
|
|
+ <el-button @click="demandEdit(scope.row)" size="small">{{ $t('xiu-gai') }}</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -133,55 +132,56 @@
|
|
|
</div>
|
|
|
|
|
|
<!-- 资源需求修改 -->
|
|
|
- <el-dialog v-if="demandEditDialog" width="500px" append-to-body :visible.sync="demandEditDialog" :title="'修改 - ' + editParameter.projectName">
|
|
|
+ <el-dialog v-if="demandEditDialog" width="500px" append-to-body :visible.sync="demandEditDialog" :title="$t('xiu-gai') +' - ' + editParameter.projectName">
|
|
|
<el-form label-width="150">
|
|
|
- <el-form-item label="开始时间">
|
|
|
+ <el-form-item :label="$t('starttimes')">
|
|
|
<el-date-picker
|
|
|
style="width:350px"
|
|
|
v-model="editDate1"
|
|
|
type="date"
|
|
|
- placeholder="请选择开始时间"
|
|
|
+ :placeholder="$t('defaultText.pleaseChoose')"
|
|
|
value-format="yyyy-MM-dd"></el-date-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="结束时间">
|
|
|
+ <el-form-item :label="$t('time.endTime')">
|
|
|
<el-date-picker
|
|
|
style="width:350px"
|
|
|
v-model="editDate2"
|
|
|
type="date"
|
|
|
- placeholder="请选择结束时间"
|
|
|
+ :placeholder="$t('defaultText.pleaseChoose')"
|
|
|
value-format="yyyy-MM-dd"></el-date-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="人员需求">
|
|
|
+ <el-form-item :label="$t('ren-yuan-xu-qiu')">
|
|
|
<el-input style="width:350px" v-model="editParameter.membReq" clearable></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="任务需求">
|
|
|
+ <el-form-item :label="$t('ren-wu-xu-qiu')">
|
|
|
<el-input style="width:350px" v-model="editParameter.taskReq" clearable></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="合同要求">
|
|
|
+ <el-form-item :label="$t('he-tong-yao-qiu')">
|
|
|
<el-input style="width:350px" v-model="editParameter.contractReq" clearable></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="部门进度">
|
|
|
+ <el-form-item :label="$t('bu-men-jin-du')">
|
|
|
<el-input style="width:350px" v-model="editParameter.departmentSpeed" clearable></el-input>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
- <el-button type="default" @click="demandEditDialog = false">取消</el-button>
|
|
|
- <el-button type="primary" @click="demandEditSure" >确定</el-button>
|
|
|
+ <el-button type="default" @click="demandEditDialog = false">{{ $t('btn.cancel') }}</el-button>
|
|
|
+ <el-button type="primary" @click="demandEditSure" >{{ $t('btn.determine') }}</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
</template>
|
|
|
-
|
|
|
+
|
|
|
<script>
|
|
|
import { error } from 'dingtalk-jsapi';
|
|
|
import Gantt from './gantt.vue';
|
|
|
-
|
|
|
+
|
|
|
export default {
|
|
|
name: 'project_gantt',
|
|
|
+ props: {},
|
|
|
components: {Gantt},
|
|
|
- data () {
|
|
|
+ data() {
|
|
|
return {
|
|
|
taskType: '',
|
|
|
isDataLoaded:false,
|
|
@@ -192,9 +192,9 @@ export default {
|
|
|
tasks1: {links:[]},
|
|
|
updatakey1: 1,
|
|
|
updatakey2: -1,
|
|
|
- radio1:"按人员查看",
|
|
|
+ radio1:this.$t('an-ren-yuan-cha-kan'),
|
|
|
valueDate:[],
|
|
|
- options:[{value:"选项1",label:"全部"},{value:"选项2",label:"人员1"}],
|
|
|
+ options:[{value:this.$t('xuan-xiang-1'),label:this.$t('all')},{value:this.$t('xuan-xiang-2'),label:this.$t('ren-yuan')+"1"}],
|
|
|
valuex:'',
|
|
|
screenList:[],
|
|
|
|
|
@@ -214,13 +214,29 @@ export default {
|
|
|
valuex2: '',
|
|
|
|
|
|
user: JSON.parse(sessionStorage.getItem("user")),
|
|
|
-
|
|
|
- }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {},
|
|
|
+ watch: {},
|
|
|
+ created() {},
|
|
|
+ mounted() {
|
|
|
+ let nowdate = new Date()
|
|
|
+ let nowmonth = nowdate.getMonth() + 1
|
|
|
+ let startdate = nowdate.getFullYear() + "-" + (nowmonth < 10 ? "0" + nowmonth : nowmonth) + "-" + (nowdate.getDate() < 10 ? "0" + nowdate.getDate() : nowdate.getDate())
|
|
|
+ let udate = new Date(nowdate.getFullYear(),nowdate.getMonth(),nowdate.getDate() + 31)
|
|
|
+ let endmonth = udate.getMonth() + 1
|
|
|
+ let enddate = udate.getFullYear() + "-" + (endmonth < 10 ? "0" + endmonth : endmonth) + "-" + (udate.getDate() < 10 ? "0" + udate.getDate() : udate.getDate())
|
|
|
+ this.valueDate = [startdate,enddate]
|
|
|
+ this.valueDate2 = this.valueDate
|
|
|
+ this.reqpar2 = this.valueDate
|
|
|
+ // console.log("date",this.valueDate);
|
|
|
+ this.getList();
|
|
|
+ this.getScreen()
|
|
|
+ // this.tasks1 = this.tasks
|
|
|
+ this.isDataLoaded = true
|
|
|
},
|
|
|
-
|
|
|
-
|
|
|
methods: {
|
|
|
- setGroup() {
|
|
|
+ setGroup() {
|
|
|
this.$refs.ganttTable1.setGroup();
|
|
|
// this.$refs.ganttTable2.setGroup();
|
|
|
},
|
|
@@ -243,7 +259,7 @@ export default {
|
|
|
if (res.code == "ok") {
|
|
|
let filePath = res.data;
|
|
|
const a = document.createElement('a'); // 创建a标签
|
|
|
- a.setAttribute('download', '资源需求导出.xls');// download属性
|
|
|
+ a.setAttribute('download', this.$t('zi-yuan-xu-qiu-dao-chu')+'.xls');// download属性
|
|
|
a.setAttribute('href', filePath);// href链接
|
|
|
a.click(); //自执行点击事件
|
|
|
a.remove();
|
|
@@ -264,7 +280,7 @@ export default {
|
|
|
let format = str[str.length - 1];
|
|
|
if (format != "xls" && format != "xlsx") {
|
|
|
this.$message({
|
|
|
- message: "请选择.xls或.xlsx文件",
|
|
|
+ message: this.$t('other.PleaseselecttheXLSorXLSXfile'),
|
|
|
type: "error"
|
|
|
});
|
|
|
} else {
|
|
@@ -275,7 +291,7 @@ export default {
|
|
|
this.$refs.upload.clearFiles();
|
|
|
if (res.code == "ok") {
|
|
|
this.$message({
|
|
|
- message: "导入成功",
|
|
|
+ message: this.$t('other.importSuccess'),
|
|
|
type: "success"
|
|
|
});
|
|
|
this.getDemandList();
|
|
@@ -299,12 +315,12 @@ export default {
|
|
|
selChange(){
|
|
|
this.valuex = null
|
|
|
// console.log("切换按钮",this.radio1);
|
|
|
- if (this.radio1 == "按人员查看") {
|
|
|
+ if (this.radio1 == this.$t('an-ren-yuan-cha-kan')) {
|
|
|
this.isDataLoaded = true
|
|
|
this.reqpar1 = 0
|
|
|
this.getList()
|
|
|
this.getScreen()
|
|
|
- }else if(this.radio1 == "按项目查看"){
|
|
|
+ }else if(this.radio1 == this.$t('an-xiang-mu-cha-kan')){
|
|
|
this.isDataLoaded = true
|
|
|
this.reqpar1 = 1
|
|
|
this.getList()
|
|
@@ -380,7 +396,7 @@ export default {
|
|
|
res => {
|
|
|
if(res.code == 'ok'){
|
|
|
this.$message({
|
|
|
- message: '修改成功',
|
|
|
+ message: this.$t('message.modifyTheSuccess'),
|
|
|
type: 'success'
|
|
|
})
|
|
|
this.demandEditDialog = false
|
|
@@ -482,10 +498,10 @@ export default {
|
|
|
res => {
|
|
|
if (res.code == "ok") {
|
|
|
for(var i in res.data) {
|
|
|
- if(res.data[i].id.indexOf('出差') != '-1') {
|
|
|
+ if(res.data[i].id.indexOf(this.$t('chu-cha')) != '-1') {
|
|
|
res.data[i].color = '#E6A23C'
|
|
|
}
|
|
|
- if(res.data[i].id.indexOf('请假') != '-1') {
|
|
|
+ if(res.data[i].id.indexOf(this.$t('other.AskForLeave')) != '-1') {
|
|
|
res.data[i].color = '#F56C6C'
|
|
|
}
|
|
|
}
|
|
@@ -583,50 +599,12 @@ export default {
|
|
|
})
|
|
|
})
|
|
|
},
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- // tasksEdit(){
|
|
|
- // let etasks = JSON.parse(JSON.stringify(this.tasks.data))
|
|
|
- // for(let i=0;i<etasks.length;i++){
|
|
|
- // if(etasks[i].parent != null){
|
|
|
- // let edate = new Date(etasks[i].end_date)
|
|
|
- // edate = new Date(edate.setDate(edate.getDate() + 1))
|
|
|
- // let edatemonth = edate.getMonth() + 1
|
|
|
- // let edateday = edate.getDate()
|
|
|
- // edate = edate.getFullYear() + '-' + (edatemonth < 10 ? '0' + edatemonth : edatemonth) + '-' + (edateday < 10 ? '0' + edateday : edateday)
|
|
|
- // etasks[i].end_date = edate
|
|
|
- // }
|
|
|
- // }
|
|
|
- // this.tasks = {data:etasks}
|
|
|
- // }
|
|
|
},
|
|
|
- mounted: function () {
|
|
|
- let nowdate = new Date()
|
|
|
- let nowmonth = nowdate.getMonth() + 1
|
|
|
- let startdate = nowdate.getFullYear() + "-" + (nowmonth < 10 ? "0" + nowmonth : nowmonth) + "-" + (nowdate.getDate() < 10 ? "0" + nowdate.getDate() : nowdate.getDate())
|
|
|
- let udate = new Date(nowdate.getFullYear(),nowdate.getMonth(),nowdate.getDate() + 31)
|
|
|
- let endmonth = udate.getMonth() + 1
|
|
|
- let enddate = udate.getFullYear() + "-" + (endmonth < 10 ? "0" + endmonth : endmonth) + "-" + (udate.getDate() < 10 ? "0" + udate.getDate() : udate.getDate())
|
|
|
- this.valueDate = [startdate,enddate]
|
|
|
- this.valueDate2 = this.valueDate
|
|
|
- this.reqpar2 = this.valueDate
|
|
|
- // console.log("date",this.valueDate);
|
|
|
- this.getList();
|
|
|
- this.getScreen()
|
|
|
- // this.tasks1 = this.tasks
|
|
|
- this.isDataLoaded = true
|
|
|
- }
|
|
|
-}
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
-<style>
|
|
|
- /* html, body {
|
|
|
- height: 100%;
|
|
|
- margin: 0;
|
|
|
- padding: 0;
|
|
|
- } */
|
|
|
- .container {
|
|
|
+<style scoped lang="scss">
|
|
|
+.container {
|
|
|
height: 100%;
|
|
|
width: 100%;
|
|
|
}
|
|
@@ -671,4 +649,4 @@ export default {
|
|
|
float: right;
|
|
|
padding-top: 5px;
|
|
|
}
|
|
|
-</style>
|
|
|
+</style>
|