Commit 20bfc39e authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents c8f17197 b19f6f2a
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
NODE_ENV = production NODE_ENV = production
# 地址 # 地址
VUE_APP_BASE_API = VUE_APP_API_BASE_URL =http://112.19.80.237:11039
# websocket地址 # websocket地址
VUE_APP_WEBSOCKET_API = VUE_APP_WEBSOCKET_API =
......
...@@ -6442,9 +6442,8 @@ ...@@ -6442,9 +6442,8 @@
}, },
"node_modules/echarts": { "node_modules/echarts": {
"version": "4.9.0", "version": "4.9.0",
"resolved": "https://registry.nlark.com/echarts/download/echarts-4.9.0.tgz", "resolved": "https://registry.npmjs.org/echarts/-/echarts-4.9.0.tgz",
"integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=", "integrity": "sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==",
"license": "Apache-2.0",
"dependencies": { "dependencies": {
"zrender": "4.3.2" "zrender": "4.3.2"
} }
...@@ -22404,8 +22403,8 @@ ...@@ -22404,8 +22403,8 @@
}, },
"echarts": { "echarts": {
"version": "4.9.0", "version": "4.9.0",
"resolved": "https://registry.nlark.com/echarts/download/echarts-4.9.0.tgz", "resolved": "https://registry.npmjs.org/echarts/-/echarts-4.9.0.tgz",
"integrity": "sha1-qbm6oD8Doqcx5jQMVb77V6nhNH0=", "integrity": "sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==",
"requires": { "requires": {
"zrender": "4.3.2" "zrender": "4.3.2"
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"test": "vue-cli-service build --mode test", "test": "vue-cli-service build --mode test",
......
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="18px" height="18px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -72 -264 )">
<path d="M 81 268.5 C 83.52 268.5 85.5 270.48 85.5 273 C 85.5 275.52 83.52 277.5 81 277.5 C 78.48 277.5 76.5 275.52 76.5 273 C 76.5 270.48 78.48 268.5 81 268.5 Z " fill-rule="nonzero" fill="#3377ff" stroke="none" />
<path d="M 81 266.5 C 84.64 266.5 87.5 269.36 87.5 273 C 87.5 276.64 84.64 279.5 81 279.5 C 77.36 279.5 74.5 276.64 74.5 273 C 74.5 269.36 77.36 266.5 81 266.5 Z " stroke-width="5" stroke="#3377ff" fill="none" stroke-opacity="0.247058823529412" />
</g>
</svg>
\ No newline at end of file
html {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
box-sizing: border-box;
}
html * {
outline: 0;
box-sizing: inherit;
-webkit-text-size-adjust: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html,
body {
height: 100%;
min-height: 100%;
font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial, sans-serif;
}
body {
overflow-y: scroll;
}
body,
div,
dl,
dt,
dd,
ul,
ol,
li,
h1,
h2,
h3,
h4,
h5,
h6,
pre,
code,
form,
fieldset,
legend,
input,
textarea,
p,
blockquote,
th,
td,
hr,
button,
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
margin: 0;
padding: 0;
}
input,
select,
textarea,
button {
font-size: 100%;
-webkit-appearance: none;
border: 0;
outline: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
fieldset,
img {
border: 0;
}
abbr,
acronym {
border: 0;
font-variant: normal;
}
del {
text-decoration: line-through;
}
address,
caption,
cite,
code,
dfn,
em,
th,
var {
font-style: normal;
font-weight: 500;
}
ol,
ul {
list-style: none;
}
caption,
th {
text-align: left;
}
q:before,
q:after {
content: "";
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
.mt20 {
margin-top: 20px;
}
.mt10 {
margin-top: 10px;
}
.ml10 {
margin-left: 10px;
}
.ml20 {
margin-left: 20px;
}
ins,
a {
text-decoration: none;
cursor: pointer;
}
/* ============================================================
flex:定义布局为盒模型
flex-v:盒模型垂直布局
flex-1:子元素占据剩余的空间
flex-align-center:子元素垂直居中
flex-pack-center:子元素水平居中
flex-pack-justify:子元素两端对齐
兼容性:ios 4+、android 2.3+、winphone8+
============================================================ */
.flex {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
.flex-v {
-webkit-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
.flex-1 {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.flex-align-center {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.flex-pack-center {
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
.flex-pack-justify {
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
}
.flex_warp {
flex-wrap: wrap;
}
.flex_end {
justify-content: flex-end;
}
.clearfix:after {
content: "";
display: table;
clear: both;
font-size: 0;
}
.fl {
float: left;
}
.fr {
float: right;
}
.hide {
display: none;
}
.disabled {
pointer-events: none;
}
#app,
.pages {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
height: 100%;
overflow: hidden;
}
.ellipsis {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
[v-cloak] {
display: none;
}
[disabled] {
pointer-events: none;
}
.el-dialog .el-checkbox-group .el-checkbox {
margin: 5px 0;
width: 33.33%;
}
.el-dialog .el-checkbox-group .pointBox {
width: 50%;
}
.el-table th {
user-select: all;
}
.el-progress-bar {
padding-right: 70px;
margin-right: -70px;
}
#operatorUserCabinCheckBox .el-checkbox {
white-space: normal !important;
width: 100%;
}
#operatorUserCabinCheckBox .el-checkbox__label {
display: inline;
}
.page-statistics .chart {
margin-bottom: 80px;
border: 1px solid #ededed;
height: 400px;
}
.page-statistics .el-table th.color-gray,
.page-statistics .el-table tr.color-gray {
background-color: #f0f9eb;
}
@media screen and (max-width: 800px) {
.page {
margin: 5px 5px;
}
.el-dialog {
width: 98% !important;
}
.el-dialog .el-checkbox-group .el-checkbox {
margin: 5px 0;
width: 50%;
font-size: 12px;
}
.el-dialog .el-checkbox-group .el-checkbox .el-checkbox__label {
font-size: 12px;
}
}
.mobile-table-card {
margin: 10px auto;
padding: 10px;
box-shadow: 0 0 5px #ccc;
}
.mobile-table-card .mobile-table-cell {
padding: 5px 0;
border-bottom: 1px dotted #eee;
}
.mobile-table-card .mobile-table-cell .cell-title {
font-size: 13px;
color: #666;
}
.mobile-table-card .mobile-table-cell .cell-content {
padding-left: 5px;
text-align: right;
word-break: break-word;
}
...@@ -8,58 +8,111 @@ html * { ...@@ -8,58 +8,111 @@ html * {
outline: 0; outline: 0;
box-sizing: inherit; box-sizing: inherit;
-webkit-text-size-adjust: none; -webkit-text-size-adjust: none;
-webkit-tap-highlight-color: rgba(0,0,0,0) -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
html,body { html,
body {
height: 100%; height: 100%;
min-height: 100%; min-height: 100%;
font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial, sans-serif; font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial,
sans-serif;
} }
body { body {
overflow-y: scroll; overflow-y: scroll;
} }
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section { body,
div,
dl,
dt,
dd,
ul,
ol,
li,
h1,
h2,
h3,
h4,
h5,
h6,
pre,
code,
form,
fieldset,
legend,
input,
textarea,
p,
blockquote,
th,
td,
hr,
button,
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
margin: 0; margin: 0;
padding: 0 padding: 0;
} }
input,select,textarea,button { input,
select,
textarea,
button {
font-size: 100%; font-size: 100%;
-webkit-appearance: none; -webkit-appearance: none;
border:0; border: 0;
outline: 0; outline: 0;
} }
table { table {
border-collapse: collapse; border-collapse: collapse;
border-spacing: 0 border-spacing: 0;
} }
fieldset,img { fieldset,
border: 0 img {
border: 0;
} }
abbr,acronym { abbr,
acronym {
border: 0; border: 0;
font-variant: normal font-variant: normal;
} }
del { del {
text-decoration: line-through text-decoration: line-through;
} }
address,caption,cite,code,dfn,em,th,var { address,
caption,
cite,
code,
dfn,
em,
th,
var {
font-style: normal; font-style: normal;
font-weight: 500 font-weight: 500;
} }
ol,ul { ol,
list-style: none ul {
list-style: none;
} }
caption,th { caption,
text-align: left th {
text-align: left;
} }
// h1,h2,h3,h4,h5,h6 { // h1,h2,h3,h4,h5,h6 {
...@@ -67,37 +120,40 @@ caption,th { ...@@ -67,37 +120,40 @@ caption,th {
// font-weight: 500 // font-weight: 500
// } // }
q:before,q:after { q:before,
content: '' q:after {
content: "";
} }
sub,sup { sub,
sup {
font-size: 75%; font-size: 75%;
line-height: 0; line-height: 0;
position: relative; position: relative;
vertical-align: baseline vertical-align: baseline;
} }
sup { sup {
top: -.5em top: -0.5em;
} }
sub { sub {
bottom: -.25em bottom: -0.25em;
} }
.mt20{ .mt20 {
margin-top: 20px; margin-top: 20px;
} }
.mt10{ .mt10 {
margin-top: 10px; margin-top: 10px;
} }
.ml10{ .ml10 {
margin-left: 10px; margin-left: 10px;
} }
.ml20{ .ml20 {
margin-left: 20px; margin-left: 20px;
} }
ins,a { ins,
a {
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
} }
...@@ -110,39 +166,78 @@ ins,a { ...@@ -110,39 +166,78 @@ ins,a {
flex-pack-justify:子元素两端对齐 flex-pack-justify:子元素两端对齐
兼容性:ios 4+、android 2.3+、winphone8+ 兼容性:ios 4+、android 2.3+、winphone8+
============================================================ */ ============================================================ */
.flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;} .flex {
.flex-v{-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;} display: -webkit-box;
.flex-1{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;} display: -webkit-flex;
.flex-align-center{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;} display: -ms-flexbox;
.flex-pack-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;} display: flex;
.flex-pack-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;} }
.flex_warp{flex-wrap: wrap;} .flex-v {
.flex_end{ -webkit-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
.flex-1 {
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.flex-align-center {
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.flex-pack-center {
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
.flex-pack-justify {
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
}
.flex_warp {
flex-wrap: wrap;
}
.flex_end {
justify-content: flex-end; justify-content: flex-end;
} }
.clearfix{ .clearfix {
&:after{ &:after {
content: ''; content: "";
display: table; display: table;
clear: both; clear: both;
font-size: 0; font-size: 0;
} }
} }
.fl{float: left}; .fl {
.fr{float: right}; float: left;
.hide{display: none;} }
.disabled{ .fr {
float: right;
}
.hide {
display: none;
}
.disabled {
pointer-events: none; pointer-events: none;
} }
#app,.pages{ #app,
.pages {
.flex; .flex;
.flex-v; .flex-v;
height: 100%; height: 100%;
overflow: hidden;
} }
.ellipsis {
.ellipsis{
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
...@@ -153,13 +248,13 @@ ins,a { ...@@ -153,13 +248,13 @@ ins,a {
[disabled] { [disabled] {
pointer-events: none; pointer-events: none;
} }
.el-dialog{ .el-dialog {
.el-checkbox-group{ .el-checkbox-group {
.el-checkbox{ .el-checkbox {
margin: 5px 0; margin: 5px 0;
width: 33.33%; width: 33.33%;
} }
.pointBox{ .pointBox {
width: 50%; width: 50%;
} }
} }
...@@ -167,48 +262,47 @@ ins,a { ...@@ -167,48 +262,47 @@ ins,a {
.el-table th { .el-table th {
user-select: all; user-select: all;
} }
.el-progress-bar{ .el-progress-bar {
padding-right: 70px; padding-right: 70px;
margin-right: -70px; margin-right: -70px;
} }
#operatorUserCabinCheckBox .el-checkbox{ #operatorUserCabinCheckBox .el-checkbox {
white-space: normal !important; white-space: normal !important;
width: 100% width: 100%;
} }
#operatorUserCabinCheckBox .el-checkbox__label{ #operatorUserCabinCheckBox .el-checkbox__label {
display: inline; display: inline;
} }
// 统计页面隔日期变色 // 统计页面隔日期变色
.page-statistics{ .page-statistics {
.chart{ .chart {
margin-bottom: 80px; margin-bottom: 80px;
border: 1px solid #ededed; border: 1px solid #ededed;
height: 400px; height: 400px;
} }
.el-table th, .el-table tr{ .el-table th,
&.color-gray{ .el-table tr {
&.color-gray {
background-color: #f0f9eb; background-color: #f0f9eb;
} }
} }
} }
@media screen and (max-width: 800px) {
.page {
@media screen and (max-width: 800px){
.page{
margin: 5px 5px; margin: 5px 5px;
} }
.el-dialog{ .el-dialog {
width: 98%!important; width: 98% !important;
.el-checkbox-group{ .el-checkbox-group {
.el-checkbox{ .el-checkbox {
margin: 5px 0; margin: 5px 0;
width: 50%; width: 50%;
font-size: 12px; font-size: 12px;
.el-checkbox__label{ .el-checkbox__label {
font-size: 12px; font-size: 12px;
} }
} }
...@@ -220,18 +314,18 @@ ins,a { ...@@ -220,18 +314,18 @@ ins,a {
// background-color: red; // background-color: red;
// } // }
.mobile-table-card{ .mobile-table-card {
margin: 10px auto; margin: 10px auto;
padding: 10px; padding: 10px;
box-shadow: 0 0 5px #ccc; box-shadow: 0 0 5px #ccc;
.mobile-table-cell{ .mobile-table-cell {
padding: 5px 0; padding: 5px 0;
border-bottom: 1px dotted #eee; border-bottom: 1px dotted #eee;
.cell-title{ .cell-title {
font-size: 13px; font-size: 13px;
color: #666; color: #666;
} }
.cell-content{ .cell-content {
padding-left: 5px; padding-left: 5px;
text-align: right; text-align: right;
word-break: break-word; word-break: break-word;
......
...@@ -8,15 +8,13 @@ export default { ...@@ -8,15 +8,13 @@ export default {
methods: { methods: {
// 渲染前置处理 // 渲染前置处理
beforeRender(data) { beforeRender(data) {
return data return data;
}, },
// 渲染后置处理 // 渲染后置处理
afterRender(data) { afterRender(data) {},
},
// 提交表单的前置处理 // 提交表单的前置处理
beforeSubmit(data) { beforeSubmit(data) {
return data return data;
}, },
// 提交表单的后置处理, 会阻断默认的回退行为 // 提交表单的后置处理, 会阻断默认的回退行为
afterSubmit(data) { afterSubmit(data) {
...@@ -39,16 +37,16 @@ export default { ...@@ -39,16 +37,16 @@ export default {
// 部门格式化处理 // 部门格式化处理
this.afterRender(res); this.afterRender(res);
}) })
.catch(error => { .catch((error) => {
console.error(error) console.error(error);
this.$message.error(error.message); this.$message.error(error.message);
}) })
.then(data => { .then((data) => {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => { this.loadingTimer = setTimeout(() => {
this.loading = false; this.loading = false;
}, 300); }, 300);
}) });
}, },
// 提交表单 // 提交表单
submitForm(ref) { submitForm(ref) {
...@@ -56,73 +54,82 @@ export default { ...@@ -56,73 +54,82 @@ export default {
el.validate((valid) => { el.validate((valid) => {
if (!valid) return; if (!valid) return;
this.loading = true; this.loading = true;
console.log('提交了') console.log("提交了");
this.$post(this.urls.saveUrl || this.pageInfo.saveUrl, this.$post(
this.urls.saveUrl || this.pageInfo.saveUrl,
this.beforeSubmit(this.form) this.beforeSubmit(this.form)
) )
.then(res => { .then((res) => {
this.$message.success(res.msg); this.$message.success(res.msg);
this.afterSubmit(res); this.afterSubmit(res);
}) })
.catch(error => { .catch((error) => {
this.$message.error(error.message); this.$message.error(error.message);
}) })
.then(data => { .then((data) => {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => { this.loadingTimer = setTimeout(() => {
this.loading = false; this.loading = false;
}, 200); }, 200);
}) });
}); });
}, },
// 复制一个数组或对象 // 复制一个数组或对象
util_copy(data) { util_copy(data) {
return JSON.parse(JSON.stringify(data)) return JSON.parse(JSON.stringify(data));
}, },
// 工具方法,把数字转化为字符串 // 工具方法,把数字转化为字符串
util_toString(data, array) { util_toString(data, array) {
//原始数据 //原始数据
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
//如果相等做操作 //如果相等做操作
dataCopy[item] = dataCopy[item] === undefined ? '' : dataCopy[item] + ''; dataCopy[item] =
}) dataCopy[item] === undefined ? "" : dataCopy[item] + "";
});
return dataCopy; return dataCopy;
}, },
// 工具方法,把字符串转化为数组 // 工具方法,把字符串转化为数组
util_toArrays(data, array) { util_toArrays(data, array) {
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
dataCopy[item] = dataCopy[item] === undefined ? [] : dataCopy[item].split(","); dataCopy[item] =
}) dataCopy[item] === undefined ? [] : dataCopy[item].split(",");
});
return dataCopy; return dataCopy;
}, },
// 工具方法,把字符串转化为格式化日期 // 工具方法,把字符串转化为格式化日期
util_toDateStr(data, array) { util_toDateStr(data, array) {
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
dataCopy[item] = dataCopy[item] === undefined ? '' : this.util_formatterDate(dataCopy[item]); dataCopy[item] =
}) dataCopy[item] === undefined
? ""
: this.util_formatterDate(dataCopy[item]);
});
return dataCopy; return dataCopy;
}, },
util_formatterDate(time) { util_formatterDate(time) {
let date = new Date(Number(time)); let date = new Date(Number(time));
let Y = date.getFullYear() + '-'; let Y = date.getFullYear() + "-";
let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; let M =
let D = this.panLeft(date.getDate()) + ' '; (date.getMonth() + 1 < 10
let h = this.panLeft(date.getHours()) + ':'; ? "0" + (date.getMonth() + 1)
let m = this.panLeft(date.getMinutes()) + ':'; : date.getMonth() + 1) + "-";
let D = this.panLeft(date.getDate()) + " ";
let h = this.panLeft(date.getHours()) + ":";
let m = this.panLeft(date.getMinutes()) + ":";
let s = this.panLeft(date.getSeconds()); let s = this.panLeft(date.getSeconds());
return Y+M+D+h+m+s; return Y + M + D + h + m + s;
}, },
panLeft(num){ panLeft(num) {
return num < 10 ? '0'+num : num; return num < 10 ? "0" + num : num;
}, },
// 从dict字段暴力取值,取不到则返回原值 // 从dict字段暴力取值,取不到则返回原值
util_formatter(key, val) { util_formatter(key, val) {
try { try {
return this.dict[key][val] return this.dict[key][val];
} catch (error) { } catch (error) {
return val; return val;
} }
...@@ -135,24 +142,24 @@ export default { ...@@ -135,24 +142,24 @@ export default {
} }
}); });
}, 0); }, 0);
} },
}, },
computed: { computed: {
pageInfo() { pageInfo() {
let currUrl = this.$route.path; let currUrl = this.$route.path;
let urlArray = currUrl.split('/'); let urlArray = currUrl.split("/");
let type = urlArray.pop(); let type = urlArray.pop();
urlArray.push('save'); urlArray.push("save");
let saveUrl = urlArray.join('/'); let saveUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('edit'); urlArray.push("edit");
let editUrl = urlArray.join('/'); let editUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('add'); urlArray.push("add");
let addUrl = urlArray.join('/'); let addUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('view'); urlArray.push("view");
let viewUrl = urlArray.join('/'); let viewUrl = urlArray.join("/");
return { return {
type, type,
currUrl, currUrl,
...@@ -176,9 +183,6 @@ export default { ...@@ -176,9 +183,6 @@ export default {
toString: [], // 需要把number转化为string的表单字段name数组 toString: [], // 需要把number转化为string的表单字段name数组
toArrays: [], // 需要把number转化为arrays的表单字段name数组 toArrays: [], // 需要把number转化为arrays的表单字段name数组
toDate: [], // 需要把number转化为date的表单字段name数组 toDate: [], // 需要把number转化为date的表单字段name数组
} };
} },
} };
...@@ -8,15 +8,13 @@ export default { ...@@ -8,15 +8,13 @@ export default {
methods: { methods: {
// 渲染前置处理 // 渲染前置处理
beforeRender(data) { beforeRender(data) {
return data return data;
}, },
// 渲染后置处理 // 渲染后置处理
afterRender(data) { afterRender(data) {},
},
// 提交表单的前置处理 // 提交表单的前置处理
beforeSubmit(data) { beforeSubmit(data) {
return data return data;
}, },
// 提交表单的后置处理, 会阻断默认的回退行为 // 提交表单的后置处理, 会阻断默认的回退行为
afterSubmit(data) { afterSubmit(data) {
...@@ -48,87 +46,101 @@ export default { ...@@ -48,87 +46,101 @@ export default {
this.dict = Object.assign({}, this.dict, res.dict); this.dict = Object.assign({}, this.dict, res.dict);
this.afterRender(res); this.afterRender(res);
}) })
.catch(error => { .catch((error) => {
this.$message.error(error.message) this.$message.error(error.message);
throw error throw error;
}) })
.then(data => { .then((data) => {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => { this.loadingTimer = setTimeout(() => {
this.loading = false; this.loading = false;
}, 300); }, 300);
}) });
}, },
// 提交表单 // 提交表单
submitForm(ref) { submitForm(ref) {
let url = this.urls.saveUrl || this.pageInfo.saveUrl;
if (url == "/staff/perform/stat/save") {
url = "/perform/perpose/save";
} else if (url == "/perform/rules/attend/save") {
url = "/perform/rules/category/save";
}
const el = this.$refs.form; const el = this.$refs.form;
el.validate((valid) => { el.validate((valid) => {
if (!valid) return; if (!valid) return;
this.loading = true; this.loading = true;
this.$post(this.urls.saveUrl || this.pageInfo.saveUrl, this.beforeSubmit(this.form)) this.$post(url, this.beforeSubmit(this.form))
.then(res => { .then((res) => {
this.$message.success(res.msg); this.$message.success(res.msg);
this.afterSubmit(res); this.afterSubmit(res);
}) })
.catch(error => { .catch((error) => {
this.$message.error(error.message); this.$message.error(error.message);
}) })
.then(data => { .then((data) => {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => { this.loadingTimer = setTimeout(() => {
this.loading = false; this.loading = false;
}, 200); }, 200);
}) });
}); });
}, },
// 复制一个数组或对象 // 复制一个数组或对象
util_copy(data) { util_copy(data) {
return JSON.parse(JSON.stringify(data)) return JSON.parse(JSON.stringify(data));
}, },
// 工具方法,把数字转化为字符串 // 工具方法,把数字转化为字符串
util_toString(data, array) { util_toString(data, array) {
//原始数据 //原始数据
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
//如果相等做操作 //如果相等做操作
dataCopy[item] = dataCopy[item] === undefined ? '' : dataCopy[item] + ''; dataCopy[item] =
}) dataCopy[item] === undefined ? "" : dataCopy[item] + "";
});
return dataCopy; return dataCopy;
}, },
// 工具方法,把字符串转化为数组 // 工具方法,把字符串转化为数组
util_toArrays(data, array) { util_toArrays(data, array) {
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
dataCopy[item] = dataCopy[item] === undefined ? [] : dataCopy[item].split(","); dataCopy[item] =
}) dataCopy[item] === undefined ? [] : dataCopy[item].split(",");
});
return dataCopy; return dataCopy;
}, },
// 工具方法,把字符串转化为格式化日期 // 工具方法,把字符串转化为格式化日期
util_toDateStr(data, array) { util_toDateStr(data, array) {
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
dataCopy[item] = dataCopy[item] === undefined ? '' : this.util_formatterDate(dataCopy[item]); dataCopy[item] =
}) dataCopy[item] === undefined
? ""
: this.util_formatterDate(dataCopy[item]);
});
return dataCopy; return dataCopy;
}, },
util_formatterDate(time) { util_formatterDate(time) {
let date = new Date(Number(time)); let date = new Date(Number(time));
let Y = date.getFullYear() + '-'; let Y = date.getFullYear() + "-";
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let M =
let D = this.panLeft(date.getDate()) + ' '; (date.getMonth() + 1 < 10
let h = this.panLeft(date.getHours()) + ':'; ? "0" + (date.getMonth() + 1)
let m = this.panLeft(date.getMinutes()) + ':'; : date.getMonth() + 1) + "-";
let D = this.panLeft(date.getDate()) + " ";
let h = this.panLeft(date.getHours()) + ":";
let m = this.panLeft(date.getMinutes()) + ":";
let s = this.panLeft(date.getSeconds()); let s = this.panLeft(date.getSeconds());
return Y + M + D + h + m + s; return Y + M + D + h + m + s;
}, },
panLeft(num) { panLeft(num) {
return num < 10 ? '0' + num : num; return num < 10 ? "0" + num : num;
}, },
// 从dict字段暴力取值,取不到则返回原值 // 从dict字段暴力取值,取不到则返回原值
util_formatter(key, val) { util_formatter(key, val) {
try { try {
return this.dict[key][val] return this.dict[key][val];
} catch (error) { } catch (error) {
return val; return val;
} }
...@@ -141,24 +153,24 @@ export default { ...@@ -141,24 +153,24 @@ export default {
} }
}); });
}, 0); }, 0);
} },
}, },
computed: { computed: {
pageInfo() { pageInfo() {
let currUrl = this.$route.path; let currUrl = this.$route.path;
let urlArray = currUrl.split('/'); let urlArray = currUrl.split("/");
let type = urlArray.pop(); let type = urlArray.pop();
urlArray.push('save'); urlArray.push("save");
let saveUrl = urlArray.join('/'); let saveUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('edit'); urlArray.push("edit");
let editUrl = urlArray.join('/'); let editUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('add'); urlArray.push("add");
let addUrl = urlArray.join('/'); let addUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('view'); urlArray.push("view");
let viewUrl = urlArray.join('/'); let viewUrl = urlArray.join("/");
return { return {
type, type,
currUrl, currUrl,
...@@ -182,9 +194,6 @@ export default { ...@@ -182,9 +194,6 @@ export default {
toString: [], // 需要把number转化为string的表单字段name数组 toString: [], // 需要把number转化为string的表单字段name数组
toArrays: [], // 需要把number转化为arrays的表单字段name数组 toArrays: [], // 需要把number转化为arrays的表单字段name数组
toDate: [], // 需要把number转化为date的表单字段name数组 toDate: [], // 需要把number转化为date的表单字段name数组
} };
} },
} };
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
:default-expand-all="expand" :default-expand-all="expand"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
height="620"
> >
<el-table-column <el-table-column
......
...@@ -2,7 +2,12 @@ ...@@ -2,7 +2,12 @@
<template> <template>
<div class="layout-table" :loading="data.loading"> <div class="layout-table" :loading="data.loading">
<TabPane :thirdList="thirdList" :activeName="activeName" @handleClick="handleClick" v-if="config.isshowTabPane"></TabPane> <TabPane
:thirdList="thirdList"
:activeName="activeName"
@handleClick="handleClick"
v-if="config.isshowTabPane"
></TabPane>
<div class="table-head flex flex-pack-justify"> <div class="table-head flex flex-pack-justify">
<div class="table-head-left flex flex-align-center"> <div class="table-head-left flex flex-align-center">
<!-- <slot name="breadcrumb"> <!-- <slot name="breadcrumb">
...@@ -29,7 +34,8 @@ ...@@ -29,7 +34,8 @@
@click="config.methods.importView" @click="config.methods.importView"
class="el-icon-upload2" class="el-icon-upload2"
title="导入" title="导入"
>导入</el-button> >导入</el-button
>
<!-- <el-button <!-- <el-button
v-if="isShowButton('notDel')" v-if="isShowButton('notDel')"
...@@ -41,8 +47,19 @@ ...@@ -41,8 +47,19 @@
title="批量删除" title="批量删除"
>删除</el-button >删除</el-button
> --> > -->
<Confirm v-if='isShowButton("notDel")' @confirm='config.methods.del' message='确定要删除选中的多条记录吗?'> <Confirm
<el-button icon="el-icon-delete" type="danger" size='mini' plain title="批量删除">批量删除</el-button> v-if="isShowButton('notDel')"
@confirm="config.methods.del"
message="确定要删除选中的多条记录吗?"
>
<el-button
icon="el-icon-delete"
type="danger"
size="mini"
plain
title="批量删除"
>批量删除</el-button
>
</Confirm> </Confirm>
<el-button <el-button
@click="item.method" @click="item.method"
...@@ -126,7 +143,6 @@ ...@@ -126,7 +143,6 @@
:downloadUrl="config.downloadUrl" :downloadUrl="config.downloadUrl"
:areaSelect="config.areaSelect" :areaSelect="config.areaSelect"
/> />
</div> </div>
</div> </div>
</div> </div>
...@@ -220,7 +236,7 @@ import DataTable from "@/components/DataTable.vue"; ...@@ -220,7 +236,7 @@ import DataTable from "@/components/DataTable.vue";
import DataTableMobile from "./DataTableMobile.js"; import DataTableMobile from "./DataTableMobile.js";
import DataTableFlow from "./DataTableFlow.vue"; import DataTableFlow from "./DataTableFlow.vue";
import DataTreeTable from "@/components/DataTreeTable.vue"; import DataTreeTable from "@/components/DataTreeTable.vue";
import TabPane from "@/components/tabPane.vue" import TabPane from "@/components/tabPane.vue";
export default { export default {
props: { props: {
data: { data: {
...@@ -242,7 +258,9 @@ export default { ...@@ -242,7 +258,9 @@ export default {
DataTableMobile, DataTableMobile,
DataTableFlow, DataTableFlow,
DataTreeTable, DataTreeTable,
TabPane TabPane,
},
mounted() {
}, },
methods: { methods: {
// 根据url的query参数判断是否展示查询条件 // 根据url的query参数判断是否展示查询条件
...@@ -268,12 +286,12 @@ export default { ...@@ -268,12 +286,12 @@ export default {
isShowBtn(name) { isShowBtn(name) {
return this.canShow.indexOf(name) !== -1; return this.canShow.indexOf(name) !== -1;
}, },
handleClick(key){ handleClick(key) {
this.$store.commit('setThirdPath',key) this.$store.commit("setThirdPath", key);
this.$router.push({ this.$router.push({
path:key path: key,
}) });
} },
}, },
watch: { watch: {
$route(route) { $route(route) {
...@@ -288,21 +306,21 @@ export default { ...@@ -288,21 +306,21 @@ export default {
this.showType = this.config.showType ? this.config.showType : "table"; this.showType = this.config.showType ? this.config.showType : "table";
return Object.keys(this.$attrs) || []; return Object.keys(this.$attrs) || [];
}, },
thirdList(){ thirdList() {
if(!this.$store.state.CurrentThirdArr) return [] if (!this.$store.state.CurrentThirdArr) return [];
return this.$store.state.CurrentThirdArr return this.$store.state.CurrentThirdArr;
},
activeName() {
return this.$store.state.ThirdPath;
}, },
activeName(){
return this.$store.state.ThirdPath
}
}, },
data() { data() {
return { return {
loading: this.config.loading, loading: this.config.loading,
showSearch: this.isShowSearch(this.$route.query), showSearch: this.isShowSearch(this.$route.query),
showType: "table", showType: "table",
} };
} },
}; };
</script> </script>
......
import Vue from 'vue' import Vue from "vue";
import ElementUI from 'element-ui' import ElementUI from "element-ui";
import 'element-ui/lib/theme-chalk/index.css' import "element-ui/lib/theme-chalk/index.css";
import './assets/less/base.less' import "./assets/less/base.less";
import App from './App.vue' import App from "./App.vue";
import router from './router' import router from "./router";
import store from './store' import store from "./store";
import Prototype from './assets/utils/prototype' import Prototype from "./assets/utils/prototype";
import Filter from './assets/utils/filter.js' import Filter from "./assets/utils/filter.js";
import GlobalComponents from './assets/utils/globalComponents.js' import GlobalComponents from "./assets/utils/globalComponents.js";
import Global from './assets/utils/global.js' import Global from "./assets/utils/global.js";
import VueClipboard from 'vue-clipboard2' import VueClipboard from "vue-clipboard2";
import VueAMap from 'vue-amap'; import VueAMap from "vue-amap";
import * as echarts from 'echarts' import * as echarts from "echarts";
// 将自动注册所有组件为全局组件 // 将自动注册所有组件为全局组件
import dataV from '@jiaminghi/data-view' import dataV from "@jiaminghi/data-view";
Vue.use(dataV) Vue.use(dataV);
Vue.prototype.$echarts = echarts; Vue.prototype.$echarts = echarts;
Vue.config.productionTip = false Vue.config.productionTip = false;
Vue.use(ElementUI); Vue.use(ElementUI);
Vue.use(Prototype); Vue.use(Prototype);
Vue.use(Filter); Vue.use(Filter);
Vue.use(GlobalComponents); // 全局组件 Vue.use(GlobalComponents); // 全局组件
Vue.use(VueClipboard) Vue.use(VueClipboard);
Vue.use(VueAMap) Vue.use(VueAMap);
VueAMap.initAMapApiLoader({ VueAMap.initAMapApiLoader({
key: 'f45cca59553214543a5a77e50a7e04df', key: "f45cca59553214543a5a77e50a7e04df",
plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PlaceSearch', 'AMap.Geolocation', 'AMap.Geocoder'], plugin: [
v: '1.4.4', "AMap.Scale",
uiVersion: '1.0', "AMap.OverView",
}) "AMap.ToolBar",
"AMap.MapType",
"AMap.PlaceSearch",
"AMap.Geolocation",
"AMap.Geocoder",
],
v: "1.4.4",
uiVersion: "1.0",
});
Vue.prototype.Global = Global; Vue.prototype.Global = Global;
new Vue({ new Vue({
router, router,
store, store,
render: h => h(App) render: (h) => h(App),
}).$mount('#app') }).$mount("#app");
...@@ -125,6 +125,7 @@ const router = new Router({ ...@@ -125,6 +125,7 @@ const router = new Router({
...restBuilder("perform/attend/appeal/files", "perform/attend/appeal/files"), //绩效记录申诉信息附件列表 ...restBuilder("perform/attend/appeal/files", "perform/attend/appeal/files"), //绩效记录申诉信息附件列表
...restBuilder("feedback", "feedback"), //反馈信息 ...restBuilder("feedback", "feedback"), //反馈信息
...restBuilder("feedback/addQuestion", "feedback/addQuestion"), //新增反馈
...restBuilder("feedback/question", "feedback/question"), //反馈问题 ...restBuilder("feedback/question", "feedback/question"), //反馈问题
...restBuilder("feedback/option", "feedback/option"), //反馈选项 ...restBuilder("feedback/option", "feedback/option"), //反馈选项
......
<template>
<div class="page">
<div class="top">
<el-tabs v-model="tabs">
<el-tab-pane label="设计问卷" name="1">
<iframe style="width: 100%;height: 80vh;" src="https://wurong19870715.gitee.io/formdesigner/#/" frameborder="0"></iframe>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
export default {
data() {
return {
tabs: '1'
}
}
}
</script>
<style lang="less" scoped>
.top {}
</style>
\ No newline at end of file
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <LayoutTable :data="tableData" notDel notSearch :config="tableConfig">
</LayoutTable> </LayoutTable>
...@@ -9,14 +9,14 @@ ...@@ -9,14 +9,14 @@
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import drawerShow from "./drawershow"; import drawerShow from "./drawershow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "FeedbackList", name: "FeedbackList",
components: { components: {
drawerShow drawerShow
}, },
mixins: [table], mixins: [table],
created() { created() {
}, },
...@@ -41,7 +41,8 @@ ...@@ -41,7 +41,8 @@
}, },
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
this.$refs.drawerform.add(row); // this.$refs.drawerform.add(row);
this.$router.push("/feedback/addQuestion/list");
}, },
/** 重写编辑方法 */ /** 重写编辑方法 */
toEdit(row) { toEdit(row) {
...@@ -56,33 +57,34 @@ ...@@ -56,33 +57,34 @@
data() { data() {
return { return {
/** 子表列元素 */ /** 子表列元素 */
columnSet:[ columnSet: [
{label: "反馈问卷id号", prop: "feedbackId", formatter: this.formatter}, { label: "反馈问卷id号", prop: "feedbackId", formatter: this.formatter },
{label: "问题内容", prop: "content"}, { label: "问题内容", prop: "content" },
{label: "问题类型 ", prop: "questionType",formatter: this.formatter}, { label: "问题类型 ", prop: "questionType", formatter: this.formatter },
{label: "是否必填", prop: "require",formatter: this.formatter}, { label: "是否必填", prop: "require", formatter: this.formatter },
{label: "备注", prop: "remark"}, { label: "备注", prop: "remark" },
], ],
config: { config: {
isshowTabPane:false, isshowTabPane: true,
search: [ search: [
], ],
columns: [ columns: [
{type: "selection", width: 60}, { type: "selection", width: 60 },
{type: "index",label: "序号",width: 50}, { type: "index", label: "序号", width: 50 },
{label: "问卷标题", prop: "title"}, { label: "问卷标题", prop: "title" },
{label: "反馈开始时间", prop: "feedbackTimeStart", formatter: this.formatterDate}, { label: "反馈开始时间", prop: "feedbackTimeStart", formatter: this.formatterDate },
{label: "反馈结束时间", prop: "feedbackTimeEnd", formatter: this.formatterDate}, { label: "反馈结束时间", prop: "feedbackTimeEnd", formatter: this.formatterDate },
{label: "邀请人数", prop: "inviteNum",formatter: this.formatter}, { label: "邀请人数", prop: "inviteNum", formatter: this.formatter },
{label: "反馈人数", prop: "feedbackNum",formatter: this.formatter}, { label: "反馈人数", prop: "feedbackNum", formatter: this.formatter },
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, { label: "创建用户", prop: "createUserId", formatter: this.formatter },
{label: "绩效反馈问题", {
label: "绩效反馈问题",
width: 120, width: 120,
prop: "subColumns", prop: "subColumns",
formatter: (row) => { formatter: (row) => {
...@@ -110,5 +112,10 @@ ...@@ -110,5 +112,10 @@
} }
}; };
} }
}; };
</script> </script>
<style lang="less" scoped>
/deep/ .buttons {
margin-bottom: 10px;
}
</style>
<template>
<div>
<div :id="id" :style="styleObj"></div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: "",
},
id: {
type: String,
default: "",
},
legendName: {
type: String,
default: "",
},
styleObj: {
type: Object,
default: () => {},
},
},
data() {
return {};
},
watch: {
title(val) {
console.log(val);
this.drawLine();
},
},
mounted() {
this.drawLine();
},
methods: {
drawLine() {
// 基于dom,初始化echarts实例
let myChart = this.$echarts.init(document.getElementById(this.id));
// 绘制图表
myChart.setOption({
title: {
text: this.title,
left: this.legendName == "旷工率" ? "center" : "left",
textStyle: {
fontSize: this.legendName == "旷工率" ? 24 : 18,
},
},
color:'#6e98ed',
legend: {
orient: "horizontal",
right: "50px",
top: "0",
itemWidth: 20,
itemHeight: 10,
icon: "roundRect",
textStyle: {
fontSize: "14px",
color: "#000",
},
},
tooltip: {},
xAxis: {
data:
this.title == "申诉次数部门排名TOP20"
? [
"部门1",
"部门2",
"部门3",
"部门4",
"部门5",
"部门6",
"部门7",
"部门8",
"部门9",
"部门10",
"部门11",
"部门12",
"部门13",
"部门14",
"部门15",
"部门16",
"部门17",
"部门18",
"部门19",
"部门20",
]
: this.title == "申诉次数个人排名TOP20"
? [
"个人1",
"个人2",
"个人3",
"个人4",
"个人5",
"个人6",
"个人7",
"个人8",
"个人9",
"个人10",
"个人11",
"个人12",
"个人13",
"个人14",
"个人15",
"个人16",
"个人17",
"个人18",
"个人19",
"个人20",
]
: [
"规则1",
"规则2",
"规则3",
"规则4",
"规则5",
"规则6",
"规则7",
"规则8",
"规则9",
"规则10",
"规则11",
"规则12",
"规则13",
"规则14",
"规则15",
"规则16",
"规则17",
"规则18",
"规则19",
"规则20",
],
},
grid: {
left: "5%",
right: "4%",
bottom: "2%",
containLabel: true,
},
// color:[ "#61a0a8",],
yAxis: {},
series: [
{
name: this.legendName,
type: "bar",
data: [
1200,
1100,
900,
800,
1122,
1234,
1050,
1155,
1120,
1136,
1110,
1110,
1120,
1020,
1212,
1233,
1111,
1000,
1111,
1024,
],
itemStyle: {
// normal: {
// //这里是重点
// color: function(params) {
// //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
// var colorList = ["#6e98ed"];
// return colorList[params.dataIndex];
// },
// },
lineStyle: {
type: "dotted", //'dotted'虚线 'solid'实线
},
},
},
],
});
},
},
};
</script>
<style lang="less" scoped></style>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "PerformAttendAppealList",
components: {
drawerShow
},
mixins: [table],
created() {
},
methods: {
renderTable(tableData) {
return (
<el-table stripe data={tableData} class="total-table">
{this.columnSet.map((item) => this.renderTableColumn(item))}
</el-table>
);
},
renderTableColumn(options) {
return (
<el-table-column
prop={options.prop}
label={options.label}
width={options.width}
formatter={options.formatter}
>
</el-table-column>
);
},
/** 重写新增方法 */
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
},
data() {
return {
/** 子表列元素 */
columnSet:[
{label: "申诉Id", prop: "appealId", formatter: this.formatter},
{label: "文件名称", prop: "fileName"},
{label: "文件地址", prop: "filePath"},
],
config: {
isshowTabPane:false,
search: [
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "姓名", prop: "staffName"},
{label: "窗口工号", prop: "workNum"},
{label: "所属部门", prop: "deptName"},
{label: "违规类型", prop: "ruleName"},
{label: "绩效规则", prop: "ruleName"},
{label: "扣分方式", prop: "subMethod",formatter: this.formatter},
{label: "扣分时间", prop: "attendanceDate" , formatter: this.formatterDate },
{label: "扣分分值", prop: "score", formatter: this.formatter},
{label: "申诉时间", prop: "appealTime", formatter: this.formatterDate},
{label: "处理状态", prop: "processStatus",formatter: this.formatter},
/* {label: "绩效记录申诉附件信息",
width: 120,
prop: "subColumns",
formatter: (row) => {
let widthsize = this.columnSet.reduce((pre, cur) => {
return pre + Number(cur.width);
}, 50);
return (
<el-popover placement="right" width={widthsize} trigger="click">
{this.renderTable(row.performAttendAppealFilesList)}
<el-button type="text" slot="reference">详细</el-button>
</el-popover>
);
},
},*/
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <el-tabs v-model="activeName">
<el-tab-pane label="未处理" name="1">
<LayoutTable :data="tableData" notAdd notDel :config="tableConfig">
</LayoutTable> </LayoutTable>
</el-tab-pane>
<el-tab-pane label="已处理" name="2">
<LayoutTable :data="tableData" notAdd notDel :config="tableConfig">
</LayoutTable>
</el-tab-pane>
<el-tab-pane label="数据分析" name="3">
<div class="content">
<div class="search_box">
<div class="search">
<el-select
v-model="dateValue"
placeholder="请选择"
style="margin: 0 10px;"
>
<el-option
v-for="item in optionsMonths"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-button type="primary">搜索</el-button>
</div>
</div>
<div class="data_box">
<div class="top">
<div class="box">
<bar-charts
:title="'申诉次数部门排名TOP20'"
:id="'dept_20'"
:legendName="'申诉次数'"
:styleObj="{ width: '800px', height: '360px' }"
/>
</div>
<div class="box">
<bar-charts
:title="'申诉次数个人排名TOP20'"
:id="'person_20'"
:legendName="'申诉次数'"
:styleObj="{ width: '800px', height: '360px' }"
/>
</div>
</div>
<div class="down">
<bar-charts
:title="'申诉次数规则排名TOP20'"
:id="'rule_20'"
:legendName="'申诉次数'"
:styleObj="{ width: '1800px', height: '320px' }"
/>
</div>
</div>
</div>
</el-tab-pane>
</el-tabs>
<!-- <bar-charts
:title="'部门扣分排名TOP10'"
:id="'koufen_10'"
:legendName="'部门扣分分值'"
:styleObj="{ width: '100%', height: '300px' }"
/> -->
<drawer-show ref="drawerform" @ok="getData" /> <drawer-show ref="drawerform" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import drawerShow from "./drawershow"; import drawerShow from "./drawershow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { import BarCharts from "./components/BarCharts.vue";
export default {
name: "PerformAttendAppealList", name: "PerformAttendAppealList",
components: { components: {
drawerShow drawerShow,
}, BarCharts,
mixins: [table],
created() {
}, },
mixins: [table],
created() {},
methods: { methods: {
renderTable(tableData) { renderTable(tableData) {
return ( return (
...@@ -35,8 +98,7 @@ ...@@ -35,8 +98,7 @@
label={options.label} label={options.label}
width={options.width} width={options.width}
formatter={options.formatter} formatter={options.formatter}
> ></el-table-column>
</el-table-column>
); );
}, },
/** 重写新增方法 */ /** 重写新增方法 */
...@@ -51,43 +113,52 @@ ...@@ -51,43 +113,52 @@
toView(row) { toView(row) {
this.$refs.drawerform.view(row); this.$refs.drawerform.view(row);
}, },
}, },
data() { data() {
return { return {
/** 子表列元素 */ /** 子表列元素 */
columnSet:[ columnSet: [
{label: "申诉Id", prop: "appealId", formatter: this.formatter}, { label: "申诉Id", prop: "appealId", formatter: this.formatter },
{label: "文件名称", prop: "fileName"}, { label: "文件名称", prop: "fileName" },
{label: "文件地址", prop: "filePath"}, { label: "文件地址", prop: "filePath" },
], ],
config: { config: {
isshowTabPane:false, isshowTabPane: false,
search: [ search: [],
],
columns: [ columns: [
{type: "selection", width: 60}, { type: "selection", width: 60 },
{type: "index",label: "序号",width: 50}, { type: "index", label: "序号", width: 50 },
{label: "姓名", prop: "staffName"}, { label: "姓名", prop: "staffName" },
{label: "窗口工号", prop: "workNum"}, { label: "窗口工号", prop: "workNum" },
{label: "所属部门", prop: "deptName"}, { label: "所属部门", prop: "deptName" },
{label: "违规类型", prop: "ruleName"}, { label: "违规类型", prop: "ruleName" },
{label: "绩效规则", prop: "ruleName"}, { label: "绩效规则", prop: "ruleName" },
{label: "扣分方式", prop: "subMethod",formatter: this.formatter}, { label: "扣分方式", prop: "subMethod", formatter: this.formatter },
{label: "扣分时间", prop: "attendanceDate" , formatter: this.formatterDate }, {
label: "扣分时间",
{label: "扣分分值", prop: "score", formatter: this.formatter}, prop: "attendanceDate",
formatter: this.formatterDate,
},
{ label: "扣分分值", prop: "score", formatter: this.formatter },
{label: "申诉时间", prop: "appealTime", formatter: this.formatterDate}, {
label: "申诉时间",
prop: "appealTime",
formatter: this.formatterDate,
},
{label: "处理状态", prop: "processStatus",formatter: this.formatter}, {
label: "处理状态",
prop: "processStatus",
formatter: this.formatter,
},
/* {label: "绩效记录申诉附件信息", /* {label: "绩效记录申诉附件信息",
width: 120, width: 120,
...@@ -107,15 +178,109 @@ ...@@ -107,15 +178,109 @@
{ {
label: "操作", label: "操作",
width: 240, width: 240,
formatter: row => { formatter: (row) => {
return ( return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons
noAdd
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
); );
},
},
],
},
activeName: "1",
optionsMonths: [
{
value: "1",
label: "1月",
},
{
value: "2",
label: "2月",
},
{
value: "3",
label: "3月",
},
{
value: "4",
label: "4月",
},
{
value: "5",
label: "5月",
},
{
value: "6",
label: "6月",
},
{
value: "7",
label: "7月",
},
{
value: "8",
label: "8月",
},
{
value: "9",
label: "9月",
},
{
value: "10",
label: "10月",
},
{
value: "11",
label: "11月",
},
{
value: "12",
label: "12月",
},
],
dateValue: "1",
};
},
};
</script>
<style lang="less" scoped>
.page {
width: 100%;
height: 100%;
overflow: hidden;
/deep/.el-tabs__item {
width: 120px;
font-size: 18px;
text-align: center;
} }
.content {
width: 100%;
height: 730px;
overflow: hidden;
.search_box {
width: 100%;
height: auto;
text-align: right;
} }
] .data_box {
width: 100%;
height: 100%;
.top {
width: 100%;
height: 380px;
display: flex;
justify-content: space-between;
.box {
width: 49%;
height: 100%;
} }
};
} }
}; }
</script> }
}
</style>
<template>
<div>qwe</div>
</template>
<script>
export default {
name: "AdminList",
data() {
return {};
},
mounted() {},
methods: {},
};
</script>
<style lang="less" scoped></style>
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <LayoutTable :data="tableData" :config="tableConfig"> </LayoutTable>
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" /> <dialog-show ref="dialogform" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "PerformPerposeList", name: "PerformPerposeList",
components: { components: {
dialogShow dialogShow,
},
mixins: [table],
created() {
}, },
mixins: [table],
created() {},
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
...@@ -33,37 +30,49 @@ ...@@ -33,37 +30,49 @@
toView(row) { toView(row) {
this.$refs.dialogform.view(row); this.$refs.dialogform.view(row);
}, },
}, },
data() { data() {
return { return {
config: { config: {
isshowTabPane:true, isshowTabPane: true,
search: [ search: [],
],
columns: [ columns: [
{type: "selection", width: 60}, { type: "selection", width: 60 },
{type: "index",label: "序号",width: 50}, { type: "index", label: "序号", width: 50 },
{label: "负责人名称", prop: "ownerName"}, { label: "负责人名称", prop: "ownerName" },
{label: "请假类型", prop: "assessmentType",formatter: this.formatter}, {
label: "请假类型",
prop: "assessmentType",
formatter: this.formatter,
},
{label: "比例", prop: "ratio", formatter: this.formatter}, { label: "比例", prop: "ratio", formatter: this.formatter },
{label: "创建时间", prop: "createTime", formatter: this.formatterDate}, {
label: "创建时间",
prop: "createTime",
formatter: this.formatterDate,
},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
formatter: row => { formatter: (row) => {
return ( return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons
noAdd
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
); );
} },
} },
] ],
} },
};
}
}; };
},
};
</script> </script>
<template>
<div class="attend_page">
<div class="left_box">
<h3>分类管理</h3>
<el-button type="primary" style="margin:20px 0" @click="addCate">
+ 新增分类</el-button
>
<div class="left_content">
<div
:class="index == i ? 'category_box check' : 'category_box'"
v-for="(val, i) in dataArr"
:key="i"
@click="handleClick(val, i)"
>
<span>{{ val.name }}</span>
<div>
<i class="el-icon-edit-outline" @click="toEdit(val)"></i>
<i class="el-icon-delete" @click="toDel(val)"></i>
</div>
</div>
</div>
</div>
<div class="right_box">
<h3>规则管理</h3>
<div class="search_box">
<el-button type="primary" style="margin:20px 0" @click="addRules">
+ 新增规则</el-button
>
<div class="search">
<el-input
placeholder="请输入考核内容关键字搜索"
style="width: 300px;margin-right: 10px;"
></el-input>
<el-button type="primary"> 搜索 </el-button>
</div>
</div>
<div class="table_box">
<LayoutTable
:data="tableData"
notAdd
notDel
notSearch
:config="tableConfig"
>
</LayoutTable>
</div>
</div>
<drawer-show ref="drawerform" @ok="getData" />
<dialog-show ref="dialogform" @ok="getData" />
</div>
</template>
<script>
import drawerShow from "../drawershow";
import dialogShow from "../dialogshow";
import table from "@/assets/mixins/table";
export default {
name: "AdminAttendIndex",
components: {
drawerShow,
dialogShow,
},
mixins: [table],
props: {
activeName: {
type: String,
default: () => "",
},
},
data() {
return {
index: -1,
dataArr: [],
config: {
isshowTabPane: false,
search: [],
columns: [
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
{ label: "分类", prop: "categoryId", formatter: this.formatter },
{ label: "考核名称", prop: "name" },
{ label: "评分标准", prop: "content" },
{ label: "增减类型", prop: "subAddType", formatter: this.formatter },
{ label: "分值", prop: "score" },
{ label: "负责人分值", prop: "ownerScore" },
{
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{
label: "操作",
width: 240,
formatter: (row) => {
return (
<table-buttons
noAdd
noView
row={row}
onEdit={this.eddRules}
onDel={this.toDelRules}
/>
);
},
},
],
},
};
},
created() {
// this.getData();
},
methods: {
handleClick(val, i) {
this.index = i;
},
addRules() {
this.$refs.drawerform.add();
},
eddRules(row) {
this.$refs.drawerform.edit(row);
},
addCate() {
this.$refs.dialogform.add();
},
toDelRules(val) {
console.log(val);
this.$get("/perform/rules/delete", { id: val }).then((res) => {
this.$message.success(res.msg);
this.getKaoQin();
});
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
toDel(val) {
this.$get("/perform/rules/category/delete", { id: val.id }).then(
(res) => {
this.$message.success(res.msg);
this.getData();
}
);
},
async getData() {
await this.$post("/perform/rules/category/list").then((res) => {
this.getKaoQin();
if (res.code == 1) {
this.dataArr = res.data.data;
} else {
this.dataArr = [];
}
});
},
async getKaoQin() {
await this.$post("/perform/rules/list", { type: this.activeName }).then(
(res) => {
if (res.code == 1) {
this.tableData = res.data;
console.log(res.data);
this.$forceUpdate(this.tableData);
} else {
this.tableData = {};
}
}
);
},
},
};
</script>
<style lang="less" scoped>
.attend_page {
width: 100%;
height: 100%;
display: flex;
h3 {
border-width: 0px;
display: flex;
font-family: "微软雅黑 Bold", "微软雅黑 Regular", "微软雅黑", sans-serif;
font-weight: 700;
font-style: normal;
}
.left_box {
width: 344px;
height: 735px;
background-color: rgba(242, 247, 249, 0.447058823529412);
border: none;
border-radius: 8px;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
font-family: "微软雅黑", sans-serif;
font-weight: 400;
font-style: normal;
padding: 20px;
.left_content {
width: 100%;
height: 600px;
overflow-y: auto;
.category_box {
display: flex;
justify-content: space-between;
align-items: center;
border-width: 0px;
width: 304px;
height: 48px;
background: inherit;
background: #ffffff;
border: none;
border-radius: 4px;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
font-family: "微软雅黑", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #000;
text-align: left;
padding: 0 10px;
border: 1px solid #ddd;
margin-bottom: 20px;
&:hover {
background-color: rgba(22, 202, 122, 1);
color: #ffffff;
border: none;
}
i {
font-style: normal;
font-size: 18px;
margin: 0 5px;
cursor: pointer;
}
}
.check {
background-color: rgba(22, 202, 122, 1);
color: #ffffff;
border: none;
}
}
}
.right_box {
flex: 1;
padding: 20px;
.search_box {
width: 100%;
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
}
.table_box {
width: 100%;
height: 100%;
}
}
}
</style>
<template>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field
label="绩效规则id"
prop="ruleId"
v-model="form.ruleId"
placeholder="请输入绩效规则id"
/>
<Field
label="规则简称"
prop="ruleBrief"
v-model="form.ruleBrief"
placeholder="请输入规则简称"
/>
<Field
label="分类名称"
prop="name"
v-model="form.name"
placeholder="请输入分类名称"
/>
<Field
label="规则类型"
prop="type"
v-model="form.type"
type="select"
:enumData="dict.type"
placeholder="请选择规则类型"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
v-if="pageInfo.type !== 'view'"
@click="submitForm"
>确 定</el-button
>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow";
export default {
mixins: [form],
components: {
dialogShow,
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "绩效规则分类信息",
// 是否显示弹出层
open: false,
toString: ["type"],
// 表单校验
rules: {},
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "perform/rules/category/edit";
this.getData();
this.pageInfo.type = "edit";
this.title = "修改绩效规则分类信息";
},
/** 新增 */
add(row) {
this.reset();
this.urls.currUrl = "perform/rules/category/add";
this.getData();
this.pageInfo.type = "add";
this.title = "新增绩效规则分类信息";
},
/** 查看*/
view(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "perform/rules/category/view";
this.getData();
this.pageInfo.type = "view";
this.title = "绩效规则分类信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
ruleId: null,
ruleBrief: "",
name: "",
type: 1,
remark: "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
...@@ -4,59 +4,107 @@ ...@@ -4,59 +4,107 @@
:title="title" :title="title"
:visible.sync="open" :visible.sync="open"
:direction="direction" :direction="direction"
size="50%"> size="50%"
>
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<Field :span="20" label="分类" prop="categoryId" v-model="form.categoryId" :enumData="dict.categoryId" type="select" placeholder="请选择分类"/> <Field
:span="20"
<Field :span="20" label="考核内容简称" prop="name" v-model="form.name" placeholder="请输入考核内容简称"/> label="分类"
<Field :span="20" label="评分标准" prop="content" v-model="form.content" type="textarea" placeholder="请输入评分标准"/> prop="categoryId"
<Field :span="20" label="增减类型" prop="subAddType" v-model="form.subAddType" type="select" :enumData="dict.subAddType" placeholder="请选择增减类型"/> v-model="form.categoryId"
<Field :span="20" label="扣分" prop="score" v-model="form.score" placeholder="请输入扣分或增加分值"/> :enumData="dict.categoryId"
<Field :span="20" label="关联负责人" prop="assoOwner" v-model="form.assoOwner" type="radio" :enumData="dict.assoOwner" placeholder="请选择是否关联负责人"/> type="select"
<Field :span="20" v-if="form.assoOwner==1" label="负责人扣分" prop="ownerScore" v-model="form.ownerScore" placeholder="请输入负责人扣分或增加分值"/> placeholder="请选择分类"
<Field :span="20" label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> />
<Field
:span="20"
label="考核内容简称"
prop="name"
v-model="form.name"
placeholder="请输入考核内容简称"
/>
<Field
:span="20"
label="评分标准"
prop="content"
v-model="form.content"
type="textarea"
placeholder="请输入评分标准"
/>
<Field
:span="20"
label="增减类型"
prop="subAddType"
v-model="form.subAddType"
type="select"
:enumData="dict.subAddType"
placeholder="请选择增减类型"
/>
<Field
:span="20"
label="扣分"
prop="score"
v-model="form.score"
placeholder="请输入扣分或增加分值"
/>
<Field
:span="20"
label="关联负责人"
prop="assoOwner"
v-model="form.assoOwner"
type="radio"
:enumData="dict.assoOwner"
placeholder="请选择是否关联负责人"
/>
<Field
:span="20"
v-if="form.assoOwner == 1"
label="负责人扣分"
prop="ownerScore"
v-model="form.ownerScore"
placeholder="请输入负责人扣分或增加分值"
/>
<Field
:span="20"
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row> </el-row>
<form-buttons v-if="pageInfo.type!='view'" @submit='submitForm' noCancelBtn /> <form-buttons
v-if="pageInfo.type != 'view'"
@submit="submitForm"
noCancelBtn
/>
</el-form> </el-form>
</el-drawer> </el-drawer>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
export default { export default {
name: "PerformRulesDetail", name: "PerformRulesDetail",
mixins: [form], mixins: [form],
components: { components: {},
created() {},
},
created() {
},
data() { data() {
return { return {
// 遮罩层 // 遮罩层
loading: true, loading: true,
// 弹出层标题 // 弹出层标题
title: "绩效规则信息", title: "规则",
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
direction:"rtl", direction: "rtl",
toString:[ toString: ["subAddType", "assoOwner", "type", "categoryId"],
"subAddType", toDate: [],
"assoOwner",
"type",
"categoryId"
],
toDate:[
],
// 表单校验 // 表单校验
rules: { rules: {},
},
urls: { urls: {
currUrl: "/perform/rules/list", currUrl: "/perform/rules/list",
editUrl: "/perform/rules/edit", editUrl: "/perform/rules/edit",
...@@ -68,29 +116,29 @@ ...@@ -68,29 +116,29 @@
methods: { methods: {
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="perform/rules/edit"; this.urls.currUrl = "perform/rules/edit";
this.getData(); this.getData();
this.pageInfo.type="edit" this.pageInfo.type = "edit";
this.title = "修改绩效规则信息"; this.title = "修改规则";
}, },
/** 新增 */ /** 新增 */
add(row) { add(row) {
this.reset() this.reset();
this.urls.currUrl = "perform/rules/add"; this.urls.currUrl = "perform/rules/add";
this.getData(); this.getData();
this.pageInfo.type="add" this.pageInfo.type = "add";
this.title = "新增绩效规则信息"; this.title = "新增规则";
}, },
/** 查看*/ /** 查看*/
view(row) { view(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="perform/rules/view"; this.urls.currUrl = "perform/rules/view";
this.getData(); this.getData();
this.pageInfo.type="view" this.pageInfo.type = "view";
this.title = "绩效规则信息详细"; this.title = "规则信息详细";
}, },
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
...@@ -98,7 +146,7 @@ ...@@ -98,7 +146,7 @@
}, },
/**获取数据后弹框 */ /**获取数据后弹框 */
afterRender(data) { afterRender(data) {
this.form.type=1 this.form.type = 1;
this.open = true; this.open = true;
}, },
...@@ -110,16 +158,16 @@ ...@@ -110,16 +158,16 @@
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
categoryId : null, categoryId: null,
categoryName : "", categoryName: "",
name : "", name: "",
content : "", content: "",
subAddType : 1, subAddType: 1,
score : 0.00, score: 0.0,
assoOwner : 0, assoOwner: 0,
ownerScore : 0.00, ownerScore: 0.0,
remark : "", remark: "",
type : 1, type: 1,
}; };
this.resetForm("form"); this.resetForm("form");
}, },
...@@ -129,5 +177,5 @@ ...@@ -129,5 +177,5 @@
} }
}, },
}, },
}; };
</script> </script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> </LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "PerformRulesList",
components: {
drawerShow,
},
mixins: [table],
created() {
console.log("route", this.$route);
this.changePath("/perform/rules");
this.query = Object.assign({}, this.query, { type: 1 });
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
},
data() {
return {
config: {
isshowTabPane: true,
search: [],
columns: [
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
{ label: "分类", prop: "categoryId", formatter: this.formatter },
{ label: "考核名称", prop: "name" },
{ label: "评分标准", prop: "content" },
{ label: "增减类型", prop: "subAddType", formatter: this.formatter },
{ label: "分值", prop: "score" },
{ label: "负责人分值", prop: "ownerScore" },
{
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{
label: "操作",
width: 240,
formatter: (row) => {
return (
<table-buttons
noAdd
noDel
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
},
},
],
},
};
},
};
</script>
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <el-tabs v-model="activeName" @tab-click="handleClick">
</LayoutTable> <el-tab-pane label="考勤绩效指标" name="1">
<attend-index v-if="activeName == 1" :activeName="activeName" />
</el-tab-pane>
<drawer-show ref="drawerform" @ok="getData" /> <el-tab-pane label="评价绩效指标" name="2">
<attend-index v-if="activeName == 2" :activeName="activeName" />
</el-tab-pane>
<el-tab-pane label="办件绩效指标" name="3">
<attend-index v-if="activeName == 3" :activeName="activeName" />
</el-tab-pane>
<el-tab-pane label="效能绩效指标" name="4">
<attend-index v-if="activeName == 4" :activeName="activeName" />
</el-tab-pane>
<el-tab-pane label="其他绩效指标" name="5">
<attend-index v-if="activeName == 5" :activeName="activeName" />
</el-tab-pane>
</el-tabs>
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ import AttendIndex from "./components/AttendIndex.vue";
import drawerShow from "./drawershow"; export default {
import table from "@/assets/mixins/table";
export default {
name: "PerformRulesList", name: "PerformRulesList",
components: { components: { AttendIndex },
drawerShow created() {},
},
mixins: [table],
created() {
console.log("route",this.$route)
this.changePath("/perform/rules")
this.query = Object.assign({}, this.query, {type:1});
},
methods: { methods: {
/** 重写新增方法 */ handleClick(tab, event) {
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
// this.$forceUpdate(this.activeName);
},
}, },
data() { data() {
return { return {
config: { activeName: "1",
isshowTabPane:true,
search: [
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "分类", prop: "categoryId", formatter: this.formatter},
{label: "考核名称", prop: "name"},
{label: "评分标准", prop: "content"},
{label: "增减类型", prop: "subAddType",formatter: this.formatter},
{label: "分值", prop: "score"},
{label: "负责人分值", prop: "ownerScore"},
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd noDel row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
}; };
},
};
</script> </script>
<style lang="less" scoped>
.page {
width: 100%;
height: 100%;
overflow: hidden;
/deep/.el-tabs__item {
width: 180px;
font-size: 18px;
text-align: center;
}
}
</style>
<template> <template>
<layout-view> <layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border> <el-descriptions
:title="title"
:column="column"
:size="size"
:colon="false"
border
>
<template slot="title"> <template slot="title">
<i class="el-icon-tickets"></i> <i class="el-icon-tickets"></i>
基本详细信息 基本详细信息
</template> </template>
<template slot="extra"> <template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button> <el-button type="primary" @click="$router.go(-1)" size="small"
>返回</el-button
>
</template> </template>
<el-descriptions-item label="分类id" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.categoryId}} label="分类id"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.categoryId }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="分类名称" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.categoryName}} label="分类名称"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.categoryName }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="考核内容简称" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.name}} label="考核内容简称"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.name }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="评分标准" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.content}} label="评分标准"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.content }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="增减类型" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
label="增减类型"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ util_formatters("subAddType", form.subAddType) }} {{ util_formatters("subAddType", form.subAddType) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="扣分或增加分值" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.score}} label="扣分或增加分值"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.score }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="是否关联负责人" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
label="是否关联负责人"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ util_formatters("assoOwner", form.assoOwner) }} {{ util_formatters("assoOwner", form.assoOwner) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="负责人扣分或增加分值" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.ownerScore}} label="负责人扣分或增加分值"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.ownerScore }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.remark}} label="备注"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.remark }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="规则类型" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
label="规则类型"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ util_formatters("type", form.type) }} {{ util_formatters("type", form.type) }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</layout-view> </layout-view>
</template> </template>
<script> <script>
import view from "@/assets/mixins/view"; import view from "@/assets/mixins/view";
export default { export default {
mixins: [view], mixins: [view],
components: { components: {},
}, methods: {},
methods: {
},
data() { data() {
return { return {
size:"small", size: "small",
column:2, column: 2,
toString:[ toString: ["subAddType", "assoOwner", "type"],
"subAddType", toArrays: [],
"assoOwner", toDate: [],
"type", };
], },
toArrays: [ };
],
toDate: [
]
}
}
}
</script> </script>
<style lang="less"> <style lang="less">
.labelClass{ .labelClass {
width: 200px; width: 200px;
} }
.el-descriptions__body{ .el-descriptions__body {
margin-left: 5px; margin-left: 5px;
margin-right: 5px; margin-right: 5px;
color: #606266; color: #606266;
background-color: #FFF; background-color: #fff;
} }
.contentClass{ .contentClass {
width: 600px; width: 600px;
} }
</style> </style>
...@@ -3,29 +3,60 @@ ...@@ -3,29 +3,60 @@
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body> <el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<Field label="绩效规则id" prop="ruleId" v-model="form.ruleId" placeholder="请输入绩效规则id"/> <Field
<Field label="规则简称" prop="ruleBrief" v-model="form.ruleBrief" placeholder="请输入规则简称"/> label="绩效规则id"
<Field label="分类名称" prop="name" v-model="form.name" placeholder="请输入分类名称"/> prop="ruleId"
<Field label="规则类型" prop="type" v-model="form.type" type="select" :enumData="dict.type" placeholder="请选择规则类型"/> v-model="form.ruleId"
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> placeholder="请输入绩效规则id"
/>
<Field
label="规则简称"
prop="ruleBrief"
v-model="form.ruleBrief"
placeholder="请输入规则简称"
/>
<Field
label="分类名称"
prop="name"
v-model="form.name"
placeholder="请输入分类名称"
/>
<Field
label="规则类型"
prop="type"
v-model="form.type"
type="select"
:enumData="dict.type"
placeholder="请选择规则类型"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button> <el-button
type="primary"
v-if="pageInfo.type !== 'view'"
@click="submitForm"
>确 定</el-button
>
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
export default { export default {
mixins: [form], mixins: [form],
components: { components: {
dialogShow , dialogShow,
}, },
data() { data() {
return { return {
...@@ -35,40 +66,37 @@ ...@@ -35,40 +66,37 @@
title: "绩效规则分类信息", title: "绩效规则分类信息",
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
toString:[ toString: ["type"],
"type",
],
// 表单校验 // 表单校验
rules: { rules: {},
}
}; };
}, },
methods: { methods: {
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="perform/rules/category/edit"; this.urls.currUrl = "perform/rules/category/edit";
this.getData(); this.getData();
this.pageInfo.type="edit" this.pageInfo.type = "edit";
this.title = "修改绩效规则分类信息"; this.title = "修改绩效规则分类信息";
}, },
/** 新增 */ /** 新增 */
add(row) { add(row) {
this.reset() this.reset();
this.urls.currUrl = "perform/rules/category/add"; this.urls.currUrl = "perform/rules/category/add";
this.getData(); this.getData();
this.pageInfo.type="add" this.pageInfo.type = "add";
this.title = "新增绩效规则分类信息"; this.title = "新增绩效规则分类信息";
}, },
/** 查看*/ /** 查看*/
view(row) { view(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="perform/rules/category/view"; this.urls.currUrl = "perform/rules/category/view";
this.getData(); this.getData();
this.pageInfo.type="view" this.pageInfo.type = "view";
this.title = "绩效规则分类信息详细"; this.title = "绩效规则分类信息详细";
}, },
/**取消按钮 */ /**取消按钮 */
...@@ -88,11 +116,11 @@ ...@@ -88,11 +116,11 @@
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
ruleId : null, ruleId: null,
ruleBrief : "", ruleBrief: "",
name : "", name: "",
type : 1, type: 1,
remark : "", remark: "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
...@@ -102,5 +130,5 @@ ...@@ -102,5 +130,5 @@
} }
}, },
}, },
}; };
</script> </script>
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <LayoutTable :data="tableData" :config="tableConfig"> </LayoutTable>
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" /> <dialog-show ref="dialogform" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "PerformRulesCategoryList", name: "PerformRulesCategoryList",
components: { components: {
dialogShow dialogShow,
},
mixins: [table],
created() {
}, },
mixins: [table],
created() {},
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
...@@ -33,34 +30,42 @@ ...@@ -33,34 +30,42 @@
toView(row) { toView(row) {
this.$refs.dialogform.view(row); this.$refs.dialogform.view(row);
}, },
}, },
data() { data() {
return { return {
config: { config: {
isshowTabPane:true, isshowTabPane: true,
search: [ search: [],
],
columns: [ columns: [
{type: "selection", width: 60}, { type: "selection", width: 60 },
{type: "index",label: "序号",width: 50}, { type: "index", label: "序号", width: 50 },
{label: "分类名称", prop: "name"}, { label: "分类名称", prop: "name" },
{label: "规则类型", prop: "type",formatter: this.formatter}, { label: "规则类型", prop: "type", formatter: this.formatter },
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, {
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
formatter: row => { formatter: (row) => {
return ( return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons
noAdd
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
); );
} },
} },
] ],
} },
};
}
}; };
},
};
</script> </script>
<template>
<div>
<div :id="id" :style="styleObj"></div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: "",
},
id: {
type: String,
default: "",
},
legendName: {
type: String,
default: "",
},
styleObj: {
type: Object,
default: () => {},
},
},
data() {
return {};
},
watch: {
title(val) {
console.log(val);
this.drawLine();
},
},
mounted() {
this.drawLine();
},
methods: {
drawLine() {
// 基于dom,初始化echarts实例
let myChart = this.$echarts.init(document.getElementById(this.id));
// 绘制图表
myChart.setOption({
title: {
text: this.title,
left: this.legendName == "旷工率" ? "center" : "left",
textStyle: {
fontSize: this.legendName == "旷工率" ? 24 : 18,
},
},
color:'#6e98ed',
legend: {
orient: "horizontal",
right: "50px",
top: "0",
itemWidth: 20,
itemHeight: 10,
icon: "roundRect",
textStyle: {
fontSize: "14px",
color: "#000",
},
},
tooltip: {},
xAxis: {
data: ["部门1", "部门2", "部门3", "部门4", "部门5", "部门6"],
},
grid: {
left: "5%",
right: "4%",
bottom: "2%",
containLabel: true,
},
// color:[ "#61a0a8",],
yAxis: {},
series: [
{
name: this.legendName,
type: "bar",
data: [5, 20, 36, 10, 10, 20],
itemStyle: {
lineStyle: {
type: "dotted", //'dotted'虚线 'solid'实线
},
},
},
],
});
},
},
};
</script>
<style lang="less" scoped></style>
<template>
<div>
<div :id="id" :style="styleObj"></div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: "",
},
id: {
type: String,
default: "",
},
legendName: {
type: String,
default: "",
},
styleObj: {
type: Object,
default: () => {},
},
},
data() {
return {};
},
watch: {
title(val) {
console.log(val);
},
},
mounted() {
this.drawLine();
},
methods: {
drawLine() {
// 基于dom,初始化echarts实例
let myChart = this.$echarts.init(document.getElementById(this.id));
// 绘制图表
myChart.setOption({
title: { text: this.title },
legend: {
orient: "horizontal",
left: "center",
top: "0",
itemWidth: 20,
itemHeight: 10,
icon: "roundRect",
textStyle: {
fontSize: "14px",
color: "#000",
},
},
tooltip: {},
color:'#6e98ed',
xAxis: {
type: "category",
data: ["部门1", "部门2", "部门3", "部门4", "部门5", "部门6"],
},
grid: {
left: "3%",
right: "4%",
bottom: "2%",
containLabel: true,
},
yAxis: {},
series: [
{
name: this.legendName,
type: "line",
data: [10, 20, 30, 90, 100, 100, 120],
smooth: true,
// itemStyle: {
// lineStyle: {
// type: "dotted", //'dotted'虚线 'solid'实线
// },
// },
},
],
});
},
},
};
</script>
<style lang="less" scoped></style>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "StaffPerformStatList",
components: {
drawerShow
},
mixins: [table],
created() {
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
},
data() {
return {
config: {
isshowTabPane:true,
search: [
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "部门名称", prop: "deptName"},
{label: "考勤绩效指标增加分数", prop: "attendScoreAdd", formatter: this.formatter},
{label: "考勤绩效指标扣减分数", prop: "attendScoreSub", formatter: this.formatter},
{label: "评价绩效指标增加分数", prop: "assessScoreAdd", formatter: this.formatter},
{label: "评价绩效指标扣减分数", prop: "assessScoreSub", formatter: this.formatter},
{label: "办件绩效指标增加分数", prop: "workScoreAdd", formatter: this.formatter},
{label: "办件绩效指标扣减分数", prop: "workScoreSub", formatter: this.formatter},
{label: "效能绩效指标增加分数", prop: "effectScoreAdd", formatter: this.formatter},
{label: "效能绩效指标扣减分数", prop: "effectScoreSub", formatter: this.formatter},
{label: "其它绩效指标增加分数", prop: "otherScoreAdd", formatter: this.formatter},
{label: "其它绩效指标扣减分数", prop: "otherScoreSub", formatter: this.formatter},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment