diff --git a/src/api/person.js b/src/api/person.js index 73da75b..87af371 100644 --- a/src/api/person.js +++ b/src/api/person.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function getPersonData(params) { return request({ - url: '/person/person-information2', + url: '/person/information2', method: 'get', params }) @@ -10,7 +10,7 @@ export function getPersonData(params) { export function getPersonTag(params) { return request({ - url: '/person/person_tag', + url: '/person/tag', method: 'get', params }) @@ -79,3 +79,67 @@ export function getReviewRoutine(params) { params }) } + +export function getAppraise(params) { + return request({ + url: '/person/appraise', + method: 'get', + params + }) +} + +export function getHonor(params) { + return request({ + url: '/person/honor', + method: 'get', + params + }) +} + +export function getAdvance(params) { + return request({ + url: '/person/advance', + method: 'get', + params + }) +} + +export function getInnovation(params) { + return request({ + url: '/person/innovation', + method: 'get', + params + }) +} + +export function getArticle(params) { + return request({ + url: '/person/article', + method: 'get', + params + }) +} + +export function getActivity(params) { + return request({ + url: '/person/activity', + method: 'get', + params + }) +} + +export function getRoutine(params) { + return request({ + url: '/person/routine', + method: 'get', + params + }) +} + +export function getParty(params) { + return request({ + url: '/person/party', + method: 'get', + params + }) +} \ No newline at end of file diff --git a/src/icons/svg/优秀党员.svg b/src/icons/svg/优秀党员.svg new file mode 100644 index 0000000..eeb33d1 --- /dev/null +++ b/src/icons/svg/优秀党员.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/先进.svg b/src/icons/svg/先进.svg new file mode 100644 index 0000000..44eff49 --- /dev/null +++ b/src/icons/svg/先进.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/橙色勋章.svg b/src/icons/svg/橙色勋章.svg new file mode 100644 index 0000000..6e35b79 --- /dev/null +++ b/src/icons/svg/橙色勋章.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/红色勋章.svg b/src/icons/svg/红色勋章.svg new file mode 100644 index 0000000..da14d89 --- /dev/null +++ b/src/icons/svg/红色勋章.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/绿色勋章.svg b/src/icons/svg/绿色勋章.svg new file mode 100644 index 0000000..3ead8a1 --- /dev/null +++ b/src/icons/svg/绿色勋章.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/蓝色勋章.svg b/src/icons/svg/蓝色勋章.svg new file mode 100644 index 0000000..42515f0 --- /dev/null +++ b/src/icons/svg/蓝色勋章.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 098429e..aba306b 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -35,10 +35,17 @@ const actions = { commit('SET_TOKEN', response.token) commit('SET_ID_CARD', username) // 解码jwt 获得role +<<<<<<< HEAD // let payload = response.token.split('.')[1] // let data = JSON.parse(decodeURIComponent(escape(window.atob(payload)))); // let role = data.role // commit('SET_ROLE', role) +======= + let payload = response.token.split('.')[1] + let data = JSON.parse(decodeURIComponent(escape(window.atob(payload)))); + let role = data.role + commit('SET_ROLE', role) +>>>>>>> a025baf3ccfea2fef8bc69b80776e0c33d2153a5 // 存储到本地 关闭页面后,自动登录的功能还在考虑 // if (response.code == 0) { // sessionStorage['zssr_token'] = response.token; diff --git a/src/views/person/components/PersonPicture.vue b/src/views/person/components/PersonPicture.vue index 7b0cccb..29eea71 100644 --- a/src/views/person/components/PersonPicture.vue +++ b/src/views/person/components/PersonPicture.vue @@ -3,29 +3,199 @@
培训推荐
-
-
- - 关键词云 -
+
+
关键词云
人才评价

个人经历

-
+
+
+ 工作经历 + {{ industryExperience }}年工厂经验 + {{ jobExperience }}年岗位经验 +
+
+ 教育经历 + 全日制 + {{ personData["全日制毕(肄)业学校(单位)名称"] }} + 全日制 {{ personData["全日制毕(肄)业专业名称"] }} + 在职 {{ personData["在职毕(肄)业学校(单位)名称"] }} + 在职 {{ personData["在职毕(肄)业专业名称"] }} +
+
+ 知识技能 + {{ personData["最高专业技术资格等级"] + }}{{ personData["最高专业技术资格名称"] }} + {{ personData["最高职业技能等级级别"] + }}{{ personData["最高职业技能等级名称"] }} +
+
-

绩效

+

考核

+
+
+
+
+
+ +
+
+

创新

+
+ + + + + + + + + + +
+
+
+

活动

+
+ + + + +
+
+
+ +
+
+

事务

+
+ + + + + + + + + +
+
+
+

党务

+
+
+ + {{ value }} +
+
+
+
+ +
+
+

荣誉

+
+
+ + {{ value }} +
+
+
+
+

年度先进

+
+
+ + {{ value }} +
+
+
+
+ +
+
+

论文

+
+ + + + + + + + + + + + + +
+
+
+

项目

@@ -37,37 +207,217 @@ import * as echarts from "echarts"; import "echarts-wordcloud"; +import * as personApi from "@/api/person"; + export default { props: ["data"], data() { return { personData: this.data, - wordcloudData: [ - { name: "女", value: 1 }, - { name: "三连优秀", value: 90 }, - { name: "学士", value: 40 }, - { name: "大学", value: 40 }, - { name: "90后", value: 1 }, - { name: "兴趣盎然", value: 24 }, - { name: "初出茅庐", value: 10 }, - { name: "中共党员", value: 25 }, - { name: "本省人", value: 1 }, - { name: "三次优秀", value: 90 }, - { name: "文思敏捷", value: 70 }, - { name: "新党员", value: 25 }, - { name: "运动达人", value: 24 }, - { name: "初来乍到", value: 20 }, - { name: "四级电工", value: 80 }, - { name: "优秀员工", value: 90 }, - { name: "积极踊跃", value: 8 }, - { name: "创新达人", value: 90 }, - { name: "初级助理工程师", value: 80 }, - ], + wordcloudData: [], + radarData: [], + appraiseData: {}, + honorData: [], + advanceData: [], + innovationData: [], + articleData: [], + activityData: [], + routineData: [], + partyData: [], }; }, mounted() { - this.showRadarChart(); - this.showWordCloud(); + if (!this.personData.hasOwnProperty("姓名")) { + return; + } + // 发送词云请求 + personApi + .getPersonTag({ + query: this.$store.state.user.id_card, + }) + .then( + (res) => { + this.wordcloudData = res.data.wordcloud; + this.radarData = res.data.radar; + this.showWordCloud(); + this.showRadarChart(); + }, + (err) => { + console.log("err", err); + } + ); + + // 发送考核请求 + personApi + .getAppraise({ + id_card: this.$store.state.user.id_card, + }) + .then( + (res) => { + let resData = res.data; + let xAxisData = [], + yAxisData = [], + nameData = []; + let appraiseMap = { + 不确定等次: 0, + 不合格: 1, + 不称职: 1, + 基本合格: 2, + 基本称职: 2, + 合格: 3, + 称职: 3, + 优秀: 4, + }; + // 此处不需要对年份进行排序,接口返回的数据有序 + for (let year in resData) { + xAxisData.push(year); + let appraiseValue = resData[year]; + if (appraiseValue in appraiseMap) { + yAxisData.push(appraiseMap[appraiseValue]); + } else { + yAxisData.push(0); + } + nameData.push(appraiseValue); + } + this.appraiseData = { + xAxis: xAxisData, + yAxis: yAxisData, + name: nameData, + }; + this.showAppraiseChart(); + }, + (err) => { + console.log("err", err); + } + ); + + // 发送荣誉请求 + personApi.getHonor({ id_card: this.$store.state.user.id_card }).then( + (res) => { + this.honorData = res.data; + }, + (err) => { + console.log("err", err); + } + ); + + // 发送先进请求 + personApi.getAdvance({ id_card: this.$store.state.user.id_card }).then( + (res) => { + let advanceData = res.data; + // 按时间降序排列 + function sortByTime(x, y) { + let numX = parseInt(x), + numY = parseInt(y); + return numY - numX; + } + advanceData.sort(sortByTime); + this.advanceData = advanceData; + }, + (err) => { + console.log("err", err); + } + ); + + // 发送创新请求 + personApi.getInnovation({ id_card: this.$store.state.user.id_card }).then( + (res) => { + this.innovationData = res.data; + }, + (err) => { + console.log("err", err); + } + ); + + // 发送论文请求 + personApi.getArticle({ id_card: this.$store.state.user.id_card }).then( + (res) => { + this.articleData = res.data; + }, + (err) => { + console.log("err", err); + } + ); + + // 发送活动请求 + personApi.getActivity({ id_card: this.$store.state.user.id_card }).then( + (res) => { + this.activityData = res.data; + }, + (err) => { + console.log("err", err); + } + ); + + // 发送事务请求 + personApi.getRoutine({ id_card: this.$store.state.user.id_card }).then( + (res) => { + this.routineData = res.data; + }, + (err) => { + console.log("err", err); + } + ); + + // 发送党务请求 + personApi.getParty({ id_card: this.$store.state.user.id_card }).then( + (res) => { + let partyData = res.data; + // 按时间降序排列 + function sortByTime(x, y) { + let numX = parseInt(x), + numY = parseInt(y); + return numY - numX; + } + partyData.sort(sortByTime); + this.partyData = partyData; + }, + (err) => { + console.log("err", err); + } + ); + }, + computed: { + industryExperience() { + return this.getAge(this.personData["进入行业时间"]); + }, + jobExperience() { + return this.getAge(this.personData["现岗位起始时间"]); + }, + activityColumns() { + let columns = [ + { + prop: "year", + label: "年份", + width: "100", + sortable: true, + }, + { + prop: "name", + label: "活动名", + }, + { + prop: "item", + label: "项目名", + }, + { + prop: "grade", + label: "级别", + width: "80", + }, + ]; + // 动态添加列名 + if (this.activityData.length > 0) { + let row = this.activityData[0]; + if ("prize" in row) { + columns.push({ prop: "prize", label: "奖品" }); + } + if ("role" in row) { + columns.push({ prop: "role", label: "角色", width: "80" }); + } + } + return columns; + }, }, methods: { showRadarChart() { @@ -79,11 +429,13 @@ export default { title: { text: "", }, + color: ["#5470c6", "#91cc75"], legend: { data: ["个人", "全员平均"], }, + tooltip: {}, radar: { - shape: "circle", + // shape: "circle", indicator: [ // { name: "工作态度", max: 100 }, { name: "工作能力", max: 100 }, @@ -97,16 +449,7 @@ export default { { name: "员工表现雷达图", type: "radar", - data: [ - { - value: [49, 45, 34, 20, 78], - name: "个人", - }, - { - value: [33, 73, 21, 22, 57], - name: "全员平均", - }, - ], + data: this.radarData, }, ], }; @@ -158,6 +501,95 @@ export default { ], }); }, + getAge(birthday) { + //出生时间 毫秒 + let birthDayTime = new Date(birthday).getTime(); + if (birthDayTime !== birthDayTime) { + // NaN + return null; + } + //当前时间 毫秒 + let nowTime = new Date().getTime(); + //一年毫秒数(365 * 86400000 = 31536000000) + return Math.ceil((nowTime - birthDayTime) / 31536000000); + }, + showAppraiseChart() { + let myChart = echarts.init(document.getElementById("appraise_chart")); + let option = { + tooltip: { + trigger: "axis", + formatter: (params) => { + let year = params[0]["name"]; + let value = params[0]["value"]; + let yearIndex = this.appraiseData["xAxis"].indexOf(year); + let name = this.appraiseData["name"][yearIndex]; + return `${name}: ${value}`; + }, + }, + xAxis: { + type: "category", + data: this.appraiseData["xAxis"], + }, + yAxis: { + type: "value", + }, + grid: { + top: "6%", + left: "1%", + right: "1%", + bottom: "1%", + containLabel: true, + }, + dataZoom: [ + { + type: "inside", + start: 0, + end: 100, + }, + ], + series: [ + { + data: this.appraiseData["yAxis"], + type: "line", + }, + ], + }; + myChart.setOption(option); + }, + getHonorTagType(value) { + if (value.includes("全国")) { + // 红色 + return "danger"; + } + if (value.includes("省级")) { + // 橙色 + return "warning"; + } + if (value.includes("州级")) { + // 蓝色 + return ""; + } + if (value.includes("厂级")) { + // 绿色 + return "success"; + } + return ""; + }, + getHonorIconName(value) { + if (value.includes("全国")) { + return "红色勋章"; + } + if (value.includes("省级")) { + return "橙色勋章"; + } + if (value.includes("州级")) { + return "蓝色勋章"; + } + if (value.includes("厂级")) { + return "绿色勋章"; + } + return "蓝色勋章"; + }, }, }; @@ -181,6 +613,10 @@ export default { float: right; } +.pp-block1 { + overflow: hidden; +} + .pp-block1-left { float: left; margin-right: 1%; @@ -198,6 +634,7 @@ export default { .pp-block2 { margin-top: 0px; + /* overflow: hidden; */ } .pp-block2-left { @@ -215,12 +652,8 @@ export default { width: 50%; } -.pp-half-block2 { - display: inline-block; - /* border: 1px #e4e7ed solid; */ - /* box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); */ - height: 200px; - width: 50%; +.height-350 { + height: 350px; } .item-title-p { @@ -233,5 +666,24 @@ export default { width: 100%; height: 80%; border: 1px #e4e7ed solid; + margin-right: 10px; +} + +.tag-bar { + margin: 10px 0px 0px 10px; +} + +.honor-bar { + margin: 10px 0px 0px 10px; +} + + + \ No newline at end of file diff --git a/src/views/person/components/WorkInformation.vue b/src/views/person/components/WorkInformation.vue index 0fe90e4..43a7331 100644 --- a/src/views/person/components/WorkInformation.vue +++ b/src/views/person/components/WorkInformation.vue @@ -124,7 +124,8 @@ export default { personData: this.data, }; }, - mounted() {}, + mounted() { + }, computed: { workAge: function () { return this.getAge(this.personData.参加工作时间); diff --git a/src/views/person/information.vue b/src/views/person/information.vue index ad22423..f660887 100644 --- a/src/views/person/information.vue +++ b/src/views/person/information.vue @@ -33,7 +33,7 @@ - + @@ -56,12 +56,12 @@ export default { data() { return { comName: "ComPersonPicture", - personData: null, + personData: {}, avatarUrl: require("@/assets/images/女.png") }; }, mounted() { - // 发送请求 + // 发送获取基本信息请求 personApi.getPersonData({ "id_card": this.$store.state.user.id_card }).then( @@ -73,6 +73,8 @@ export default { console.log('err:', err); } ) + + }, computed: { personAge() { diff --git a/src/views/person/review.vue b/src/views/person/review.vue index 0a400eb..433ea92 100644 --- a/src/views/person/review.vue +++ b/src/views/person/review.vue @@ -559,7 +559,7 @@

厂里累计有 {{ totalPersonProjectNum }} - 人负责过项目,最多有人负责过7次项目。 + 人负责过项目,最多有人负责过5次项目。

立项最多的年份是2021年,共计13个项目;立项最少的年份是2022年,仅1个项目。 diff --git a/vue.config.js b/vue.config.js index f2d4622..1ac3c11 100644 --- a/vue.config.js +++ b/vue.config.js @@ -39,11 +39,16 @@ module.exports = { proxy: { '/': { // target: 'http://127.0.0.1:4523/m1/1256020-0-default/', +<<<<<<< HEAD // target: 'http://127.0.0.1:8000', // target: 'http://192.168.31.102:8000', // target: 'http://222.20.95.239:8000', target: 'http://127.0.0.1:4523/m1/1256020-0-default', // target: 'http://127.0.0.1:8123', +======= + // target: 'http://222.20.95.239:8000', + target: 'http://127.0.0.1:8123', +>>>>>>> a025baf3ccfea2fef8bc69b80776e0c33d2153a5 changeOrigin: true, pathRewrite: { }