Commit b86f11f2 authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents db9fd867 15a1d4d3
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0", "@ampproject/remapping": "^2.2.0",
"@chenfengyuan/vue-qrcode": "^1.0.2", "@chenfengyuan/vue-qrcode": "^1.0.2",
"@form-create/designer": "^1.0.10",
"@form-create/element-ui": "^2.5.30",
"@jiaminghi/data-view": "^2.10.0", "@jiaminghi/data-view": "^2.10.0",
"@riophae/vue-treeselect": "0.4.0", "@riophae/vue-treeselect": "0.4.0",
"@vue/babel-preset-app": "^4.5.13", "@vue/babel-preset-app": "^4.5.13",
......
...@@ -294,3 +294,8 @@ a { ...@@ -294,3 +294,8 @@ a {
text-align: right; text-align: right;
word-break: break-word; word-break: break-word;
} }
.el-button--primary {
background: linear-gradient(90deg, #5ab6ff, #2e9aff) !important;
color: #fff !important;
text-align: center !important;
}
...@@ -332,3 +332,8 @@ a { ...@@ -332,3 +332,8 @@ a {
} }
} }
} }
.el-button--primary {
background: linear-gradient(90deg, #5ab6ff, #2e9aff) !important;
color: #fff !important;
text-align: center !important;
}
...@@ -64,6 +64,10 @@ export default { ...@@ -64,6 +64,10 @@ export default {
url = "/perform/perpose/save"; url = "/perform/perpose/save";
} else if (url == "/perform/rules/attend/save") { } else if (url == "/perform/rules/attend/save") {
url = "/perform/rules/category/save"; url = "/perform/rules/category/save";
} else if ((url = "/perform/staff/conf/save")) {
sessionStorage.getItem("type") == 1
? (url = "/perform/dept/conf/save")
: (url = "/perform/staff/conf/save");
} }
const el = this.$refs.form; const el = this.$refs.form;
el.validate((valid) => { el.validate((valid) => {
......
<template> <template>
<el-table <el-table
size='small' size="small"
:data="tableData" :data="tableData"
:row-key="handleRowKeyMethod" :row-key="handleRowKeyMethod"
:span-method="handleSpanMethod" :span-method="handleSpanMethod"
...@@ -9,113 +9,125 @@ ...@@ -9,113 +9,125 @@
@sort-change="handleSortChange" @sort-change="handleSortChange"
@row-click="handleRowClick" @row-click="handleRowClick"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
:empty-text='emptyText' :empty-text="emptytxt ? emptytxt : emptyText"
border border
style="width: 100%"> style="width: 100%"
height="520"
>
<el-table-column
v-for="column in columns"
:key="column.prop"
:type="column.type"
:index="handleIndexMethod"
:selectable="handleSelectableMethod"
:prop="column.prop"
:label="column.label"
:width="column.width"
:sortable="column.sortable"
:show-overflow-tooltip="column.tooltip"
:align="column.align || 'left'"
:formatter="column.formatter"
:reserve-selection="column.reserveSelection"
:subColumns="column.subColumns"
:fixed="column.fixed"
>
<el-table-column <el-table-column
v-for='column in columns' v-for="sunColumn in column.subColumns"
:key='column.prop' :key="sunColumn.prop"
:type="column.type" :type="sunColumn.type"
:index="handleIndexMethod" :prop="sunColumn.prop"
:selectable="handleSelectableMethod" :label="sunColumn.label"
:prop="column.prop" :width="sunColumn.width"
:label="column.label" :sortable="sunColumn.sortable"
:width="column.width" :align="sunColumn.align || 'left'"
:sortable="column.sortable" :formatter="sunColumn.formatter"
:show-overflow-tooltip="column.tooltip" />
:align="column.align || 'left'" </el-table-column>
:formatter='column.formatter'
:reserve-selection='column.reserveSelection'
:subColumns='column.subColumns'
:fixed="column.fixed"
>
<el-table-column
v-for='sunColumn in column.subColumns'
:key='sunColumn.prop'
:type="sunColumn.type"
:prop="sunColumn.prop"
:label="sunColumn.label"
:width="sunColumn.width"
:sortable="sunColumn.sortable"
:align="sunColumn.align || 'left'"
:formatter='sunColumn.formatter'
/>
</el-table-column>
</el-table> </el-table>
</template> </template>
<script> <script>
export default { export default {
props: { props: {
handleRowKeyMethod: { handleRowKeyMethod: {
type: Function, type: Function,
required: false, required: false,
default: row => { return row.id } default: (row) => {
return row.id;
},
}, },
handleSelectableMethod: { handleSelectableMethod: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
handleIndexMethod: { handleIndexMethod: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
handleSpanMethod: { handleSpanMethod: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
handleSelectionChange: { handleSelectionChange: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
handleRowClick: { handleRowClick: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
handleSortChange: { handleSortChange: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
tableRowClassName: { tableRowClassName: {
type: Function, type: Function,
required: false, required: false,
default: () => {} default: () => {},
}, },
loading: { loading: {
type: Boolean, type: Boolean,
required: false, required: false,
default: true default: true,
}, },
tableData: { tableData: {
type: Array, type: Array,
required: false, required: false,
default: () => [] default: () => [],
}, },
columns: { columns: {
type: Array, type: Array,
required: false, required: false,
default: ()=> [], default: () => [],
} },
}, },
computed: { computed: {
emptyText() { emptyText() {
return (!this.loading && !this.tableData.length) ? '暂无数据' : '加载中...' return !this.loading && !this.tableData.length ? "暂无数据" : "加载中...";
}, },
}, },
methods:{ mounted() {
console.log(this.tableData);
console.log(this.loading);
},
watch: {
tableData(val) {
val.length == 0 || val.length > 0
? (this.emptytxt = "暂无数据")
: (this.emptytxt = "加载中...");
},
}, },
methods: {},
data() { data() {
return {} return {
} emptytxt: "",
} };
},
};
</script> </script>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +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" height="520"
> >
<el-table-column <el-table-column
......
<template> <template>
<div class='page layout-form'> <div class="page layout-form">
<slot name='breadcrumb'> <slot name="breadcrumb">
<Breadcrumb /> <Breadcrumb />
</slot> </slot>
<slot></slot> <slot></slot>
...@@ -8,64 +8,67 @@ ...@@ -8,64 +8,67 @@
</template> </template>
<style lang="less"> <style lang="less">
@media screen and (max-width: 1440px){ @media screen and (max-width: 1440px) {
.layout-form{ .layout-form {
form{ form {
width: 100%!important; width: 100% !important;
} }
.el-col-12{ .el-col-12 {
width: 100%; width: 100%;
} }
} }
} }
.layout-form{ .layout-form {
.el-breadcrumb{ .el-breadcrumb {
padding-bottom: 12px; padding-bottom: 12px;
margin-bottom: 12px; margin-bottom: 12px;
border-bottom: 1px solid #ededed; border-bottom: 1px solid #ededed;
} }
form{ form {
width: 1440px; width: 1440px;
&[loading]{ &[loading] {
pointer-events: none; pointer-events: none;
.el-button{ .el-button {
background: #eee; background: #eee;
color: transparent; color: transparent;
border-color: #eee; border-color: #eee;
} }
input, input,
textarea{ textarea {
background: #eee; background: #eee;
color: transparent; color: transparent;
border-color: #eee; border-color: #eee;
} }
span, input, button, li, label{ span,
input,
button,
li,
label {
color: #eee; color: #eee;
} }
} }
.el-input-group--append{ .el-input-group--append {
.el-select .el-input { .el-select .el-input {
width: 80px; width: 80px;
} }
} }
// 自定义的field组件 // 自定义的field组件
.my-form-field{ .my-form-field {
.el-select{ .el-select {
width: 100%; width: 100%;
} }
.el-date-editor.el-input{ .el-date-editor.el-input {
width: 100%; width: 100%;
} }
.form-el-radio-group{ .form-el-radio-group {
label{ label {
width: 160px; width: 160px;
} }
.el-radio-button__inner{ .el-radio-button__inner {
border: 0; border: 0;
} }
} }
} }
} }
} }
</style> </style>
// 表单节点封装,支持 input textarea select radio checkbox 及slot方式 // 表单节点封装,支持 input textarea select radio checkbox 及slot方式
<template> <template>
<el-col :span='span'> <el-col :span="span">
<el-form-item :label="label" :prop="prop" class="my-form-field">
<el-form-item :label="label" :prop="prop" class='my-form-field'>
<slot> <slot>
<el-input show-word-limit :maxlength="maxLength" :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" v-if='type === "text"' :class="inputClass" :clearable='clearable'></el-input> <el-input
<el-input show-word-limit :maxlength="maxLength" :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" @input="emit" type='password' v-if='type === "password"'></el-input> show-word-limit
:maxlength="maxLength"
:disabled="disabled"
:placeholder="placeholder"
v-model="field"
@change="emit"
@input="emit"
v-if="type === 'text'"
:class="inputClass"
:clearable="clearable"
></el-input>
<el-input
show-word-limit
:maxlength="maxLength"
:disabled="disabled"
:placeholder="placeholder"
v-model="field"
@change="emit"
@input="emit"
type="password"
v-if="type === 'password'"
></el-input>
<el-input-number :disabled='disabled' v-model="field" size="small" :placeholder='placeholder' @change="emit" @input="emit" v-if='type === "num"'></el-input-number> <el-input-number
:disabled="disabled"
v-model="field"
size="small"
:placeholder="placeholder"
@change="emit"
@input="emit"
v-if="type === 'num'"
></el-input-number>
<el-input show-word-limit :disabled='disabled' :placeholder='placeholder' v-model="field" :maxlength="maxLength" <el-input
@change="emit" :rows='rows' @input="emit" v-if='type === "textarea"' type='textarea' :autosize="textareaSize" :class="inputClass"></el-input> show-word-limit
:disabled="disabled"
:placeholder="placeholder"
v-model="field"
:maxlength="maxLength"
@change="emit"
:rows="rows"
@input="emit"
v-if="type === 'textarea'"
type="textarea"
:autosize="textareaSize"
:class="inputClass"
></el-input>
<!-- 一级 --> <!-- 一级 -->
<el-select :disabled='disabled' v-model="field" @change="emit" :multiple='multiple' :filterable='filterable' :clearable='clearable' v-if='type === "select"'> <el-select
:disabled="disabled"
v-model="field"
@change="emit"
:multiple="multiple"
:filterable="filterable"
:clearable="clearable"
v-if="type === 'select'"
style="width: 100%;"
>
<el-option <el-option
v-for="($label, $value) in enumData" v-for="($label, $value) in enumData"
:key="$value" :key="$value"
...@@ -23,34 +72,78 @@ ...@@ -23,34 +72,78 @@
</el-select> </el-select>
<!-- 多级 --> <!-- 多级 -->
<el-cascader :disabled='disabled' v-model="field" @change="emit" :options="enumData" :clearable='clearable' <el-cascader
:props="{label:'label',value:'id',multiple:multiple}" :disabled="disabled"
v-if='type === "cascader"'> v-model="field"
@change="emit"
:options="enumData"
:clearable="clearable"
:props="{ label: 'label', value: 'id', multiple: multiple }"
v-if="type === 'cascader'"
>
</el-cascader> </el-cascader>
<!-- 联级选择 --> <!-- 联级选择 -->
<el-cascader-panel :disabled='disabled' v-model="field" @change="emit" :options="enumData" :clearable='clearable' <el-cascader-panel
:props="{label:'label',value:'id',multiple:multiple}" v-if='type === "cascaderpanel"'></el-cascader-panel> :disabled="disabled"
v-model="field"
@change="emit"
:options="enumData"
:clearable="clearable"
:props="{ label: 'label', value: 'id', multiple: multiple }"
v-if="type === 'cascaderpanel'"
></el-cascader-panel>
<el-radio-group :disabled='disabled' v-model="field" @change="emit" v-if='type === "radio"'> <el-radio-group
:disabled="disabled"
v-model="field"
@change="emit"
v-if="type === 'radio'"
>
<el-radio <el-radio
v-for='($label, $value) in enumData' v-for="($label, $value) in enumData"
:key='$value' :key="$value"
:label="$value" :label="$value"
>{{$label}}</el-radio> >{{ $label }}</el-radio
>
</el-radio-group> </el-radio-group>
<el-checkbox-group :disabled='disabled' v-model="field" @change="emit" v-if='type === "checkbox"'> <el-checkbox-group
:disabled="disabled"
v-model="field"
@change="emit"
v-if="type === 'checkbox'"
>
<el-checkbox <el-checkbox
v-for='($label, $value) in enumData' v-for="($label, $value) in enumData"
:key='$value' :key="$value"
:label="$value" :label="$value"
>{{$label}}</el-checkbox> >{{ $label }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
<el-date-picker :disabled='disabled' type="date" value-format="yyyy-MM-dd HH:mm:ss" v-model="field" @change="emit" @input="emit" placeholder="选择日期" v-if='type === "date"'></el-date-picker> <el-date-picker
<el-date-picker :disabled='disabled' type="datetime" value-format="yyyy-MM-dd HH:mm:ss" v-model="field" @change="emit" @input="emit" placeholder="选择日期" v-if='type === "datetime"'></el-date-picker> :disabled="disabled"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
v-model="field"
@change="emit"
@input="emit"
placeholder="选择日期"
style="width: 100%;"
v-if="type === 'date'"
></el-date-picker>
<el-date-picker
:disabled="disabled"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
v-model="field"
@change="emit"
@input="emit"
placeholder="选择日期"
v-if="type === 'datetime'"
style="width: 100%;"
></el-date-picker>
</slot> </slot>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -59,7 +152,7 @@ ...@@ -59,7 +152,7 @@
<script> <script>
export default { export default {
props: { props: {
// 字段值 // 字段值
value: { value: {
type: [String, Number, Array], type: [String, Number, Array],
}, },
...@@ -71,17 +164,17 @@ export default { ...@@ -71,17 +164,17 @@ export default {
// 字段类型: text,password,textarea,select,radio,checkbox,date,datetime // 字段类型: text,password,textarea,select,radio,checkbox,date,datetime
type: { type: {
type: String, type: String,
default: 'text', default: "text",
}, },
// 字段name // 字段name
prop: { prop: {
type: String, type: String,
default: '', default: "",
}, },
// 字段中文标题 // 字段中文标题
label: { label: {
type: String, type: String,
default: '', default: "",
}, },
// 是否禁用 // 是否禁用
disabled: { disabled: {
...@@ -91,17 +184,17 @@ export default { ...@@ -91,17 +184,17 @@ export default {
// 是否提示 // 是否提示
placeholder: { placeholder: {
type: String, type: String,
default: '', default: "",
}, },
// 字段所需的枚举类型 // 字段所需的枚举类型
enumData: { enumData: {
type: Object, type: Object,
default: ()=>{}, default: () => {},
}, },
// textarea专用-自适应内容高度 // textarea专用-自适应内容高度
textareaSize: { textareaSize: {
type: Object, type: Object,
default: ()=>{}, default: () => {},
}, },
// select专用-是否可搜索 // select专用-是否可搜索
filterable: { filterable: {
...@@ -121,44 +214,43 @@ export default { ...@@ -121,44 +214,43 @@ export default {
// 字段所需的枚举类型 // 字段所需的枚举类型
options: { options: {
type: Array, type: Array,
default: ()=>[], default: () => [],
}, },
children: { children: {
type: Array, type: Array,
default: ()=>[], default: () => [],
}, },
inputClass: { inputClass: {
type: String, type: String,
default: '', default: "",
},
maxLength: {
type: Number,
default: 256,
}, },
maxLength:{
type:Number,
default:256,
}
}, },
methods: { methods: {
emit() { emit() {
this.$emit('input', this.newVal) this.$emit("input", this.newVal);
this.$emit('change', this.newVal) this.$emit("change", this.newVal);
//this.$emit('focus', this.newVal) //this.$emit('focus', this.newVal)
this.$emit('cascaderChange',this.newVal) this.$emit("cascaderChange", this.newVal);
} },
}, },
computed: { computed: {
field: { field: {
get() { get() {
return this.value return this.value;
}, },
set(val) { set(val) {
this.newVal = val; this.newVal = val;
} },
} },
}, },
data() { data() {
return { return {
newVal: this.value, newVal: this.value,
} };
} },
} };
</script> </script>
...@@ -9,11 +9,16 @@ ...@@ -9,11 +9,16 @@
<i class="el-icon-menu" @click="showMobileMenu = !showMobileMenu"> <i class="el-icon-menu" @click="showMobileMenu = !showMobileMenu">
</i> </i>
<router-link to="/"> <router-link to="/">
<!-- <img src="../assets/images/logo.png" style="margin-bottom:5px" height="40" alt=""> --> <img
<b style="color:white;font-size:20px;" src="../assets/images/logo.png"
>&nbsp;&nbsp;&nbsp; 智慧政务绩效管理系统 style="margin-bottom:5px;margin-left: 24px;"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b height="40"
> alt=""
/>
<b style="color:white;font-size:20px;">
&nbsp;&nbsp;&nbsp;智慧政务绩效管理系统
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</b>
</router-link> </router-link>
</div> </div>
<!-- 一级菜单 --> <!-- 一级菜单 -->
...@@ -183,9 +188,9 @@ export default { ...@@ -183,9 +188,9 @@ export default {
.layout-menu-wrapper { .layout-menu-wrapper {
height: 72px; height: 72px;
line-height: 72px; line-height: 72px;
font-size: 16px; font-size: 14px;
color: #eee; color: #eee;
background: #1848c8; background: linear-gradient(90deg, #1845c6, #2999ff) !important;
.layout-logo { .layout-logo {
height: 50px; height: 50px;
.el-icon-menu { .el-icon-menu {
...@@ -207,13 +212,14 @@ export default { ...@@ -207,13 +212,14 @@ export default {
height: 100%; height: 100%;
color: #eee; color: #eee;
cursor: pointer; cursor: pointer;
margin-right: 10px; margin-right: 20px;
} }
.active { .active {
color: #fff; color: #fff;
list-style-type: none; list-style-type: none;
border-bottom: 3px solid #fff; // border-bottom: 3px solid #fff;
padding-bottom: 2px; // padding-bottom: 2px;
background-color: #1890ff;
} }
} }
} }
......
...@@ -12,6 +12,9 @@ import Global from "./assets/utils/global.js"; ...@@ -12,6 +12,9 @@ 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 formCreate from "@form-create/element-ui";
import FcDesigner from "@form-create/designer";
// 将自动注册所有组件为全局组件 // 将自动注册所有组件为全局组件
import dataV from "@jiaminghi/data-view"; import dataV from "@jiaminghi/data-view";
...@@ -25,23 +28,25 @@ Vue.use(Filter); ...@@ -25,23 +28,25 @@ Vue.use(Filter);
Vue.use(GlobalComponents); // 全局组件 Vue.use(GlobalComponents); // 全局组件
Vue.use(VueClipboard); Vue.use(VueClipboard);
Vue.use(VueAMap); Vue.use(VueAMap);
Vue.use(formCreate);
Vue.use(FcDesigner);
VueAMap.initAMapApiLoader({ VueAMap.initAMapApiLoader({
key: "f45cca59553214543a5a77e50a7e04df", key: "f45cca59553214543a5a77e50a7e04df",
plugin: [ plugin: [
"AMap.Scale", "AMap.Scale",
"AMap.OverView", "AMap.OverView",
"AMap.ToolBar", "AMap.ToolBar",
"AMap.MapType", "AMap.MapType",
"AMap.PlaceSearch", "AMap.PlaceSearch",
"AMap.Geolocation", "AMap.Geolocation",
"AMap.Geocoder", "AMap.Geocoder",
], ],
v: "1.4.4", v: "1.4.4",
uiVersion: "1.0", 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");
<template> <template>
<div :style="menuPageCss" class="pages page-layout"> <div :style="menuPageCss" class="pages page-layout">
<LayoutHeader v-if="menuPage!=='left'" @changePath="changePath"></LayoutHeader> <LayoutHeader
<LayoutHeaderLeft @toggle="toggle" :isOpen="isOpen" v-if="menuPage==='left'" /> v-if="menuPage !== 'left'"
<div style="padding:20px"> @changePath="changePath"
<router-view :class="{'active': !isOpen}" /> ></LayoutHeader>
</div> <LayoutHeaderLeft
@toggle="toggle"
:isOpen="isOpen"
v-if="menuPage === 'left'"
/>
<div style="padding:20px">
<router-view :class="{ active: !isOpen }" />
</div> </div>
</div>
</template> </template>
<script> <script>
import LayoutHeader from "../components/Header"; import LayoutHeader from "../components/Header";
import LayoutHeaderLeft from "../components/HeaderLeft"; import LayoutHeaderLeft from "../components/HeaderLeft";
import TabPane from '../components/tabPane.vue' import TabPane from "../components/tabPane.vue";
const isPC = /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent); const isPC = /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent);
//菜单位置:取值: left :菜单在左面, top :菜单在上面 //菜单位置:取值: left :菜单在左面, top :菜单在上面
const MenuPage = "top"; const MenuPage = "top";
export default { export default {
components: { components: {
LayoutHeader, LayoutHeader,
LayoutHeaderLeft, LayoutHeaderLeft,
TabPane TabPane,
},
data() {
return {
isOpen: isPC,
menuPage: MenuPage,
isfresh: true,
path: "",
};
},
computed: {
menuPageCss() {
//左面和顶面菜单切换时,动态计划相关css参数
return {
"--padding-top": this.menuPage === "left" ? "60px" : "0px",
"--margin-left": this.menuPage === "left" ? "200px" : "0px",
};
}, },
data() { },
return { methods: {
isOpen: isPC, toggle() {
menuPage: MenuPage, this.isOpen = !this.isOpen;
isfresh:true,
path:''
}
}, },
computed: { changePath(e) {
menuPageCss() { this.path = e;
//左面和顶面菜单切换时,动态计划相关css参数
return {
"--padding-top": this.menuPage === "left" ? "60px" : "0px",
"--margin-left": this.menuPage === "left" ? "200px" : "0px",
}
}
},
methods: {
toggle() {
this.isOpen = !this.isOpen;
},
changePath(e){
this.path = e
}
}, },
},
}; };
</script> </script>
<style lang="less"> <style lang="less">
.page { .page {
min-height: calc(100vh - 100px); min-height: calc(100vh - 100px);
width: 100%; width: 100%;
position: relative; position: relative;
background: #fff; background: #fff;
// var(--padding-top) 5px 5px 5px; // var(--padding-top) 5px 5px 5px;
padding: 20px; padding: 20px;
// margin-left: 60px; // margin-left: 60px;
&.active { &.active {
margin-left: var(--margin-left); margin-left: var(--margin-left);
} }
} }
.page-layout { .page-layout {
background: #eee; background: #eee;
} }
</style>
</style>
<template> <template>
<layout-view> <layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border> <el-descriptions
<template slot="title"> :title="title"
<i class="el-icon-tickets"></i> :column="column"
基本详细信息 :size="size"
</template> :colon="false"
<template slot="extra"> border
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button> >
</template> <template slot="title">
<el-descriptions-item label="请假人id" label-class-name="labelClass" content-class-name="contentClass"> <i class="el-icon-tickets"></i>
{{form.leavePersonId}} 基本详细信息
</el-descriptions-item> </template>
<el-descriptions-item label="请假人" label-class-name="labelClass" content-class-name="contentClass"> <template slot="extra">
{{form.leavePerson}} <el-button type="primary" @click="$router.go(-1)" size="small"
</el-descriptions-item> >返回</el-button
<el-descriptions-item label="所属部门id" label-class-name="labelClass" content-class-name="contentClass"> >
{{form.deptId}} </template>
</el-descriptions-item> <el-descriptions-item
<el-descriptions-item label="所属部门" label-class-name="labelClass" content-class-name="contentClass"> label="请假人id"
{{form.deptName}} label-class-name="labelClass"
</el-descriptions-item> content-class-name="contentClass"
<el-descriptions-item label="电话号码" label-class-name="labelClass" content-class-name="contentClass"> >
{{form.phoneNumber}} {{ form.leavePersonId }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="请假类型" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{ util_formatters("leaveType", form.leaveType) }} label="请假人"
</el-descriptions-item> label-class-name="labelClass"
<el-descriptions-item label="开始时间" label-class-name="labelClass" content-class-name="contentClass"> content-class-name="contentClass"
{{ util_formatterDate(form.startTime)}} >
</el-descriptions-item> {{ form.leavePerson }}
<el-descriptions-item label="结束时间" label-class-name="labelClass" content-class-name="contentClass"> </el-descriptions-item>
{{ util_formatterDate(form.endTime)}} <el-descriptions-item
</el-descriptions-item> label="所属部门id"
<el-descriptions-item label="时长,单位秒" label-class-name="labelClass" content-class-name="contentClass"> label-class-name="labelClass"
{{form.duration}} content-class-name="contentClass"
</el-descriptions-item> >
<el-descriptions-item label="请假事由" label-class-name="labelClass" content-class-name="contentClass"> {{ form.deptId }}
{{form.reason}} </el-descriptions-item>
</el-descriptions-item> <el-descriptions-item
<el-descriptions-item label="审批负责人Id" label-class-name="labelClass" content-class-name="contentClass"> label="所属部门"
{{form.approverId}} label-class-name="labelClass"
</el-descriptions-item> content-class-name="contentClass"
<el-descriptions-item label="审批负责人" label-class-name="labelClass" content-class-name="contentClass"> >
{{form.approver}} {{ form.deptName }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="附件" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item
{{form.attachment}} label="电话号码"
</el-descriptions-item> label-class-name="labelClass"
<el-descriptions-item label="附件路径" label-class-name="labelClass" content-class-name="contentClass"> content-class-name="contentClass"
{{form.attachmentPath}} >
</el-descriptions-item> {{ form.phoneNumber }}
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass"> </el-descriptions-item>
{{form.remark}} <el-descriptions-item
</el-descriptions-item> label="请假类型"
</el-descriptions> label-class-name="labelClass"
content-class-name="contentClass"
</layout-view> >
{{ util_formatters("leaveType", form.leaveType) }}
</el-descriptions-item>
<el-descriptions-item
label="开始时间"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ util_formatterDate(form.startTime) }}
</el-descriptions-item>
<el-descriptions-item
label="结束时间"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ util_formatterDate(form.endTime) }}
</el-descriptions-item>
<el-descriptions-item
label="时长,单位秒"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.duration }}
</el-descriptions-item>
<el-descriptions-item
label="请假事由"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.reason }}
</el-descriptions-item>
<el-descriptions-item
label="审批负责人Id"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.approverId }}
</el-descriptions-item>
<el-descriptions-item
label="审批负责人"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.approver }}
</el-descriptions-item>
<el-descriptions-item
label="附件"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.attachment }}
</el-descriptions-item>
<el-descriptions-item
label="附件路径"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.attachmentPath }}
</el-descriptions-item>
<el-descriptions-item
label="备注"
label-class-name="labelClass"
content-class-name="contentClass"
>
{{ form.remark }}
</el-descriptions-item>
</el-descriptions>
</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() {
return {
}, size: "small",
data() { column: 2,
return { toString: ["leaveType"],
size:"small", toArrays: [],
column:2, toDate: [],
toString:[ };
"leaveType", },
], };
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>
\ No newline at end of file
<template> <template>
<div class="page"> <div class="page">
<div class="top"> <div class="top">
<el-button class="backBtn" @click="$router.back()">返回上一级</el-button>
<el-tabs v-model="tabs"> <el-tabs v-model="tabs">
<el-tab-pane label="设计问卷" name="1"> <el-tab-pane label="设计问卷" name="1">
<iframe style="width: 100%;height: 80vh;" src="https://wurong19870715.gitee.io/formdesigner/#/" frameborder="0"></iframe> <fc-designer style="height: 75vh;" ref="designer" />
<div class="tool">
<!--功能按钮-->
<el-row>
<el-button icon="el-icon-download" type="primary" size="small" @click="getFormJson()"
round>生成表单JSON</el-button>
<el-button icon="el-icon-download" type="success" size="small" @click="getFormOption()"
round>生成表单配置</el-button>
<el-button icon="el-icon-upload" type="success" size="small" @click="drawer = true"
round>预览</el-button>
</el-row>
</div>
<el-drawer title="预览" :visible.sync="drawer" :with-header="false">
<div class="showPhone">
<div>预览</div>
</div>
</el-drawer>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
...@@ -14,12 +32,74 @@ ...@@ -14,12 +32,74 @@
export default { export default {
data() { data() {
return { return {
tabs: '1' tabs: '1',
drawer: false,
}
},
methods: {
getFormJson() {
//FcDesigner 生成的`JSON`
const FcDesignerRule = this.$refs.designer.getRule();
console.log(FcDesignerRule)
},
getFormOption() {
//FcDesigner 生成的`options`
const FcDesignerOptions = this.$refs.designer.getOption();
console.log(FcDesignerOptions)
} }
} }
} }
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.top {} .showPhone{
border: 1px solid;
height: 100%;
width: 100%;
}
.backBtn {
position: absolute;
right: 20px;
z-index: 99;
}
.tool {
margin-top: 20px;
text-align: center;
}
/* 侧边滚动条 */
/deep/.el-aside::-webkit-scrollbar {
width: 3px;
}
/* 滚动条上的滚动滑块 */
/deep/.el-aside::-webkit-scrollbar-thumb {
background: #CCCCCC;
border-radius: 4px;
}
/* 滚动条轨道 */
/deep/.el-aside::-webkit-scrollbar-track {
background: #EEEEEE;
border-radius: 4px;
}
/* 侧边滚动条 */
/deep/.el-main::-webkit-scrollbar {
width: 3px;
}
/* 滚动条上的滚动滑块 */
/deep/.el-main::-webkit-scrollbar-thumb {
background: #CCCCCC;
border-radius: 4px;
}
/* 滚动条轨道 */
/deep/.el-main::-webkit-scrollbar-track {
background: #EEEEEE;
border-radius: 4px;
}
</style> </style>
\ No newline at end of file
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
<div class="left_top"> <div class="left_top">
<div class="title"> <div class="title">
部门绩效总分排名TOP10 部门绩效总分排名TOP10
<div class="button_box">
<span>今年</span>
<span class="check">本月</span>
<span>今日</span>
</div>
</div> </div>
<dv-scroll-ranking-board <dv-scroll-ranking-board
:config="config" :config="config"
...@@ -11,6 +16,11 @@ ...@@ -11,6 +16,11 @@
/> />
</div> </div>
<div class="left_mid"> <div class="left_mid">
<div class="button_box">
<span>今年</span>
<span class="check">本月</span>
<span>今日</span>
</div>
<div id="leida" style="width: 100%;height: 100%;"></div> <div id="leida" style="width: 100%;height: 100%;"></div>
</div> </div>
<div class="left_down"> <div class="left_down">
...@@ -176,6 +186,11 @@ ...@@ -176,6 +186,11 @@
</div> </div>
<div class="right"> <div class="right">
<div class="right_top"> <div class="right_top">
<div class="button_box">
<span>今年</span>
<span class="check">本月</span>
<span>今日</span>
</div>
<div class="title"> <div class="title">
个人绩效总分排名TOP10 个人绩效总分排名TOP10
</div> </div>
...@@ -185,6 +200,11 @@ ...@@ -185,6 +200,11 @@
/> />
</div> </div>
<div class="right_mid"> <div class="right_mid">
<div class="button_box">
<span>今年</span>
<span class="check">本月</span>
<span>今日</span>
</div>
<div id="shensuPie" style="width: 100%;height: 100%;"></div> <div id="shensuPie" style="width: 100%;height: 100%;"></div>
</div> </div>
<div class="right_down"> <div class="right_down">
...@@ -326,6 +346,8 @@ export default { ...@@ -326,6 +346,8 @@ export default {
legend: { legend: {
data: ["加分", "扣分"], data: ["加分", "扣分"],
right: 0, right: 0,
bottom: "50px",
orient: "vertical",
}, },
radar: [ radar: [
{ {
...@@ -843,6 +865,7 @@ export default { ...@@ -843,6 +865,7 @@ export default {
.right_top, .right_top,
.right_mid, .right_mid,
.right_down { .right_down {
position: relative;
width: 100%; width: 100%;
height: 33%; height: 33%;
background: #fff; background: #fff;
...@@ -864,5 +887,39 @@ export default { ...@@ -864,5 +887,39 @@ export default {
height: 30%; height: 30%;
margin: 15px 0; margin: 15px 0;
} }
.button_box {
position: absolute;
top: 8px;
right: 10px;
display: flex;
span {
border-width: 0px;
width: 40px;
height: 24px;
display: flex;
font-family: "微软雅黑", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 12px;
color: #797979;
background-color: rgba(28, 117, 221, 0.0980392156862745);
border: none;
border-radius: 4px;
justify-content: center;
align-items: center;
margin-right: 5px;
cursor: pointer;
}
.check {
background: linear-gradient(
90deg,
rgba(23, 67, 198, 1) 0%,
rgba(31, 116, 223, 1) 50%,
rgba(44, 140, 240, 1) 99%
);
font-size: 12px;
color: #ffffff;
}
}
} }
</style> </style>
...@@ -255,7 +255,7 @@ export default { ...@@ -255,7 +255,7 @@ export default {
overflow: hidden; overflow: hidden;
/deep/.el-tabs__item { /deep/.el-tabs__item {
width: 120px; width: 120px;
font-size: 18px; font-size: 14px;
text-align: center; text-align: center;
} }
.content { .content {
......
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <LayoutTable :data="tableData" :config="tableConfig"> </LayoutTable>
</LayoutTable>
<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 { export default {
name: "PerformDeptConfList", name: "PerformDeptConfList",
components: { components: {
drawerShow drawerShow,
}, },
mixins: [table], mixins: [table],
created() { created() {},
}, methods: {
methods: { /** 重写新增方法 */
/** 重写新增方法 */ toAdd(row) {
toAdd(row) { this.$refs.drawerform.add(row);
this.$refs.drawerform.add(row); },
}, /** 重写编辑方法 */
/** 重写编辑方法 */ toEdit(row) {
toEdit(row) { this.$refs.drawerform.edit(row);
this.$refs.drawerform.edit(row); },
}, /** 重写查看方法 */
/** 重写查看方法 */ toView(row) {
toView(row) { this.$refs.drawerform.view(row);
this.$refs.drawerform.view(row); },
}, },
data() {
}, return {
data() { config: {
return { isshowTabPane: true,
config: { search: [],
isshowTabPane:true, columns: [
search: [ { type: "selection", width: 60 },
], { type: "index", label: "序号", width: 50 },
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "部门id", prop: "deptId", formatter: this.formatter}, { label: "部门id", prop: "deptId", formatter: this.formatter },
{label: "部门名称", prop: "deptName"}, { label: "部门名称", prop: "deptName" },
{label: "考勤绩效指标数量", prop: "attendCount",formatter: this.formatter}, {
label: "考勤绩效指标数量",
prop: "attendCount",
formatter: this.formatter,
},
{label: "评价绩效指标数量", prop: "assessCount",formatter: this.formatter}, {
label: "评价绩效指标数量",
prop: "assessCount",
formatter: this.formatter,
},
{label: "办件绩效指标数量", prop: "workCount",formatter: this.formatter}, {
label: "办件绩效指标数量",
prop: "workCount",
formatter: this.formatter,
},
{label: "效能绩效指标数量", prop: "effectCount",formatter: this.formatter}, {
label: "效能绩效指标数量",
prop: "effectCount",
formatter: this.formatter,
},
{label: "其它绩效指标数量", prop: "otherCount",formatter: this.formatter}, {
label: "其它绩效指标数量",
prop: "otherCount",
formatter: this.formatter,
},
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, {
{ label: "创建用户",
label: "操作", prop: "createUserId",
width: 240, formatter: this.formatter,
formatter: row => { },
return ( {
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> label: "操作",
); width: 240,
} formatter: (row) => {
} return (
] <table-buttons
} noAdd
}; row={row}
} onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
},
},
],
},
}; };
},
};
</script> </script>
...@@ -23,9 +23,22 @@ ...@@ -23,9 +23,22 @@
<div class="right_box"> <div class="right_box">
<h3>规则管理</h3> <h3>规则管理</h3>
<div class="search_box"> <div class="search_box">
<el-button type="primary" style="margin:20px 0" @click="addRules"> <div class="left_search">
+ 新增规则</el-button <el-button type="primary" style="margin:20px 0" @click="addRules">
> + 新增规则</el-button
>
<el-switch
v-model="switchValue"
active-color="#13ce66"
inactive-color="#1890ff"
active-value="100"
inactive-value="0"
inactive-text="按分值排序"
active-text="按更新时间排序"
style="margin-left: 10px;"
>
</el-switch>
</div>
<div class="search"> <div class="search">
<el-input <el-input
placeholder="请输入考核内容关键字搜索" placeholder="请输入考核内容关键字搜索"
...@@ -70,6 +83,7 @@ export default { ...@@ -70,6 +83,7 @@ export default {
}, },
data() { data() {
return { return {
switchValue: "0",
index: -1, index: -1,
dataArr: [], dataArr: [],
config: { config: {
......
...@@ -46,7 +46,7 @@ export default { ...@@ -46,7 +46,7 @@ export default {
overflow: hidden; overflow: hidden;
/deep/.el-tabs__item { /deep/.el-tabs__item {
width: 180px; width: 180px;
font-size: 18px; font-size: 14px;
text-align: center; text-align: center;
} }
} }
......
<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: "PerformStaffConfList",
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: "人员ids", prop: "staffIds" },
{ label: "人员名称n", prop: "staffNames" },
{
label: "考核人总数",
prop: "staffCount",
formatter: this.formatter,
},
{
label: "考勤绩效指标数量",
prop: "attendCount",
formatter: this.formatter,
},
{
label: "评价绩效指标数量",
prop: "assessCount",
formatter: this.formatter,
},
{
label: "办件绩效指标数量",
prop: "workCount",
formatter: this.formatter,
},
{
label: "效能绩效指标数量",
prop: "effectCount",
formatter: this.formatter,
},
{
label: "其它绩效指标数量",
prop: "otherCount",
formatter: this.formatter,
},
{
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{
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"> </LayoutTable> <el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="自动考核指标" name="1">
<div class="content">
<div class="top">
<el-radio-group v-model="type" @input="buttonChange">
<el-radio-button label="1">按部门</el-radio-button>
<el-radio-button label="2">按个人</el-radio-button>
</el-radio-group>
<el-button type="primary" style="margin: 0 20px;" @click="addGoal">
+ {{ type == 1 ? "新增考核部门" : "新增考核个人" }}</el-button
>
</div>
<div class="mid_content">
<div class="goal_box" v-for="(val, i) in dataList" :key="i">
<div class="goal_title">
<img src="../../../../assets/images/u17641.svg" alt="" />
<span>
{{ val.deptName ? val.deptName : "--" }}
</span>
</div>
<p class="goal_txt">
<span>考核指标:</span>
</p>
<p>
<el-tag style="margin: 0 5px 5px 0"
>考勤绩效指标/工作纪律:{{ val.attendCount }}</el-tag
>
<el-tag style="margin: 0 5px 5px 0"
>评价绩效指标/工作纪律:{{ val.assessCount }}</el-tag
>
<el-tag style="margin: 0 5px 5px 0"
>办件绩效指标/工作效能:{{ val.workCount }}</el-tag
>
<el-tag style="margin: 0 5px 5px 0"
>效能绩效指标/工作纪律:{{ val.effectCount }}</el-tag
>
</p>
<p class="goal_txt">
<span>最近更新:</span><span>{{ val.createTime }}</span>
</p>
<p class="goal_txt">
<span>更新人员:</span><span>{{ val.createUserId }}</span>
</p>
<div class="button_box">
<el-button
type="primary"
style="width: 150px;"
plain
@click="hanleEdit(val)"
>编辑</el-button
>
<el-button
type="danger"
style="width: 150px;"
plain
@click="hanleDel(val)"
>删除</el-button
>
</div>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="窗口负责人管理" name="2">
<div class="content">
<LayoutTable :data="tableData" notSearch :config="tableConfig">
</LayoutTable>
</div>
</el-tab-pane>
</el-tabs>
<!-- 人员考核 -->
<drawer-show ref="drawerform" @ok="getData" /> <drawer-show ref="drawerform" @ok="getData" />
<!-- 部门考核 -->
<deptdrawer-show ref="deptdrawerform" @ok="getData" />
<!-- 窗口负责人管理 -->
<windowdrawer-show ref="windowdrawerform" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import drawerShow from "./drawershow"; import drawerShow from "./drawershow";
import deptdrawerShow from "./deptdrawershow.vue";
import windowdrawerShow from "./windowdrawershow.vue";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "PerformStaffConfList", name: "PerformStaffConfList",
components: { components: {
drawerShow, drawerShow,
deptdrawerShow,
windowdrawerShow,
}, },
mixins: [table], mixins: [table],
created() {}, created() {
console.log(this.tableData);
sessionStorage.removeItem("type");
sessionStorage.setItem("type", this.type);
},
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
this.$refs.drawerform.add(row); this.$refs.windowdrawerform.add(row);
}, },
/** 重写编辑方法 */ /** 重写编辑方法 */
toEdit(row) { toEdit(row) {
this.$refs.drawerform.edit(row); this.$refs.windowdrawerform.edit(row);
}, },
/** 重写查看方法 */ /** 重写查看方法 */
toView(row) { toView(row) {
this.$refs.drawerform.view(row); this.$refs.windowdrawerform.view(row);
},
hanleEdit(val) {
this.type == 1
? this.$refs.deptdrawerform.edit(val)
: this.$refs.drawerform.edit(val);
},
hanleDel(val) {
this.$get(
this.type == 1
? "/perform/dept/conf/delete"
: "/perform/staff/conf/delete",
{ id: val.id }
).then((res) => {
this.$message.success(res.msg);
this.getData();
});
},
addGoal() {
this.type == 1
? this.$refs.deptdrawerform.add()
: this.$refs.drawerform.add();
},
buttonChange() {
sessionStorage.setItem("type", this.type);
this.getData();
},
handleClick() {
this.getData();
},
async getData() {
await this.$post(
this.type == 1 ? "/perform/dept/conf/list" : "/perform/staff/conf/list"
).then((res) => {
console.log(res);
if (res.code == 1) {
this.dataList = res.data.data;
}
});
this.activeName == 2
? await this.$post("/window/owner/list").then((res) => {
console.log(res);
if (res.code == 1) {
this.tableData = res.data;
}
})
: "";
}, },
}, },
data() { data() {
return { return {
dataList: [],
tableData: {},
activeName: "1",
type: "1",
config: { config: {
isshowTabPane: true, 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: "人员ids", prop: "staffIds" }, { label: "部门名称", prop: "deptName" },
{ label: "人员名称n", prop: "staffNames" },
{
label: "考核人总数",
prop: "staffCount",
formatter: this.formatter,
},
{
label: "考勤绩效指标数量",
prop: "attendCount",
formatter: this.formatter,
},
{ { label: "姓名", prop: "name" },
label: "评价绩效指标数量",
prop: "assessCount",
formatter: this.formatter,
},
{ { label: "工号", prop: "number" },
label: "办件绩效指标数量",
prop: "workCount",
formatter: this.formatter,
},
{ { label: "电话号码", prop: "phone" },
label: "效能绩效指标数量",
prop: "effectCount",
formatter: this.formatter,
},
{ {
label: "其它绩效指标数量", label: "负责窗口数量",
prop: "otherCount", prop: "windowCount",
formatter: this.formatter, formatter: this.formatter,
}, },
{ {
label: "创建用户", label: "创建时间",
prop: "createUserId", prop: "createTime",
formatter: this.formatter, formatter: this.formatterDate,
}, },
{ {
label: "操作", label: "操作",
...@@ -106,3 +211,120 @@ export default { ...@@ -106,3 +211,120 @@ export default {
}, },
}; };
</script> </script>
<style lang="less" scoped>
.page {
width: 100%;
height: 100%;
overflow: hidden;
/deep/.el-tabs__item {
width: 120px;
font-size: 14px;
text-align: center;
}
.content {
width: 100%;
height: 100%;
.search_top {
width: 100%;
height: 1000%;
display: flex;
justify-content: space-between;
}
/deep/.el-radio-button {
width: 150px;
text-align: center;
border: 1px solid #eee;
}
/deep/.el-radio-button__inner {
width: 150px;
}
/deep/.el-radio-button__orig-radio:checked + .el-radio-button__inner {
width: 150px;
border: none;
background: #1890ff;
color: #fff;
border: 1px solid #eee;
}
.top {
width: 100%;
height: 60px;
}
.mid {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.mid_top {
width: 100%;
height: 300px;
display: flex;
justify-content: space-between;
.jixiaozongfen,
.jixiaopingjunfen {
width: 48%;
height: 100%;
}
}
.mid_down {
width: 100%;
height: 380px;
display: flex;
justify-content: space-evenly;
padding-top: 50px;
.box {
width: 25%;
height: 100%;
}
}
}
.mid_content,
.bar_content {
width: 100%;
height: 700px;
overflow: hidden;
}
.mid_content {
overflow-y: auto;
display: flex;
flex-wrap: wrap;
.goal_box {
width: 435px;
height: 270px;
background: inherit;
background-color: rgba(255, 255, 255, 1);
border: none;
border-radius: 8px;
box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.117647058823529);
-moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.117647058823529);
-webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.117647058823529);
margin: 0 20px 20px 0;
padding: 20px;
.goal_title {
width: 100%;
display: flex;
align-items: center;
img {
margin-right: 10px;
}
}
.goal_txt {
font-family: "微软雅黑", sans-serif;
font-weight: 400;
font-style: normal;
font-size: 12px;
color: #666666;
width: 100%;
margin: 10px 0;
}
.button_box {
width: 100%;
display: flex;
justify-content: space-evenly;
align-items: center;
}
}
}
}
}
</style>
<template>
<!-- 弹出框表单 -->
<el-drawer
:title="title"
:visible.sync="open"
:direction="direction"
size="50%"
>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field
label="部门id号"
prop="deptId"
v-model="form.deptId"
placeholder="请输入部门id号"
/>
<Field
label="部门名称"
prop="deptName"
v-model="form.deptName"
placeholder="请输入部门名称"
/>
<Field
label="姓名"
prop="name"
v-model="form.name"
placeholder="请输入姓名"
/>
<Field
label="工号"
prop="number"
v-model="form.number"
placeholder="请输入工号"
/>
<Field
label="电话号码"
prop="phone"
v-model="form.phone"
placeholder="请输入电话号码"
/>
<Field
label="负责窗口数量"
prop="windowCount"
v-model="form.windowCount"
placeholder="请输入负责窗口数量"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
<form-buttons @submit="submitForm" noCancelBtn />
</el-form>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
name: "WindowOwnerDetail",
mixins: [form],
components: {},
created() {
this.changePath("window/owner");
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "窗口负责人",
// 是否显示弹出层
open: false,
direction: "rtl",
toString: [],
toDate: [],
// 表单校验
rules: {},
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "window/owner/edit";
this.getData();
this.pageInfo.type = "edit";
this.title = "修改窗口负责人";
},
/** 新增 */
add(row) {
this.reset();
this.urls.currUrl = "window/owner/add";
this.getData();
this.pageInfo.type = "add";
this.title = "新增窗口负责人";
},
/** 查看*/
view(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "window/owner/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 = {
deptId: 0,
deptName: "",
name: "",
number: "",
phone: "",
windowCount: null,
remark: "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
\ No newline at end of file
<template> <template>
<!-- 弹出框表单 --> <!-- 弹出框表单 -->
<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="180px">
<el-row> <el-row>
<Field <Field
label="负责人id号" label="负责人id号"
......
...@@ -3,11 +3,27 @@ ...@@ -3,11 +3,27 @@
<el-tabs v-model="activeName" @tab-click="handleClick"> <el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="目标看板" name="1"> <el-tab-pane label="目标看板" name="1">
<div class="content"> <div class="content">
<div class="top"> <div class="top search_top">
<el-radio-group v-model="type"> <el-radio-group v-model="type">
<el-radio-button label="1">按部门</el-radio-button> <el-radio-button label="1">按部门</el-radio-button>
<el-radio-button label="2">按个人</el-radio-button> <el-radio-button label="2">按个人</el-radio-button>
</el-radio-group> </el-radio-group>
<div class="search_box">
<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>
<div class="mid"> <div class="mid">
<div class="mid_top"> <div class="mid_top">
...@@ -326,7 +342,7 @@ export default { ...@@ -326,7 +342,7 @@ export default {
overflow: hidden; overflow: hidden;
/deep/.el-tabs__item { /deep/.el-tabs__item {
width: 120px; width: 120px;
font-size: 18px; font-size: 14px;
text-align: center; text-align: center;
} }
.content { .content {
......
<template> <template>
<!-- 弹出框表单 --> <!-- 弹出框表单 -->
<el-drawer <el-drawer
: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-row> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<Field label="部门id号" prop="deptId" v-model="form.deptId" placeholder="请输入部门id号"/> <el-row>
<Field label="部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入部门名称"/> <Field
<Field label="姓名" prop="name" v-model="form.name" placeholder="请输入姓名"/> label="部门id号"
<Field label="工号" prop="number" v-model="form.number" placeholder="请输入工号"/> prop="deptId"
<Field label="电话号码" prop="phone" v-model="form.phone" placeholder="请输入电话号码"/> v-model="form.deptId"
<Field label="负责窗口数量" prop="windowCount" v-model="form.windowCount" placeholder="请输入负责窗口数量"/> placeholder="请输入部门id号"
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> />
<Field
label="部门名称"
prop="deptName"
v-model="form.deptName"
placeholder="请输入部门名称"
/>
<Field
label="姓名"
prop="name"
v-model="form.name"
placeholder="请输入姓名"
/>
<Field
label="工号"
prop="number"
v-model="form.number"
placeholder="请输入工号"
/>
<Field
label="电话号码"
prop="phone"
v-model="form.phone"
placeholder="请输入电话号码"
/>
<Field
label="负责窗口数量"
prop="windowCount"
v-model="form.windowCount"
placeholder="请输入负责窗口数量"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
</el-row> <form-buttons @submit="submitForm" noCancelBtn />
</el-form>
<form-buttons @submit='submitForm' noCancelBtn /> </el-drawer>
</el-form>
</el-drawer>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
export default { export default {
name: "WindowOwnerDetail", name: "WindowOwnerDetail",
mixins: [form], mixins: [form],
components: { components: {},
created() {
}, this.changePath("window/owner");
created() { },
this.changePath("window/owner") data() {
}, return {
data() { // 遮罩层
return { loading: true,
// 遮罩层 // 弹出层标题
loading: true, title: "窗口负责人",
// 弹出层标题 // 是否显示弹出层
title: "窗口负责人", open: false,
// 是否显示弹出层 direction: "rtl",
open: false, toString: [],
direction:"rtl", toDate: [],
toString:[ // 表单校验
], rules: {},
toDate:[ };
], },
// 表单校验
rules: {
}
};
},
methods: { methods: {
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="window/owner/edit"; this.urls.currUrl = "window/owner/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 = "window/owner/add"; this.urls.currUrl = "window/owner/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 ="window/owner/view"; this.urls.currUrl = "window/owner/view";
this.getData(); this.getData();
this.pageInfo.type="view" this.pageInfo.type = "view";
this.title = "窗口负责人详细"; this.title = "窗口负责人详细";
}, },
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
this.open = false; this.open = false;
}, },
/**获取数据后弹框 */ /**获取数据后弹框 */
afterRender(data) { afterRender(data) {
this.open = true; this.open = true;
}, },
afterSubmit(data) { afterSubmit(data) {
this.open = false; this.open = false;
this.$emit("ok"); this.$emit("ok");
}, },
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
deptId : 0, deptId: 0,
deptName : "", deptName: "",
name : "", name: "",
number : "", number: "",
phone : "", phone: "",
windowCount : null, windowCount: null,
remark : "", remark: "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
resetForm(refName) { resetForm(refName) {
if (this.$refs[refName]) { if (this.$refs[refName]) {
this.$refs[refName].resetFields(); this.$refs[refName].resetFields();
} }
}, },
}, },
}; };
</script> </script>
...@@ -13,4 +13,6 @@ import com.mortals.xhx.module.check.dao.CheckGoworkRecordDao; ...@@ -13,4 +13,6 @@ import com.mortals.xhx.module.check.dao.CheckGoworkRecordDao;
public interface CheckGoworkRecordService extends ICRUDService<CheckGoworkRecordEntity,Long>{ public interface CheckGoworkRecordService extends ICRUDService<CheckGoworkRecordEntity,Long>{
CheckGoworkRecordDao getDao(); CheckGoworkRecordDao getDao();
} }
\ No newline at end of file
package com.mortals.xhx.module.perform.service.impl; package com.mortals.xhx.module.perform.service.impl;
import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.module.check.model.CheckAttendRecordEntity;
import com.mortals.xhx.module.check.service.CheckAttendRecordService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
...@@ -17,5 +22,21 @@ import lombok.extern.slf4j.Slf4j; ...@@ -17,5 +22,21 @@ import lombok.extern.slf4j.Slf4j;
@Service("performAttendRecordService") @Service("performAttendRecordService")
@Slf4j @Slf4j
public class PerformAttendRecordServiceImpl extends AbstractCRUDServiceImpl<PerformAttendRecordDao, PerformAttendRecordEntity, Long> implements PerformAttendRecordService { public class PerformAttendRecordServiceImpl extends AbstractCRUDServiceImpl<PerformAttendRecordDao, PerformAttendRecordEntity, Long> implements PerformAttendRecordService {
@Autowired
private CheckAttendRecordService checkAttendRecordService;
@Override
protected void saveAfter(PerformAttendRecordEntity entity, Context context) throws AppException {
CheckAttendRecordEntity checkAttendRecordEntity = new CheckAttendRecordEntity();
checkAttendRecordEntity.initAttrValue();
BeanUtils.copyProperties(entity,checkAttendRecordEntity, BeanUtil.getNullPropertyNames(entity));
checkAttendRecordEntity.setRecordId(entity.getId());
if(entity.getSubMethod()==1){
checkAttendRecordEntity.setCheckStatus(2); //自动扣分相设置为已处理
}else {
checkAttendRecordEntity.setCheckStatus(1); //非自动扣分相设置为未处理
}
checkAttendRecordService.save(checkAttendRecordEntity,context);
}
} }
\ No newline at end of file
package com.mortals.xhx.module.perform.service.impl; package com.mortals.xhx.module.perform.service.impl;
import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.module.check.model.CheckEffectRecordEntity;
import com.mortals.xhx.module.check.service.CheckEffectRecordService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
...@@ -17,5 +22,21 @@ import lombok.extern.slf4j.Slf4j; ...@@ -17,5 +22,21 @@ import lombok.extern.slf4j.Slf4j;
@Service("performEffectRecordService") @Service("performEffectRecordService")
@Slf4j @Slf4j
public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<PerformEffectRecordDao, PerformEffectRecordEntity, Long> implements PerformEffectRecordService { public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<PerformEffectRecordDao, PerformEffectRecordEntity, Long> implements PerformEffectRecordService {
@Autowired
private CheckEffectRecordService checkEffectRecordService;
@Override
protected void saveAfter(PerformEffectRecordEntity entity, Context context) throws AppException {
CheckEffectRecordEntity checkEffectRecordEntity = new CheckEffectRecordEntity();
checkEffectRecordEntity.initAttrValue();
BeanUtils.copyProperties(entity,checkEffectRecordEntity, BeanUtil.getNullPropertyNames(entity));
checkEffectRecordEntity.setRecordId(entity.getId());
if(entity.getSubMethod()==1){
checkEffectRecordEntity.setCheckStatus(2); //自动扣分相设置为已处理
}else {
checkEffectRecordEntity.setCheckStatus(1); //非自动扣分相设置为未处理
}
checkEffectRecordService.save(checkEffectRecordEntity,context);
}
} }
\ No newline at end of file
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