精华内容
下载资源
问答
  • 2021-05-02 10:38:13

    一、笛卡尔积

    概念

    笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。[1]

    简单点说就是:集合X的每个元素和集合B的每个元素进行两两组合,组合次数等于集合X元素数量 * 集合Y元素数量。

    从笛卡尔积中筛选出有效数据图解

    select * from emp e, dept d where e.deptno = d.deptno;

    笛卡尔积查询示意图

    一些注意事项

    从上图可以看出,部门不相同的行都没有实际意义,单纯笛卡尔积的出现大多数情况没有意义。如果出现笛卡尔积或者小范围内出现,则说明sql语句很可能错了;

    从上图可以看出,两张表先笛卡尔积在通过条件逐条排除,中间会产生很多无效数据,所以尽量在进行笛卡尔积前进行条件过滤;

    二、四种连接方式简介[2]

    内连接(表A inner join 表B on 条件)

    返回表A(左表)和表B(右表)相匹配的数据;

    左外连接(表A left join 表B on 条件)

    表A(左表)的记录全部表示出来,而表B(右表)只会显示符合条件的记录,表B(右表)记录不足的地方均为null;

    右外连接(表A right join 表B on 条件)

    和左外连接的结果刚好相反,是以表B(右表)为基础,显示表B(右表)的全部记录,在加上表A(左表)符合条件的记录,表A(左表)记录不足的地方均为null;

    全连接(表A full join 表B on 条件)

    返回表A(左表)和表B(右表)中的所有行;

    四种连接方式.jpg

    三、案例详解

    sql运行环境介绍

    数据库:oracle数据库 10g

    可视化开发工具:PL/SQL Developer

    表格信息来源:oracle自带表emp表(员工表)和dept表(部门表)

    员工表与部门表的关系:一对多的关系(一个员工属于一个部门,一个部门有多个员工)

    两张表格内容

    员工表:

    emp表jpg.jpg

    部门表:

    dept表jpg.jpg

    工资登记表:

    salgrade.jpg

    案例

    查询出每个员工的上级领导(查询内容:员工编号、员工姓名、员工部门编号、员工工资、领导编号、领导姓名、领导工资)

    select

    e1.empno 雇员编号, e1.ename 雇员姓名, e1.deptno 雇员部门编号, e1.sal 雇员月薪, e1.mgr 雇员领导编号, e2.ename 领导名称, e2.sal 领导工资

    from

    emp e1, emp e2

    where

    e1.mgr = e2.empno(+);

    查询结果:

    Paste_Image.png

    思路:(+)符号表示外联表,意思是需要补全的内容。

    在题目1的基础上查询员工所对应的部门

    select

    e1.empno 雇员编号, e1.ename 雇员姓名, e1.deptno 雇员部门编号, e1.sal 雇员工资,

    d1.dname 员工部门名称, e1.sal 雇员月薪, e1.mgr 领导编号,

    e2.ename 领导名称, e2.sal 领导工资

    from

    emp e1, emp e2, dept d1

    where

    e1.mgr = e2.empno(+)

    and

    d1.deptno(+) = e1.deptno

    **查询结果: **

    Paste_Image.png

    红线处是左外连接的效果。

    在题目3的基础上查询领导的部门名称

    方法1 使用oracle

    select

    e1.empno 雇员编号, e1.ename 雇员姓名,

    e1.deptno 雇员部门编号, d1.dname 员工部门名称, e1.sal 雇员月薪,

    e1.mgr 领导编号, e2.ename 领导名称, d2.dname 领导部门名称, e2.sal 领导工资

    from

    emp e1, emp e2, dept d1, dept d2

    where

    e1.mgr = e2.empno(+)

    and

    d1.deptno(+) = e1.deptno

    and

    d2.deptno(+) = e2.deptno;

    运行结果:

    Paste_Image.png

    方法2 使用原生sql查询

    select

    e1d1.雇员编号, e1d1.雇员姓名, e1d1.雇员部门编号, e1d1.员工部门名称,

    e1d1.雇员月薪, e1d1.领导编号,

    e2e1d2.领导姓名, e2e1d2.领导月薪, e2e1d2.领导部门编号, e2e1d2.领导部门名称

    from (select

    e1.empno 雇员编号, e1.ename 雇员姓名,

    e1.deptno 雇员部门编号, d1.dname 员工部门名称, e1.sal 雇员月薪,

    e1.mgr 领导编号

    from emp e1 left join dept d1 on

    e1.deptno = d1.deptno) e1d1

    left join (select

    e2e1.领导的编号 领导的编号, e2e1.领导姓名 领导姓名,

    e2e1.领导月薪 领导月薪, d2.deptno 领导部门编号, d2.dname 领导部门名称

    from (select

    distinct e2.empno 领导的编号,e2.ename 领导姓名,

    e2.sal 领导月薪, e2.deptno 领导部门编号

    from emp e2 left join emp e1 on

    e1.mgr = e2.empno) e2e1 left join dept d2 on

    e2e1.领导部门编号 = d2.deptno) e2e1d2 on

    e1d1.领导编号 = e2e1d2.领导的编号;

    查询结果:

    Paste_Image.png

    思路:我只是想装个逼,不是为了吓唬人的!!!原生sql确实能做同样的功能,但是太复杂了,使用了5张表,不断地左外连接。

    查询出每个员工编号,姓名,部门名称,工资等级和他的上级领导的姓名,工资等级

    select

    e.empno 员工编号, e.ename 员工姓名, d.dname 员工部门名称,

    s.grade 员工工资等级, e2.ename 领导姓名, s2.grade 领导工资等级

    from

    emp e, dept d, salgrade s, emp e2, salgrade s2

    where

    e.deptno = d.deptno(+)

    and

    e.sal between s.losal and s.hisal

    and

    e.mgr = e2.empno(+)

    and

    e2.sal between s2.losal and s2.hisal;

    查询结果:

    Paste_Image.png

    思路:第一张员工表(emp e)和第二张部门表(dept d)在条件(e.deptno = d.deptno(+))下进行查询,结果作为一张新表,与第三张员工工资等级表('salgrade s')在条件(' e.sal between s.losal and s.hisal')下进行查询,结果作为另一张新表,与第四张领导表('emp e2')在条件('emp e2')下进行查询,结果作为另另一张新表,与第五张领导工资级别表('salgrade s2')在条件('e2.sal between s2.losal and s2.hisal')下进行查询,记得最终结果。

    查询比SCOTT工资高的员工

    select * from emp where sal >

    (select sal from emp where ename = 'SCOTT');

    运行结果:

    Paste_Image.png

    思路:使用子查询的方法。先查询到SCOTT员工的工资(select sal from emp where ename = 'SCOTT'),然后在把结果作为另一条sql语句条件表达式的一部分,进行查询。

    查询职位是经理并且工资比7782号员工高的员工

    方法1(子查询):

    select * from emp where job = 'MANAGER' and sal > (select sal from emp where empno = 7782);

    方法2(集合运算):

    select * from emp where job = 'MANAGER'

    intersect -- 交集

    select * from emp where sal > (select sal from emp where empno = 7782);

    查询结果:

    Paste_Image.png

    思路: 方法1和上一题基本一致,就是多加了一个条件。方法二,使用了集合的交集(intersect)、并集(union)、补集(minus)的方法,获取结果;集合运算也是有前提的,两个结果集,列的数量相等并且对应的列数据类型一致才可以进行运算。

    查询 部门最低工资 大于 30号部门最低工资 的结果

    select deptno, min(sal) from emp

    group by deptno having

    min(sal) > (select min(sal) from emp where deptno = '30');

    查询结果:

    Paste_Image.png

    思路: 先查询出30号部门最低工资select min(sal) from emp where deptno = '30',再查询部门的最低工资select deptno, min(sal) from emp group by deptno,根据题目要求将两个查询语句拼接即可。

    查询出和SCOTT同部门并且同职位的员工(不包含SCOTT本人)

    select * from emp where

    (job, deptno) =

    (select job, deptno from emp where ename = 'SCOTT')

    and ename != 'SCOTT';

    运行结果:

    Paste_Image.png

    思路: 使用了多列子查询的方法.

    题目9: 查询每个部门的最低工资对应的雇员信息(包括部门名称)

    select e.*, d.dname from emp e, dept d

    where e.sal in

    (select min(sal) from emp group by deptno)

    and e.deptno = d.deptno;

    查询结果:

    Paste_Image.png

    思路:先查询每个部门的最低工资select min(sal) from emp group by deptno,在查询最低工资对应的员工信息

    select * from emp where e.sal in 各部门最低工资结果集,再将查询结果集(新表)和dept表进行内连接,去除无效记录即得结果.

    查询出不是领导的员工

    select * from emp

    where empno not in

    (select distinct mgr from emp where mgr is not null);

    查询结果:

    思路: 查询出各个员工的领导的编号select distinct mgr from emp where mgr is not null(总裁没有上级领导,所以为null,要排除掉),在查询员工表中员工编号不在此结果集的排除掉select * from emp where empno not in 领导编号结果集,即得结果.

    题目11: 查询员工表中工资最高的前三名

    select t.*,rownum from (select * from emp order by sal desc) t where rownum < 4;

    查询结果:

    Paste_Image.png

    思路: 不能通过select * from emp where rownum < 4 order by sal desc;de方式获取到结果,原因是rownmu是伪列,在查询条件前就已经生成,不能成为查询的条件,需要对排序结果进行二次查询,产生新的rownum才能作为查询的条件依据.

    在上一题的基础上查询工资第4~6名的员工信息

    select * from

    (select ed.*, rownum r from

    (select * from emp order by sal desc) ed

    where rownum < 7) t

    where t.r > 3

    运行结果:

    Paste_Image.png

    思路: 先将表按照sal降序排列select * from emp order by sal desc, 在将结果作为临时表,获取工资前6名的员工信息和行号select ed.*, rownum r from sal降序表 ed where rownum < 7,将查询结果作为另一张临时表,查询出工资4~6名的数据select * from 前6名员工表 where t.r > 3;不使用select ed.*, rownum r from sal降序表 ed where rownum > 3 and rownum < 7是因为rownum不支持大于号运算。

    ** 本题涉及到oracle分页的思想,以后有时间再深入**

    找到员工表中薪水大于本部门平均薪水的员工

    select * from emp e, (select deptno, avg(sal) avgsal

    from emp group by deptno) t

    where t.deptno = e.deptno and e.sal > t.avgsal;

    查询结果:

    Paste_Image.png

    思路: 先查询每个部门的平均薪水select deptno, avg(sal) avgsal from emp group by deptno作为临时表,在查询select * from emp e, 各部门平均工资表 where t.deptno = e.deptno and e.sal > t.avgsal,即得结果。

    统计每年入职的员工个数

    select to_char(hiredate, 'yyyy') 年份, count(*) 入职人数 from emp e

    group by to_char(hiredate, 'yyyy');

    查询结果:

    Paste_Image.png

    思路: 使用oracle的转换函数将日期类型转换成字符串类型,进行排序。·to_char(日期类型, '日期格式'),其中日期格式一般表示为‘yyyy-MM-dd HH-mi-ss’,可以选择性的使用。

    在上一题的基础上将竖表转换成横表

    select

    '入职人数' "年份",

    sum(decode(竖表.年份, '1980', 竖表.入职人数)) "1980",

    sum(decode(竖表.年份, '1981', 竖表.入职人数)) "1981",

    sum(decode(竖表.年份, '1982', 竖表.入职人数)) "1982",

    sum(decode(竖表.年份, '1987', 竖表.入职人数)) "1987",

    sum(竖表.入职人数) "Total"

    from (select to_char(hiredate, 'yyyy') 年份, count(*) 入职人数

    from emp e group by to_char(hiredate, 'yyyy')) 竖表

    运行结果:

    Paste_Image.png

    思路:decode函数是oracle特有的,使用方法是decode(列名, 需要转义的内容, 转义后的内容,需要转义的内容, 转义后的内容...),例如select job,decode(job,'CLERK','业务员','SALESMAN','销售员','其它') from emp运行结果:

    Paste_Image.png

    sum函数将编译后的每列累加起来,如果没有sum函数结果是:

    Paste_Image.png

    更多相关内容
  • 在表单中选择上级部门的时候,可以支持上级部门与没有上级部门两种情况,且自己不能选自己做为上级部门 ###页面最终效果: 问题分析: 1. 有上级部门,则直接选择自己的上级部门. 2. 没有上级部门,则选择自己成为...

    要求:

    在表单中选择上级部门的时候,可以支持有上级部门与没有上级部门两种情况,且自己不能选自己做为上级部门

    页面最终效果:

    在这里插入图片描述

    问题分析:

    1. 有上级部门,则直接选择自己的上级部门.
    2. 没有上级部门,则选择自己成为上级部门.(在表单中新增一条自己成为顶级部门的选项)
    3. 自己不能选自己做为上级部门,这个在jsp页面用一个判断解决
    

    部门修改后台

    TestDeptService

        @Test
        public void test02(){
    
            String deptId="ff808081613b858301613b8586c60000";
            Dept dept = iDeptService.findById(deptId);
            //1 模拟页面的修改
            dept.setDeptName("BAT研发程序员");
    
            dept.setCompanyName("吉首大学");
            dept.setCompanyId("1");
    
            Dept parent = new Dept();//下拉菜单
            parent.setDeptId("100");
            dept.setParent(parent);
    
            dept.setState(0);//停用
    
            //2 保存到数据库
            iDeptService.updateDept(dept);
    
            log.info("test05  dept="+dept);
        }
    

    IDeptService

        //保存编辑页面的部门数据
        void updateDept(Dept dept);	
    

    DeptServiceImpl

        @Override
        public void updateDept(Dept dept) {
            //与保存的区别 》1:前者insert 后者是update  》2:前者需要产生id,后者有id
            iDeptDao.updateDept(dept);
        }
    

    IDeptDao

        void updateDept(Dept dept);
    

    DeptDaoImpl.xml

    方法一:用if

          <update id="updateDept" parameterType="dept">
             update  pe_dept set
    
                    dept_name     =  #{deptName    }  ,
                    <if test="parent.deptId  == null or parent.deptId == '' ">
                        parent_id   = NULL  ,
                    </if>
                    <if test="parent.deptId !=null and parent.deptId != '' ">
                        parent_id     = ${parent.deptId}  ,
                    </if>
                    state         =  #{state       }  ,
                    company_id    =  #{companyId   }  ,
                    company_name  =  #{companyName }
    
             where dept_id= #{deptId}
            </update>
    

    方法二:用choose

    <update id="updateDept" parameterType="dept">
        update  pe_dept set
    
        dept_name     =  #{deptName    }  ,
        <choose>
            <when test="parent.deptId  == null or parent.deptId == ''">
                parent_id   = NULL  ,
            </when>
            <otherwise>
                parent_id    = #{parent.deptId}  ,
            </otherwise>
        </choose>
    
        state         =  #{state       }  ,
        company_id    =  #{companyId   }  ,
        company_name  =  #{companyName }
    
        where dept_id= #{deptId}
    </update>
    
    • 在所有的更新中,只有id值 不能进行修改
    • dept_id不能写死
    • 当前 Dept实体类中,没有parentId,只有 Dept parent

    dept-update.jsp

    ${path}/system/dept/update.do
    

    DeptController

       //action="${path}/system/dept/update.do"
        @RequestMapping(path="/update.do",method ={ RequestMethod.GET, RequestMethod.POST})
        public String update(Dept dept,String parentId){
    
            log.info("update dept="+dept);
            log.info("update parentId="+parentId);
    
            //当前写死companyId与companyName以后再修改
            dept.setCompanyName("吉首大学");
            dept.setCompanyId("1");
    
            Dept parent = new Dept();//下拉菜单
            parent.setDeptId(parentId);
            dept.setParent(parent);
    
            log.info("update dept="+dept);
            //2 保存到数据库
            iDeptService.updateDept(dept);
    
            return "redirect:/system/dept/toList.do";//修改完成之后跳到列表页面
        }
    

    解决自己选自己作上级部门的bug

     <select class="form-control" name="parentId">
     <option value="">成为顶级部门</option>
    <c:forEach items="${list}" var="item">
     <%-- dept表示正在编辑的部门数据,不能选自己作为上级部门--%>
        <c:if test="${dept.deptId != item.deptId}">
    <option ${dept.parent.deptId == item.deptId ?'selected':''}  value="${item.deptId}">${item.deptName}</option>
    </c:if>
    </c:forEach>
     </select>
    
    • 通过if标签来判断

    解决支持有上级部门与没有上级部门两种情况

    》 当选择顶级部门时,提交的parent_id为空字符串

    部门修改-设置顶级部门

    • (1)一个部门可以没有上级部门,此时该部门为顶极部门
    • (2)如何表示顶极部门?
      parent_id = NULL

    mybatis动态标签-if标签

    • (1)if标签是什么?
      Mybatis提供的动态sql的标签支持
    • (2)if标签有什么用?
      可以根据值编写条件,如果条件成立,拼接sql否则不拼接
    • (3)if标签如何使用?
      》》 1 if标签的test属性必填,一般只用true或false作为结果。
      》》 2 判断条件property != null或 property == null,适用于任何类型的字段,用于判断属性值是否为空。
      》》 4 当有多个判断条件时,使用andor

    解决方法1

     <update id="update" parameterType="dept">
         update  pe_dept set
    
                dept_name     =  #{deptName    }  ,
                <if test="parent.deptId  == null or parent.deptId == '' ">
                    parent_id   = NULL  ,
                </if>
                <if test="parent.deptId !=null and parent.deptId != '' ">
                    parent_id     = ${parent.deptId}  ,
                </if>
                state         =  #{state       }  ,
                company_id    =  #{companyId   }  ,
                company_name  =  #{companyName }
    
         where dept_id= #{deptId}
        </update>
    

    解决方法2

    mybatis动态标签-choose标签

    • (1)没有else标签,怎么办?
      可以使用choose标签,类似switch
      <update id="update" parameterType="dept">
            update  pe_dept set
    
            dept_name     =  #{deptName    }  ,
            <choose>
                <when test="parent.deptId  == null or parent.deptId == ''">
                      parent_id   = NULL  ,
                </when>
                <otherwise>
                    parent_id    = #{parent.deptId}  ,
                </otherwise>
            </choose>
    
            state         =  #{state       }  ,
            company_id    =  #{companyId   }  ,
            company_name  =  #{companyName }
    
            where dept_id= #{deptId}
        </update>
    

    测试方法通过:

    在这里插入图片描述

    展开全文
  • 本Demo是基于VS2010 c++的通过父子节点的节点号来查出当前节点所有上级节点和下级节点 1.包含MySql库,工程可用可测,可直接用于项目开发。 2.Demo中提供数据库表模型。...3.支持查出当前节点所有上级节点和下级节点
  • element-tree 实现部门-人员选择(支持ID相同)

    千次阅读 热门讨论 2021-05-05 16:05:23
    相同人员可在不同部门出现, 当勾选其中一个人员时,其它部门的相同人员也要勾选上 右侧可进行删除已勾选人员, 并且树状图勾选状态取消 若有勾选,进入时候默认选中 效果如下: 例如: 点击勾选总经办的王五,技术部的...

    使用element-tree实现id相同的选择

    1. 相同人员可在不同部门出现, 当勾选其中一个人员时,其它部门的相同人员也要勾选上
    2. 右侧可进行删除已勾选人员, 并且树状图勾选状态取消
    3. 若有勾选,进入时候默认选中

    效果如下:
    例如: 点击勾选总经办的王五,技术部的王五也要勾选上,右侧删除王五的时候,左侧相关王五的勾选全部取消在这里插入图片描述
    因为element-tree出现重复id的时候,会导致被覆盖,只能勾选中一个,
    解决方案: 修改element-ui tree的源码
    tree-store.js 文件 仿照源码增加了两个自定义的方法

    export default class TreeStore {
      constructor(options) {
        this.currentNode = null;
        this.currentNodeKey = null;
    
        for (let option in options) {
          if (options.hasOwnProperty(option)) {
            this[option] = options[option];
          }
        }
    
        this.nodesMap = {};
        //mycode
        this.myNodesMap = [];
        this.root = new Node({
          data: this.data,
          store: this
        });
    
        if (this.lazy && this.load) {
          const loadFn = this.load;
          loadFn(this.root, (data) => {
            this.root.doCreateChildren(data);
            this._initDefaultCheckedNodes();
          });
        } else {
          this._initDefaultCheckedNodes();
        }
      }
    
    //mycode
      setMyChecked(data, checked, deep) {
        const nodes = this.getMyNode(data);
        if (nodes && nodes.length > 0) {
          for (let index = 0; index < nodes.length; index++) {
            const element = nodes[index];
            let node = Object.values(element)[0];
            if (node&&(node.checked!==checked)) {
              node.setChecked(!!checked, deep);
            }
          }
        }
      }
    
    //mycode
     getMyNode(data) {
        const key = typeof data !== 'object' ? data : getNodeKey(this.key, data);
        const result = this.myNodesMap.filter(item => item[key]);
        return result || [];
      }
    
    
      registerNode(node) {
        const key = this.key;
        if (!key || !node || !node.data) return;
        const nodeKey = node.key;
        if (nodeKey !== undefined) this.nodesMap[node.key] = node;
        //mycode
        if (nodeKey !== undefined) {
          this.myNodesMap.push({
            [node.key]: node
          });
        }
      }
    

    tree.vue 文件增加自定义设置的方法

       //mycode
        setMyChecked(data, checked, deep) {
          this.store.setMyChecked(data, checked, deep);
        },
    

    注意: 由于更改了依赖的源码 需要额外进行处理 我在这的处理方法是 : 将ele 的tree复制单独使用lib文件夹存放
    因为修改了依赖 使用了自定义的方法,直接改动依赖打印东西,是没有任何效果的,需要进行引入组件再打印

    //代码有删减
    <template>
      <div>
        <div class="distribution">
          <div class="people">
            <div class="search">
              <el-input
                placeholder="请输入内容"
                v-model="filterText"
                clearable
                class="input-with-select"
              >
                <el-button slot="append" icon="el-icon-search" @click="filterNode"></el-button>
              </el-input>
              <el-button
                type="primary"
                class="refreshico"
                icon="el-icon-refresh-left"
                size="mini"
                @click="handleAsync"
              >同步数据</el-button>
            </div>
            <div class="tree">
              <el-tree
                class="filter-tree"
                :data="depData"
                :props="defaultProps"
                default-expand-all
                highlight-current
                node-key="id"
                :expand-on-click-node="false"
                :filter-node-method="filterNode"
                @check-change="handleCheckChange"
                ref="tree"
                show-checkbox
              >
              </el-tree>
            </div>
          </div>
          <div class="selectPeople">
            <div>
              <span class="selectText">已选员工</span>
              <div class="delAll" @click="delAll">清空</div>
            </div>
            <ul>
              <li v-for="(item, index) in selectList" :key="index">
                <span>{{ item.workDeptId }}</span>
                <div @click="handleDelSelect(item)">x</div>
              </li>
            </ul>
          </div>
        </div>
        <div class="tree_btn">
          <el-button type="danger"  @click="handleCancel">取消</el-button>
          <el-button type="primary"  @click="save">确认</el-button>
        </div>
      </div>
    </template>
    
    <script>
    import ElTree from "@/lib//tree/src/tree.vue";
    import peopelList from './index.json';
    export default {
      props: ["selectUserIdList"],
      components: {
        ElTree,
      },
      data() {
        return {
          isDel: false,
          depData: [],
          checkedKeyList: [],
          selectList: [],
          defaultProps: {
            children: "childrenDepartmentList",
            label: "workDeptId",
          },
          distribution: false,
          agentConfigSuccess: false,
          queryParams: {},
          filterText:'',
        };
      },
      methods: {
        // 选择员工内的删除
        handleDelSelect(data) {
          this.$refs.tree.setMyChecked &&
            this.$refs.tree.setMyChecked(data, false, true);
        },
    
        //去重,因为相同人员可以在不同部门出现,右侧进行渲染只渲染一个名字
        unique(arr) {
          const res = new Map();
          return arr.filter(
            (a) => !res.has(a.workDeptId) && res.set(a.workDeptId, 1) && a.type === 'user'
          );
        },
    
        // 多选框选中
        handleCheckChange(data, checked, indeterminate) {
          //设置选择框状态
          data.id &&
            this.$refs.tree.setMyChecked &&
            this.$refs.tree.setMyChecked(data, checked, true);
    
          //右边渲染列表
          let workDeptIds = this.$refs.tree
            .getCheckedNodes()
            .filter((item) => item.id && item.childrenDepartmentList.length === 0);
          this.selectList = this.unique(workDeptIds);
        },
    
        filterNode(value, data) {
          if (!value) return true;
          return data.workDeptId.indexOf(value) !== -1;
        },
    	
    	//因为我这里初始默认选中的数据结构和 部门列表的数据结构不一致,所以我进行了多一层处理
    	//将初始默认选中的数据传入进行过滤,将过滤成功的数据进行勾选并渲染
        myFilter(value) {
          let _this = this
          const traverse = function (node) {
            const childNodes = node.root ? node.root.childNodes : node.childNodes;
            childNodes.forEach((child) => {
              if(child.data.workDeptId === value){
                _this.$refs.tree.setMyChecked(child.data, true, true);
              }
              traverse(child);
            });
          };
          traverse(this.$refs.tree);
        },
        
        // 取消
        handleCancel() {
          this.$emit("handleCancel", false);
          this.filterText = "";
          this.selectList = "";
          this.$refs.tree.setCheckedKeys([]);
        },
        // 清空已选员工
        delAll() {
          this.selectList = [];
          this.checkedKeyList = [];
          this.$refs.tree.setCheckedKeys([]);
        },
        save(){
          if(this.selectList.length){
            this.$emit('handleConfirm',this.selectList)
          }else{
            this.$message({
              showClose: true,
              message: '请选择员工',
              type: 'error'
            });
          }
        },
      },
      watch: {
          filterText(val) {
            let data = {
              userName:val.trim()
            }
            workServiceUser(data).then(res=>{
              if(res && res.data && res.data.length){
                res.data.map(item=>{
                  this.$refs.tree.filter(item);
                })
              }else{
                this.$refs.tree.filter(val);
              }
            })
          },
          "selectUserIdList":{
            handler(){
              this.$nextTick(()=>{
                if(this.selectUserIdList && this.selectUserIdList.length){
                  this.selectUserIdList.map(item=>{
                    this.myFilter(item)
                  })
                }
              })
            }
          },
        },
    };
    </script>       
    
    展开全文
  • 收到了一封读者来信,说自己刚刚晋升为部门经理,便彷徨无措。 他身为员工时,努力勤勉,深得领导常识,也因此步入中层管理岗位。 但问题也随之而来。 对待手下,他不遗余力,诚心可鉴,以大家共同致富为已任。怎...

    刚晋升为部门经理,我要如何领导下属影响上级?

     

    收到了一封读者来信,说自己刚刚晋升为部门经理,便彷徨无措。

    他身为员工时,努力勤勉,深得领导常识,也因此步入中层管理岗位。

    但问题也随之而来。

    对待手下,他不遗余力,诚心可鉴,以大家共同致富为已任。怎奈,员工懒懒散散,不思进取;

    对待领导,他猛拍胸脯,主动担当,以「送信的加西亚」为榜样。谁知,业绩上不去,领导也渐失耐心,时有苛责。

    这位读者的遭遇,其实很普遍,论其根本,是两个身份转变时的隔绊。

    做一个好员工,很容易,你只需独善其身,知行均在一个单向维度中发生;

    做一个好领导,有点难,你需要合纵连横,毕竟身处一个复杂的场域之中,最重要的是,你需懂得协同之力。

    尤其是中层干部,此时对你而言的领导力,不仅仅是领导下属,还需要影响上级,放眼那些卓越的管理者,莫不如此。

    至于怎样领导下属,又如何影响上级,命题太过宏大,不易展开。突发奇想,用一种对抗反差的逻辑,聚焦几点,希望你能触类旁通。

    向下领导:一张黑脸,一张白脸

    向上领导:一张笑脸,一张哭脸

    1

    向下领导:一张黑脸

    初入管理,要学的第一课,不是激励、团建、企划.......而是要学会做恶人。

    这听起来奇葩,实则务本。

    很多刚刚步入领导岗位的人,往往底气不足,或者同理心泛滥,常把自己定位成一个服务者,以为真诚相待手下,必能换来热情相拥。

    但是,管理不是请客吃饭把妹子,人性更是复杂的,这样的结果就是,越来越多的猴子蹦到你肩上,你甚至会渐渐沦为属下们的保姆......

    所以,「慈不带兵,义不行贾」其意如此,你要做纯粹的好人,就别来做领导,你想做好领导,就要学会唱黑脸。

    沃顿商学院领导力教授Steven Frayne,曾说过:

    「领导者相当于舞台剧中的黑暗使者,他们带给大家的总是坏消息」。

    确实如此,作为领导,想唱好黑脸,最重要的一点是,学会压力转递,让成员建立共同的危机意识。

    有一个「狼来了」的段子:

    爷爷说:「如果把院子交给你管理,这时猪因饲料不好暴跳如雷,狗因看门太累半夜睡觉,驴因磨坊环境太脏无精打采,你怎么办?」

    孙子说:「我要给猪换饲料,合理安排狗的工作量,改善驴的磨坊环境,安抚它们,稳其心。」

    爷爷暴跳:「你这败家孙子!你应该告诉它们狼来了!」

    段子很形象,这种爷爷也很多。

    比如任正非爷爷经常说:「十年来我天天思考的都是失败,对成功视而不见,也没有什么荣誉感、自豪感,而是危机感」;

    马化腾爷爷经常说:「我们随时可能像那些巨人一样倒下,你去摸摸,可能还有体温」;

    马明哲爷爷经常说:「平安唯一不变的就是一直在变,如果忘掉这点,那就不平安了」。

    中外古今,所有优秀领导者,似乎都有一种悲观情节,也一直在传递这种情节。目的就是不断的警醒属下,制造「共同怨景」。

    就如《想像中的共同体》所揭示的那样:

    把一群人,放在一个泥沙俱下的环境中,再让他们面临共同的假想敌,这群人马上会变得密不可分,并拥有巨大的能量。

    在微信中搜索关注:【猎聘人才官】,回复【流程图】免费领取HRD吐血整理的超全人力资源工作流程图!

    2

    向下领导:一张红脸

    在一项离职原因调研中发现,占比最高的不是钱给的少,也不是工作环境不良,而是看不到希望。

    所以,领导者很重要的一项工作,是为成员塑造希望。

    你也许会问,上段你说要建立危机意识,这回你又说塑造希望,这不自相矛盾吗?

    并非如此,你可以想像一个场景,当众人限于黑暗泥泞之中,一人高举火把,大喊一声:这里有路,跟我走!

    此时此景,火把显得格外亮,人显得特别帅,脸也显得分外红。

    曼联教练弗格森出过一本书《领导力》,书中讲了一件事。

    一日,球员们在餐厅排队,布拉迪看到C罗走来,赶紧让C罗排到他前面。

    弗格森看到后,把布拉迪拉到一边,愤怒地问道:

    「你丫搞啥?为啥让C罗排到你前面?」

    布拉迪解释:「这只是出于尊敬,毕竟是C罗,全世界最牛逼的球员哦。」

    弗格森却说道:「以后不要这样了,你将来不会比他差,甚至可以取代他的位置。」

    看起来老弗爷在挑拨离间,塑造成员内部的竞争关系。其实,这就是对愿景的一种塑造。

    一位企业家给我讲过:

    企业一定要塑造明星员工,但要让别人觉得可以高攀,甚至可以取代。

    你看,企业的明星员工,实际上就是大家共同愿景的一个载体,众人奋勇争先,业务也就左右逢源。

    为下属塑造希望,方法很多,关键是以恰当的方式表达自己的欣赏与重视。

    我曾经的一位领导,是这方面的行家里手。如果你取得了不错的成绩,他有100种表达方式。

    比如,公司聚餐时,把你安排到主桌,享受和大领导同桌的代遇;

    再比如,当着你的面,向别人说你的一些优点;

    还有,偶而把你叫到办公室,摆出一个重大决策,听听你的意见......

    这些看起来好像没什么,但却让人受用。

    他带过很多机构,几乎每家都是业绩达成率和员工满意度双丰富。这种兼顾,对很多领导者都不是件容易的事。

    彼得·圣吉的经典著作《第五项修炼》中,曾花很长的篇幅来谈给员工塑造希望的重要性。书中说:

    领导者很重要的一项责任,就是为员工创造一个有张力的愿景,这不仅仅是为了企业,而是让员工懂得实现自我超越的重要性。

    3

    向上领导:一张笑脸

    前面两个部分,我们谈了向下领导的阴阳脸,下面接着说向上领导的阴阳脸。

    第一张脸是笑脸。

    这并非让你溜须拍马,而是让你具有一种担当,以积极的心态承接老板的要求。

    你可能会说,老板的要求不着调,难道还要积极担当吗?

    如果有理有据,当然可以提反对意见,但多数时候,领导也不会采纳。

    就像刘强东所说:

    我花钱雇你,不是让你来证明我错的。

    这话听起来霸道,但就是这样,

    但凡老板决定的事,基本都深思熟虑过,以你的思维层次去挑战他,并不明智。

    所以,老板已经确定的事,即使你心绪难平,也要善始善终,这是一个职业经理人应有的素质。

    我的一个大客户L总,现任某知名运动品牌副总裁,讲过一件事。

    早些年,他是项目经理时,负责研发一款运动鞋,老板给了明确指示,要按耐克的技术指标来生产。

    可耐克的一项重要指标是弹性,这在中国并不适用,因为多数人都在水泥地打球,不扭到脚比弹性更关键。所以,应该加强防护功能。

    L总给老板提建议,却被告知,想加另外的功能,可以,想降低耐克的参数,不行!

    这让L总处于两难,两种功能都实现,产品定价肯定奇高;只实现老板说的功能,市场又可能不买账。

    明知道自己是对的,却得不到认可,他有一走了之的想法,但最后还是决定死磕。

    他带领团队,度过了炼狱般的日子,反复推倒重来,最终在预算内,研发出两种功能兼顾的鞋子。

    得到老板认可后,他适时建议扩展产品线,推出价格低廉的产品,区别就在于降低了弹性系数,而防护功能不变。

    一经推出,竟成为主流产品,这不但印证了他当时的立场,还令老板对他更加器重,最终晋升为副总裁。

    L总对我说过一句意味深长的话:

    「在企业里,把你认为错的事做对,才叫本事。」

    还真是这样,无论老板的决策信马由缰,还是离谱万里,你只能默默的扛着,一步步去实现。

    4

    向上领导:一张哭脸

    向上领导,不仅仅需要承担,你也要向上施加影响,争取对自己有利的局面。

    正如那个千古不变的道理:「会哭的孩子有奶吃」。

    我刚进入500强做销售时,支公司共有5个部门主管,其中一个女主管,让我念念不忘,并非因为她长的漂亮,而是因为她特别能在领导面前哭。

    例如,被客户灌酒好难受,做方案加了几个通宵的班......

    而且每每哭完,总能拿到一些资源。

    一次,见她从领导房间出来,眼角分明挂着晶莹的泪珠,嘴角却洋溢着浅浅的笑意,这是怎样一种胜利的体验?

    她很会要资源,所以她部门的业绩也经常排名第一。

    当然,这种哭法有一定的局限性,大老爷们不好使,经常使用也会被领导厌弃。

    不过,不敢向领导要资源,却是很多初级管理者的共性。他们认为,「要资源」是给领导添堵,自己死扛,才彰显能力。

    其实,这是个天坑。领导不怕你来要资源,怕得是你出不了成绩。试想,你拿走他5盎司的发酵粉,还给他5磅的蛋糕,他怎会不开心?

    而且,越能要来资源,越能驱动团队,也越能体现你对部门的价值,以此形成循环促进效应,风生水起即为大概率事件。

    你如果看过《亮剑》,就会发现,李云龙是个要资源的高手,好装备必去争取,战利品非要分羹,好人才也会去染指。

    《亮剑》中有一集,李云龙被任命独立团团长,他故意摆谱,拒绝出山,直到旅长陈赓亲自登门去「请」。

    李云龙才马上服软,但表示要满足一个条件:「不要派政委,团长、政委他一个干!」

    在党领导军队的背景下,这怎么可能?于是陈赓大怒说,「你小子想反了天吗?」

    接下来,李云龙马上说:「既然这都不行,那你把新一团的张大彪调过来吧......」

    最后陈赓同意了这个要求,李云龙也转「哭」为笑,送他出门。

    你看,李云龙就是领导力领域的老油条,即懂得要资源的重要性,又懂得要资源的方法:

    「把真实需求藏在后面,你毙掉前面那个,后面那个你总得给我吧?」

    这种作法很滑头,但你要明白一点,就算你不要资源,也打了个漂亮仗,领导会怎么想?

    他会以为,没有额外的资源,你也能做得如此之好,即然如此,那么我再减点资源,你是不是也能达成?

    所以,「巧妇难为无米之炊」,往往是因为你太巧了,巧到让别人以为你根本不需要米......

    5

    结尾

    你是否会觉得此文的观点有些矛盾?

    向下领导,即让你唱黑脸,又让你唱红脸;

    向上领导,即让你摆笑脸,又让你使哭脸。

    确实如此,人文领域中的规律,往往模糊不清,充满矛盾。

    但是,一个卓越的领导者,必须学会用不同的面目去适应这种矛盾。

    就像《了不起的盖茨比》的作者,菲茨杰拉德说过这样一句名言:「同时保有全然相反的两种观念,还能正常行事,是第一流智慧的标志。」

    展开全文
  • 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码...
  • } /// /// 获取部门用户 /// /// /// 部门id /// 支持分页查询,与size参数同时设置时才生效,此参数代表偏移量 /// 支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小,最大100 /// 支持分页查询,...
  • 论文题目:部门工作管理系统的设计与实现 摘 要 目前,不断发展的计算机技术已经被广泛用于各个行业和领域,传统意义上的部门工作形式发生着根本性的变化,企业部门工作的内容也己经转变为对更为广泛的价值的追求。...
  • ​任何一个组织都存在上下级关系,在大家心中,上级管下属天经地义。所以这篇文章的标题《怎样管理你的上级领导》,有点很稀奇,甚至有点匪夷所思。 那为什么还要管理上级呢? 很多粉丝都问过我,“袁总,我已经工作...
  • 比如,部门部门之间存在边界,所以就有了“部门墙”。别看只是跨了个部门,各项沟通的复杂度就会直线上升 为啥呢?不是“自己人”了啊。那么,我们该如何应对跨部门沟通的问题呢?这里有两种方法 约法三章,先...
  • Q:如何获取当前用户的上级上级上级上级上级上级............ A:具体您可以参考以下说明: 在oracle下,使用start with connect by prior即可 select * from t_user start with id = '11e1-...
  • 升任部门经理1年多了正意气风发,老板就给我来了个难题:公司要裁员,每个部门都需要分担名额!——我该咋办? 温馨提示: 本文分音频版和文字版两个部分,两部分内容一样。 建议你首先收听音频版,感受大大...
  • 内由4个部门J(A,B,C,D)组成,每个部门的主机数 量分别是: 200(A), 100(B), 50(C), 40(D)。试将单 位的总地址块200.23.16.0/23划分为4个子网分配 各4个部门。 ◆1.写出每个子网(地址块) ◆2. 每个子网的网络 前缀?...
  • 两种方法,首先感谢转载的两...1 查询所有上级路径 传送门:http://www.cnblogs.com/dukou/p/4691543.html  主原文如下 创建表格 CREATE TABLE `treenodes` ( `id` int , -- 节点ID `nodename` varchar (60),
  • 设计张部门表用于存储部门编码、名称、上级部门id,使用Treeview控件显示部门树,并实现部门增删改、移动、折叠等功能。特别提示,部门有层级关系,可用donetbar的adtree控件 代码如下 1 using System; 2 ...
  • 工程师如何向技术支持请求帮助?

    千次阅读 2018-03-13 18:42:18
    从事嵌入式技术支持工作10年了,工作中经常会收到客户请求支持的情况。如果能够到问题现场进行处理,那还比较好说,但常常由于条件的限制,大部分支持都通过电话和邮件进行。客户常常会在邮件中强调问题非常关键,小...
  • 《玩转Redis》系列文章 by zxiaofan 系列第【16】篇,Lua脚本入门到实战、调试Lua脚本、树形结构的存储方案、“邻接表”、“路径枚举”、查找部门的所有上级部门
  • 三、信息系统故障解决要求 1、信息系统出现无法进行本地解决的,应向上级领导及上级部门进行申告故障。对 无法解决的故障,应立即向软硬件最终提供商、代理商或维保服务商(以下简称厂商) 提出技术支持申请,督促...
  • 1.如果能顺利通过笔试,你要向主管部门说明情况,得到领导和部门支持,并开据证明. 2.如果你是在事业单位,单位应该是不会不同意的,向国家输送人才是每个单位的责任和要求,领导一定会同意的;你如果是在企业也是来去...
  • 系统支持提供友好API接口或者对接第三方管理平台,实现不同平台之间信息同步,实现监管方和上级部门的实时性要求。 (3) 实现粮库管理智慧化 系统通过物联网技术、电子通讯技术、视频图像分析技术等,创建库区业务...
  • 系统支持提供友好API接口或者对接第三方管理平台,实现不同平台之间信息同步,实现监管方和上级部门的实时性要求。 (3) 实现粮库管理智慧化 系统通过物联网技术、电子通讯技术、视频图像分析技术等,创建库区业务...
  • sql server 通过CTE来支持递归查询,这对查询树形或层次结构的数据很有用 一般的树形表结构如下,相信大家都很熟悉的 id title pid 1 1级节点 0 2 2级节点 1 3 3级节点 2 4 4级节点 3 5 5级节点 4 ...
  • 道理很简单,你现在只是一个小主管根本就没有多大的利益,你出于部门的发展做的任何思考,领导都是很欣赏的,你可以非常真诚的告诉他,你现在受到排挤的情况,以及说一说你拿到权力之后会怎么用,再谈一谈你对部门...
  • 并留有与上级主管部门的接口,达到资源共享,信息共享,优势互补,实现“全面自动化”管理,节省运行费用,提高分析决策能力。  系统涉及到信息采集、传输、存储,泵站信息管理系统以及泵站机组运行管理系统等建设...
  • 技术支持总结

    千次阅读 2021-12-29 20:30:59
    服务它可以包括以下内容:信息化规划(咨询)、设备和软件选型、网络系统和应用软件系统建设、整个系统... 收集各个部门为提高工作效率或工作质量而提出的各项建议,分析需求可行性,从而协助部门完成需求提交。 定
  • 需求说:节点的label要支持定制,树要支持水平展示! 因此,我们对递归组件作如下修改: {{data.label}} 我们使用slot插槽来支持label可定制,但是问题又来了:我们发现只有第一层级的节点label能定制,嵌套的子...
  • 目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,可以在一句SQL内实现树的递归查询下面给一个小示例,后续在贴上调用的代码(代码会贴在最后请注意)MySQL递归查询所有子节点,树形结构查询--...
  • 涉案财物管理系统.doc

    2022-06-26 17:36:55
    系统的网络化功能,提供了涉案财物分类统计分析, 为领导和上级主管部门更好地监督和指导涉案财物管理工作提供了准确的数据和高效的 平台。 二、系统主要工作流程 三、系统组成 四、系统实施效果图 五、系统多
  • 非IT部门职能

    千次阅读 2017-11-20 15:18:44
    管办分离模式下,IT部门是个纯粹的技术部门,一般负责单位的信息化建设中长期规划、内部业务信息系统(OA、PDM、ERP、mail、……)开发(可选)和运维(含用户技术支持)、IT基础设施(网络布线、网络设备、终端、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,080
精华内容 7,232
关键字:

上级部门的支持

友情链接: bookstore.zip