zhangyanpeng
2020-02-11 355d7d39a67bc1fc27ed1e391799ff7fcc3b2aa7
Merge branch 'master' of http://highdatas.com:9000/r/~kimi/srs
16个文件已修改
2个文件已添加
1143 ■■■■ 已修改文件
package-lock.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shims-echart.d.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/popup/newProject.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/popup/portion/substep.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/popup/portion/substepReadOnly.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/popup/prodetail.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/square.vue 121 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/DataEdit(1).vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Mine.vue 244 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Overview.vue 426 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/calendarTask.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/list.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json
@@ -1065,6 +1065,14 @@
      "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=",
      "dev": true
    },
    "@types/echarts": {
      "version": "4.4.2",
      "resolved": "https://registry.npm.taobao.org/@types/echarts/download/@types/echarts-4.4.2.tgz",
      "integrity": "sha1-iL5gubh7xlQU8i1BUINFONYqxgI=",
      "requires": {
        "@types/zrender": "*"
      }
    },
    "@types/eslint-visitor-keys": {
      "version": "1.0.0",
      "resolved": "https://registry.npm.taobao.org/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz?cache=0&sync_timestamp=1572470950582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Feslint-visitor-keys%2Fdownload%2F%40types%2Feslint-visitor-keys-1.0.0.tgz",
@@ -1123,6 +1131,11 @@
      "resolved": "https://registry.npm.taobao.org/@types/webpack-env/download/@types/webpack-env-1.15.0.tgz",
      "integrity": "sha1-vZlW1QRLH7Q+hpqbqRSIYv+Y2f0=",
      "dev": true
    },
    "@types/zrender": {
      "version": "4.0.0",
      "resolved": "https://registry.npm.taobao.org/@types/zrender/download/@types/zrender-4.0.0.tgz",
      "integrity": "sha1-poBvEuxOzKrr2bDYFvBJrKYYj70="
    },
    "@typescript-eslint/eslint-plugin": {
      "version": "1.13.0",
@@ -4415,6 +4428,14 @@
      "requires": {
        "jsbn": "~0.1.0",
        "safer-buffer": "^2.1.0"
      }
    },
    "echarts": {
      "version": "4.6.0",
      "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.6.0.tgz?cache=0&sync_timestamp=1577438297540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.6.0.tgz",
      "integrity": "sha1-taR6EEbOyTzu75VPnuVHUTQFWOw=",
      "requires": {
        "zrender": "4.2.0"
      }
    },
    "ee-first": {
@@ -10023,6 +10044,11 @@
      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
      "dev": true
    },
    "resize-detector": {
      "version": "0.1.10",
      "resolved": "https://registry.npm.taobao.org/resize-detector/download/resize-detector-0.1.10.tgz",
      "integrity": "sha1-HaP5YapfkUzLz9N1LVL9Rb7raSw="
    },
    "resize-observer-polyfill": {
      "version": "1.5.1",
      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -12020,6 +12046,15 @@
      "resolved": "https://registry.npm.taobao.org/vue-class-component/download/vue-class-component-7.2.1.tgz",
      "integrity": "sha1-WqDWrvTEKuyAHFP+spN6Mi0ycPk="
    },
    "vue-echarts": {
      "version": "4.1.0",
      "resolved": "https://registry.npm.taobao.org/vue-echarts/download/vue-echarts-4.1.0.tgz",
      "integrity": "sha1-/0goqqWZ56qqyV41KX2WQZKjrw0=",
      "requires": {
        "lodash": "^4.17.15",
        "resize-detector": "^0.1.10"
      }
    },
    "vue-eslint-parser": {
      "version": "5.0.0",
      "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-5.0.0.tgz?cache=0&sync_timestamp=1573306349811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-5.0.0.tgz",
@@ -12104,6 +12139,11 @@
      "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz",
      "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
      "dev": true
    },
    "vuescroll": {
      "version": "4.15.0-beta.1",
      "resolved": "https://registry.npm.taobao.org/vuescroll/download/vuescroll-4.15.0-beta.1.tgz",
      "integrity": "sha1-MAZYsFkKaV7LoPu7X6vk7g2RqH8="
    },
    "vuex": {
      "version": "3.1.2",
@@ -12952,6 +12992,11 @@
          "dev": true
        }
      }
    },
    "zrender": {
      "version": "4.2.0",
      "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.2.0.tgz?cache=0&sync_timestamp=1576159866096&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.2.0.tgz",
      "integrity": "sha1-0AEwLhVfKN4fn8f81cJUutKEcc8="
    }
  }
}
package.json
@@ -8,16 +8,20 @@
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "@types/echarts": "^4.4.2",
    "axios": "^0.19.1",
    "core-js": "^3.4.4",
    "echarts": "^4.6.0",
    "ele-calendar": "^1.2.0",
    "element-ui": "^2.13.0",
    "moment": "^2.24.0",
    "register-service-worker": "^1.6.2",
    "vue": "^2.6.10",
    "vue-class-component": "^7.0.2",
    "vue-echarts": "^4.1.0",
    "vue-property-decorator": "^8.3.0",
    "vue-router": "^3.1.3",
    "vuescroll": "^4.15.0-beta.1",
    "vuex": "^3.1.2"
  },
  "devDependencies": {
shims-echart.d.ts
New file
@@ -0,0 +1,7 @@
import Vue from 'vue';
declare module 'vue/types/vue' {
interface Vue {
$echarts: any
}
}
src/App.vue
@@ -20,7 +20,29 @@
  -moz-osx-font-smoothing grayscale
  text-align center
  color #2c3e50
 ::-webkit-scrollbar-track-piece {
     background-color:#f8f8f8;
     -webkit-border-radius: 2em;
     -moz-border-radius: 2em;
     border-radius: 2em;
 }
 /*滚动条的宽度*/
 ::-webkit-scrollbar {
     width:6px;
 }
 /*滚动条的设置*/
 ::-webkit-scrollbar-thumb {
     background-color:#ababab;
     background-clip:padding-box;
     -webkit-border-radius: 2em;
     -moz-border-radius: 2em;
     border-radius: 2em;
 }
 /*滚动条鼠标移上去*/
 ::-webkit-scrollbar-thumb:hover {
     background-color:#9a9a9a;
 }
 .z_shadow {
     border-radius: 10px;
     box-shadow: 0px 0px 10px 5px #D0E2E9;
src/components/popup/newProject.vue
@@ -5,7 +5,7 @@
       <el-step title="方案设计" description="确立方案"></el-step>
       <el-step title="预览" description=""></el-step>
     </el-steps>
     <div style="height: 55vh; padding:0px; box-sizing:boder-box; overflow: auto;">
     <div style="height: 45vh; padding:0px; box-sizing:boder-box; overflow: auto;">
       <div v-if="add_Step == 0" style="width: 100%; height: 100%;" align="center">
        <div style="padding-top: 5%; box-sizing:boder-box">
                    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
@@ -75,7 +75,9 @@
    },
  data () {
    return {
      add_Step: 0,
        userId: undefined,
        assign: undefined,
        add_Step: 0,
            loading_nextStep: false,
            nextStepName: "下一步",
            loading_cancel: false,
@@ -136,6 +138,8 @@
        this.ruleForm = this.rowData;
        this.xmId = this.rowData.id;
    }
    this.userId = localStorage.getItem('userId');
    this.assign = localStorage.getItem('assign');
},
  methods:{
        Cancel() {
@@ -164,7 +168,6 @@
                  if (valid) {
                    is_null1 = true;
                  } else {
                    console.log('error submit!!');
                    return false;
                  }
                });
@@ -194,22 +197,22 @@
        //    let items2 = new Date(ruleForm_.items[1]).Format("yyyy-MM-dd").toLocaleString();
            
            let url = "/api/scheme/addOrUpdate";
            let me = this;
            this.$axios.get(url,{
              params: {
                reseachType: ruleForm_.objective,
                name: ruleForm_.name,
                    startTime: items1,
                    endTime: items2,
                    id: this.xmId,
                    desp:ruleForm_.desp
                    id: me.xmId,
                    desp:ruleForm_.desp,
                    userId: me.userId
              }
            }).then(data_ => {
              console.log(data_);
                this.xmId = data_.data.data;
                me.xmId = data_.data.data;
                
                this.add_Step = 1;
                me.add_Step = 1;
            }).catch(error =>{
                console.log(error);
            })
        },
        
