|
@@ -1,213 +1,892 @@
|
|
|
<template>
|
|
|
- <div>
|
|
|
- <el-alert class="diy-tip" title="什么是固定积分?" @close="tips_close" v-if="tips_show" type="success" description show-icon>
|
|
|
- <p>系统按照设定的时间(每月/每周/每日) 自动给员工添加的积分,比如某员工有一个工程师证,得到公司的认可,公司就会每月给他加分</p>
|
|
|
- </el-alert>
|
|
|
- <div class="all">
|
|
|
- <div class="flex-box">
|
|
|
- <div class="terr-left">
|
|
|
- <div><el-button size="medium" @click="add_class" type="primary">+ 添加规则分类</el-button></div>
|
|
|
- <div><el-button size="medium" @click="add_class" type="primary">+ 添加规则分类</el-button></div>
|
|
|
- <el-menu class="rule_name" :unique-opened="true">
|
|
|
- <el-submenu :index="index.toString()" v-for="(item,index) in rule_list" :key="index">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-edit-outline" @click.stop="edit_grouping(item)"></i>
|
|
|
- <span class="title_top">{{item.name}}</span>
|
|
|
- </template>
|
|
|
- <span :index="i.toString()" v-for="(d,i) in item_list" :key="i" v-show="d[0].rule_id == item.id">
|
|
|
- <el-menu-item :index="i1.toString()" v-for="(data,i1) in d" :key="i1" @click="open_right(data)">
|
|
|
- <span slot="title">{{data.remark}}</span>
|
|
|
- </el-menu-item>
|
|
|
- </span>
|
|
|
- </el-submenu>
|
|
|
- </el-menu>
|
|
|
- </div>
|
|
|
- <div class="terr-right border-right flex-1">
|
|
|
- <div class="flex-box flex-v-ce">
|
|
|
- <div class="name">你好啊</div>
|
|
|
- <el-button size="small" plain>编辑</el-button>
|
|
|
- </div>
|
|
|
- <div class="flex-box btns flex-v-ce">
|
|
|
- <el-button size="medium" @click="del_item" type="danger" plain>批量删除</el-button>
|
|
|
- <el-button size="medium" @click="add_rule" type="primary">添加规则</el-button>
|
|
|
- <el-button size="medium" @click="import_rules_show = true" plain>导入规则</el-button>
|
|
|
- </div>
|
|
|
- <el-table stripe ref="multipleTable" :data="list" tooltip-effect="dark"
|
|
|
- @selection-change="handleSelectionChange" @row-click="editDetails">
|
|
|
- <el-table-column type="selection" width="55">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="remark" label="内容" width="500" style="padding-right:30px;"></el-table-column>
|
|
|
- <el-table-column label="分值">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div v-if="scope.row.range_type == 1"><span :class="scope.row.min_point > 0?'color_red':'color_green'"> {{scope.row.min_point}} </span> {{types_list[scope.row.pt_id]}} </div>
|
|
|
- <div v-if="scope.row.range_type == 2"><span :class="scope.row.min_point > 0?'color_red':'color_green'"> {{scope.row.min_point}} </span> 至 <span :class="scope.row.max_point > 0?'color_red':'color_green'"> {{scope.row.max_point}} </span> {{types_list[scope.row.pt_id]}} </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <div>
|
|
|
+ <el-alert
|
|
|
+ class="diy-tip"
|
|
|
+ title="什么是固定积分?"
|
|
|
+ @close="tips_close"
|
|
|
+ v-if="tips_show"
|
|
|
+ type="success"
|
|
|
+ description
|
|
|
+ show-icon
|
|
|
+ >
|
|
|
+ <p>系统按照设定的时间(每月/每周/每日) 自动给员工添加的积分,比如某员工有一个工程师证,得到公司的认可,公司就会每月给他加分</p>
|
|
|
+ </el-alert>
|
|
|
+ <div class="all">
|
|
|
+ <div class="flex-box">
|
|
|
+ <div class="terr-left">
|
|
|
+ <div>
|
|
|
+ <el-button size="medium" @click="add_grouping()" plain>新增加分组</el-button>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-button size="medium" @click="add_rules_detail" plain>新增加分项</el-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 循环分组 -->
|
|
|
+ <el-col :span="24" style="padding-right: 0;" v-loading="rule_trees_load">
|
|
|
+ <el-menu class="rule_name" :unique-opened="true">
|
|
|
+ <el-submenu :index="index.toString()" v-for="(item,index) in rule_list" :key="index">
|
|
|
+ <template slot="title">
|
|
|
+ <i class="el-icon-edit-outline title_top" @click.stop="edit_grouping(item)"></i>
|
|
|
+ <span class="title_top">{{item.name}}</span>
|
|
|
+ </template>
|
|
|
+ <span
|
|
|
+ :index="i.toString()"
|
|
|
+ v-for="(d,i) in item_list"
|
|
|
+ :key="i"
|
|
|
+ v-show="d[0].rule_id == item.id"
|
|
|
+ >
|
|
|
+ <el-menu-item
|
|
|
+ :index="i1.toString()"
|
|
|
+ v-for="(data,i1) in d"
|
|
|
+ :key="i1"
|
|
|
+ @click="open_right(data)"
|
|
|
+ >
|
|
|
+ <span slot="title">{{data.remark}}</span>
|
|
|
+ </el-menu-item>
|
|
|
+ </span>
|
|
|
+ <!-- <el-menu-item :index="i.toString()" v-for="(data,i) in item.data" :key="i" @click="open_right(data)" >{{data.name}}</el-menu-item> -->
|
|
|
+ </el-submenu>
|
|
|
+ </el-menu>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="terr-right border-right flex-1" v-loading="table_loading">
|
|
|
+ <!-- <div class="flex-box flex-v-ce">
|
|
|
+ <div class="name">{{item_info.remark}}</div>
|
|
|
+ <el-button size="small" plain @click="edit_rules()">编辑</el-button>
|
|
|
+ </div> -->
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24" style="font-size:20px;color:#303133;line-height:36px;">
|
|
|
+ {{right_rules_detail.remark}} <span style="padding-left: 10px;">{{right_rules_detail.min_point}}B分</span>
|
|
|
+ <el-button plain style="padding:10px 12px; margin-left: 10px;" @click="edit_rules(item_info)">编辑</el-button>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <div class="flex-box btns flex-v-ce">
|
|
|
+ <el-button size="medium" @click="del_item" type="danger" plain>批量移除</el-button>
|
|
|
+ <el-button type="primary" @click="add_employee_show= true">添加人员</el-button>
|
|
|
+
|
|
|
+ <!-- <el-select v-model="select_employee_id" clearable placeholder="请选择人员">
|
|
|
+ <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select> -->
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <!-- <el-table
|
|
|
+ stripe
|
|
|
+ ref="multipleTable"
|
|
|
+ :data="table_list"
|
|
|
+ tooltip-effect="dark"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ @row-click="editDetails"
|
|
|
+ >
|
|
|
+ <el-table-column type="selection" width="55"></el-table-column>
|
|
|
+ <el-table-column prop="remark" label="姓名" width="500" style="padding-right:30px;"></el-table-column>
|
|
|
+ <el-table-column label="加分周期">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div v-if="scope.row.range_type == 1">
|
|
|
+ <span
|
|
|
+ :class="scope.row.min_point > 0?'color_red':'color_green'"
|
|
|
+ >{{scope.row.min_point}}</span>
|
|
|
+ {{types_list[scope.row.pt_id]}}
|
|
|
+ </div>
|
|
|
+ <div v-if="scope.row.range_type == 2">
|
|
|
+ <span
|
|
|
+ :class="scope.row.min_point > 0?'color_red':'color_green'"
|
|
|
+ >{{scope.row.min_point}}</span> 至
|
|
|
+ <span
|
|
|
+ :class="scope.row.max_point > 0?'color_red':'color_green'"
|
|
|
+ >{{scope.row.max_point}}</span>
|
|
|
+ {{types_list[scope.row.pt_id]}}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table> -->
|
|
|
+ <el-table ref="multipleTable" :data="table_list" v-loading="table_loading" tooltip-effect="dark" style="width: 100%;margin-top:20px;"
|
|
|
+ @selection-change="handleSelectionChange" >
|
|
|
+ <el-table-column type="selection" width="45"></el-table-column>
|
|
|
+ <el-table-column label="姓名">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div style="display:flex">
|
|
|
+ <span class="fl">
|
|
|
+ <userImage :id="scope.row.employee_id" width="50px" height="50px" :user_name="scope.row.employee.name" :img_url="scope.row.employee.img_url" v-if="scope.row.employee"></userImage>
|
|
|
+ </span>
|
|
|
+ <span style="margin-left: 10px; line-height: 50px; display: inline-block" v-if="scope.row.employee">{{scope.row.employee.name}}</span>
|
|
|
+ </div></template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="cycle_remark" label="加分周期"></el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <!-- 分页 -->
|
|
|
+ <div style=" text-align: center; padding: 20px;">
|
|
|
+ <el-pagination background layout="total, prev, pager, next" :current-page="page+1" @current-change="handleCurrentChange"
|
|
|
+ :total="total">
|
|
|
+ </el-pagination>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 可写公共组建: -->
|
|
|
+ <!-- 新增加分组弹出框 -->
|
|
|
+ <el-dialog
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :title="grouping_type?'编辑分类':'新增分类'"
|
|
|
+ :visible.sync="dialogVisible"
|
|
|
+ width="40%"
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ :model="numberValidateForm"
|
|
|
+ ref="numberValidateForm"
|
|
|
+ label-width="100px"
|
|
|
+ class="demo-ruleForm"
|
|
|
+ >
|
|
|
+ <el-form-item
|
|
|
+ label="分组名称"
|
|
|
+ prop="name"
|
|
|
+ :rules="[
|
|
|
+ { required: true, message: '请输入分组名称'},
|
|
|
+ ]"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ type="age"
|
|
|
+ v-model="numberValidateForm.name"
|
|
|
+ autocomplete="off"
|
|
|
+ placeholder="请输入分组名称"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <span slot="footer" class="dialog-footer" style=" overflow: hidden;">
|
|
|
+ <el-button
|
|
|
+ class="fl"
|
|
|
+ type="danger"
|
|
|
+ v-show="grouping_type"
|
|
|
+ @click="del_grouping(numberValidateForm)"
|
|
|
+ style="float:left"
|
|
|
+ :disabled="disabled"
|
|
|
+ >删除</el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="submitForm('numberValidateForm')"
|
|
|
+ :disabled="disabled"
|
|
|
+ >确 定</el-button>
|
|
|
+ <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 新增加分项 -->
|
|
|
+ <el-dialog :title="rules_detail_title?'编辑规则':'新增规则'" :visible.sync="dialogFormVisible" width="500px">
|
|
|
+ <el-form :model="rules_detail_form" ref="rules_detail_form" :rules="rules_rules" label-width="120px">
|
|
|
+ <el-form-item label="规则名称" :label-width="formLabelWidth" prop="remark" :rules="[{ required: true, message: '请输入规则名称'},]">
|
|
|
+ <el-input v-model="rules_detail_form.remark" placeholder="请输入规则名称" autocomplete="off"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="分类" :label-width="formLabelWidth" prop="rule_id" :rules="[{ required: true, message: '请选择分类'},]">
|
|
|
+ <el-select v-model="rules_detail_form.rule_id" style="width: 100%;" placeholder="请选择分类">
|
|
|
+ <el-option v-for="item in rule_list" :key="item.value" :label="item.name" :value="item.id">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="积分" prop="min_point" :rules="[{ required: true, message: '请输入积分'},]">
|
|
|
+ <el-input v-model="rules_detail_form.min_point" placeholder="请输入积分" oninput="if(this.value=='0'){this.value='';}else{this.value=this.value.replace(/[^0-9]/g,'')}"></el-input>
|
|
|
+ <span
|
|
|
+ data-v-a17f1960=""
|
|
|
+ style="display: block; font-size: 12px; color: rgb(96, 98, 102);text-align: left;"
|
|
|
+ >固定加分加B分</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="是否与考勤挂钩" prop="is_attendance">
|
|
|
+ <el-switch v-model="is_attendance"></el-switch>
|
|
|
+ </el-form-item>
|
|
|
+ <div style="overflow: hidden;">
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ v-show="rules_detail_title"
|
|
|
+ class="fl"
|
|
|
+ @click="del_rules_detail(rules_detail_form)"
|
|
|
+ style="float:left"
|
|
|
+ :disabled="disabled"
|
|
|
+ >删除</el-button>
|
|
|
+ <el-button class="fr" type="primary" @click="next('rules_detail_form') " style="float:right" :disabled="disabled">确 定</el-button>
|
|
|
+ <el-button class="fr" @click="rules_detail_close('rules_detail_form')" style="float:right">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+
|
|
|
+ <el-dialog title="添加人员" :visible.sync="add_employee_show" :before-close="add_employee_close"
|
|
|
+ width="700px">
|
|
|
+ <el-form :model="add_employee_form" ref="add_employee_form" label-width="80px">
|
|
|
+ <el-form-item label="加分周期" :rules="[{ required: true, message: '请选择加分周期', trigger: 'change' }]">
|
|
|
+ <el-select v-model="task_cycle_name" placeholder="请选择加分周期">
|
|
|
+ <el-option v-for="item in task_cycle" :key="item.value" :label="item.name" :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <div>
|
|
|
+ <EmployeeSelector1 :max='add_employee_max' :can_select_dept="false" :visible.sync="add_employee_visible" @confirm="add_employee_confirm" ref="Employee"></EmployeeSelector1>
|
|
|
+ </div>
|
|
|
+ <el-form-item style="text-align: right; margin-bottom: 0;margin-top: 20px;">
|
|
|
+ <el-button @click="add_employee_close()">取消</el-button>
|
|
|
+ <el-button type="primary" @click="sub_add_employee('add_employee_form')"
|
|
|
+ :disabled="disabled">完成</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import EmployeeSelector1 from "@/components/EmployeeSelector"
|
|
|
export default {
|
|
|
- data() {
|
|
|
- return {
|
|
|
- rule_list: [{ name: '阿萨德' }, { name: '阿萨德' }, { name: '阿萨德' }, { name: '阿萨德' }],
|
|
|
- table_list: [],
|
|
|
- tips_show: false,
|
|
|
- role_loading: false,
|
|
|
- item_info: {}
|
|
|
- };
|
|
|
- },
|
|
|
- created() {},
|
|
|
- mounted() {
|
|
|
- if (localStorage.getItem('framework')) {
|
|
|
- this.tips_show = false;
|
|
|
- } else {
|
|
|
- this.tips_show = true;
|
|
|
- }
|
|
|
- },
|
|
|
- methods: {
|
|
|
- del_item() {},
|
|
|
- add_item() {},
|
|
|
- // 关闭提示语
|
|
|
- tips_close() {
|
|
|
- localStorage.setItem('framework', 'true');
|
|
|
- this.tips_show = false;
|
|
|
- },
|
|
|
- get_role_list() {
|
|
|
- let self = this;
|
|
|
- self.role_loading = true;
|
|
|
- self.$axios
|
|
|
- .get('/api/role/list')
|
|
|
- .then(res => {
|
|
|
- if (res.data.code == 1) {
|
|
|
- this.role_list = res.data.data.list;
|
|
|
- this.open_right(this.role_list[0]);
|
|
|
- } else {
|
|
|
- self.$message.error(res.data.msg);
|
|
|
- }
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- self.role_loading = false;
|
|
|
- });
|
|
|
- },
|
|
|
- open_right(data) {
|
|
|
- this.item_info = data;
|
|
|
- this.get_table_list();
|
|
|
- },
|
|
|
- get_table_list() {
|
|
|
- let self = this;
|
|
|
- self.table_loading = true;
|
|
|
- self.$http
|
|
|
- .get('/api/role/user', { params: { role_id: self.item_info.id } })
|
|
|
- .then(res => {
|
|
|
- if (res.data.code == 1) {
|
|
|
- let point_types = self.$store.getters.point_types;
|
|
|
- let point_type_map = {};
|
|
|
- for (let i in point_types) {
|
|
|
- point_type_map[point_types[i].id] = point_types[i];
|
|
|
- }
|
|
|
- let data = res.data.data.list;
|
|
|
- // 处理添加人员的组件选中问题
|
|
|
- this.rules_employee_arr.employee = [];
|
|
|
- for (let i in data) {
|
|
|
- this.rules_employee_arr.employee.push({ id: data[i].id, img_url: data[i].img_url, name: data[i].name });
|
|
|
- if (data[i].point_limit !== null && data[i].point_limit.length == 0) {
|
|
|
- data[i].point_limit = [{ name: 'A分', point: 0, pt_id: 2 }, { name: 'B分', point: 0, pt_id: 3 }];
|
|
|
- }
|
|
|
- if (data[i].deduct_task_monthly !== null && data[i].deduct_task_monthly.length == 0) {
|
|
|
- data[i].deduct_task_monthly = [{ name: 'A分', point: 0, pt_id: 2 }, { name: 'B分', point: 0, pt_id: 3 }];
|
|
|
- }
|
|
|
- if (data[i].reward_task_monthly !== null && data[i].reward_task_monthly.length == 0) {
|
|
|
- data[i].reward_task_monthly = [{ name: 'A分', point: 0, pt_id: 2 }, { name: 'B分', point: 0, pt_id: 3 }];
|
|
|
- }
|
|
|
- if (!data[i]['point_limit_obj']) {
|
|
|
- data[i]['point_limit_obj'] = {};
|
|
|
- }
|
|
|
- for (let k in data[i].point_limit) {
|
|
|
- data[i]['point_limit_obj'][point_type_map[data[i].point_limit[k].pt_id].code] = data[i].point_limit[k].point;
|
|
|
- }
|
|
|
- }
|
|
|
- this.table_list = data;
|
|
|
- } else {
|
|
|
- self.$message.error(res.data.msg);
|
|
|
- }
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- self.table_loading = false;
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-};
|
|
|
-</script>
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ table_list: [],
|
|
|
+ tips_show: false,
|
|
|
+ item_info: {},
|
|
|
+ rule_trees_load: false,
|
|
|
+ dialogVisible: false,
|
|
|
+
|
|
|
+ rules_detail_show: false,//是否弹出添加人员弹窗
|
|
|
+ add_employee_visible: false,
|
|
|
+ add_employee_max: 0,
|
|
|
+ add_employee_show: false,
|
|
|
|
|
|
-<style scoped="scoped" lang="scss">
|
|
|
- .rule_name {
|
|
|
- border-right: 0;
|
|
|
- margin-top:16px;
|
|
|
- li {
|
|
|
- // margin-right:20px !important;
|
|
|
- border-bottom:1px #f8f8f8 solid;
|
|
|
- overflow: hidden;
|
|
|
- white-space: nowrap;
|
|
|
- text-overflow: ellipsis;
|
|
|
- ::v-deep .el-submenu__title {
|
|
|
- padding:0 10px !important;
|
|
|
- i.el-submenu__icon-arrow.el-icon-arrow-down{
|
|
|
- color: #909399 !important;
|
|
|
+
|
|
|
+ task_cycle_name: 1,
|
|
|
+ add_employee_form: {
|
|
|
+ employee_ids: []
|
|
|
+ },
|
|
|
+
|
|
|
+ del_arr: {
|
|
|
+ ids: []
|
|
|
+ },
|
|
|
+ page: 0,
|
|
|
+ total: 0,
|
|
|
+ table_loading: false,
|
|
|
+
|
|
|
+ dialogFormVisible: false,
|
|
|
+ form: {
|
|
|
+ name: "",
|
|
|
+ region: "",
|
|
|
+ date1: "",
|
|
|
+ date2: "",
|
|
|
+ delivery: false,
|
|
|
+ type: [],
|
|
|
+ resource: "",
|
|
|
+ desc: "",
|
|
|
+ },
|
|
|
+ formLabelWidth: "120px",
|
|
|
+
|
|
|
+ numberValidateForm: {
|
|
|
+ name: "",
|
|
|
+ },
|
|
|
+ disabled: false, //按钮不能被多次点击
|
|
|
+ grouping_type: "",
|
|
|
+ rules_detail_title: "",
|
|
|
+ rule_list: [], //分类集合
|
|
|
+ item_list: [], //规则集合
|
|
|
+
|
|
|
+ right_rules_detail: {},
|
|
|
+
|
|
|
+ add_employee_id: '',
|
|
|
+ add_employee_id: '',
|
|
|
+ rules_detail_form: {
|
|
|
+ rule_id: "",
|
|
|
+ range_type: "1",
|
|
|
+ prize_type: "0",
|
|
|
+ min_point: "",
|
|
|
+ remark: "",
|
|
|
+ is_attendance: "0",
|
|
|
+ cycle_type: "2",
|
|
|
+ pt_id: "3",
|
|
|
+ },
|
|
|
+ is_attendance:false,
|
|
|
+ rules_rules: {
|
|
|
+ remark: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入规则名称',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ max: 100,
|
|
|
+ message: '分类名称不能大于100个字符',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ min_point: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入积分',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ rule_id: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择分类',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ },
|
|
|
+ task_cycle: [{
|
|
|
+ name: '每天自动加分',
|
|
|
+ value: 1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '每周自动加分',
|
|
|
+ value: 2
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '每月自动加分',
|
|
|
+ value: 3
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+ },
|
|
|
+ components: {
|
|
|
+ EmployeeSelector1
|
|
|
+ },
|
|
|
+ created() {},
|
|
|
+ mounted() {
|
|
|
+ if (localStorage.getItem("framework")) {
|
|
|
+ this.tips_show = false;
|
|
|
+ } else {
|
|
|
+ this.tips_show = true;
|
|
|
+ }
|
|
|
+ this.get_role_lists();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+
|
|
|
+ handleCurrentChange(val) {
|
|
|
+ this.page = val-1
|
|
|
+ this.open_right();
|
|
|
+ },
|
|
|
+ // 组建
|
|
|
+ add_employee_confirm(val) {
|
|
|
+ this.add_employee_form.employee_ids = []
|
|
|
+ if (val.employee.length !== 0) {
|
|
|
+ val.employee.forEach(element => {
|
|
|
+ this.add_employee_form.employee_ids.push(element.id)
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 添加成员点击取消
|
|
|
+ add_employee_close() {
|
|
|
+ this.task_cycle_name='';
|
|
|
+ this.add_employee_show = false
|
|
|
+ },
|
|
|
+ // 添加成员点击完成
|
|
|
+ sub_add_employee(form) {
|
|
|
+ let self = this;
|
|
|
+ if(!self.task_cycle_name){
|
|
|
+ self.$message.error('请选择加分周期');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ this.$refs.Employee.confirm();//调用组件的confirm();
|
|
|
+ if(this.add_employee_form.employee_ids.length<=0){
|
|
|
+ this.$message.error("请选择员工")
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let data = {
|
|
|
+ employee_ids: this.add_employee_form.employee_ids,
|
|
|
+ task_cycle: self.task_cycle_name,
|
|
|
+ item_id: self.add_employee_id,
|
|
|
+ rule_id: self.add_rulse_id
|
|
|
+ }
|
|
|
+ self.$refs[form].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ if (data.rule_id == '' || data.item_id == '') {
|
|
|
+ self.$message.error('请先选择细则')
|
|
|
+ } else {
|
|
|
+ this.disabled = true;
|
|
|
+ self.$axios({
|
|
|
+ url: '/api/integral/auto/add',
|
|
|
+ method: 'post',
|
|
|
+ data: data,
|
|
|
+ }).then((res) => {
|
|
|
+ this.disabled = false;
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ self.add_employee_show = false
|
|
|
+ self.$message.success('此次操作成功' + res.data.data.success + '条,失败' + res.data.data.error +
|
|
|
+ '条,已经存在的' + res.data.data.exist + '条')
|
|
|
+ self.open_right();
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.msg)
|
|
|
+ }
|
|
|
+ }).catch((e) => {
|
|
|
+ self.$message.error(e.data.msg)
|
|
|
+ }).finally(() => {
|
|
|
+ self.loading = false
|
|
|
+ })
|
|
|
}
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
}
|
|
|
- li:hover .el-submenu__title{
|
|
|
- background:#e7f6ff;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ editDetails() {},
|
|
|
+ handleSelectionChange(val) {
|
|
|
+ this.del_arr.ids = []
|
|
|
+ val.forEach(element => {
|
|
|
+ this.del_arr.ids.push(element.id)
|
|
|
+ });
|
|
|
+ },
|
|
|
+ add_item() {},
|
|
|
+ // 批量删除
|
|
|
+ del_item() {
|
|
|
+ let self = this
|
|
|
+ if (self.del_arr.ids.length !== 0) {
|
|
|
+ self.$confirm('此操作将永久删除该人员的自动加分, 是否继续?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ self.$axios({
|
|
|
+ url: '/api/integral/auto/delete/many',
|
|
|
+ method: 'post',
|
|
|
+ data: self.del_arr,
|
|
|
+ }).then((res) => {
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ self.$message.success(res.data.msg)
|
|
|
+ self.open_right();
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.msg)
|
|
|
+ }
|
|
|
+ }).catch((e) => {
|
|
|
+ self.$message.error(e.data.msg)
|
|
|
+ }).finally(() => {
|
|
|
+ self.loading = false
|
|
|
+ })
|
|
|
+ }).catch(() => {});
|
|
|
+ } else {
|
|
|
+ self.$message.error('请选择要移除的人员')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //导入规则
|
|
|
+ import_rules_show() {},
|
|
|
+ // 关闭提示语
|
|
|
+ tips_close() {
|
|
|
+ localStorage.setItem("framework", "true");
|
|
|
+ this.tips_show = false;
|
|
|
+ },
|
|
|
+ get_role_list() {
|
|
|
+ let self = this;
|
|
|
+ self.rule_trees_load = true;
|
|
|
+ self.$axios
|
|
|
+ .get("/api/role/list")
|
|
|
+ .then((res) => {
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ this.role_list = res.data.data.list;
|
|
|
+ this.open_right(this.role_list[0]);
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.msg);
|
|
|
}
|
|
|
- ul{
|
|
|
- li.is-active{
|
|
|
- background-color:#e7f6ff !important;
|
|
|
- }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ self.rule_trees_load = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // get_table_list() {
|
|
|
+ // let self = this;
|
|
|
+ // self.table_loading = true;
|
|
|
+ // self.$axios
|
|
|
+ // .get("/api/role/user", { params: { role_id: self.item_info.id } })
|
|
|
+ // .then((res) => {
|
|
|
+ // if (res.data.code == 1) {
|
|
|
+ // let point_types = self.$store.getters.point_types;
|
|
|
+ // let point_type_map = {};
|
|
|
+ // for (let i in point_types) {
|
|
|
+ // point_type_map[point_types[i].id] = point_types[i];
|
|
|
+ // }
|
|
|
+ // let data = res.data.data.list;
|
|
|
+ // // 处理添加人员的组件选中问题
|
|
|
+ // this.rules_employee_arr.employee = [];
|
|
|
+ // for (let i in data) {
|
|
|
+ // this.rules_employee_arr.employee.push({
|
|
|
+ // id: data[i].id,
|
|
|
+ // img_url: data[i].img_url,
|
|
|
+ // name: data[i].name,
|
|
|
+ // });
|
|
|
+ // if (
|
|
|
+ // data[i].point_limit !== null &&
|
|
|
+ // data[i].point_limit.length == 0
|
|
|
+ // ) {
|
|
|
+ // data[i].point_limit = [
|
|
|
+ // { name: "A分", point: 0, pt_id: 2 },
|
|
|
+ // { name: "B分", point: 0, pt_id: 3 },
|
|
|
+ // ];
|
|
|
+ // }
|
|
|
+ // if (
|
|
|
+ // data[i].deduct_task_monthly !== null &&
|
|
|
+ // data[i].deduct_task_monthly.length == 0
|
|
|
+ // ) {
|
|
|
+ // data[i].deduct_task_monthly = [
|
|
|
+ // { name: "A分", point: 0, pt_id: 2 },
|
|
|
+ // { name: "B分", point: 0, pt_id: 3 },
|
|
|
+ // ];
|
|
|
+ // }
|
|
|
+ // if (
|
|
|
+ // data[i].reward_task_monthly !== null &&
|
|
|
+ // data[i].reward_task_monthly.length == 0
|
|
|
+ // ) {
|
|
|
+ // data[i].reward_task_monthly = [
|
|
|
+ // { name: "A分", point: 0, pt_id: 2 },
|
|
|
+ // { name: "B分", point: 0, pt_id: 3 },
|
|
|
+ // ];
|
|
|
+ // }
|
|
|
+ // if (!data[i]["point_limit_obj"]) {
|
|
|
+ // data[i]["point_limit_obj"] = {};
|
|
|
+ // }
|
|
|
+ // for (let k in data[i].point_limit) {
|
|
|
+ // data[i]["point_limit_obj"][
|
|
|
+ // point_type_map[data[i].point_limit[k].pt_id].code
|
|
|
+ // ] = data[i].point_limit[k].point;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // this.table_list = data;
|
|
|
+ // } else {
|
|
|
+ // self.$message.error(res.data.msg);
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // .finally(() => {
|
|
|
+ // self.table_loading = false;
|
|
|
+ // });
|
|
|
+ // },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//新增规则
|
|
|
+ add_rules_detail(){
|
|
|
+ this.dialogFormVisible = true;
|
|
|
+ this.rules_detail_title = false;
|
|
|
+ },
|
|
|
+
|
|
|
+ // 点击确定提交积分规则
|
|
|
+ next(form) {
|
|
|
+ let self = this
|
|
|
+ let data = null
|
|
|
+ self.rules_detail_form.max_point = self.rules_detail_form.min_point
|
|
|
+ //更改位置,可以发送请求时再传入
|
|
|
+ // if (self.rules_detail_form.is_attendance) {
|
|
|
+ // self.rules_detail_form.is_attendance = 1
|
|
|
+ // } else {
|
|
|
+ // self.rules_detail_form.is_attendance = 0
|
|
|
+ // }
|
|
|
+ if (this.rules_detail_title == false) {
|
|
|
+ data = {
|
|
|
+ items: [self.rules_detail_form]
|
|
|
}
|
|
|
+ } else {
|
|
|
+ self.rules_detail_form.item_id = self.rules_detail_form.id
|
|
|
+ data = self.rules_detail_form
|
|
|
}
|
|
|
- ::v-deep .is-opened .el-submenu__title .title_top{
|
|
|
- color:#409eff !important;
|
|
|
+ self.$refs[form].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.disabled = true;
|
|
|
+ console.log(this.is_attendance)
|
|
|
+ if (this.is_attendance) {
|
|
|
+ self.rules_detail_form.is_attendance = 1
|
|
|
+ } else {
|
|
|
+ self.rules_detail_form.is_attendance = 0
|
|
|
+ }
|
|
|
+ self.$axios({
|
|
|
+ url: this.rules_detail_title?'api/integral/rule/items/edit':'/api/integral/rule/items',
|
|
|
+ method: 'post' ,
|
|
|
+ data: data,
|
|
|
+ }).then((res) => {
|
|
|
+ console.log(res)
|
|
|
+ this.disabled = false;
|
|
|
+ this.dialogFormVisible = false;
|
|
|
+ setTimeout(() => {
|
|
|
+ this.is_attendance = false;
|
|
|
+ }, 300);
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ self.$message.success(res.data.msg)
|
|
|
+ self.rules_detail_show = false
|
|
|
+ self.add_employee_id = res.data.data.item_id
|
|
|
+ self.add_rulse_id = self.rules_detail_form.rule_id
|
|
|
+ self.get_role_lists()
|
|
|
+ if (this.rules_detail_title == false) {
|
|
|
+ setTimeout(() => {
|
|
|
+ self.add_employee_show = true
|
|
|
+ }, 600);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.msg)
|
|
|
+ }
|
|
|
+ }).catch((e) => {
|
|
|
+ self.$message.error(e.data.msg)
|
|
|
+ }).finally(() => {
|
|
|
+ self.loading = false
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //点击取消
|
|
|
+ rules_detail_close(form) {
|
|
|
+ this.dialogFormVisible = false;
|
|
|
+ this.rules_detail_show = false;
|
|
|
+ this.$refs[form].resetFields();
|
|
|
+ },
|
|
|
+
|
|
|
+ open_right(data) {
|
|
|
+ let self = this
|
|
|
+ if (data) {
|
|
|
+ self.add_employee_id = data.id
|
|
|
+ self.add_rulse_id = data.rule_id
|
|
|
+ self.right_rules_detail = data
|
|
|
}
|
|
|
- ::v-deep .is-opened .el-menu .el-menu-item span{
|
|
|
- color:#333;
|
|
|
+ self.rule_list_load = true
|
|
|
+ self.table_loading = true
|
|
|
+ var params = {
|
|
|
+ params: {
|
|
|
+ item_id: self.add_employee_id || '',
|
|
|
+ employee_id: self.employee_id || '',
|
|
|
+ page: self.page,
|
|
|
+ },
|
|
|
}
|
|
|
- ::v-deep .is-opened .el-menu .is-active span{
|
|
|
- color:#409eff;
|
|
|
+ self.$axios.get('/api/integral/auto/list', params).then((res) => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ self.table_list = res.data.data.list||[]
|
|
|
+ self.total = res.data.data.total
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.msg)
|
|
|
+ }
|
|
|
+ }).finally(() => {
|
|
|
+ self.table_loading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 编辑规则
|
|
|
+ edit_rules(data){
|
|
|
+ this.rules_detail_title = true;
|
|
|
+ this.dialogFormVisible = true;
|
|
|
+ this.rules_detail_title = true;
|
|
|
+ this.rules_detail_form = JSON.parse(JSON.stringify(this.right_rules_detail))
|
|
|
+ this.is_attendance=this.rules_detail_form.is_attendance == '0'?false:true
|
|
|
+ },
|
|
|
+ // 删除规则
|
|
|
+ del_rules_detail(item) {
|
|
|
+ this.$confirm('此操作将永久删除该规则, 是否继续?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+
|
|
|
+ this.disabled = true;
|
|
|
+ this.$axios({
|
|
|
+ url: '/api/integral/rule/items/destroy',
|
|
|
+ method: 'post',
|
|
|
+ data: {
|
|
|
+ item_id: item.id
|
|
|
+ },
|
|
|
+ }).then((res) => {
|
|
|
+
|
|
|
+ this.dialogFormVisible = false;
|
|
|
+ this.disabled = false;
|
|
|
+ if (res.data.code == 1) {
|
|
|
+
|
|
|
+ this.get_role_lists();
|
|
|
+ this.$message.success(res.data.msg)
|
|
|
+ this.rules_detail_show = false
|
|
|
+ this.get_rule_trees()
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.data.msg)
|
|
|
+ }
|
|
|
+ }).catch((err) => {
|
|
|
+ }).finally(() => {
|
|
|
+ this.loading = false
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //新增加分组展示不同渲染
|
|
|
+ add_grouping() {
|
|
|
+ this.dialogVisible = true;
|
|
|
+ this.grouping_type = false;
|
|
|
+ },
|
|
|
+ // 新增加分组
|
|
|
+ submitForm(formName) {
|
|
|
+ this.$refs[formName].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ let data = this.grouping_type
|
|
|
+ ? {
|
|
|
+ rule_id: this.numberValidateForm.id,
|
|
|
+ pid: "0",
|
|
|
+ name: this.numberValidateForm.name,
|
|
|
+ }
|
|
|
+ : {
|
|
|
+ cycle_type: "2",
|
|
|
+ pid: "0",
|
|
|
+ name: this.numberValidateForm.name,
|
|
|
+ };
|
|
|
+ this.disabled = true;
|
|
|
+ this.$axios({
|
|
|
+ url: this.grouping_type
|
|
|
+ ? "api/integral/rule/edit"
|
|
|
+ : "/api/integral/rule",
|
|
|
+ method: "post",
|
|
|
+ data: data,
|
|
|
+ }).then((res) => {
|
|
|
+ this.dialogVisible = false;
|
|
|
+ this.disabled = false;
|
|
|
+ if (res.data.code == "1") {
|
|
|
+ this.get_role_lists();
|
|
|
+ this.$message.success(
|
|
|
+ this.grouping_type ? "修改积分规则" : res.data.msg
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }).catch(err => {
|
|
|
+
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ console.log("error submit!!");
|
|
|
+ return false;
|
|
|
}
|
|
|
- }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //修改分组
|
|
|
+ edit_grouping(item) {
|
|
|
+ this.dialogVisible = true;
|
|
|
+ this.numberValidateForm = JSON.parse(JSON.stringify(item));
|
|
|
+ this.grouping_type = true;
|
|
|
+ },
|
|
|
+ //删除分组
|
|
|
+ del_grouping(item) {
|
|
|
+ this.$confirm("此操作将永久删除该分类, 是否继续?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ this.disabled = true;
|
|
|
+ this.$axios({
|
|
|
+ url: "api/integral/rule/destroy",
|
|
|
+ method: "post",
|
|
|
+ data: {
|
|
|
+ rule_id: item.id,
|
|
|
+ },
|
|
|
+ }).then((res) => {
|
|
|
+ this.dialogVisible = false;
|
|
|
+ this.disabled = false;
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ this.get_role_lists();
|
|
|
+ this.$message.success("删除成功");
|
|
|
+ }
|
|
|
+ }).catch(err => {});
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ setTimeout(() => {
|
|
|
+ this.dialogVisible = false;
|
|
|
+ }, 300);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 获取分组
|
|
|
+ get_role_lists() {
|
|
|
+ this.rule_trees_load = true;
|
|
|
+ this.$axios
|
|
|
+ .get("/api/integral/rule/trees", {
|
|
|
+ params: {
|
|
|
+ cycle_type: "2",
|
|
|
+ },
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ console.log(res)
|
|
|
+
|
|
|
+ this.is_attendance=this.rules_detail_form.is_attendance == '0'?false:true
|
|
|
+ this.rule_list = res.data.data.rule_tree;
|
|
|
+ this.item_list = res.data.data.item_list;
|
|
|
+ this.rule_trees_load = false;
|
|
|
+ if (this.item_list !== null) {
|
|
|
+ for (const key in this.item_list) {
|
|
|
+ for (let i = 0; i < this.item_list[key].length; i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ this.open_right(this.item_list[key][i])
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
|
|
|
- .rule_list {
|
|
|
- position: relative;
|
|
|
- display: table-cell;
|
|
|
+<style scoped="scoped" lang="scss">
|
|
|
+.rule_name {
|
|
|
+ border-right: 0;
|
|
|
+ margin-top: 16px;
|
|
|
+ li {
|
|
|
+ // margin-right:20px !important;
|
|
|
+ border-bottom: 1px #f8f8f8 solid;
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: nowrap;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ ::v-deep .el-submenu__title {
|
|
|
+ padding: 0 10px !important;
|
|
|
+ i.el-submenu__icon-arrow.el-icon-arrow-down {
|
|
|
+ color: #909399 !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ li:hover .el-submenu__title {
|
|
|
+ background: #e7f6ff;
|
|
|
}
|
|
|
+ ul {
|
|
|
+ li.is-active {
|
|
|
+ background-color: #e7f6ff !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ::v-deep .is-opened .el-submenu__title .title_top {
|
|
|
+ color: #409eff !important;
|
|
|
+ }
|
|
|
+ ::v-deep .is-opened .el-menu .el-menu-item span {
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+ ::v-deep .is-opened .el-menu .is-active span {
|
|
|
+ color: #409eff;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- .rule_list:after {
|
|
|
- content: " ";
|
|
|
- position: absolute;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
- bottom: 0;
|
|
|
- width: 1px;
|
|
|
- background: #EBEEF5;
|
|
|
- }
|
|
|
-.terr-right{
|
|
|
- .name{
|
|
|
- font-size: 18px;
|
|
|
- margin-right: 20px;
|
|
|
- }
|
|
|
- .btns button{
|
|
|
- margin-top: 20px;
|
|
|
- margin-right: 5px;
|
|
|
- }
|
|
|
-}
|
|
|
-.terr-left button {
|
|
|
- margin: 0 auto;
|
|
|
- display: block;
|
|
|
- margin-bottom: 10px;
|
|
|
+.rule_list {
|
|
|
+ position: relative;
|
|
|
+ display: table-cell;
|
|
|
}
|
|
|
|
|
|
+.rule_list:after {
|
|
|
+ content: " ";
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ bottom: 0;
|
|
|
+ width: 1px;
|
|
|
+ background: #ebeef5;
|
|
|
+}
|
|
|
+.terr-right {
|
|
|
+ min-height: calc(100vh - 224px);
|
|
|
+ .name {
|
|
|
+ height: 100%;
|
|
|
+ font-size: 18px;
|
|
|
+ margin-right: 20px;
|
|
|
+ }
|
|
|
+ .btns button {
|
|
|
+ margin-top: 20px;
|
|
|
+ margin-right: 5px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.terr-left button {
|
|
|
+ margin: 0 auto;
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 10px;
|
|
|
+}
|
|
|
</style>
|