From 355d7d39a67bc1fc27ed1e391799ff7fcc3b2aa7 Mon Sep 17 00:00:00 2001 From: zhangyanpeng <bob.zhang@highdatas.com> Date: 星期二, 11 二月 2020 14:23:42 +0800 Subject: [PATCH] Merge branch 'master' of http://highdatas.com:9000/r/~kimi/srs --- src/components/popup/portion/substepReadOnly.vue | 19 vue.config.js | 1 package-lock.json | 45 ++ src/views/Overview.vue | 426 ++++++++++++++++----- src/views/DataEdit(1).vue | 14 shims-echart.d.ts | 7 src/components/popup/prodetail.vue | 98 ++++ src/components/popup/newProject.vue | 25 src/views/list.vue | 54 ++ src/main.ts | 20 src/components/square.vue | 121 +++++ src/components/popup/portion/substep.vue | 7 src/views/login.vue | 4 package.json | 4 src/views/Mine.vue | 244 +++++++++--- src/views/Home.vue | 8 src/views/calendarTask.vue | 22 src/App.vue | 24 + 18 files changed, 907 insertions(+), 236 deletions(-) diff --git a/package-lock.json b/package-lock.json index e02ca7a..ca33bc1 100644 --- a/package-lock.json +++ b/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=" } } } diff --git a/package.json b/package.json index d852710..8aa2ef1 100644 --- a/package.json +++ b/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": { diff --git a/shims-echart.d.ts b/shims-echart.d.ts new file mode 100644 index 0000000..373b715 --- /dev/null +++ b/shims-echart.d.ts @@ -0,0 +1,7 @@ +import Vue from 'vue'; + +declare module 'vue/types/vue' { +interface Vue { +$echarts: any +} +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 66f7f9a..daa2bf1 100644 --- a/src/App.vue +++ b/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; diff --git a/src/components/popup/newProject.vue b/src/components/popup/newProject.vue index d93a4e0..395d8e0 100644 --- a/src/components/popup/newProject.vue +++ b/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(); diff --git a/src/components/popup/portion/substep.vue b/src/components/popup/portion/substep.vue index 2d90b4a..847d34a 100644 --- a/src/components/popup/portion/substep.vue +++ b/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); }) }, diff --git a/src/components/popup/portion/substepReadOnly.vue b/src/components/popup/portion/substepReadOnly.vue index 34ffde1..d9bb894 100644 --- a/src/components/popup/portion/substepReadOnly.vue +++ b/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 { diff --git a/src/components/popup/prodetail.vue b/src/components/popup/prodetail.vue new file mode 100644 index 0000000..f918156 --- /dev/null +++ b/src/components/popup/prodetail.vue @@ -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> \ No newline at end of file diff --git a/src/components/square.vue b/src/components/square.vue index 373a174..48b7dde 100644 --- a/src/components/square.vue +++ b/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:"鎻忚堪鏃跺彂鐢熺籂绾峰徃绗﹀悎鍙屾柟閰掑彑鍙戝姩鏈烘椂浠e嘲宄婚厤鐢甸棿 鍒�鐗囨満姘寸數璐规悳璞嗚厫鐨悳鐨勭湅娉曟垜閮藉彨鎵撶牬鏄寰楁壒鍙戝晢闄勫姞璐圭涓夊搴︾牬鍙戞帴鏀跺埌鍙戝湴鏂瑰氨鎼滃埌鍒板洓鐐瑰垎鍙戝伓璇诲洤", 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; diff --git a/src/main.ts b/src/main.ts index 87d49de..a8dce39 100644 --- a/src/main.ts +++ b/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, diff --git "a/src/views/DataEdit\0501\051.vue" "b/src/views/DataEdit\0501\051.vue" index cb56aa5..8529061 100644 --- "a/src/views/DataEdit\0501\051.vue" +++ "b/src/views/DataEdit\0501\051.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_("褰撳墠娴佺▼姝e湪瀹℃壒"); }) .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); }); }, diff --git a/src/views/Home.vue b/src/views/Home.vue index 53f7e01..19185fa 100644 --- a/src/views/Home.vue +++ b/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); diff --git a/src/views/Mine.vue b/src/views/Mine.vue index 28e48f0..90e8120 100644 --- a/src/views/Mine.vue +++ b/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骞碝M鏈圖D鏃�'); - 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> diff --git a/src/views/Overview.vue b/src/views/Overview.vue index 7119948..ab7a7cd 100644 --- a/src/views/Overview.vue +++ b/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; diff --git a/src/views/calendarTask.vue b/src/views/calendarTask.vue index 2250ad6..f65229a 100644 --- a/src/views/calendarTask.vue +++ b/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); }); diff --git a/src/views/list.vue b/src/views/list.vue index 3c89d4c..78e85d3 100644 --- a/src/views/list.vue +++ b/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_(); }, } diff --git a/src/views/login.vue b/src/views/login.vue index 06a8a29..816158a 100644 --- a/src/views/login.vue +++ b/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); }) diff --git a/vue.config.js b/vue.config.js index b48bf31..8c3779d 100644 --- a/vue.config.js +++ b/vue.config.js @@ -2,6 +2,7 @@ // 淇敼鐨勯厤缃� // 灏哹aseUrl: '/api',鏀逛负baseUrl: '/', publicPath: '/', + outputDir: 'dist', devServer: { proxy: { '/api/api': { -- Gitblit v1.8.0