@@ -268,8 +271,8 @@
            }
        },
        saveStep3() {
            let url = "/api/scheme/working/" + this.ruleForm.id;
            this.$axios.get(url + datas).then(data_ => {
            let url = "/api/scheme/working/" + this.xmId;
            this.$axios.get(url).then(data_ => {
                if(data_.data.success) {
                    this.$message('项目启动成功');
                    this.Cancel();
src/components/popup/portion/substep.vue
@@ -1199,6 +1199,7 @@
    data() {
      return {
                showData: {},
                finish: false,
                hideData: {
                    'title': false,
                    'scheme': false,
@@ -1450,7 +1451,6 @@
              let url = "/api/sysRoleMapping/detail";
              this.$axios.get(url)
              .then(data_ => {
                console.log(data_);
                let list = data_.data.data;
                let parId = "";
                let obj = {};
@@ -1478,17 +1478,16 @@
                        obj[id].children = [list[i]];
                    }
                }
                me.options_users = result;
            
              }).catch(error =>{
                  console.log(error);
              })
            },
            
            getDetailed() {
                let url = "/api/detail/parent/" + this.xmId;
                this.$axios.get(url).then(data_ => {
                  console.log(data_);
                    this.defaultCheckedKeys = [];
                    this.showData = {};
                    let details_ = data_.data.data;
@@ -1509,8 +1508,8 @@
                        }
                        
                    }
                    this.finish = true;
                }).catch(error =>{
                    console.log(error);
                })
                
            },
src/components/popup/portion/substepReadOnly.vue
@@ -1,6 +1,9 @@
<template>
  <div class="class_substep">
        <div style="width: 79%; height: 100%; overflow: auto; padding-top: 0px; box-sizing: border-box;">
  <div class="class_substep" >
        <div style="width: 79%;text-align: center; margin: 0 10px;">
            <h2 style="margin: 10px;">项目总金额:<span style="font-weight: bold;">{{money}}</span></h2>
        </div>
        <div style="width: 79%; height: 88%; overflow: auto; padding-top: 0px; box-sizing: border-box;">
            <transition name="el-zoom-in-top">
                <div v-show="showData['title']" class="transition-box" style="text-align: center; margin: 0 10px;">
                    <h3 style="margin: 10px;">立题服务</h3>
@@ -1190,7 +1193,9 @@
    data() {
      return {
                showData: {},
                money:0,
                hideData: {
                    'title': false,
                    'scheme': false,
                    'search': false,
@@ -1441,7 +1446,6 @@
              let url = "/api/sysRoleMapping/detail";
              this.$axios.get(url)
              .then(data_ => {
                console.log(data_);
                let list = data_.data.data;
                let parId = "";
                let obj = {};
@@ -1472,13 +1476,19 @@
                me.options_users = result;
            
              }).catch(error =>{
                  console.log(error);
              })
            },
            
            getDetailed() {
                this.showData = this.showData_;
                this.form_= this.form_objs;
                this.money = 0;
                for (let itm_k in this.showData_) {
                    let form_obj = {};
                    form_obj = this.form_objs[itm_k];
                    this.money += form_obj.budget;
                }
            },
            
            //单一事件
@@ -1500,6 +1510,7 @@
<style>
    .class_substep {
        height: 100%;
        overflow: hidden;
    }
    
    .class_substep .el-divider--horizontal {
src/components/popup/prodetail.vue
New file
@@ -0,0 +1,98 @@
<template>
  <div class="class_dataImport">
     <div style="height: 55vh; padding:0px; box-sizing:boder-box;">
       <div style="width: 1px; height: 1px;" align="center">
                       <substep  v-if="isShow1" ref="substep_zj" v-bind:xmId="xmId"></substep>
       </div>
      <div style="width: 100%; height: 100%;" align="center">
        <substepReadOnly v-if="isShow" v-bind:form_objs="form_objs" v-bind:showData_="showData_"></substepReadOnly>
      </div>
    </div>
  </div>
</template>
<script>
import substep from './portion/substep.vue'
import substepReadOnly from './portion/substepReadOnly.vue'
export default {
  name: 'dataImport',
 props:{
       rowData:{
           type: Object,
           required: true
       }
 },
    components: {
        substepReadOnly,
        substep
    },
  data () {
    return {
        userId: undefined,
        assign: undefined,
            loading_nextStep: false,
            isShow1: false,
            isShow: false,
            loading_cancel: false,
            ruleForm: {},
            xmId: null,
            showData_: {},
            form_objs: {},
        }
  },
mounted() {
    this.userId = localStorage.getItem('userId');
    this.assign = localStorage.getItem('assign');
    this.loadData();
},
  methods:{
        loadData() {
            this.xmId = this.rowData.id;
            this.isShow1 = true;
            let me = this;
            let interval = setInterval(function(){
                let isFinish = me.$refs.substep_zj.finish;
                if(isFinish) {
                    me.showData_ = me.$refs.substep_zj.showData;
                    me.form_objs = me.$refs.substep_zj.form_;
                    me.isShow = true;
                    clearInterval(interval);
                }
            },1000);
        },
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
  .class_dataImport .el-tabs__content{
    position: inherit;
  }
  .class_dataImport .grid-content {
    border-radius: 4px;
    height: 60px;
    min-height: 26px;
  }
  .class_dataImport .main-row .grid-content {
    line-height: 60px;
  }
  .class_dataImport .z_grid-content2{
    display:table-cell;
    vertical-align:bottom;
    color: #2c3e50;
    height: 50px;
  }
</style>
src/components/square.vue
@@ -17,7 +17,10 @@
                    </el-form-item>
                </el-form>
            </el-col>
          <el-col :span="4" ><el-button type="primary" @click="createNew">创建</el-button></el-col>
          <el-col :span="4" >
              <el-button type="primary" @click="createNew">创建</el-button>
             </el-col>
        </el-row>
        
@@ -26,8 +29,9 @@
        <div class="list" v-infinite-scroll="load" infinite-scroll-disabled="disabled">
            <div v-for="one in dataList" :key="one.id" class="list-item" @click="showItem(one)">
                <el-row >
                  <el-col :span="20"><div class="grid-content z_grid-content1 grid-content_text">{{one.title}}</div></el-col>
                  <el-col :span="4"><div class="grid-content z_grid-content1 grid-content_time">{{one.time}}</div></el-col>
                  <el-col :span="18"><div class="grid-content z_grid-content1 grid-content_text">{{one.title}}</div></el-col>
                  <el-col :span="3"><div class="grid-content z_grid-content1 grid-content_exam">{{formatter(one.examine)}}</div></el-col>
                  <el-col :span="3"><div class="grid-content z_grid-content1 grid-content_time">{{one.time}}</div></el-col>
                </el-row>
                
                <el-row>
@@ -51,11 +55,13 @@
     </div>
     
      <span slot="footer" class="dialog-footer">
        <el-button v-if="selectOne.attachment && selectOne.attachment != ''" type="primary" @click="download">下 载</el-button>
           <el-button v-if="canEdit" type="primary" @click="edit">修改</el-button>
           <el-button v-if="!selectOne.examine" type="primary" @click="addProject(selectOne)">生成项目</el-button>
        <el-button v-if="selectOne.attachment && selectOne.attachment != ''" type="primary" @click="download(selectOne)">下 载</el-button>
      </span>
    </el-dialog>
    
    <el-dialog title="创建话题" :visible.sync="dialogFormVisible">
    <el-dialog title="创建话题" :visible.sync="dialogFormVisible"  @close="closeCreate" >
      <el-form :model="form">
        <el-form-item label="话题名称" :label-width="formLabelWidth">
          <el-input v-model="form.title" autocomplete="off"></el-input>
@@ -73,6 +79,7 @@
          ref="upload"
            :on-change="onChange"
          :on-exceed="handleExceed"
          :on-success="uploadSuccess"
            >
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">不超过50M</div>
@@ -83,14 +90,29 @@
        <el-button type="primary" @click="createTopic">确 定</el-button>
      </div>
    </el-dialog>
    <div style="width: 0px; height: 0px;">
      <iframe ref="frame_export" style="width: 0px; height: 0px;"></iframe>
    </div>
    <el-dialog @close="Cancel"  width="70%" top="50px" :visible.sync="dialog_1" append-to-body>
      <newProject @closeNewProject="closeNewProject" v-bind:rowData="rowData" ref="newProject_"></newProject>
    </el-dialog>
    
    <el-dialog @close="Cancel1"  width="70%" top="50px" :visible.sync="dialog_2" append-to-body>
      <newProject ref="newProject1_"></newProject>
    </el-dialog>
        </div>
</template>
<script>
    import newProject from '../components/popup/newProject.vue'
    export default {
        components: {
          newProject
        },
        data() {
            return {
                rowData:undefined,
                dialog_1: false,
                uploadUrl:"/api/api/file/topicUpload",
                form:{},
                pageno:1,
@@ -106,6 +128,7 @@
                    desp:"miaoshu",
                    attachment:"222"
                },
                formLabelWidth:"40%",
                dataList: [
                //     {id:1,attachment:"222",title:"标题", desp:"描述时发生纠纷司符合双方酒叟发动机时代峰峻配电间 刀片机水电费搜豆腐皮搜的看法我都叫打破是觉得批发商附加费第三季度破发接收到发地方就搜到到四点分发偶读囧", time:"12分钟前"},
                //     {id:1,attachment:"222",title:"11", desp:"111", time:"11111"},
@@ -122,6 +145,7 @@
            }
        },
        computed: {
            noMore() {
                return this.maxPage == this.pageno 
            },
@@ -133,10 +157,55 @@
            this.getData();
        },
        methods: {
            Cancel() {
                this.$refs.newProject_.Cancel();
                this.dialogFormVisible = false;
            },
            addProject(selected) {
                let url = "/api/topic/exam/" + selected.id;
                this.$axios.get(url)
                    .then(data_ => {
                        if(data_.data.success) {
                            this.rowData = {
                                id:selected.id,
                                desp:selected.desp,
                                name:selected.title,
                                //objective:this.selected.reseachType,
                                //items:[this.$moment(this.selected.startTime).format('YYYY-MM-DD'),this.$moment(this.selected.endTime).format('YYYY-MM-DD')]
                            }
                            this.dialogFormVisible = false;
                            this.dialog_1 = true;
                        }else {
                            this.$message({message:'创建项目失败', type: 'warning'});
                        }
                    }).catch(error => {
                    })
            },
            closeNewProject() {
                this.dialog_1 = false;
                getData();
            },
            download(val) {
                if(val) {
                    this.$refs.frame_export.src = "/api/api/file/download/" + val.id;
                }else {
                        this.$message({message:'获取地址失败', type: 'warning'});
                }
            },
            uploadSuccess() {
                this.dialogFormVisible = false;
            },
            onChange(file, fileList) {
                this.fileList = [];
                this.fileList = fileList;
            },
            canExam() {
                return true;
            },
            createTopic() {
                let me = this;
                var userId = localStorage.getItem('userId');
@@ -156,21 +225,19 @@
                            if(data_.data.success) {
                                this.$message('创建成功');
                                me.dialogFormVisible = false;
                                me.getData();
                            }else {
                                this.$message({message:'话题创建失败', type: 'warning'});
                            }
                        }).catch(error => {
                            console.log(error);
                        })
                }else {
                    this.$refs.upload.submit();
                }
            },
             handleRemove(file, fileList) {
                    console.log(file, fileList);
                  },
                  handlePreview(file) {
                    console.log(file);
                  },
                  handleExceed(files, fileList) {
                    this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
@@ -194,14 +261,38 @@
            createNew() {
                this.dialogFormVisible = true;
            },
            formatter(exam){
                if(exam){
                    return "已关联项目";
                }
            },
            empty_() {
                this.formInline = {};
                this.query_();
            },
            query_() {
                this.getData(this.formInline);
                this.getData(this.formInline, true);
            },
            getData(query) {
            canEdit() {
                return this.selectOne.userId == this.userId;
            },
            edit(){
                this.form = {
                    title: this.selectOne.title,
                    desp: this.selectOne.desp,
                    id: this.selectOne.id
                };
                this.dialogFormVisible = true;
                this.dialogVisible = false;
            },
            closeCreate() {
                this.dialogFormVisible = false;
                this.getData();
            },
            getData(query,empty) {
                if(empty) {
                    this.dataList = [];
                }
                let me = this;
                this.loading = true
                this.loading_table = true;
@@ -216,10 +307,10 @@
                        params
                    })
                    .then(data_ => {
                        console.log(data_);
                        if(data_.data.success) {
                            me.dataList.push.apply(me.dataList, data_.data.data.records)
                            me.total = data_.data.data.total;
                            me.t
                            otal = data_.data.data.total;
                            me.pageno = data_.data.data.pageno;
                            me.maxPage = data_.data.data.maxPage;
                            
@@ -227,7 +318,6 @@
                        }
                            me.loading = false
                    }).catch(error => {
                        console.log(error);
                            me.loading = false
                    })
            },
@@ -248,9 +338,12 @@
    }
    .grid-content_time {
        font-weight: bold;
        font-style: italic;
        color: #909399;
    }
    .grid-content_exam {
        color: #00aaff;
        font-size: 14px;
    }
    .z_grid-content1{
      display:table-cell;
      vertical-align:bottom;
src/main.ts
@@ -8,8 +8,11 @@
import "element-ui/lib/theme-chalk/index.css";
import Axios from 'axios';
//npm i moment --save
import moment from 'moment'
import moment from 'moment';
import echarts from 'echarts'
Vue.prototype.$echarts = echarts
Vue.use(ElementUI);
Vue.prototype.$moment = moment;//赋值使用
 
@@ -18,6 +21,21 @@
Axios.defaults.baseURL = '/api';
Axios.defaults.headers.post['Content-Type'] = 'application/json';
Axios.interceptors.request.use(
    config => {
        let userId_ = localStorage.getItem('userId');
        if (!userId_) {  //
             router.replace({
                path: 'login',
            })
        }
        return config;
    },
    err => {
        return Promise.reject(err);
    });
new Vue({
  router,
src/views/DataEdit(1).vue
@@ -273,7 +273,6 @@
       // let url = "/api/master/" + this.menuObj.tableName + "/all/1"
        let url = "/api/field/" + this.menuObj.tableName;
          this.$axios.get(url).then(data_ => {
            console.log(data_);
            me.tableFields = data_.data.data;
           /* var fields_ = [];
            var result = data_.data.data;
@@ -287,7 +286,6 @@
            me.getData_edit();
          })
          .catch(error =>{
              console.log(error);
          })
      },
@@ -330,7 +328,6 @@
          }
        }
        ).then(data_ => {
          console.log(data_);
          let header_height = me.$refs.dataEdit_table.$el.getElementsByClassName('el-table__header-wrapper')[0].offsetHeight;
          me.$refs.dataEdit_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['height'] = me.tableHeight - header_height + "px";
          me.$refs.dataEdit_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['min-height'] = me.tableHeight - header_height + "px";
@@ -342,7 +339,6 @@
          me.loading_edit = false;
        })
        .catch(error =>{
            console.log(error);
        })
      },
@@ -375,11 +371,9 @@
            desp: this.desp
          }
        }).then(data_ => {
          console.log(data_);
          this.alert2_("当前流程正在审批");
        })
        .catch(error =>{
            console.log(error);
        });
      },
@@ -402,7 +396,6 @@
            },
          }
        ).then(data_ => {
            console.log(data_);
            if (!data_.data.data.grid || !data_.data.data) {
              this.tableData_edit = [];
              this.currentPage_edit = 1;
@@ -416,7 +409,6 @@
            this.loading_edit = false;
          })
          .catch(error =>{
              console.log(error);
              this.loading_edit = false;
              this.tableData_edit = [];
              this.currentPage_edit = 1;
@@ -454,12 +446,10 @@
        let datas = "?datas=" + encodeURI(table_data.id);
        this.$axios.post(url + datas
        ).then(data_ => {
          console.log(data_);
          this.query_edit();
        })
        .catch(error =>{
            console.log(error);
        });
      },
@@ -506,14 +496,12 @@
        let datas = "?datas=" + encodeURI(JSON.stringify(table_data)) + "&fields=" + fields_;
        this.$axios.post(url + datas
        ).then(data_ => {
          console.log(data_);
          this.loading_button_add = false;
          this.dialog_4_1_1 = false;
          this.query_edit();
        })
        .catch(error =>{
            console.log(error);
        });
      },
@@ -560,13 +548,11 @@
       this.$axios.post(url + datas
        ).then(data_ => {
          console.log(data_);
          me.loading_button_update = false;
          me.dialog_4_2 = false;
          me.query_edit();
        })
        .catch(error =>{
            console.log(error);
        });
      },
src/views/Home.vue
@@ -42,7 +42,7 @@
          <el-container>
            <el-header style="text-align: right; font-size: 15px;padding-right: 40px;">
                    <i class="el-icon-user-solid"></i>
                    <span>admin</span>
                    <span>{{userName}}</span>
                    <el-button size="small" type="primary" @click="Cancel">退 出</el-button>
            </el-header>
            
@@ -70,6 +70,7 @@
  },
    created() {
        let userId_ = localStorage.getItem('userId');
        this.userName = localStorage.getItem('userName');
        let departId = localStorage.getItem('departId');
        if (!userId_ || !departId) {
            this.$router.push('/login');
@@ -80,8 +81,10 @@
            let type;
            if(departId == "100" || departId == "500") {
                type = departId;
                 localStorage.setItem('assign', false);
            }else {
                type = "all";
                localStorage.setItem('assign', true);
            }
            
            this.getMenu(type);
@@ -98,7 +101,7 @@
                    {'id': "111_1", 'title': "信息广场", 'path': 'square', 'parentId': "111"}, //
                    {'id': "111_2", 'title': "项目总览", 'path': 'list', 'parentId': "111"}, //
                    {'id': "111_3", 'title': "项目分析", 'path': 'Overview', 'parentId': "111"}, //
                    {'id': "111_4", 'title': "归档报告", 'path': 'project4', 'parentId': "111"}, //
                    // {'id': "111_4", 'title': "归档报告", 'path': 'project4', 'parentId': "111"}, //
                    {'id': "112_1", 'title': "任务列表", 'path': 'calendarTask', 'parentId': "112"}, //
                ],
                100: [
@@ -150,6 +153,7 @@
        
        Cancel() {
            this.$router.push('/login');
            localStorage.setItem('userId', undefined);
        },
        menuSelect(index, a){
         let isPage = index.substring(0,2);
src/views/Mine.vue
@@ -2,7 +2,7 @@
    <div class="class_mine">
        <el-row :gutter="12">
          <el-col :span="15">
            <el-card class="box-card" shadow="hover" style="width: 100%; height: 30vh;">
            <el-card class="box-card" shadow="hover" style="width: 100%; height: 32vh;">
                <div slot="header" class="clearfix">
                    <span>概览</span>
                </div>
@@ -12,6 +12,7 @@
                      <el-col :span="12"><div class="grid-content" style="font-size: 14px;">今天剩余工作总计</div></el-col>
                    </el-row>
                        <div style="width: 100%; height: 110px; overflow: auto;">
                            <div class="card1_div" v-for="(card1_itm, k) in overview1" :key="k">
                                <div class="card1_header">{{card1_itm.name}}</div>
                                <div class="card1_body">{{card1_itm.count}}</div>
@@ -23,7 +24,7 @@
            </el-card>
          </el-col>
          <el-col :span="9">
            <el-card class="box-card"  shadow="hover" style="width: 100%; height: 30vh;">
            <el-card class="box-card"  shadow="hover" style="width: 100%; height: 32vh;">
                <div slot="header" class="clearfix">
                    <span>项目总览</span>
                </div>
@@ -33,8 +34,8 @@
                            <div class="card2_body">{{sum_count}}</div>
                            <el-button size="mini" type="primary" round @click="see_click">查看所有</el-button>
                        </div>
                        <div class="card2_div" style="width: 80%;">
                        <div class="card2_div" style="margin-left:10%;width: 70%;">
                            <div id="typeChart"  :style="{width: '100%', height: '100%'}"></div>
                        </div>    
                        
                </div>
@@ -50,28 +51,29 @@
                <div class="card3">
                    <div class="card3_div" style="width: 40%; height: 34vh; overflow-y: auto;  border-right: 1px solid #333333;">
                        <el-table
                                :data="tableData"
                                height="200"
                                highlight-current-row
                                @row-click="setActiveTableData"
                                style="width: 100%">
                                <el-table-column
                                    prop="name"
                                    label="项目名称"
                                >
                                </el-table-column>
                            </el-table>
                                :data="tableData"
                                height="200"
                                highlight-current-row
                                @row-click="setActiveTableData"
                                style="width: 100%">
                                <el-table-column
                                    prop="name"
                                    label="项目名称"
                                >
                                </el-table-column>
                            </el-table>
                    </div>
                    <div class="card3_div" style="width: 58%;">
                            <el-row :gutter="12" style="margin-top: 10px;">
                              <el-col :span="8" style="text-align: center;">
                                    <el-progress type="circle" :percentage="card3Count.rate"></el-progress>
                                </el-col>
                                <el-col :span="10">
                                    <div style="height: 14vh;">
                                <el-col :span="10" style="font-size: 14px;">
                                    <div style="height: 14vh; ">
                                        <div>
                                            <i class="el-icon-success" style="color: #40FF9E;"></i>
                                            <span>昨日完成任务数:{{card3Count.complete1}}</span>
                                            <span>昨日完成任务数:{{card3Count.yesDeal}}</span>
                                        </div>
                                        <div>
                                            <el-progress :percentage="card3Count.rate1" style="margin: 5px;"></el-progress>
@@ -81,7 +83,7 @@
                                    <div>
                                        <div>
                                            <i class="el-icon-success" style="color: #40FF9E;"></i>
                                            <span>今日完成任务数:{{card3Count.complete2}}</span>
                                            <span>今日完成任务数:{{card3Count.nowDeal}}</span>
                                        </div>
                                        <div>
                                            <el-progress :percentage="card3Count.rate2" style="margin: 5px;"></el-progress>
@@ -91,13 +93,13 @@
                                
                                <el-col :span="6">
                                    <div style="height: 14vh;">
                                        <div><span>总任务:{{card3Count.sum1}}</span></div>
                                        <div><span>未完成:{{card3Count.unfinished1}}</span></div>
                                        <div><span>总任务:{{card3Count.yesTotal}}</span></div>
                                        <div><span>已完成:{{card3Count.yesDeal}}</span></div>
                                    </div>
                                    
                                    <div>
                                        <div><span>总任务:{{card3Count.sum2}}</span></div>
                                        <div><span>未完成:{{card3Count.unfinished2}}</span></div>
                                        <div><span>总任务:{{card3Count.nowTotal}}</span></div>
                                        <div><span>已完成:{{card3Count.nowDeal}}</span></div>
                                    </div>
                                </el-col>
                            </el-row>
@@ -126,54 +128,82 @@
                overview1: [],
                tableData: [],
                activeTableData: {},
                card3Count: {}
                sum_count:0,
                card3Count: {},
                typeChart:undefined,
            }
        },
        created() {
            this.init();
        },
        mounted(){
            this.typeChart = this.$echarts.init(document.getElementById('typeChart'));
        },
        methods: {
            init() {
                this.$axios.get("/api/scheme/all")
                    .then(data_ => {
                        console.log(data_);
                        if (data_.data.success) {
                            var datas = data_.data.data;
                            this.tableData = datas;
                        }
                    }).catch(error => {
                        console.log(error);
                    });
                this.$axios.get("/api/scheme/typesCnt")
                    .then(data_ => {
                        console.log(data_);
                        if (data_.data.success) {
                            var datas = data_.data.data;
                            this.sum_count = datas.total;
                            this.initChart(datas.typeCnt);
                        }
                    }).catch(error => {
                        console.log(error);
                    });
                this.date_ = this.$moment(new Date).format('YYYY年MM月DD日');
                this.overview1 = [
                    {name: "我的任务", count: 15, warning: "已逾期11"},
                    {name: "立案与方案开发", count: 15, warning: "已逾期11"},
                    {name: "文献检索与筛选", count: 15, warning: "已逾期11"},
                    {name: "数据提取", count: 15, warning: "已逾期11"},
                    {name: "数据分析", count: 15, warning: "已逾期11"},
                    {name: "文稿撰写", count: 15, warning: "已逾期11"},
                ];
                this.$axios.get("/api/detail/dayTask")
                    .then(data_ => {
                        console.log(data_);
                        if (data_.data.success) {
                            var datas = data_.data.data;
                            datas.map(el => {
                            if(el.delay > 0) {
                                el.warning="已逾期" + ell.delay;
                            }else {
                                el.warning = undefined;
                            }
                            el.count = el.total;
                            el.name = el.type;
                            return el;
                        });
                        this.overview1 = datas;
                        }
                    }).catch(error => {
                        console.log(error);
                    })
                // this.overview1 = [
                //     {name: "我的任务", count: 15, warning: "已逾期11"},
                //     {name: "立案与方案开发", count: 15, warning: "已逾期11"},
                //     {name: "文献检索与筛选", count: 15, warning: "已逾期11"},
                //     {name: "数据提取", count: 15, warning: "已逾期11"},
                //     {name: "数据分析", count: 15, warning: "已逾期11"},
                //     {name: "文稿撰写", count: 15, warning: "已逾期11"},
                // ];
                
                this.sum_count = 345;
                this.tableData = [
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                    {id: "1111111", name: "检查搜索肯德基传送"},
                ];
                this.card3Count = {
                    sum: 345, //总任务
                    complete: 200, //已完成
                    sum1: 20,  //昨日总任务
                    sum2: 16,
                    unfinished1: 10,  //昨日未完成
                    unfinished2: 6,
                    complete1: 10,  //昨日已完成
                    complete2: 10
                };
                this.card3Count.rate =  Math.round(this.card3Count.complete/this.card3Count.sum * 100);
                this.card3Count.rate1 = Math.round(this.card3Count.complete1/this.card3Count.sum1 * 100);
                this.card3Count.rate2 = Math.round(this.card3Count.complete2/this.card3Count.sum2 * 100);
                // this.card3Count = {
                //     total: 345, //总任务
                //     deal: 200, //已完成
                //     yesTotal: 20,  //昨日总任务
                //     nowTotal: 16,
                //     unfinished1: 10,  //昨日未完成
                //     unfinished2: 6,
                //     yesDeal: 10,  //昨日已完成
                //     nowDeal: 10
                // };
                
        },
        
@@ -183,8 +213,96 @@
        
        setActiveTableData(currentRow, oldCurrentRow) {
            this.activeTableData = currentRow;
            this.$axios.get("/api/scheme/daywork/" + currentRow.id)
                .then(data_ => {
                    console.log(data_);
                    if (data_.data.success) {
                        var datas = data_.data.data;
                        this.card3Count = datas;
                        this.card3Count.rate =  Math.round(this.card3Count.deal/(this.card3Count.total == 0 ? 1: this.card3Count.total) * 100);
                        this.card3Count.rate1 = Math.round(this.card3Count.yesDeal/(this.card3Count.yesTotal == 0 ? 1: this.card3Count.yesTotal) * 100);
                        this.card3Count.rate2 = Math.round(this.card3Count.nowDeal/(this.card3Count.nowTotal == 0 ? 1: this.card3Count.nowTotal) * 100);
                    }
                }).catch(error => {
                    console.log(error);
                })
        },
        initChart(val) {
            if(!val){
                return;
            }
            this.typeChart.setOption({
                    backgroundColor: '#fff',
                    grid: {
                        top: '22%',
                        right: '2%',
                        left: '2%',
                        bottom: '18%'
                    },
                    xAxis: [{
                        type: 'category',
                        color: '#59588D',
                        data: ["未开始","进行中","已延期","已结束"],
                        axisLabel: {
                            margin: 8,
                            color: '#000',
                            textStyle: {
                                fontSize: 12
                            },
                        },
                        axisLine: {
                            show:false,
                        },
                        axisTick: {
                            show: false
                        },
                    }],
                    yAxis: [{
                        axisLabel: {
                            show:false,
                        },
                        axisLine: {
                            show:false,
                        },
                        axisTick: {
                            show: false
                        },
                        splitLine: {
                            show:false,
                        }
                    }],
                    series: [{
                        type: 'bar',
                        data: val,
                        barWidth: '20px',
                        itemStyle: {
                            normal: {
                                color: "#409EFF",
                                barBorderRadius: [30, 30, 0, 0],
                            }
                        },
                        label: {
                            normal: {
                                show: true,
                                fontSize: 18,
                                fontWeight: 'bold',
                                color: '#333',
                                position: 'top',
                            }
                        }
                    }
                ]
            });
        }
    },
    }
</script>
src/views/Overview.vue
@@ -3,35 +3,46 @@
        <div style="float: left; width: 100%; height: 50px;">
            <span>请选择项目:</span>
            <el-select @change="selectChange_" filterable v-model="value" placeholder="请选择" size="small">
                <el-option
                    v-for="item in options"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
            </el-select>
        </div>
        <div style="float: left; margin-left: 1%; width: 69%; height: 70vh; ">
            <div class="z_shadow" style="float: left; margin: 10px; margin-top: 0px; width: 46%; height: 43%; border: 1px solid #e4eef9;"></div>
            <div class="z_shadow" style="float: left; margin: 10px; margin-top: 0px; width: 46%; height: 43%; border: 1px solid #e4eef9;"></div>
            <div class="z_shadow" style="float: left; margin: 10px; width: 46%; height: 43%; border: 1px solid #e4eef9;"></div>
            <div class="z_shadow" style="float: left; margin: 10px; margin-top: 0px; width: 46%; height: 43%; border: 1px solid #e4eef9;">
                <div id="myChart" :style="{width: '100%', height: '100%'}"></div>
            </div>
            <div class="z_shadow" style="float: left; margin: 10px; margin-top: 0px; width: 46%; height: 43%; border: 1px solid #e4eef9;overflow: auto;padding: 5px;">
                <el-timeline :reverse="reverse">
                    <el-timeline-item v-for="(deal, index) in deals" :key="index" :timestamp="deal.createTime">
                        {{deal.desp}}
                    </el-timeline-item>
                </el-timeline>
            </div>
            <div class="z_shadow" style="float: left; margin: 10px; width: 46%; height: 43%; border: 1px solid #e4eef9;">
                <el-row :gutter="20">
                  <el-col :span="6"  v-for="(oneUser, index) in userList" :key="index"><div class="grid-content bg-purple">
                  <i class="el-icon-user-solid"></i>
                  <span>{{oneUser.name}}</span></div></el-col>
                </el-row>
            </div>
            <div class="z_shadow" style="float: left; margin: 10px; padding: 10px; box-sizing: border-box; width: 46%; height: 43%; border: 1px solid #e4eef9;">
                <h3 style="margin: 0px;">文档库</h3>
                <div class="files_div">
                    <div style="width: 0px; height: 0px;">
                      <iframe ref="frame_export" style="width: 0px; height: 0px;"></iframe>
                        <iframe ref="frame_export" style="width: 0px; height: 0px;"></iframe>
                    </div>
                    <div v-if="fileLevel > 0">
                        <el-button  type="text" size="mini" @click="upFile_click">上一级</el-button>
                        <el-button type="text" size="mini" @click="upFile_click">上一级</el-button>
                    </div>
                    <div v-for="(file, k) in fileList" :key="k" @click="file_click(file)" class="file_div">
                        <i v-if="file.type==='isfiles'" class="el-icon-folder"></i>
                        <i v-else-if="file.type==='isfile'" class="el-icon-tickets"></i>
                        <span>{{file.name}}</span>
                    </div>
                </div>
            </div>
        </div>
@@ -45,83 +56,66 @@
            </div>
        </div>
        
    </div>
</template>
<script>
    export default {
        data() {
            return {
                options: [
                    {
                        value: '选项1',
                        label: '项目1'
                    }, {
                        value: '选项2',
                        label: '项目2'
                    }, {
                        value: '选项3',
                        label: '项目3'
                    }, {
                        value: '选项4',
                        label: '项目4'
                    }, {
                        value: '选项5',
                        label: '项目5'
                    }
                ],
                options: [],
                deals: [],
                value: '',
                dialog_1: false,
                fileLevel: 0,
                fileList: [],
                task_itm: [
                     {'id': "111_1", 'name': "立题服务", desp: "描述看到静安寺", 'state': "进行中"}, //
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                     {'id': "111_2", 'name': "方案开发服务", desp: "描述看到静安寺", 'state': "进行中"},
                ]
                ],
                myChart: undefined,
                userList: [],
                grandPa:"",
            }
        },
        mounted() {
            this.initSelect();
            let fileList1 = [
                    {name: "文件名称1", type: "isfile", path: ""},
                    {name: "文件名称2", type: "isfile", path: ""},
                    {name: "文件夹名称", type: "isfiles", path: ""},
                ];
            this.myChart = this.$echarts.init(document.getElementById('myChart'))
            let fileList1 = [{
                    name: "文件名称1",
                    type: "isfile",
                    path: ""
                },
                {
                    name: "文件名称2",
                    type: "isfile",
                    path: ""
                },
                {
                    name: "文件夹名称",
                    type: "isfiles",
                    path: ""
                },
            ];
            this.fileList = fileList1;
            this.initChart();
        },
        methods: {
            initSelect() {
                var me = this;
                this.$axios.get("/api/scheme/all")
                    .then(data_ => {
                        console.log(data_);
                        if(data_.data.success){
                        if (data_.data.success) {
                            me.options = [];
                            var datas = data_.data.data;
                            datas.forEach(function(one){
                            datas.forEach(function(one) {
                                var item = {
                                    value:one.id,
                                    label:one.name
                                }
                                    value: one.id,
                                    label: one.name
                                }
                                me.options.push(item);
                            });
                        }
@@ -130,53 +124,283 @@
                    })
            },
            file_click(file) {
                if (file.type == 'isfiles') {
                    let fileList2 = [
                        {name: "子文件名称1", type: "isfile", path: ""},
                        {name: "子文件名称2", type: "isfile", path: ""},
                        {name: "子文件夹名称", type: "isfiles", path: ""},
                    ];
                    this.fileList = fileList2;
                    this.fileLevel ++;
                }
                else {
                if (!file.file) {
                    let url = "/api/file/child" ;
                    this.$axios.get(url,{
                        params:{
                            path:encodeURI(file.path)
                        }
                    })
                        .then(data_ => {
                            console.log(data_);
                            if (data_.data.success) {
                                var datas = data_.data.data;
                                this.fileList = datas;
                                if(datas.length > 0) {
                                    this.grandPa = datas[0].grandPa;
                                }
                                this.fileLevel++;
                            }
                        }).catch(error => {
                            console.log(error);
                        })
                } else {
                    //下载
                    this.$refs.frame_export.src = "";
                    if (file.path) {
                        let url = "/api/api/file/downloadPath?path=" + encodeURI(file.path);
                        this.$refs.frame_export.src = url;
                    }
                }
            },
            upFile_click() {
                this.fileLevel --;
                if(!this.grandPa) {
                    this.$message({message:'请刷新界面后重试', type: 'warning'});
                    return;
                }
                let url = "/api/file/child" ;
                this.$axios.get(url,{
                    params:{
                        path:encodeURI(this.grandPa)
                    }
                })
                    .then(data_ => {
                        console.log(data_);
                        if (data_.data.success) {
                            var datas = data_.data.data;
                            this.fileList = datas;
                            this.fileLevel--;
                        }
                    }).catch(error => {
                        console.log(error);
                    })
                
                let fileList2 = [
                    {name: "文件名称1", type: "isfile", path: ""},
                    {name: "文件名称2", type: "isfile", path: ""},
                    {name: "文件夹名称", type: "isfiles", path: ""},
                ];
                this.fileList = fileList2;
            },
            Cancel() {
            },
            selectChange_(val) {
                let me = this;
                let url = "/api/scheme/getSchemeInfo/" + this.value;
                this.$axios.get(url,{
                this.$axios.get(url, {
                }).then(data_ => {
                  console.log(data_);
                    // 图
                    // 记录
                    // 人员
                    // 详情
                    //目录
                }).catch(error =>{
                    console.log(error);
                    console.log(data_);
                    if (data_.data.success) {
                        let result = data_.data.data;
                        me.initChart(result.option);
                        me.userList = result.users;
                        result.paths = result.paths.map(el => {
                            el.path = decodeURI(el.path);
                            return el;
                        });
                        result.record = result.record.map(el => {
                            var imoment = this.$moment(el.createTime);
                            // 格式化成,年月日
                            let iformat = imoment.format('YYYY-MM-DD HH:mm:ss');
                            el.createTime = iformat;
                            if(!el.desp) {
                                el.desp = "暂无描述";
                            }
                            return el;
                        });
                        result.scheme = result.scheme.map(el => {
                            if(el.finish) {
                                el.state="已结束";
                            }else if(el.delay) {
                                el.state="已延期";
                            }else if(el.edit) {
                                el.state="待启动";
                            }else {
                                el.state="进行中";
                            }
                            return el;
                        });
                        me.fileList = result.paths;
                        me.task_itm = result.scheme;
                        me.deals = result.record;
                    }
                }).catch(error => {
                    console.log(error);
                })
            }
        }
            },
            initChart(datas) {
                this.myChart.setOption({
                    backgroundColor: '#FFF',
                    grid: {
                        top: '12%',
                        bottom: '19%',
                        left: '8%',
                        right: '8%'
                    },
                    tooltip: {
                        trigger: 'axis',
                        label: {
                            show: false
                        }
                    },
                    legend: {
                        data: ["参考", "实际"],
                    },
                    xAxis: {
                        boundaryGap: false, //默认,坐标轴留白策略
                        axisLine: {
                            show: false
                        },
                        splitLine: {
                            show: false
                        },
                        axisLabel: {
                            interval: 0, //隔几个显示
                            rotate: 30,
                            showMinLabel: true,
                            color: "#393C40"
                        },
                        axisTick: {
                            show: false,
                            alignWithLabel: true
                        },
                        data: [
                            '12-3', '12-4', '12-5', '12-6', '12-7', '12-8', '12-9', '12-10', '12-11'
                        ]
                    },
                    yAxis: {
                        axisLine: {
                            show: false
                        },
                        splitLine: {
                            show: true,
                            lineStyle: {
                                type: 'dashed',
                                color: 'rgba(33,148,246,0.2)'
                            }
                        },
                        axisTick: {
                            show: false
                        },
                        splitArea: {
                            show: true,
                            areaStyle: {
                                color: 'rgb(245,250,254)'
                            }
                        }
                    },
                    series: [{
                            name: "实际",
                            type: 'line',
                            symbol: 'circle',
                            symbolSize: 7,
                            lineStyle: {
                                color: '#0c64eb',
                                shadowBlur: 12,
                                shadowColor: '#0c64eb',
                                shadowOffsetX: 1,
                                shadowOffsetY: 1
                            },
                            itemStyle: {
                                color: '#0c64eb',
                                borderWidth: 1,
                                borderColor: '#FFF'
                            },
                            label: {
                                show: false,
                                distance: 1,
                                emphasis: {
                                    show: true,
                                    offset: [25, -2],
                                    //borderWidth:1,
                                    // borderColor:'rgb(33,148,246)',
                                    //formatter:'{bg|{b}\n数据量:{c}}',
                                    color: '#FFF',
                                    padding: [8, 20, 8, 6],
                                    //width:60,
                                    height: 36,
                                    formatter: function(params) {
                                        var name = params.name;
                                        var value = params.data;
                                        var str = name + '\n实际:' + value;
                                        return str;
                                    },
                                    rich: {
                                        bg: {
                                            width: 78,
                                            //height:42,
                                            color: '#FFF',
                                            padding: [20, 0, 20, 10]
                                        },
                                        br: {
                                            width: '100%',
                                            height: '100%'
                                        }
                                    }
                                }
                            },
                            data: [
                                20, 18, 17, 10, 7, 4,
                            ]
                        },
                        {
                            name: "参考",
                            type: 'line',
                            symbol: 'circle',
                            symbolSize: 7,
                            lineStyle: {
                                color: '#a6a8b6',
                                shadowBlur: 12,
                                shadowColor: '#a6a8b6',
                                shadowOffsetX: 1,
                                shadowOffsetY: 1
                            },
                            itemStyle: {
                                color: '#a6a8b6',
                                borderWidth: 1,
                                borderColor: '#FFF'
                            },
                            label: {
                                show: false,
                                distance: 1,
                                emphasis: {
                                    show: true,
                                    offset: [25, -2],
                                    //borderWidth:1,
                                    // borderColor:'rgb(33,148,246)',
                                    //formatter:'{bg|{b}\n数据量:{c}}',
                                    color: '#FFF',
                                    padding: [8, 20, 8, 6],
                                    //width:60,
                                    height: 36,
                                    formatter: function(params) {
                                        var name = params.name;
                                        var value = params.data;
                                        var str = name + '\n参考:' + value;
                                        return str;
                                    },
                                }
                            },
                            data: [
                                20, 17.5, 15, 12.5, 10,
                                7.5, 5, 2.5, 0
                            ]
                        }
                    ]
                });
            },
        },
    }
</script>
@@ -185,16 +409,18 @@
        text-align: left;
        background-color: #dee0e2;
    }
    .files_div{
    .files_div {
        height: 90%;
        overflow: auto;
    }
    .file_div {
        width: 30%;
        height: 20px;
        float: left;
    }
    .file_div :hover {
        cursor: pointer;
        font-weight: bold;
src/views/calendarTask.vue
@@ -16,7 +16,7 @@
                <span>{{task_itm.desp}}</span>
                <div v-for="(type_itm, k_) in task_itm.children" :key="k_" class="right_row_">
                    <span>{{k_+1}}、{{type_itm.typeStr}}</span>
                    <el-button size="mini" type="primary" style="float: right; margin-top: 10px;" @click="handleTask(type_itm.id, type_itm.mustAttach, type_itm)">处理任务</el-button>
                    <el-button size="mini" type="primary" v-if="userId === task_itm.userId" style="float: right; margin-top: 10px;" @click="handleTask(type_itm.id, type_itm.mustAttach, type_itm)">处理任务</el-button>
                </div>
            </div>
        </div>
@@ -77,7 +77,7 @@
                        ],
                        prop:'date' ,//对应日期字段名
                        DayDataTree: [],
                        userId:undefined,
                        dialog_1: false,
                        handleTaskType: {},
                        upload_url: "",
@@ -97,7 +97,7 @@
                    let iformat = imoment.format('YYYY-MM');
                    let systemDate = iformat + '-01 00:00:00';
                    this.getDatedef(systemDate);
                    this.userId = localStorage.getItem('userId');
                },
                
        methods: {
@@ -141,6 +141,7 @@
                            this.$refs.upload.submit();//开始上传
                        }
                        else {
                            var me = this;
                            let params = this.upData
                            let url = "/api/detail/deal/" + id;
                            this.$axios.get(url, {
@@ -148,15 +149,12 @@
                                })
                                .then(data_ => {
                                    console.log(data_);
                                    let datas= data_.data.data;
                                    datas = datas.map(el => {
                                        var imoment = this.$moment(el.date);
                                        // 格式化成,年月日
                                        let iformat = imoment.format('YYYY-MM-DD');
                                        el.date = iformat;
                                        return el;
                                    })
                                    this.datedef = datas;
                                    if(data_.data.success) {
                                        this.$message('处理成功');
                                        me.Cancel();
                                    }else {
                                        this.$message({message:'处理任务失败', type: 'warning'});
                                    }
                                }).catch(error => {
                                    console.log(error);
                                });
src/views/list.vue
@@ -4,8 +4,8 @@
            <div class="btn-line">
                <el-button type="primary" @click="addProject">新建项目</el-button>
                <el-button type="primary" @click="editProject">编辑项目</el-button>
                <el-button type="primary" @click="onSubmit">查看详情</el-button>
                <el-button type="primary" v-if="editShow" @click="editProject">编辑项目</el-button>
                <el-button type="primary" @click="showDetail">查看详情</el-button>
            </div>
@@ -78,28 +78,39 @@
        <el-dialog @close="Cancel"  width="70%" top="50px" :visible.sync="dialog_1" append-to-body>
          <newProject @closeNewProject="closeNewProject" v-bind:rowData="rowData" ref="newProject_"></newProject>
        </el-dialog>
        <el-dialog v-if="dialog_2" @close="Cancel2"  width="70%" top="50px" :visible.sync="dialog_2" append-to-body>
          <prodetail @closeNewProject="closeDetail" v-bind:rowData="detailData" ref="newProject2_"></prodetail>
        </el-dialog>
    </div>
</template>
<script>
    import newProject from '../components/popup/newProject.vue'
    import prodetail from '../components/popup/prodetail.vue'
    export default {
        
        components: {
          newProject
          newProject,
          prodetail
        },
        data() {
            return {
                rowData:undefined,
                editShow: true,
                loading_table: false,
                query: "",
                rowData:undefined,
                detailData:undefined,
                dialog_1: false,
                dialog_2: false,
                pagenum: 1,
                pagesize: 15,
                total: 0,
                selected: undefined,
                labelPosition: "left",
                tableData: [],
                userId:"",
                assign:undefined,
                formInline: {
                    user: '',
                    region: ''
@@ -108,13 +119,37 @@
        },
        mounted() { //组件配置后,页面显示前。用于加载数据
            this.getData();
            this.userId = localStorage.getItem('userId');
            this.assign = localStorage.getItem('assign');
        },
        methods: {
            Cancel() {
                this.$refs.newProject_.Cancel();
                this.dialog_1 = false;
            },
            Cancel2() {
                this.dialog_2 = false;
                this.closeDetail();
            },
            closeDetail() {
                this.detailData = undefined;
            },
            showDetail() {
                if(!this.selected){
                    this.$message({message:'请选中一条未启动的项目', type: 'warning'});
                    return;
                }
                this.dialog_2 = true;
            },
            tableChange(val) {
                this.selected = val;
                this.detailData = val;
                if (this.selected.userId == this.userId) {
                    this.editShow = true;
                }else {
                    this.editShow = false;
                }
            },
            handleCurrentChange(pageno) {
                this.pagenum = pageno;
@@ -131,10 +166,13 @@
                this.loading_table = true;
                let pageno = this.pagenum;
                let url = "/api/scheme/page/" + pageno;
                let params =  {
                    pageSize: this.pagesize
                };
                if(this.assign) {
                    params.userId = this.userId;
                }
                if(query){
                    params.name = query.name;
                    params.status = query.status;
@@ -165,6 +203,7 @@
            },
            dateFormat_(row, colum, val ,index) {
                return this.$moment(val).format('YYYY-MM-DD');
            },
            status_(row, colum, val ,index) {
                if(val == "working") {
@@ -205,7 +244,8 @@
                
                
            },closeNewProject() {
                this.dialog_1 = false
                this.dialog_1 = false;
                query_();
            },
            
        }
src/views/login.vue
@@ -107,10 +107,9 @@
            this.$axios.get(url,{
                 params
               }).then(data_ => {
                 console.log(data_);
               if(data_.data.success) {
                   localStorage.setItem('userId',data_.data.data.id);
                   localStorage.setItem('userName',data_.data.data.id);
                   localStorage.setItem('userName',data_.data.data.name);
                   localStorage.setItem('roleId',data_.data.data.roleCode);
                   localStorage.setItem('roleName',data_.data.data.roleName);
                   localStorage.setItem('departId',data_.data.data.departCode);
@@ -121,7 +120,6 @@
               }
                
               }).catch(error =>{
                   console.log(error);
               })
            
        
vue.config.js
@@ -2,6 +2,7 @@
    // 修改的配置
    // 将baseUrl: '/api',改为baseUrl: '/',
    publicPath: '/',
     outputDir: 'dist',
    devServer: {
        proxy: {
            '/api/api': {