shikeying
2023-04-07 c192f834c4e092bc7c0f2722c343c25c1be619ab
添加部分组件,添加拼图验证(未完成)
26 文件已重命名
84个文件已添加
18个文件已修改
17966 ■■■■■ 已修改文件
package.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/common.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/verify.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/icons/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/head_img.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/staff-female.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/staff-male.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/components/BackToTop/index.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Breadcrumb/index.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Logout/index.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MyIcons/iconfont.eot 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MyIcons/iconfont.svg 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MyIcons/iconfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MyIcons/iconfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MyIcons/index.css 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/MyIcons/index.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/PanThumb/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Breadcrumb/index.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/day.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/hour.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/min.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/month.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/result.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/second.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/week.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Crontab/year.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/DictData/index.js 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/DictTag/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Editor/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/FileUpload/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Hamburger/index.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/HeaderSearch/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/IconSelect/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/IconSelect/requireIcons.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/ImagePreview/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/ImageUpload/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Pagination/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/PanThumb/index.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/ParentView/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/RightPanel/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/RightToolbar/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/Screenfull/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/SizeSelect/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/SvgIcon/index.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/ThemePicker/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/TopNav/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RuoYi/iFrame/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Screenfull/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/SvgIcon/index.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/TextHoverEffect/Mallki.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/UserInfo/index.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Settings/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/1_close.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/1_open.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/4.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/5.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/6.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/7.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/8.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/diy/9.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/line_conn.gif 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/loading.gif 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/zTreeStandard.gif 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/img/zTreeStandard.png 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/css/zTreeStyle/zTreeStyle.css 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery-1.4.4.min.js 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.all.js 3841 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.all.min.js 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.core.js 1986 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.core.min.js 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.excheck.js 651 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.excheck.min.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.exedit.js 1203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.exedit.min.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.exhide.js 404 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/ztree/js/jquery.ztree.exhide.min.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/permission.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/base.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/date.js 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/jsencrypt.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/tools.js 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/buttonSelect/index.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/chooseAddress.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/dateSelector/index.vue 508 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/editableCell.vue 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/generalRemark/index.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/generalRemark/query.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/help/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myBlockTable.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myButton.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myButtonV2.vue 428 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myImport.vue 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myPaging.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/mySwitch.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myTable.vue 434 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myTableTree/myTableTree.vue 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myTableTree/tree/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myTableTree/tree/tableTreeUtil.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myTableV2.vue 420 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/myTableV3.vue 645 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/previewPicture/index.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/tinymce/components/EditorImage.vue 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/tinymce/index.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/upload/index.vue 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/uploadFile/index.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/userAuth/auth.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/userAuth/index.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/verify/css/index.css 1346 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/verify/img/loading.gif 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/verify/img/vb.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/verify/index.vue 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/win/index.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/win2/index.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/win3/index.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/ztree/check.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/ztree/index.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/druid/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/job/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/menu/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tool/swagger/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/login.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -45,6 +45,7 @@
    "file-saver": "2.0.5",
    "fuse.js": "6.4.3",
    "highlight.js": "9.18.5",
    "jquery": "^3.6.4",
    "js-beautify": "1.13.0",
    "js-cookie": "3.0.1",
    "jsencrypt": "3.0.0-rc.1",
@@ -52,6 +53,9 @@
    "quill": "1.3.7",
    "screenfull": "5.0.2",
    "sortablejs": "1.10.2",
    "stylus": "^0.59.0",
    "stylus-loader": "^7.1.0",
    "viewerjs": "^1.11.3",
    "vue": "2.6.12",
    "vue-count-to": "1.0.13",
    "vue-cropper": "0.5.5",
src/api/common.js
New file
@@ -0,0 +1,52 @@
import request from '@/utils/request'
/*
 * @Author : liu.q [916000612@qq.com]
 * @Date : 2019-08-10 09:02
 * @Description : 腾讯地图引入
 * @libraries 需要用的库,逗号,分割
 */
export function tMap(libraries) {
  return new Promise(function(resolve, reject) {
    window.init = function() {
      resolve(qq)// 注意这里
    }
    const script = document.createElement('script')
    script.type = 'text/javascript'
    script.src = 'http://map.qq.com/api/js?v=2.exp&callback=init&key=Z4RBZ-RP5K4-VBYUT-D5DYM-DWG23-OPBJJ&libraries=' + libraries
    script.onerror = reject
    document.head.appendChild(script)
  })
}
/*
 * @Author : liu.q [916000612@qq.com]
 * @Date : 2019-08-10 09:03
 * @Description : 地址查询
 */
export function getAddress() {
  return request({
    url: '/static/json/address.json',
    method: 'get'
  })
}
/**
 * @Author wh
 * @Date 2022/7/13 15:23
 * @Description // 获取上次登录信息
 **/
export function getLastLogin(param) {
  return request.get(globalConf.baseUrl + '/v1/base/pc/sys/login/log/getLastLogin', { params: param })
}
/**
 * 待办事项
 * @param param
 */
export function getMyWaitList(param) {
  return request({
    url: globalConf.baseUrl + '/v1/base/pc/sys/menu/getMyWaitList',
    method: 'get',
    params: param
  })
}
src/api/system/verify.js
New file
@@ -0,0 +1,28 @@
import request from '@/utils/request'
/*
 * @Author : liu.q [916000612@qq.com]
 * @Date : 2019-06-25 11:42
 * @Description :获取验证码
 */
export function getVerify(param) {
  return request({
    // url: globalConf.baseUrl + '/v1/base/web/getVerify',
    url: globalConf.baseUrl + '/captcha/jigsaw',
    method: 'get',
    params: param
  })
}
/*
 * @Author : liu.q [916000612@qq.com]
 * @Date : 2019-06-25 11:42
 * @Description :校验验证码
 */
export function checkVerify(param) {
  return request({
    url: globalConf.baseUrl + '/captcha/jigsaw_validate',
    method: 'post',
    params: param
  })
}
src/assets/icons/index.js
@@ -1,5 +1,5 @@
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component
import SvgIcon from '@/components/RuoYi/SvgIcon'// svg component
// register globally
Vue.component('svg-icon', SvgIcon)
src/assets/images/head_img.jpg
src/assets/images/staff-female.jpg
src/assets/images/staff-male.jpg
src/components/BackToTop/index.vue
New file
@@ -0,0 +1,116 @@
<template>
  <transition :name="transitionName">
    <div v-show="visible" :style="customStyle" class="back-to-ceiling" @click="backToTop">
      <svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height: 16px; width: 16px;">
        <title>回到顶部</title>
        <g>
          <path d="M12.036 15.59c0 .55-.453.995-.997.995H5.032c-.55 0-.997-.445-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29c.39-.39 1.026-.385 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" fill-rule="evenodd" />
        </g>
      </svg>
    </div>
  </transition>
</template>
<script>
export default {
  name: 'BackToTop',
  props: {
    visibilityHeight: {
      type: Number,
      default: 400
    },
    backPosition: {
      type: Number,
      default: 0
    },
    customStyle: {
      type: Object,
      default: function() {
        return {
          right: '50px',
          bottom: '50px',
          width: '40px',
          height: '40px',
          'border-radius': '4px',
          'line-height': '45px',
          background: '#e7eaf1'
        }
      }
    },
    transitionName: {
      type: String,
      default: 'fade'
    }
  },
  data() {
    return {
      visible: false,
      interval: null,
      isMoving: false
    }
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll)
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll)
    if (this.interval) {
      clearInterval(ths.interval)
    }i
  },
  methods: {
    handleScroll() {
      this.visible = window.pageYOffset > this.visibilityHeight
    },
    backToTop() {
      if (this.isMoving) return
      const start = window.pageYOffset
      let i = 0
      this.isMoving = true
      this.interval = setInterval(() => {
        const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500))
        if (next <= this.backPosition) {
          window.scrollTo(0, this.backPosition)
          clearInterval(this.interval)
          this.isMoving = false
        } else {
          window.scrollTo(0, next)
        }
        i++
      }, 16.7)
    },
    easeInOutQuad(t, b, c, d) {
      if ((t /= d / 2) < 1) return c / 2 * t * t + b
      return -c / 2 * (--t * (t - 2) - 1) + b
    }
  }
}
</script>
<style scoped>
.back-to-ceiling {
  position: fixed;
  display: inline-block;
  text-align: center;
  cursor: pointer;
}
.back-to-ceiling:hover {
  background: #d5dbe7;
}
.fade-enter-active,
.fade-leave-active {
  transition: opacity .5s;
}
.fade-enter,
.fade-leave-to {
  opacity: 0
}
.back-to-ceiling .Icon {
  fill: #9aaabf;
  background: none;
}
</style>
src/components/Breadcrumb/index.vue
@@ -1,74 +1,28 @@
<template>
  <el-breadcrumb class="app-breadcrumb" separator="/">
    <transition-group name="breadcrumb">
      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
        <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
      </el-breadcrumb-item>
    </transition-group>
  </el-breadcrumb>
  <div>
    <span class="title">{{ title }}</span>
  </div>
</template>
<script>
import { title } from '@/settings'
export default {
  data() {
    return {
      levelList: null
    }
  },
  watch: {
    $route(route) {
      // if you go to the redirect page, do not update the breadcrumbs
      if (route.path.startsWith('/redirect/')) {
        return
      }
      this.getBreadcrumb()
      title: title
    }
  },
  created() {
    this.getBreadcrumb()
  },
  methods: {
    getBreadcrumb() {
      // only show routes with meta.title
      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
      const first = matched[0]
      if (!this.isDashboard(first)) {
        matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
      }
      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
    },
    isDashboard(route) {
      const name = route && route.name
      if (!name) {
        return false
      }
      return name.trim() === 'Index'
    },
    handleLink(item) {
      const { redirect, path } = item
      if (redirect) {
        this.$router.push(redirect)
        return
      }
      this.$router.push(path)
    }
  }
}
</script>
<style lang="scss" scoped>
.app-breadcrumb.el-breadcrumb {
  display: inline-block;
  font-size: 14px;
  line-height: 50px;
  margin-left: 8px;
  .no-redirect {
    color: #97a8be;
    cursor: text;
<style scoped>
  .title {
    line-height: 72px;
    font-size: 24px;
    color: #333;
    font-weight: bold;
  }
}
</style>
src/components/Logout/index.vue
New file
@@ -0,0 +1,37 @@
<template>
  <el-tooltip effect="dark" content="退出" placement="bottom">
    <div class="quit" @click="logout()">
      <img class="icon" src="@/assets/images/quit.png" alt="">
    </div>
  </el-tooltip>
</template>
<script>
export default {
  methods: {
    logout() {
      this.$confirm('确定退出?', '', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$store.dispatch('user/logout').then(() => {
          this.$router.push('/login')
        })
      }).catch(() => {
      })
    }
  }
}
</script>
<style lang="scss"  scoped>
.quit{
  height: 70px;
  display: flex;
  align-items: center;
  .icon{
    width: 25px;
  }
}
</style>
src/components/MyIcons/iconfont.eot
Binary files differ
src/components/MyIcons/iconfont.svg
New file
@@ -0,0 +1,272 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
  <font-face
    font-family="iconfont"
    font-weight="500"
    font-stretch="normal"
    units-per-em="1024"
    ascent="896"
    descent="-128"
  />
    <missing-glyph />
    <glyph glyph-name="communityfill" unicode="&#59200;" d="M704 163.2c51.2 0 96 41.6 96 96v412.8c0 51.2-41.6 96-96 96h-547.2c-51.2 0-96-41.6-96-96v-412.8c0-51.2 41.6-96 96-96h35.2v-160c0-12.8 9.6-25.6 22.4-32h9.6c9.6 0 19.2 3.2 25.6 12.8l131.2 179.2h323.2zM864 643.2c-19.2 0-32-12.8-32-32s16-32 32-32 32-12.8 32-32v-348.8c0-19.2-16-25.6-32-25.6h-32c-19.2 0-32-12.8-32-32v-3.2c0-3.2-3.2-6.4-3.2-9.6v-60.8l-73.6 57.6c-3.2 3.2-9.6 3.2-16 3.2h-163.2c-19.2 0-32-12.8-32-32s12.8-32 32-32h153.6l115.2-89.6c6.4-3.2 12.8-6.4 19.2-6.4 3.2 0 9.6 0 12.8 3.2 9.6 6.4 19.2 16 19.2 28.8v108.8c54.4 0 96 38.4 96 89.6v348.8c0 51.2-44.8 96-96 96z"  horiz-adv-x="1024" />
    <glyph glyph-name="community" unicode="&#59201;" d="M704 163.2c51.2 0 96 41.6 96 96v412.8c0 51.2-41.6 96-96 96h-547.2c-51.2 0-96-41.6-96-96v-412.8c0-51.2 41.6-96 96-96h35.2v-160c0-12.8 9.6-25.6 22.4-32h9.6c9.6 0 19.2 3.2 25.6 12.8l131.2 179.2h323.2zM233.6 224c-3.2 3.2-9.6 3.2-12.8 3.2h-64c-16 0-32 12.8-32 32v412.8c0 16 12.8 32 32 32h547.2c16 0 32-12.8 32-32v-412.8c0-16-12.8-32-32-32h-348.8c-3.2-3.2-3.2-3.2-6.4-3.2s-3.2-3.2-6.4-3.2l-3.2-3.2s-3.2 0-3.2-3.2l-80-115.2v92.8c0 16-9.6 25.6-22.4 32zM864 643.2c-19.2 0-32-12.8-32-32s16-32 32-32 32-12.8 32-32v-348.8c0-19.2-16-25.6-32-25.6h-32c-19.2 0-32-12.8-32-32v-3.2c0-3.2-3.2-6.4-3.2-9.6v-60.8l-73.6 57.6c-3.2 3.2-9.6 3.2-16 3.2h-163.2c-19.2 0-32-12.8-32-32s12.8-32 32-32h153.6l115.2-89.6c6.4-3.2 12.8-6.4 19.2-6.4 3.2 0 9.6 0 12.8 3.2 9.6 6.4 19.2 16 19.2 28.8v108.8c54.4 0 96 38.4 96 89.6v348.8c0 51.2-44.8 96-96 96z"  horiz-adv-x="1024" />
    <glyph glyph-name="lingdang" unicode="&#983541;" d="M593.862 95.418l-169.191 0c-9.444 0-18.438-3.932-24.695-10.902-6.314-6.971-9.441-16.324-8.548-25.676 2.86-29.192 16.324-56.239 38.01-76.018 21.773-20.017 50.161-31.038 79.89-31.038 29.696 0 58.085 11.022 79.83 30.978 21.715 19.84 35.178 46.886 38.068 76.256 0.596 9.474-2.535 18.707-8.639 25.499-6.286 6.971-15.28 10.902-24.724 10.902zM555.02 20.174c-25.082-22.877-66.605-22.818-91.567-0.06-7.596 6.971-13.404 15.429-17.158 24.723l125.823 0c-3.723-9.353-9.474-17.751-17.097-24.663zM818.609 235.657l-62.763 82.928 0 49.268 0 105.715c0 70.745-24.216 136.337-68.183 184.682-26.003 28.626-57.31 49.715-93.055 62.822-3.306 18.944-12.721 36.252-26.926 49.208-32.051 29.251-85.104 29.251-117.096 0-14.357-13.046-23.77-30.383-26.987-49.268-35.714-13.046-67.022-34.135-93.026-62.791-43.938-48.434-68.184-114.026-68.184-184.653l0.179-154.686-62.315-82.451c-8.757-9.353-13.582-21.507-13.582-34.256l0-40.332c0-27.644 22.461-50.043 50.043-50.043l544.812 0c27.611 0 50.011 22.4 50.011 50.043l0 40.332c-0.001 12.75-4.796 24.904-12.927 33.483zM535.776 734.118c-7.387 0.656-19.302 1.906-26.569 1.906-7.298 0-19.689-1.252-27.048-1.906 12.42 20.254 44.384 16.502 53.617 0zM237.427 161.844l-0.12 40.035 62.315 82.45c8.698 9.354 13.524 21.447 13.524 34.256l0 154.983c0 58.056 19.54 111.554 54.986 150.635 17.574 19.362 38.307 34.375 61.541 44.682 48.852 21.745 110.302 21.745 159.096 0 23.321-10.425 43.994-25.438 61.539-44.682 35.449-39.081 54.959-92.579 54.959-150.635l0-154.984c0-12.867 4.826-25.081 12.956-33.54l62.791-82.868 0.509-39.795-544.096-0.536z"  horiz-adv-x="1024" />
    <glyph glyph-name="like" unicode="&#59036;" d="M332.8 646.4c38.4 0 83.2-19.2 108.8-44.8L467.2 576 512 531.2 556.8 576l25.6 25.6c32 32 70.4 44.8 108.8 44.8 19.2 0 38.4-6.4 57.6-12.8 44.8-25.6 70.4-57.6 76.8-108.8 6.4-44.8-6.4-89.6-38.4-121.6L512 121.6 236.8 403.2C204.8 435.2 185.6 480 192 524.8c6.4 44.8 38.4 83.2 76.8 108.8C288 640 313.6 646.4 332.8 646.4L332.8 646.4M332.8 710.4C300.8 710.4 268.8 704 243.2 691.2 108.8 620.8 89.6 454.4 185.6 358.4l281.6-281.6C480 64 499.2 57.6 512 57.6s32 6.4 38.4 19.2l281.6 281.6c96 96 76.8 262.4-57.6 332.8-25.6 12.8-57.6 19.2-89.6 19.2-57.6 0-115.2-25.6-153.6-64L512 620.8 486.4 646.4C448 684.8 390.4 710.4 332.8 710.4L332.8 710.4z"  horiz-adv-x="1024" />
    <glyph glyph-name="likefill" unicode="&#59037;" d="M780.8 691.2c-83.2 44.8-179.2 19.2-243.2-44.8L512 620.8 486.4 646.4c-64 64-166.4 83.2-243.2 44.8C108.8 620.8 89.6 454.4 185.6 358.4l32-32 153.6-153.6 102.4-102.4c25.6-25.6 57.6-25.6 83.2 0l102.4 102.4 153.6 153.6 32 32C934.4 454.4 915.2 620.8 780.8 691.2z"  horiz-adv-x="1024" />
    <glyph glyph-name="plane" unicode="&#59057;" d="M704 32c-6.4 0-12.8 0-19.2 6.4l-153.6 102.4L454.4 64c-6.4-6.4-25.6-12.8-32-6.4-12.8 6.4-19.2 19.2-19.2 32l0 140.8c0 6.4 0 12.8 6.4 19.2L652.8 512c12.8 12.8 32 12.8 44.8 0 12.8-12.8 12.8-32 0-44.8l-236.8-256 0-51.2 44.8 38.4c12.8 12.8 25.6 12.8 38.4 6.4l140.8-89.6 108.8 531.2L256 384l121.6-76.8C390.4 300.8 396.8 275.2 384 262.4c-6.4-12.8-32-19.2-44.8-12.8L172.8 358.4C166.4 364.8 160 371.2 160 384c0 12.8 6.4 19.2 19.2 25.6l640 320c12.8 6.4 25.6 6.4 32 0 12.8-6.4 12.8-19.2 12.8-32l-128-640c0-12.8-6.4-19.2-19.2-25.6C710.4 32 710.4 32 704 32z"  horiz-adv-x="1024" />
    <glyph glyph-name="planefill" unicode="&#59058;" d="M851.2 729.6c-12.8 6.4-25.6 6.4-32 0l-640-320C166.4 409.6 160 396.8 160 384s6.4-25.6 12.8-25.6l153.6-96c12.8-6.4 25.6-6.4 38.4 6.4L704 576l12.8-6.4-307.2-326.4c-6.4-6.4-6.4-12.8-6.4-19.2l0-140.8c0-12.8 6.4-25.6 19.2-32 12.8-6.4 25.6 0 32 6.4l76.8 76.8 153.6-102.4c6.4-6.4 12.8-6.4 19.2-6.4 6.4 0 6.4 0 12.8 0 12.8 6.4 19.2 12.8 19.2 25.6l128 640C864 710.4 864 723.2 851.2 729.6z"  horiz-adv-x="1024" />
    <glyph glyph-name="huiyuan" unicode="&#58909;" d="M940.032-112.64l-855.04 0c-54.272 0-84.992 32.768-84.992 91.136 0 111.616 99.328 273.408 278.528 273.408 11.264 0 19.456-9.216 19.456-19.456s-9.216-19.456-19.456-19.456c-153.6 0-238.592-138.24-238.592-234.496 0-46.08 24.576-51.2 45.056-51.2l855.04 0c21.504 0 45.056 6.144 45.056 51.2 0 95.232-84.992 234.496-238.592 234.496-11.264 0-19.456 9.216-19.456 19.456s9.216 19.456 19.456 19.456C925.696 251.904 1025.024 90.112 1025.024-21.504 1025.024-78.848 994.304-112.64 940.032-112.64zM513.024 266.24c-153.6 0-279.552 137.216-279.552 307.2S359.424 880.64 513.024 880.64s279.552-137.216 279.552-307.2S666.624 266.24 513.024 266.24zM513.024 840.704c-132.096 0-239.616-119.808-239.616-267.264S380.928 306.176 513.024 306.176s239.616 119.808 239.616 267.264S645.12 840.704 513.024 840.704z"  horiz-adv-x="1026" />
    <glyph glyph-name="biaoxingfill" unicode="&#59186;" d="M957.258525 491.76684c-3.78431 11.352931-13.589115 19.609609-25.458088 21.501764l-270.406182 41.799429L540.640349 813.605241c-5.332437 11.180917-16.513355 18.40551-28.898371 18.40551 0 0 0 0 0 0-12.385016 0-23.565933-7.052579-28.898371-18.40551l-121.78599-258.021166L90.135394 514.816731c-11.868974-1.720141-21.673778-9.976818-25.630102-21.32975s-1.032085-23.909961 7.396607-32.510667L268.342012 258.859735 221.38216-25.995632c-2.064169-12.040988 3.096254-24.25399 13.073072-31.306568 9.976818-7.052579 23.221905-7.740635 33.88678-1.892155L510.193852 73.772552l241.335797-133.826978c4.816395-2.580212 10.148833-3.956325 15.48127-3.956325 0.172014 0 0.516042 0 0.688056 0 17.717453 0 31.994625 14.277171 31.994625 31.994625 0 3.956325-0.688056 7.740635-2.064169 11.352931l-44.895683 278.662859 196.956157 201.256509C958.118596 467.856879 961.042836 480.413909 957.258525 491.76684z"  horiz-adv-x="1024" />
    <glyph glyph-name="biaoxing" unicode="&#59187;" d="M767.010919-63.838737c-5.332437 0-10.664875 1.376113-15.48127 3.956325l-241.335797 133.826978-241.851839-132.966907c-10.664875-5.84848-23.909961-5.160423-33.88678 1.892155-9.976818 7.052579-15.137242 19.26558-13.073072 31.306568L268.342012 258.859735 71.901898 460.976314c-8.256677 8.428691-11.180917 20.985721-7.396607 32.166639 3.612296 11.352931 13.245087 19.609609 24.942046 21.673778l154.984714 26.662187c17.545439 2.92424 34.058794-8.77272 36.983034-26.146145s-8.77272-33.88678-26.146145-36.983034l-95.123803-16.341341 165.30556-170.121955c7.052579-7.224593 10.320847-17.545439 8.600706-27.522258l-38.875189-235.659331 199.536368 109.745003c9.63279 5.332437 21.32975 5.332437 30.96254 0l199.19234-110.433059-38.015118 235.831346c-1.548127 9.976818 1.548127 20.297665 8.77272 27.522258l164.617504 168.2298L634.732068 494.347052c-10.492861 1.548127-19.609609 8.428691-24.081975 18.061482L511.397951 724.84596l-100.112212-211.74937c-7.568621-15.997312-26.662187-22.877877-42.659499-15.309256-15.997312 7.568621-22.877877 26.662187-15.309256 42.659499l129.182597 273.502436c5.332437 11.180917 16.513355 18.40551 28.898371 18.40551 0 0 0 0 0 0 12.385016 0 23.737947-7.224593 28.898371-18.40551l120.753906-258.537208 270.406182-41.799429c11.868974-1.892155 21.673778-10.148833 25.458088-21.501764 3.78431-11.352931 0.860071-23.909961-7.568621-32.510667l-196.956157-201.256509 45.927768-284.855367c1.892155-12.040988-3.268268-24.25399-13.245087-31.306568C779.911977-61.946582 773.547455-63.838737 767.010919-63.838737z"  horiz-adv-x="1024" />
    <glyph glyph-name="dianpufill" unicode="&#59189;" d="M952.786158 543.199059c0 0.516042-0.172014 0.860071-0.172014 1.376113-0.344028 1.892155-0.860071 3.612296-1.548127 5.332437L875.895851 736.714934c-12.901058 38.531161-48.852007 62.613136-93.919704 62.613136L255.440954 799.32807c-44.207626 0-78.610449-23.565933-90.995464-60.720981L83.770872 548.015454c-0.344028-1.204099-0.860071-2.752226-1.204099-4.472367-5.84848-18.061482-8.77272-36.466991-8.77272-55.044515 0-65.193348 35.778935-124.71023 93.231648-155.328742 23.565933-12.729044 51.432219-19.093566 82.738787-19.093566 0 0 0 0 0.172014 0 52.464304 0.172014 101.144297 23.221905 134.34302 62.613136 33.026709-39.219217 81.19066-62.097094 133.654964-62.441122 51.948261 0.344028 100.112212 23.393919 132.966907 62.613136 33.198723-39.563245 81.878717-62.441122 134.687049-62.441122 31.994625 0.172014 60.204939 6.880564 84.1149 19.953637 56.592642 30.96254 91.683521 90.135394 91.683521 154.640685C961.386864 507.764153 958.29061 526.341676 952.786158 543.199059zM766.322862 512.064505 254.408869 512.064505c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625l512.086007 0c17.717453 0 31.994625-14.277171 31.994625-31.994625S784.040316 512.064505 766.322862 512.064505zM894.989417 256.107509c0 17.717453-14.277171 31.994625-31.994625 31.994625-3.268268 0-6.192508-0.860071-9.288762-1.892155l0 0c-23.737947-9.460776-54.012431-14.449185-76.890307-13.245087-50.400134 2.752226-88.931295 12.729044-125.914329 44.207626-36.466991-31.134554-83.082815-48.852007-132.622879-49.36805-50.22812 0.344028-97.187972 12.901058-133.826978 44.207626-36.983034-31.478582-84.1149-46.787838-134.34302-46.787838l-0.172014 0c-30.618512 0-47.991937 5.84848-75.858223 16.169326-0.688056 0.344028-1.548127 0.516042-2.408198 0.860071-1.376113 0.516042-2.408198 0.860071-3.78431 1.376113 0 0-4.644381 0.860071-7.052579 0.860071 0 0 0 0 0 0-17.717453 0-31.994625-14.449185-31.994625-31.994625l0.172014-171.498068c0-45.067697 36.81102-81.878717 82.050731-81.878717l602.221401 0.344028c45.067697 0.172014 81.878717 36.983034 81.878717 82.050731L894.989417 256.107509z"  horiz-adv-x="1024" />
    <glyph glyph-name="dianpu" unicode="&#59190;" d="M952.786158 543.199059c0 0.516042-0.172014 0.860071-0.172014 1.376113-0.344028 1.892155-0.860071 3.612296-1.548127 5.332437L875.895851 736.714934c-13.073072 38.703175-50.22812 62.441122-93.919704 62.613136L255.440954 799.32807c-44.207626 0-78.610449-23.565933-90.995464-60.720981L83.770872 548.015454c-0.344028-1.204099-0.860071-2.752226-1.204099-4.472367-5.84848-18.061482-8.77272-36.466991-8.77272-55.044515 0-65.193348 35.778935-124.71023 93.231648-155.328742 0 0 0 0 0 0s0 0 0 0l0 0c0 0 0 0 0 0 23.565933-12.55703 51.432219-18.921552 82.738787-18.921552 52.464304 0.172014 101.144297 23.221905 134.34302 62.78515 33.026709-39.219217 81.19066-62.097094 133.654964-62.441122 51.948261 0.344028 100.112212 23.393919 132.966907 62.613136 33.198723-39.563245 81.878717-62.441122 134.687049-62.441122 31.994625 0.172014 60.204939 6.880564 84.1149 19.953637 56.592642 30.96254 91.683521 90.135394 91.683521 154.640685C961.386864 507.764153 958.29061 526.341676 952.786158 543.199059zM839.084831 390.622543c-14.449185-7.912649-32.510667-12.040988-53.668402-12.040988-39.047203 0-74.48211 19.781623-95.295817 53.324374-1.548127 3.096254-3.956325 8.428691-8.600706 13.417101-5.332437 5.84848-14.793214 12.901058-30.618512 12.901058-12.729044 0-24.25399-5.160423-30.790526-13.245087-4.300353-4.816395-6.70855-9.63279-8.428691-13.245087-20.469679-33.198723-55.732572-53.15236-93.919704-53.324374-38.703175 0.172014-73.966068 20.125651-94.607761 53.496388-1.376113 2.92424-3.78431 7.912649-7.568621 12.040988-14.965228 17.889467-48.679993 17.029397-61.753066 1.376113-4.816395-5.332437-7.396607-10.664875-8.944734-14.277171-20.641693-33.198723-56.248614-52.980346-94.951789-53.15236-20.641693 0-38.359147 3.956325-52.636318 11.524945l0 0c0 0 0 0 0 0-36.639006 19.437594-59.344868 57.452713-59.344868 98.908114 0 12.213002 2.064169 24.598018 6.192508 36.639006 0.344028 0.860071 0.516042 1.892155 0.688056 2.752226l79.470519 187.839409c1.548127 4.816395 6.536536 19.437594 31.306568 19.437594l526.707206 0c10.148833-0.688056 27.694272-2.408198 33.88678-20.641693l74.310096-185.259197c0.344028-1.376113 0.688056-2.580212 1.032085-3.612296 4.128339-12.040988 6.192508-24.25399 6.192508-36.466991C897.397615 448.075256 875.03578 410.404166 839.084831 390.622543zM862.994793 288.102133c-17.717453 0-31.994625-14.277171-31.994625-31.994625l0-174.594322c0-9.976818-8.084663-18.061482-18.061482-18.061482l-602.049387-0.344028c-9.976818 0-18.061482 8.084663-18.061482 17.889467l-0.172014 171.498068c0 17.717453-14.449185 31.994625-31.994625 31.994625 0 0 0 0 0 0-17.717453 0-31.994625-14.449185-31.994625-31.994625l0.172014-171.498068c0-45.067697 36.81102-81.878717 82.050731-81.878717l602.221401 0.344028c45.067697 0.172014 81.878717 36.81102 81.878717 82.050731l0 174.594322C894.989417 273.652948 880.712246 288.102133 862.994793 288.102133zM768.043004 512.064505 255.956996 512.064505c-17.717453 0-31.994625 14.277171-31.994625 31.994625 0 17.717453 14.277171 31.994625 31.994625 31.994625l511.913993 0c17.717453 0 31.994625-14.277171 31.994625-31.994625C800.037628 526.341676 785.588443 512.064505 768.043004 512.064505z"  horiz-adv-x="1024" />
    <glyph glyph-name="gouwuchefill" unicode="&#59196;" d="M352.972955 64.139761c-35.434907 0-63.989249-28.554342-63.989249-63.989249 0-35.434907 28.554342-63.989249 63.989249-63.989249s63.989249 28.554342 63.989249 63.989249C416.962204 35.585419 388.407862 64.139761 352.972955 64.139761L352.972955 64.139761zM801.069713 64.139761c-35.434907 0-63.989249-28.554342-63.989249-63.989249 0-35.434907 28.554342-63.989249 63.989249-63.989249s63.989249 28.554342 63.989249 63.989249C865.058962 35.585419 836.332605 64.139761 801.069713 64.139761L801.069713 64.139761zM937.304888 707.472535C920.963548 726.050059 898.429699 736.026877 874.003696 736.026877L232.907106 736.026877l-2.236183 13.073072c-5.676466 46.615824-46.615824 82.910801-93.231648 82.910801L97.015958 832.010751c-17.717453 0-31.994625-14.277171-31.994625-31.994625s14.277171-31.994625 31.994625-31.994625l40.251302 0c13.933143 0 28.210314-12.729044 29.930455-28.210314l30.96254-178.550647 54.356459-382.043339c5.676466-46.615824 46.099782-83.082815 92.371577-83.082815l520.17067 0c17.717453 0 31.994625 14.277171 31.994625 31.994625s-14.277171 31.994625-31.994625 31.994625L344.716278 160.123635c-13.589115 0-27.006215 12.55703-28.898371 27.522258l-5.332437 37.327062 507.61364 31.306568c46.099782 0 86.695112 36.466991 92.027549 81.362674L960.870821 625.937846C964.483118 656.728372 956.054426 686.486813 937.304888 707.472535z"  horiz-adv-x="1024" />
    <glyph glyph-name="gouwuche" unicode="&#59197;" d="M352.456912 63.967747c-35.434907 0-63.989249-28.554342-63.989249-63.989249 0-35.434907 28.554342-63.989249 63.989249-63.989249s63.989249 28.554342 63.989249 63.989249C416.446162 35.413405 387.891819 63.967747 352.456912 63.967747L352.456912 63.967747zM800.55367 63.967747c-35.434907 0-63.989249-28.554342-63.989249-63.989249 0-35.434907 28.554342-63.989249 63.989249-63.989249s63.989249 28.554342 63.989249 63.989249C864.54292 35.413405 835.816563 63.967747 800.55367 63.967747L800.55367 63.967747zM864.026877 95.962372 344.200235 95.962372c-46.099782 0-86.695112 36.466991-92.199563 83.082815l-54.356459 382.043339L166.853687 739.639174c-1.892155 15.653284-16.169326 28.382328-29.930455 28.382328L95.983874 768.021502c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625l40.767344 0c46.615824 0 87.727196-36.466991 93.403662-83.082815l30.790526-177.86259L315.473879 187.301865c1.720141-14.793214 15.309256-27.350244 28.726356-27.350244l519.826642 0c17.717453 0 31.994625-14.277171 31.994625-31.994625S881.744331 95.962372 864.026877 95.962372zM384.279523 223.94087c-16.685369 0-30.618512 12.729044-31.82261 29.586427-1.376113 17.545439 11.868974 33.026709 29.586427 34.230808l434.163615 31.994625c15.997312 0.172014 29.414413 12.55703 31.134554 26.834201l50.400134 288.295649c1.204099 10.664875-1.720141 22.533848-8.084663 29.758441-4.128339 4.644381-9.288762 7.052579-15.309256 7.052579L319.946246 671.6936c-17.717453 0-31.994625 14.277171-31.994625 31.994625S302.400806 736.026877 319.946246 736.026877l554.05745 0c24.426004 0 46.959852-10.148833 63.301193-28.554342 18.749538-21.157736 27.178229-50.744163 23.565933-81.706703l-50.400134-288.467663c-5.504452-44.895683-45.927768-81.362674-92.027549-81.362674l-431.755417-31.82261C385.82765 224.112884 384.967579 223.94087 384.279523 223.94087z"  horiz-adv-x="1024" />
    <glyph glyph-name="kefufill" unicode="&#59202;" d="M608.929951 224.284898c-34.230808 0-60.892995 2.580212-68.461616 3.440282-17.545439 2.064169-30.274483 17.717453-28.210314 35.262893 1.892155 17.545439 17.545439 30.102469 35.262893 28.210314 79.642533-8.77272 201.772552-1.204099 223.102301 43.175542 7.568621 15.825298 26.662187 22.705863 42.659499 14.965228 15.997312-7.568621 22.705863-26.834201 14.965228-42.659499C794.361162 236.669914 683.412061 224.284898 608.929951 224.284898zM896.021502 256.107509c-17.717453 0-31.994625 14.277171-31.994625 31.994625l0 110.261045-42.831514 15.309256c-12.729044 4.472367-21.32975 16.685369-21.32975 30.102469 0 158.769024-129.182597 287.951621-287.951621 287.951621-158.769024 0-287.951621-129.182597-287.951621-287.951621 0-10.320847-4.988409-19.953637-13.417101-25.974131l-18.577524-13.245087 0-116.281539c0-17.717453-14.277171-31.994625-31.994625-31.994625s-31.994625 14.277171-31.994625 31.994625l0 132.794893c0 10.320847 4.988409 19.953637 13.417101 25.974131l18.921552 13.589115c8.77272 186.291282 163.069377 335.255501 351.596842 335.255501C698.377289 795.715774 851.469847 650.019822 863.338821 466.480766l43.51957-15.48127c12.729044-4.472367 21.32975-16.685369 21.32975-30.102469l0-132.794893C928.016126 270.38468 913.738955 256.107509 896.021502 256.107509zM639.892491 112.303712 639.892491 121.936503c28.0383 21.845792 50.400134 43.003528 63.645221 72.761969-29.070385-4.644381-61.581052-2.92424-87.727196-2.92424-31.994625 0-59.344868-0.860071-76.030237 1.032085-35.090879 3.956325-60.376953 38.703175-56.592642 73.794053 3.956325 35.090879 35.778935 60.720981 70.697799 56.592642 71.213842-7.568621 149.82429 0.688056 181.302873 13.933143 1.376113 29.242399 1.032085 60.032925 1.032085 83.426844 0 136.923232-83.254829 218.113892-216.737779 221.038132-0.688056 0-18.749538 0-19.437594 0-133.48295-2.752226-213.469511-84.974971-213.469511-222.070217 0-84.630942 1.376113-222.758273 97.359987-297.756425l0-9.63279c-127.978498-19.953637-226.026541-72.589955-226.026541-142.083655 0-17.717453 14.793214-34.230808 32.510667-34.230808l628.023518 0c17.717453 0 39.907274 16.513355 39.907274 34.230808C858.522426 39.713758 768.043004 92.178061 639.892491 112.303712z"  horiz-adv-x="1024" />
    <glyph glyph-name="kefu" unicode="&#59203;" d="M190.591634-64.526793c-17.717453 0-31.994625 14.277171-31.994625 31.994625 0 69.493701 82.050731 119.721821 226.370569 139.847472l0 9.63279c-97.876029 74.998152-97.876029 213.985554-97.876029 298.616496 0 139.675458 82.222745 223.102301 219.834033 223.102301l7.396607 0c137.611288 0 219.834033-83.426844 219.834033-223.102301 0-10.320847-0.172014-20.641693-0.344028-31.306568-0.516042-17.717453-14.965228-31.650596-32.854695-31.134554-17.717453 0.516042-31.650596 15.137242-31.134554 32.854695 0.344028 9.976818 0.344028 19.781623 0.344028 29.586427 0 105.616664-52.464304 159.113052-155.844784 159.113052l-7.396607 0c-103.38048 0-155.844784-53.496388-155.844784-159.113052 0-102.176382 6.364522-206.244919 83.082815-255.096926 9.288762-5.84848 14.793214-15.997312 14.793214-27.006215L448.956828 78.932975c0-16.341341-12.385016-30.102469-28.554342-31.82261-128.494541-13.589115-197.816227-51.260205-197.816227-79.642533C222.586259-50.077608 208.137074-64.526793 190.591634-64.526793zM833.752394-64.526793c-17.717453 0-31.994625 14.277171-31.994625 31.994625 0 28.554342-69.321687 66.053418-197.816227 79.642533-16.341341 1.720141-28.726356 15.48127-28.726356 31.82261l0 54.700487c0 17.717453 14.277171 31.994625 31.994625 31.994625s31.994625-14.277171 31.994625-31.994625l0-26.318159c144.319839-19.953637 226.370569-70.353771 226.370569-139.847472C865.747018-50.077608 851.469847-64.526793 833.752394-64.526793zM612.198219 222.564757c-44.035612 0-76.890307 4.472367-77.750378 4.644381-15.825298 4.816395-25.286074 20.813707-21.845792 37.155048 3.268268 16.169326 18.40551 26.834201 34.918864 25.286074 79.814547-8.77272 201.600538-1.204099 222.930287 43.175542 7.568621 15.825298 26.662187 22.705863 42.659499 14.965228 15.997312-7.568621 22.705863-26.834201 14.965228-42.659499C794.705191 235.63783 687.368386 222.564757 612.198219 222.564757zM896.021502 256.107509c-17.717453 0-31.994625 14.277171-31.994625 31.994625l0 111.809172-42.831514 15.309256c-12.729044 4.472367-21.32975 16.685369-21.32975 30.102469 0 160.489165-129.182597 291.219889-287.951621 291.219889-158.769024 0-287.951621-130.730724-287.951621-291.219889 0-10.320847-4.988409-19.953637-13.417101-25.974131l-18.577524-13.245087 0-118.00168c0-17.717453-14.277171-31.994625-31.994625-31.994625s-31.994625 14.277171-31.994625 31.994625l0 134.34302c0 10.320847 4.988409 19.953637 13.417101 25.974131l18.921552 13.589115C169.089871 650.019822 323.386528 800.360155 511.913993 800.360155c186.463296 0 339.555854-147.072065 351.252814-332.331262l43.51957-15.48127c12.729044-4.472367 21.32975-16.685369 21.32975-30.102469l0-134.34302C928.016126 270.38468 913.738955 256.107509 896.021502 256.107509z"  horiz-adv-x="1024" />
    <glyph glyph-name="liuyanfill" unicode="&#59204;" d="M832.032253 768.021502l-639.892491 0c-52.980346 0-95.983874-43.003528-95.983874-95.983874l0-511.913993c0-52.980346 43.003528-95.983874 95.983874-95.983874l210.717285 0 86.695112-86.695112c6.192508-6.192508 14.449185-9.460776 22.705863-9.460776s16.341341 3.096254 22.705863 9.460776l86.695112 86.695112 210.717285 0c52.980346 0 95.983874 43.003528 95.983874 95.983874L928.360155 672.037628C928.016126 725.017974 884.840585 768.021502 832.032253 768.021502zM335.943558 384.086007c-26.490173 0-47.991937 21.501764-47.991937 47.991937s21.501764 47.991937 47.991937 47.991937 47.991937-21.501764 47.991937-47.991937S362.433731 384.086007 335.943558 384.086007zM527.911305 384.086007c-26.490173 0-47.991937 21.501764-47.991937 47.991937s21.501764 47.991937 47.991937 47.991937 47.991937-21.501764 47.991937-47.991937S554.401478 384.086007 527.911305 384.086007zM720.051067 384.086007c-26.490173 0-47.991937 21.501764-47.991937 47.991937s21.501764 47.991937 47.991937 47.991937c26.490173 0 47.991937-21.501764 47.991937-47.991937S746.369226 384.086007 720.051067 384.086007z"  horiz-adv-x="1024" />
    <glyph glyph-name="liuyan" unicode="&#59205;" d="M511.913993-32.016126c-8.256677 0-16.341341 3.096254-22.705863 9.460776l-95.983874 95.983874c-12.55703 12.55703-12.55703 32.682681 0 45.239711s32.682681 12.55703 45.239711 0l73.450025-73.450025 73.450025 73.450025c6.020494 6.020494 14.105157 9.460776 22.705863 9.460776l223.962372 0c17.717453 0 31.994625 14.277171 31.994625 31.994625L864.026877 672.037628c0 17.545439-14.277171 31.994625-31.994625 31.994625l-639.892491 0c-17.545439 0-31.994625-14.449185-31.994625-31.994625l0-511.913993c0-17.717453 14.449185-31.994625 31.994625-31.994625l95.983874 0c17.717453 0 31.994625-14.277171 31.994625-31.994625s-14.277171-31.994625-31.994625-31.994625l-95.983874 0c-52.980346 0-95.983874 43.003528-95.983874 95.983874L96.155888 672.037628c0 52.980346 43.003528 95.983874 95.983874 95.983874l639.892491 0c52.980346 0 95.983874-43.003528 95.983874-95.983874l0-511.913993c0-52.980346-43.003528-95.983874-95.983874-95.983874L621.142953 64.139761 534.619856-22.55535C528.427348-28.747858 520.17067-32.016126 511.913993-32.016126zM335.943558 384.086007c-26.490173 0-47.991937 21.501764-47.991937 47.991937s21.501764 47.991937 47.991937 47.991937 47.991937-21.501764 47.991937-47.991937S362.433731 384.086007 335.943558 384.086007zM527.911305 384.086007c-26.490173 0-47.991937 21.501764-47.991937 47.991937s21.501764 47.991937 47.991937 47.991937 47.991937-21.501764 47.991937-47.991937S554.401478 384.086007 527.911305 384.086007zM720.051067 384.086007c-26.490173 0-47.991937 21.501764-47.991937 47.991937s21.501764 47.991937 47.991937 47.991937c26.490173 0 47.991937-21.501764 47.991937-47.991937S746.369226 384.086007 720.051067 384.086007z"  horiz-adv-x="1024" />
    <glyph glyph-name="pengyoufill" unicode="&#59206;" d="M518.966571 242.174366l0 6.70855c89.791366 64.161263 89.447337 175.282379 89.275323 265.589787l0 13.589115c0 130.730724-78.782463 208.653116-210.717285 208.653116l-6.70855 0c-126.602385 0-196.2681-74.138082-196.2681-208.653116 0-67.945574 0-205.728876 103.552495-279.178901l0-5.332437c-120.065849-17.029397-232.735092-66.225433-232.735092-144.663867 0-109.056946 107.680833-162.037292 329.062993-162.037292 283.30724 0 342.824122 88.071225 342.824122 162.037292C737.252478 182.829498 598.437091 226.86511 518.966571 242.174366zM929.564253 128.301025c-17.545439 0-31.82261 14.277171-31.994625 31.82261-0.344028 23.393919-101.660339 88.415253-197.300185 99.768184-16.169326 1.892155-28.210314 15.653284-28.210314 31.82261l0 66.225433c0 9.804804 4.472367 18.921552 12.040988 24.942046 54.012431 43.175542 94.951789 137.26726 94.951789 218.801949 0 109.917017-74.310096 132.966907-136.579204 132.966907-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625c123.678145 0 200.568453-75.514195 200.568453-197.128171 0-94.779775-44.207626-200.396439-106.992777-258.365194l0-24.598018c91.855535-19.609609 225.682513-83.942886 225.682513-158.59701 0-17.545439-14.277171-31.650596-31.82261-31.82261C929.736267 128.301025 929.736267 128.301025 929.564253 128.301025z"  horiz-adv-x="1024" />
    <glyph glyph-name="pengyou" unicode="&#59207;" d="M401.30892-64.182765c-226.542584 0-336.631614 52.980346-336.631614 162.209306 0 76.718293 114.389384 127.118428 229.982866 144.663867l0 6.536536c-86.351083 66.053418-97.876029 184.055098-97.876029 281.071057 0 132.106837 77.750378 211.061314 208.137074 211.061314l6.880564 0c130.386696 0 208.137074-78.954477 208.137074-211.061314 0-97.015958-11.524945-214.845624-97.876029-281.071057l0-6.536536c115.593482-17.545439 229.982866-67.77356 229.982866-144.663867C752.045691 23.88846 691.152696-64.182765 401.30892-64.182765zM404.921216 677.198051c-95.639845 0-144.147825-49.540064-144.147825-147.072065 0-91.339493 9.804804-190.763649 83.082815-237.379473 9.288762-5.84848 14.793214-15.997312 14.793214-27.006215l0-51.260205c0-16.341341-12.385016-30.102469-28.554342-31.82261-121.097934-12.729044-201.428523-59.344868-201.428523-84.630942 0-65.193348 91.683521-98.220057 272.642365-98.220057 182.162943 0 286.747522 35.778935 286.747522 98.220057 0 25.286074-80.33059 71.901898-201.428523 84.630942-16.341341 1.720141-28.554342 15.48127-28.554342 31.82261l0 51.260205c0 11.008903 5.676466 21.157736 14.793214 27.006215 73.105997 46.615824 83.082815 146.211994 83.082815 237.379473 0 97.532001-48.507979 147.072065-144.147825 147.072065L404.921216 677.198051 404.921216 677.198051zM899.117756 132.257349c-17.717453 0-31.994625 14.277171-31.994625 31.994625 0 24.426004-91.167479 83.942886-196.956157 95.123803-16.341341 1.720141-28.726356 15.48127-28.726356 31.82261L641.440618 357.595834c0 11.008903 5.676466 21.157736 14.793214 27.006215 82.738787 52.636318 91.683521 169.777927 91.683521 217.769864 0 110.433059-74.654124 133.654964-137.26726 133.654964-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625c124.194188 0 201.256509-75.686209 201.256509-197.644213 0-55.732572-10.664875-188.699479-106.476734-261.289434l0-22.18982c102.176382-18.577524 225.682513-79.986561 225.682513-154.640685C931.284394 146.53452 916.835209 132.257349 899.117756 132.257349z"  horiz-adv-x="1024" />
    <glyph glyph-name="shouyefill" unicode="&#59216;" d="M982.028557 491.594826 573.32303 812.057114c-34.918864 27.694272-89.619352 27.694272-124.538216 0L43.175542 491.422812c-13.933143-11.008903-16.169326-31.134554-5.332437-44.895683s31.134554-16.169326 44.895683-5.332437l13.073072 10.320847 0-387.547791c0-54.872501 56.936671-95.983874 107.852847-95.983874l639.892491 0c50.22812 0 84.1149 38.531161 84.1149 95.983874L927.672098 452.547623l14.449185-11.352931c5.84848-4.644381 12.729044-6.880564 19.781623-6.880564 9.460776 0 18.921552 4.128339 25.286074 12.213002C998.369898 460.460272 995.789686 480.585923 982.028557 491.594826zM607.897867 98.886612l0-66.741475-63.989249 0-63.989249 0-63.989249 0 0 66.741475 0 112.325214c0 37.155048 30.102469 77.234336 95.983874 77.234336 66.053418 0 95.983874-40.079288 95.983874-77.234336L607.897867 98.886612 607.897867 98.886612z"  horiz-adv-x="1024" />
    <glyph glyph-name="shouye" unicode="&#59217;" d="M979.792374 491.422812 574.183101 812.057114c-34.918864 27.694272-89.619352 27.694272-124.538216 0L44.207626 491.422812c-13.933143-11.008903-16.169326-31.134554-5.332437-44.895683s30.618512-16.169326 44.551655-5.332437l12.55703 10.320847 0-387.547791c0-54.872501 57.968755-95.983874 108.712918-95.983874l639.892491 0c50.22812 0 83.254829 38.531161 83.254829 95.983874L927.844112 450.139425l11.69696-8.944734c5.84848-4.644381 13.073072-6.880564 20.125651-6.880564 9.460776 0 18.921552 4.128339 25.286074 12.213002C995.9617 460.288258 993.725517 480.413909 979.792374 491.422812zM479.919368 31.973123 479.919368 209.491685c0 8.77272 15.997312 13.245087 31.994625 13.245087s31.994625-4.472367 31.994625-13.245087l0-177.346548L479.919368 31.973123 479.919368 31.973123zM864.026877 63.967747c0-21.157736-5.84848-31.994625-19.26558-31.994625L608.585923 31.973123c0 0.516042-0.688056 0.860071-0.688056 1.376113L607.897867 209.491685c0 37.155048-29.930455 77.234336-95.983874 77.234336s-95.983874-40.079288-95.983874-77.234336l0-176.142449c0-0.516042 0.860071-0.860071 0.860071-1.376113L204.868806 31.973123c-20.125651 0-44.723669 17.373425-44.723669 31.994625L160.145137 502.259701 488.864102 761.828994c11.868974 9.288762 33.198723 9.288762 44.895683 0l330.095078-261.11742L863.854863 63.967747z"  horiz-adv-x="1024" />
    <glyph glyph-name="tongzhifill" unicode="&#59224;" d="M889.828994 146.362506c-1.204099 1.720141-119.205779 165.821603-119.205779 287.435579 0 168.401814-76.202251 254.752898-162.725349 286.919536L607.897867 736.026877c0 52.980346-43.175542 95.983874-95.983874 95.983874S415.930119 788.835209 415.930119 736.026877l0-15.309256c-86.523098-32.166639-162.725349-118.517722-162.725349-286.919536 0-121.269948-118.00168-285.199395-119.205779-286.919536-5.332437-7.568621-7.396607-16.857383-5.332437-25.974131 2.064169-8.944734 7.912649-16.685369 15.997312-20.985721 5.676466-3.096254 107.336805-57.280699 233.423148-84.458928 21.32975-66.397447 73.966068-111.29313 133.654964-111.29313s112.325214 44.895683 133.654964 111.29313c126.086343 27.178229 227.746682 81.018646 233.423148 83.942886 8.256677 4.472367 13.933143 12.040988 16.169326 20.985721C897.225601 129.333109 895.333445 138.793885 889.828994 146.362506zM479.919368 736.026877c0 17.545439 14.449185 31.994625 31.994625 31.994625 17.545439 0 31.994625-14.449185 31.994625-31.994625l0-0.860071c-7.224593 0.516042-14.277171 0.860071-21.32975 0.860071l-21.32975 0c-7.052579 0-14.105157-0.344028-21.32975-0.860071L479.919368 736.026877 479.919368 736.026877zM511.913993-32.016126c-22.361834 0-43.175542 13.417101-57.968755 35.262893 19.26558-2.064169 38.531161-3.268268 57.968755-3.268268s38.875189 1.376113 57.968755 3.268268C555.089535-18.599026 534.275827-32.016126 511.913993-32.016126z"  horiz-adv-x="1024" />
    <glyph glyph-name="tongzhi" unicode="&#59225;" d="M889.828994 146.362506c-1.204099 1.548127-119.205779 166.165631-119.205779 287.435579 0 168.401814-76.202251 254.752898-162.725349 286.919536L607.897867 736.026877c0 52.980346-43.175542 95.983874-95.983874 95.983874S415.930119 788.835209 415.930119 736.026877l0-16.685369c-10.836889-7.912649-16.169326-21.845792-11.868974-35.262893 5.332437-16.857383 23.393919-25.974131 40.251302-20.641693 17.717453 5.676466 36.983034 8.428691 56.936671 8.428691l21.32975 0c115.249454 0 184.055098-89.103309 184.055098-238.239543 0-108.024861 72.933983-235.315303 110.261045-293.456073-57.452713-26.146145-183.023014-76.202251-304.809004-76.202251-121.441962 0-247.356291 50.400134-304.809004 76.546279 37.327062 57.968755 110.089031 184.915169 110.089031 293.112044 0 62.441122 11.524945 114.217369 34.574836 153.952629 8.77272 15.309256 3.612296 34.918864-11.69696 43.691584-15.48127 8.944734-34.918864 3.612296-43.691584-11.69696-28.554342-49.540064-43.175542-112.1532-43.175542-185.947253 0-121.269948-118.00168-285.199395-119.205779-286.919536-5.332437-7.568621-7.396607-16.857383-5.332437-25.974131 2.064169-8.944734 7.912649-16.685369 15.997312-20.985721 5.676466-3.096254 107.336805-57.280699 233.423148-84.458928 21.32975-66.397447 73.966068-111.29313 133.654964-111.29313s112.325214 44.895683 133.654964 111.29313c126.086343 27.178229 227.746682 81.018646 233.423148 83.942886 8.084663 4.472367 13.933143 12.040988 16.169326 20.985721C897.225601 129.333109 895.333445 138.793885 889.828994 146.362506zM501.249118 736.026877c-7.224593 0-14.277171-1.032085-21.32975-1.548127L479.919368 736.026877c0 17.545439 14.449185 31.994625 31.994625 31.994625 17.545439 0 31.994625-14.449185 31.994625-31.994625l0-0.860071c-7.224593 0.516042-14.277171 0.860071-21.32975 0.860071L501.249118 736.026877zM511.913993-32.016126c-22.361834 0-43.175542 13.417101-57.968755 35.262893 19.26558-2.064169 38.531161-3.268268 57.968755-3.268268s38.875189 1.376113 57.968755 3.268268C555.089535-18.599026 534.275827-32.016126 511.913993-32.016126z"  horiz-adv-x="1024" />
    <glyph glyph-name="xihuanfill" unicode="&#59232;" d="M736.048379 768.021502c-65.881404 0-128.494541-24.942046-176.314463-70.525785-4.644381-4.300353-28.726356-28.726356-47.30388-47.647909l-47.30388 47.131866c-47.819923 45.755753-110.605073 71.041828-177.00252 71.041828-141.223585 0-255.956996-114.905426-255.956996-255.956996 0-82.394759 41.111372-144.319839 76.546279-182.506971l316.849992-320.11826c25.11406-25.11406 52.980346-41.455401 86.695112-41.455401 33.714766 0 61.581052 16.341341 86.695112 41.455401l316.677977 319.946246 2.236183 2.408198c38.187133 47.647909 74.310096 92.715606 74.310096 180.098774C992.005375 653.116076 877.09995 768.021502 736.048379 768.021502z"  horiz-adv-x="1024" />
    <glyph glyph-name="xihuan" unicode="&#59233;" d="M511.913993-32.016126c-28.898371 0-57.968755 12.729044-86.695112 41.455401L106.30472 331.965732C68.117588 379.61364 31.994625 424.681337 31.994625 512.064505c0 141.223585 114.905426 255.956996 255.956996 255.956996 53.15236 0 104.068537-16.169326 147.244079-46.615824 14.449185-10.148833 17.889467-30.102469 7.740635-44.551655-10.148833-14.449185-30.102469-17.889467-44.551655-7.740635-32.338653 22.877877-70.525785 34.918864-110.433059 34.918864-105.960692 0-191.967747-86.179069-191.967747-191.967747 0-61.409037 20.297665-90.135394 59.172854-138.643373l315.645893-318.742147c15.997312-15.997312 28.898371-22.361834 41.283387-22.533848 12.729044-0.172014 24.942046 6.192508 41.455401 22.705863l316.677977 319.946246c25.974131 28.210314 57.968755 75.858223 57.968755 137.439274 0 105.960692-86.179069 191.967747-191.967747 191.967747-47.991937 0-94.091718-17.889467-129.526625-50.22812l-133.998992-134.171006c-12.55703-12.55703-32.682681-12.55703-45.239711 0s-12.55703 32.682681 0 45.239711l135.031077 135.203091c48.335965 44.207626 109.745003 67.945574 173.734252 67.945574 141.223585 0 255.956996-114.905426 255.956996-255.956996 0-82.394759-41.111372-144.319839-75.686209-181.646901L598.781119 9.611288C569.882748-19.287082 540.984378-32.016126 511.913993-32.016126z"  horiz-adv-x="1024" />
    <glyph glyph-name="xinxifill" unicode="&#59234;" d="M511.913993 828.914497C264.90173 828.914497 63.989249 656.556358 63.989249 444.806988c0-116.453553 62.957164-226.026541 174.07828-301.368722l84.1149-51.948261c-3.612296-23.565933-18.749538-74.48211-33.370737-115.93751-4.300353-12.040988-0.860071-25.458088 8.428691-34.230808 6.020494-5.504452 13.761129-8.428691 21.673778-8.428691 4.472367 0 8.77272 0.860071 13.073072 2.752226 36.466991 16.169326 147.416093 68.977658 187.49538 125.398287 243.571981 3.440282 440.356123 174.422308 440.356123 383.935495C960.010751 656.556358 759.09827 828.914497 511.913993 828.914497zM580.203595 352.091382 384.967579 352.091382c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625l195.236015 0c17.717453 0 31.994625-14.277171 31.994625-31.994625S597.921048 352.091382 580.203595 352.091382zM640.924576 480.069881 384.967579 480.069881c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625l255.956996 0c17.717453 0 31.994625-14.277171 31.994625-31.994625C672.9192 494.347052 658.642029 480.069881 640.924576 480.069881z"  horiz-adv-x="1024" />
    <glyph glyph-name="xinxi" unicode="&#59235;" d="M639.892491 480.069881 383.935495 480.069881c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625L639.892491 544.05913c17.717453 0 31.994625-14.277171 31.994625-31.994625S657.609945 480.069881 639.892491 480.069881zM579.17151 352.091382 383.935495 352.091382c-17.717453 0-31.994625 14.277171-31.994625 31.994625S366.390055 416.080632 383.935495 416.080632l195.236015 0c17.717453 0 31.994625-14.277171 31.994625-31.994625S596.888964 352.091382 579.17151 352.091382zM962.246934 448.075256c0 211.74937-200.912481 383.935495-447.924744 383.935495S66.225433 659.824626 66.225433 448.075256c0-116.453553 62.957164-226.026541 172.874181-300.680665 14.621199-9.976818 34.574836-6.192508 44.379641 8.428691 9.976818 14.621199 6.192508 34.574836-8.428691 44.379641-92.027549 62.441122-144.835881 152.74853-144.835881 247.700319 0 176.486477 172.186125 319.946246 383.935495 319.946246s383.935495-143.631782 383.935495-319.946246-172.186125-319.946246-383.935495-319.946246c-2.064169 0-3.612296-0.688056-5.504452-1.204099-15.137242 2.752226-30.446498-5.160423-35.778935-20.125651-6.192508-17.373425-46.44381-46.615824-94.091718-73.794053 17.373425 58.140769 9.116748 70.697799 3.440282 78.954477-6.70855 9.976818-17.889467 15.997312-29.930455 15.997312-17.717453 0-31.994625-14.277171-31.994625-31.994625 0-5.84848 1.548127-11.180917 4.300353-15.997312-3.268268-18.233496-17.201411-60.892995-33.026709-99.768184-4.988409-12.040988-2.064169-25.974131 7.396607-35.090879 6.020494-5.84848 14.105157-8.944734 22.18982-8.944734 4.300353 0 8.77272 0.860071 13.073072 2.752226 36.466991 16.341341 147.588107 69.149672 187.667395 125.570301C765.290778 67.924072 962.246934 238.390055 962.246934 448.075256z"  horiz-adv-x="1024" />
    <glyph glyph-name="yonghufill" unicode="&#59271;" d="M631.119772 276.577188l0.344028 16.685369c79.298505 55.388544 117.829666 153.092558 117.829666 297.756425 0 139.503444-87.211154 222.758273-233.423148 222.758273l-7.912649 0c-146.03998 0-233.423148-83.254829-233.423148-222.758273 0-143.975811 38.875189-241.679825 118.86175-297.412397l0-16.857383c-133.138922-17.889467-266.621871-70.869814-266.621871-151.88846 0-113.357299 129.526625-170.810012 385.139593-170.810012s385.139593 57.452713 385.139593 170.810012C897.053586 205.707374 763.914665 258.68772 631.119772 276.577188z"  horiz-adv-x="1024" />
    <glyph glyph-name="yonghu" unicode="&#59272;" d="M511.913993-45.605241c-255.612968 0-385.311608 57.452713-385.311608 170.810012 0 80.846632 133.654964 133.998992 266.621871 151.88846L393.224257 293.950613c-79.986561 55.904586-118.86175 153.436587-118.86175 297.240383 0 139.33143 87.211154 222.586259 233.423148 222.586259l7.912649 0c146.211994 0 233.423148-83.254829 233.423148-222.586259 0-54.184445 0-214.67361-117.829666-297.412397l-0.344028-16.685369c132.966907-18.061482 266.105829-71.041828 266.105829-151.716445C897.225601 11.847472 767.526961-45.605241 511.913993-45.605241zM507.957668 754.432387c-79.470519 0-174.250294-28.382328-174.250294-163.241391 0-129.698639 34.230808-213.469511 104.584579-255.784982 8.944734-5.332437 14.277171-14.965228 14.277171-25.286074l0-59.344868c0-15.309256-11.524945-28.0383-26.662187-29.414413-144.319839-14.449185-239.959684-67.429531-239.959684-95.983874 0-92.199563 177.346548-111.637158 325.966739-111.637158 148.792206 0 325.966739 19.26558 325.966739 111.637158 0 28.726356-95.639845 81.534688-239.959684 95.983874-15.48127 1.548127-27.006215 14.621199-26.662187 30.102469l1.376113 59.344868c0.172014 10.148833 5.676466 19.437594 14.277171 24.770032 70.525785 42.487485 103.208466 123.678145 103.208466 255.784982 0 135.031077-94.779775 163.241391-174.250294 163.241391L507.957668 754.432387 507.957668 754.432387z"  horiz-adv-x="1024" />
    <glyph glyph-name="zantongfill" unicode="&#59283;" d="M864.198891 512.064505l-189.215522 0c13.761129 31.994625 29.586427 114.733412 20.297665 189.731564C688.056442 761.828994 652.965564 807.928775 601.705359 825.302201c-38.015118 12.901058-78.26642 6.70855-99.940198-15.48127-25.802117-26.318159-37.843104-75.858223-50.744163-128.322526-8.428691-34.402822-17.029397-69.837729-27.866286-88.243239-31.134554-52.980346-96.67193-81.362674-109.572988-81.362674l-89.619352 0c-17.717453 0-31.994625-14.449185-31.994625-32.166639l0-447.924744c0-17.717453 14.277171-31.994625 31.994625-31.994625l86.523098 0c26.834201 0 126.430371-63.989249 241.851839-63.989249l215.877709 0c35.606921 0 96.843944 13.761129 119.721821 51.776247 23.049891 38.531161 71.901898 388.75189 71.901898 427.455065C959.838737 468.888964 907.546447 512.064505 864.198891 512.064505zM95.983874 511.892491c-17.717453 0-31.994625-14.277171-31.994625-31.994625l0-447.924744c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625L127.978498 479.897867C127.978498 497.61532 113.701327 511.892491 95.983874 511.892491z"  horiz-adv-x="1024" />
    <glyph glyph-name="zantong" unicode="&#59284;" d="M95.983874-0.021502c-17.717453 0-31.994625 14.277171-31.994625 31.994625L63.989249 480.069881c0 17.717453 14.277171 31.994625 31.994625 31.994625s31.994625-14.277171 31.994625-31.994625l0-447.924744C127.978498 14.255669 113.701327-0.021502 95.983874-0.021502zM864.198891 512.064505 674.811356 512.064505c13.761129 31.994625 29.586427 114.733412 20.469679 190.075592C688.056442 762.001008 652.793549 807.928775 601.533345 825.474215c-38.015118 12.901058-78.26642 6.536536-99.940198-15.48127-25.802117-26.318159-37.843104-75.858223-50.744163-128.322526-8.428691-34.230808-17.029397-69.837729-27.866286-88.243239-31.134554-52.980346-96.327902-77.062322-109.400974-81.362674l-89.791366 0c-17.717453 0-31.994625-14.277171-31.994625-31.994625l0-447.924744c0-17.717453 14.277171-31.994625 31.994625-31.994625l86.523098 0c26.834201-14.449185 126.430371-63.989249 241.851839-63.989249l215.877709 0c35.606921 0 96.843944 13.761129 119.721821 51.776247 23.049891 38.531161 71.901898 388.75189 71.901898 427.455065C959.838737 468.716949 907.546447 512.064505 864.198891 512.064505zM833.236351 20.792206c-4.816395-8.084663-36.466991-20.641693-64.84932-20.641693L552.337309 0.150512c-114.217369 0-215.189652 63.989249-216.221737 63.989249l0 0c-4.816395 0-10.148833 0-16.169326 0l-63.989249 0L255.956996 448.075256l63.989249 0c2.580212 0 4.988409 0.860071 7.396607 1.548127 0.516042 0.172014 1.032085 0 1.548127 0.172014 0.172014 0.172014 0.860071 0.344028 1.720141 0.516042 0.860071 0.344028 1.720141 0.344028 2.580212 0.860071 19.437594 6.364522 102.52041 37.327062 145.179909 109.917017 15.48127 26.318159 24.942046 64.84932 34.74685 105.44465 9.116748 37.843104 20.641693 84.974971 34.058794 98.564085 3.096254 2.580212 18.061482 6.020494 36.81102-1.376113 15.309256-6.020494 41.971443-23.049891 47.647909-69.665715 12.55703-102.52041-31.478582-200.052411-31.82261-201.084495-4.644381-9.976818-3.78431-21.157736 2.064169-30.274483 5.84848-9.116748 15.997312-14.449185 26.834201-14.449185l235.315303 0c8.77272 0 31.650596-14.965228 31.650596-32.854695C895.849488 372.561062 846.481438 51.066689 833.236351 20.792206z"  horiz-adv-x="1024" />
    <glyph glyph-name="leimupinleifenleileibie2" unicode="&#59384;" d="M320 832 192 832C121.6 832 64 774.4 64 704l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128L448 704C448 774.4 390.4 832 320 832zM768 832l-128 0C569.6 832 512 774.4 512 704l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128L896 704C896 774.4 838.4 832 768 832zM320 384 192 384c-70.4 0-128-57.6-128-128l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128l0 128C448 326.4 390.4 384 320 384zM768 384l-128 0c-70.4 0-128-57.6-128-128l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128l0 128C896 326.4 838.4 384 768 384z"  horiz-adv-x="1024" />
    <glyph glyph-name="leimupinleifenleileibie" unicode="&#59385;" d="M320 384 192 384c-70.4 0-128-57.6-128-128l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128l0 128C448 326.4 390.4 384 320 384zM384 128c0-35.2-28.8-64-64-64L192 64c-35.2 0-64 28.8-64 64l0 128c0 35.2 28.8 64 64 64l128 0c35.2 0 64-28.8 64-64L384 128zM768 832l-128 0C569.6 832 512 774.4 512 704l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128L896 704C896 774.4 838.4 832 768 832zM832 576c0-35.2-28.8-64-64-64l-128 0C604.8 512 576 540.8 576 576L576 704c0 35.2 28.8 64 64 64l128 0c35.2 0 64-28.8 64-64L832 576zM768 384l-128 0c-70.4 0-128-57.6-128-128l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128l0 128C896 326.4 838.4 384 768 384zM832 128c0-35.2-28.8-64-64-64l-128 0c-35.2 0-64 28.8-64 64l0 128c0 35.2 28.8 64 64 64l128 0c35.2 0 64-28.8 64-64L832 128zM320 832 192 832C121.6 832 64 774.4 64 704l0-128c0-70.4 57.6-128 128-128l128 0c70.4 0 128 57.6 128 128L448 704C448 774.4 390.4 832 320 832zM384 576c0-35.2-28.8-64-64-64L192 512C156.8 512 128 540.8 128 576L128 704c0 35.2 28.8 64 64 64l128 0c35.2 0 64-28.8 64-64L384 576z"  horiz-adv-x="1024" />
    <glyph glyph-name="edit" unicode="&#58908;" d="M678.854949 858.074075 151.913033 858.074075C67.776878 858.074075 0 790.060281 0 706.161013L0 23.913062C0-60.223137 68.013787-128 151.913033-128L834.161006-128C918.297234-128 986.074039-59.986205 986.074039 23.913062L986.074039 543.123046 910.22219 467.271197 910.22219 23.913062C910.22219-18.194593 876.305262-52.148151 834.161006-52.148151L151.913033-52.148151C109.805422-52.148151 75.851849-18.231172 75.851849 23.913062L75.851849 706.161013C75.851849 748.268668 109.76885 782.222219 151.913033 782.222219L603.003099 782.222219 678.854949 858.074075ZM320.679497 197.145066 550.775881 262.471958 386.423442 425.819414 320.679497 197.145066ZM935.236535 644.587381 770.882048 807.936965 409.297774 448.578077 573.650213 285.244409 935.236535 644.587381ZM1011.623351 781.801538 908.897353 883.888662C891.877742 900.806437 863.36629 899.885305 845.211136 881.847962L795.896832 832.853058 960.252416 669.504541 1009.563575 718.514293C1027.718729 736.552704 1028.639817 764.881642 1011.623351 781.801538Z"  horiz-adv-x="1024" />
    <glyph glyph-name="917caidan_fenlei" unicode="&#59013;" d="M856.653 780.63c26.343-0.03 47.774-21.743 47.774-48.404v-219.733c0-12.992-4.978-25.159-14.015-34.257l-0.03-0.03-0.03-0.03c-9.083-9.176-20.693-14.025-33.577-14.025h-217.85c-26.275 0-47.65 21.714-47.65 48.405V732.288c0 26.657 21.376 48.343 47.65 48.343h217.728m-523.092-0.063v-0.003h51.166c13.013 0 25.234-5.06 34.41-14.246 8.959-8.968 13.884-20.789 13.87-33.285v-217.97c0-26.273-21.687-47.649-48.343-47.649H164.931c-12.992 0-25.158 4.977-34.256 14.014-9.215 9.154-14.086 20.786-14.086 33.638v217.85c0 26.275 21.715 47.651 48.405 47.651h168.567M382.09 309.21c26.277 0 47.654-21.714 47.654-48.405v-219.732c0-12.993-4.977-25.158-14.012-34.255-9.156-9.216-20.789-14.088-33.642-14.088H164.24c-26.275 0-47.65 21.715-47.65 48.405V260.868c0 26.656 21.376 48.342 47.65 48.342h217.85m473.995-3.327c13.003 0 25.212-5.053 34.378-14.231 8.98-8.989 13.915-20.859 13.9-33.424v-217.846c0-26.275-21.685-47.652-48.341-47.652H636.289c-12.992 0-25.159 4.977-34.256 14.014-9.215 9.154-14.086 20.786-14.086 33.638V258.231c0 26.276 21.714 47.652 48.405 47.652h219.733m0.628 525.913H638.926c-54.494 0-98.817-44.634-98.817-99.508v-219.732c0-54.933 44.323-99.57 98.817-99.57h217.85c26.43 0 51.291 10.358 69.937 29.193 18.646 18.771 28.88 43.758 28.88 70.314V732.228c0 54.868-44.324 99.505-98.88 99.568z m-471.986-0.063H164.994c-54.87 0-99.57-44.323-99.57-98.817v-217.85c0-26.43 10.359-51.228 29.193-69.937 18.771-18.645 43.758-28.879 70.314-28.879h219.733c54.873 0 99.508 44.32 99.508 98.814V732.976c0.062 54.431-44.575 98.754-99.445 98.754v0.003z m-2.637-471.358H164.24c-54.493 0-98.816-44.637-98.816-99.507v-219.733c0-54.87 44.323-99.57 98.817-99.57H382.09c26.431 0 51.229 10.358 69.94 29.193 18.646 18.772 28.88 43.758 28.88 70.314V260.805c0 54.933-44.324 99.57-98.82 99.57z m473.995-3.327H636.352c-54.87 0-99.57-44.324-99.57-98.817v-217.85c0-26.43 10.359-51.228 29.192-69.936 18.773-18.647 43.76-28.88 70.315-28.88h219.733c54.87 0 99.507 44.323 99.507 98.817V258.169c0.063 54.556-44.574 98.88-99.444 98.88z"  horiz-adv-x="1024" />
    <glyph glyph-name="weixuanzhong-01" unicode="&#58906;" d="M511.805 832.079c-247.423 0-447.999-200.576-447.999-448s200.576-448 447.999-448c247.424 0 448.001 200.576 448.001 448 0 247.423-200.577 448-448.001 448z m0-856c-225.332 0-407.999 182.668-407.999 408s182.667 408 407.999 408c225.332 0 408.001-182.667 408.001-408s-182.669-408-408.001-408z"  horiz-adv-x="1024" />
    <glyph glyph-name="xuanzhong" unicode="&#58925;" d="M512 832C262.4 832 64 633.6 64 384s198.4-448 448-448 448 198.4 448 448S761.6 832 512 832z m236.8-326.4L454.4 211.2c-12.8-12.8-32-12.8-44.8 0L275.2 352c-12.8 12.8-12.8 32 0 44.8 12.8 12.8 32 12.8 44.8 0l115.2-115.2L704 556.8c12.8 12.8 32 12.8 44.8 0 12.8-12.8 12.8-38.4 0-51.2z"  horiz-adv-x="1024" />
    <glyph glyph-name="shujudaping" unicode="&#59208;" d="M94.3 694.9V137h828.5V694.9H94.3z m794.6-524.1H128.1V661.1h760.8v-490.3z m-169.1 355c-18.7 0-33.8-15.1-33.8-33.8 0-4.1 0.7-8 2-11.6L558.6 379.8c-6.2 6.6-15 10.8-24.8 10.8-9.3 0-17.8-3.8-23.9-9.9l-63.6 63.6c1.9 4.2 3 9 3 13.9 0 18.7-15.1 33.8-33.8 33.8-18.7 0-33.8-15.1-33.8-33.8 0-4.3 0.8-8.4 2.3-12.2l-79.2-66c-6.2 6.5-14.9 10.6-24.5 10.6-18.7 0-33.8-15.1-33.8-33.8s15.1-33.8 33.8-33.8c18.7 0 33.8 15.1 33.8 33.8 0 4.3-0.8 8.4-2.3 12.2l79.2 66c6.2-6.5 14.9-10.6 24.5-10.6 9.3 0 17.8 3.8 23.9 9.9l63.6-63.6c-1.9-4.2-3-9-3-13.9 0-18.7 15.1-33.8 33.8-33.8 18.7 0 33.8 15.1 33.8 33.8 0 4.1-0.7 8-2 11.6L695.1 469c6.2-6.6 15-10.8 24.8-10.8 18.7 0 33.8 15.1 33.8 33.8s-15.2 33.8-33.9 33.8zM280.2 339.9c-9.3 0-16.9 7.6-16.9 16.9s7.6 16.9 16.9 16.9c9.3 0 16.9-7.6 16.9-16.9s-7.5-16.9-16.9-16.9z m135.3 101.4c-9.3 0-16.9 7.6-16.9 16.9s7.6 16.9 16.9 16.9 16.9-7.6 16.9-16.9-7.6-16.9-16.9-16.9z m118.4-101.4c-9.3 0-16.9 7.6-16.9 16.9s7.6 16.9 16.9 16.9 16.9-7.6 16.9-16.9-7.6-16.9-16.9-16.9z m185.9 135.2c-9.3 0-16.9 7.6-16.9 16.9 0 9.3 7.6 16.9 16.9 16.9 9.3 0 16.9-7.6 16.9-16.9 0-9.3-7.5-16.9-16.9-16.9z m-120.4-355l35.9-101.4H364.8l35.9 101.4H365l-50.9-135.3h372l-50.9 135.3h-35.8zM872 644.2H145v-16.9h727v16.9z"  horiz-adv-x="1024" />
    <glyph glyph-name="yigouxuan" unicode="&#58941;" d="M196.923077 896h630.153846a196.923077 196.923077 0 0 0 196.923077-196.923077v-630.153846a196.923077 196.923077 0 0 0-196.923077-196.923077H196.923077a196.923077 196.923077 0 0 0-196.923077 196.923077V699.076923a196.923077 196.923077 0 0 0 196.923077 196.923077z m0-78.769231a118.153846 118.153846 0 0 1-118.153846-118.153846v-630.153846a118.153846 118.153846 0 0 1 118.153846-118.153846h630.153846a118.153846 118.153846 0 0 1 118.153846 118.153846V699.076923a118.153846 118.153846 0 0 1-118.153846 118.153846H196.923077z m584.900923-258.205538a36.509538 36.509538 0 0 0 1.260308-51.633231l-299.480616-313.107692c-0.118154-0.157538-0.393846-0.236308-0.630154-0.472616l-0.393846-0.551384c-2.166154-2.126769-4.726154-3.229538-7.207384-4.726154-1.575385-0.866462-2.796308-2.166154-4.411077-2.835692a35.800615 35.800615 0 0 0-27.490462-0.07877c-1.260308 0.512-2.284308 1.614769-3.544615 2.284308-2.756923 1.457231-5.592615 2.835692-8.034462 5.12-0.196923 0.157538-0.275692 0.433231-0.512 0.669538-0.196923 0.118154-0.393846 0.196923-0.551384 0.354462l-150.843077 156.593231a36.430769 36.430769 0 0 0 0.945231 51.633231 36.391385 36.391385 0 0 0 51.63323-0.945231l124.455385-129.102769 273.092923 285.61723a36.548923 36.548923 0 0 0 51.712 1.181539z"  horiz-adv-x="1024" />
    <glyph glyph-name="weigouxuan" unicode="&#58942;" d="M196.923077 817.230769a118.153846 118.153846 0 0 1-118.153846-118.153846v-630.153846a118.153846 118.153846 0 0 1 118.153846-118.153846h630.153846a118.153846 118.153846 0 0 1 118.153846 118.153846V699.076923a118.153846 118.153846 0 0 1-118.153846 118.153846H196.923077z m0 78.769231h630.153846a196.923077 196.923077 0 0 0 196.923077-196.923077v-630.153846a196.923077 196.923077 0 0 0-196.923077-196.923077H196.923077a196.923077 196.923077 0 0 0-196.923077 196.923077V699.076923a196.923077 196.923077 0 0 0 196.923077 196.923077z"  horiz-adv-x="1024" />
    <glyph glyph-name="phone_light" unicode="&#59390;" d="M358.4 87.466667h14.933333c40.533333 0 155.733333 14.933333 275.2 174.933333 130.133333 172.8 100.266667 302.933333 91.733334 330.666667-12.8 55.466667-64 93.866667-119.466667 91.733333-66.133333-2.133333-117.333333-57.6-115.2-123.733333 0-27.733333 10.666667-53.333333 29.866667-74.666667l2.133333-2.133333c6.4-6.4 12.8-12.8 19.2-17.066667 29.866667-34.133333 6.4-81.066667-19.2-113.066667-34.133333-46.933333-72.533333-64-110.933333-49.066666-21.333333 17.066667-46.933333 25.6-74.666667 23.466666-32 0-61.866667-14.933333-83.2-38.4s-34.133333-53.333333-32-85.333333c0-32 14.933333-61.866667 38.4-83.2 21.333333-21.333333 51.2-32 81.066667-32-2.133333-2.133333 0-2.133333 2.133333-2.133333zM277.333333 204.8c0 21.333333 6.4 40.533333 21.333334 55.466667 14.933333 14.933333 32 23.466667 53.333333 23.466666s38.4-8.533333 49.066667-17.066666c2.133333-2.133333 2.133333-2.133333 4.266666-2.133334 34.133333-12.8 98.133333-23.466667 164.266667 61.866667 66.133333 87.466667 36.266667 142.933333 14.933333 170.666667l-4.266666 4.266666c-4.266667 2.133333-8.533333 6.4-14.933334 12.8-12.8 14.933333-19.2 29.866667-19.2 49.066667-2.133333 42.666667 32 78.933333 74.666667 78.933333 36.266667 0 68.266667-23.466667 76.8-59.733333v-2.133333c6.4-21.333333 34.133333-134.4-83.2-292.266667C492.8 128 384 128 364.8 130.133333h-10.666667c-21.333333 0-40.533333 6.4-55.466666 21.333334-12.8 12.8-21.333333 32-21.333334 53.333333zM512 832C264.533333 832 64 631.466667 64 384c0-85.333333 23.466667-166.4 68.266667-238.933333 6.4-10.666667 19.2-12.8 29.866666-6.4 8.533333 8.533333 12.8 21.333333 6.4 32C128 234.666667 106.666667 309.333333 106.666667 384 106.666667 608 288 789.333333 512 789.333333s405.333333-181.333333 405.333333-405.333333-181.333333-405.333333-405.333333-405.333333c-55.466667 0-106.666667 10.666667-157.866667 32-10.666667 4.266667-23.466667 0-27.733333-10.666667-4.266667-10.666667 0-23.466667 10.666667-27.733333 55.466667-23.466667 113.066667-34.133333 172.8-34.133334 247.466667 0 448 200.533333 448 448C960 631.466667 759.466667 832 512 832z"  horiz-adv-x="1024" />
    <glyph glyph-name="Myassessment" unicode="&#58953;" d="M567.6 93.5c0-11 10.7-20 23.9-20h362.7c13.2 0 23.9 9 23.9 20s-10.7 20-23.9 20H591.4c-13.1 0-23.8-9-23.8-20zM954.2-15.8H419.1c-13.2 0-23.9-9-23.9-20s10.7-20 23.9-20h535.1c13.2 0 23.9 9 23.9 20-0.1 11-10.8 20-23.9 20zM104.9-66.3c-11.3 0-22.1 4.3-30.2 12.1-10.9 10.4-15.7 25.4-12.8 40.1 8.7 45.1 55 273 110.5 343l0.2 0.3 0.7 0.8c1.2 1.6 2.5 3.3 4.3 5.1l0.1 0.1c0.3 0.3 0.7 0.6 1 0.9 0.4 0.4 0.9 1 1.4 1.5l454.1 454.1C667.9 825.4 712.8 844 760.4 844c47.7 0 92.5-18.6 126.2-52.3l21.2-21.2c33.7-33.7 52.3-78.6 52.3-126.2 0-47.7-18.6-92.5-52.3-126.2L836.7 447l-0.7-0.7-382.3-382.2c-0.5-0.5-1.1-1-1.5-1.4-0.3-0.3-0.6-0.7-1-1.1l-0.1-0.1c-1.7-1.7-3.3-2.9-4.4-3.7C379.8 1.7 159-54.3 115.3-65c-3.4-0.8-6.9-1.3-10.4-1.3z m100.2 372.2l-0.1-0.2-0.9-1.2c-41.3-51.2-84.2-229.2-103-326.2-0.3-1.3 0.2-2.6 1.1-3.5 0.7-0.7 1.7-1.1 2.7-1.1 0.3 0 0.6 0 0.9 0.1 94 23 266.3 73.1 315.6 114.9l1.3 1 0.7 0.8 0.7 0.7c0.3 0.3 0.7 0.6 1 0.9l0.3 0.2L806 473l0.1 0.2 2.2 2.1 71.2 71.2c26.2 26.2 40.6 60.9 40.6 97.9 0 37-14.4 71.8-40.6 97.9l-21.2 21.2c-26.2 26.2-60.9 40.6-97.9 40.6-37 0-71.8-14.4-97.9-40.6l-454-454-0.1-0.1c-0.4-0.4-0.8-0.9-1.1-1.3l-0.6-0.6-0.6-0.6c-0.2-0.2-0.3-0.3-0.5-0.4-0.1-0.1-0.2-0.2-0.3-0.4l-0.2-0.2zM651.6 789.7c-7.4-8.2-6.3-21.3 2.5-29.2L896 542.9c8.8-7.9 21.9-7.7 29.3 0.6 7.4 8.2 6.3 21.3-2.5 29.2L680.9 790.3c-8.8 7.9-21.9 7.6-29.3-0.6zM175.7 308.8c-7.4-8.2-6.3-21.3 2.5-29.2L420.1 62c8.8-7.9 21.9-7.7 29.3 0.6 7.4 8.2 6.3 21.3-2.5 29.2L205 309.4c-8.8 7.9-21.9 7.7-29.3-0.6z"  horiz-adv-x="1024" />
    <glyph glyph-name="Myquestionandansw" unicode="&#58954;" d="M844.6 133.8c0 21.4-24.4 38.7-54.4 38.7s-54.4-17.3-54.4-38.7c0-5.4 1.5-10.5 4.3-15.1h-63.6c0 56.4 51.2 102.2 114.3 102.2 63.1 0 114.3-45.7 114.3-102.2h-64.8c2.8 4.7 4.3 9.8 4.3 15.1zM664.6 117.5c0-7.4 14.1-13.3 31.4-13.3 17.4 0 31.4 6 31.4 13.3 0 7.3-14.1 13.3-31.4 13.3-17.3 0-31.4-5.9-31.4-13.3z m0 0M830.8 118.8s-0.3-10.4-9-15.1l-42.2-39.1s-26.7-24.5-27.1-45.1v-36.1h54.2s-0.7 17.7 0 33.1c0.2 11.9 63.3 63.2 63.3 63.2s24.4 19.1 24.1 39.1c-0.3 20.1-63.3 0-63.3 0z m0 0M737.5-85.9c0-21.5 17.5-39 39-39s39 17.5 39 39-17.5 39-39 39c-21.5-0.1-39-17.5-39-39z m0 0M546.1-90H211.4c-30.3 0-58.5 13.7-79.5 38.5-20.2 23.9-31.4 55.4-31.4 88.7V751.7c0 33.4 11.1 64.9 31.4 88.7 21 24.8 49.3 38.4 79.5 38.4h606.1c30.3 0 58.5-13.7 79.5-38.4 20.2-23.9 31.4-55.4 31.4-88.7v-434.8h-40V751.7c0 48.1-31.8 87.2-70.9 87.2H211.4c-39.1 0-70.9-39.1-70.9-87.2v-714.5c0-48.1 31.8-87.2 70.9-87.2h334.7v-40zM746.4 577.4H294.2c-16.3 0-29.5 8.9-29.5 20v0.1c0 11 13.2 19.9 29.5 19.9h452.2c16.3 0 29.5-8.9 29.5-19.9v-0.1c-0.1-11.1-13.2-20-29.5-20zM264.7 383.3v0.1c0 11 13.2 19.9 29.5 19.9h452.2c16.3 0 29.5-8.9 29.5-19.9v-0.1c0-11-13.2-19.9-29.5-19.9H294.2c-16.3 0-29.5 8.9-29.5 19.9z"  horiz-adv-x="1024" />
    <glyph glyph-name="tuichu" unicode="&#59101;" d="M224 192c-8 0-16 3.2-22.4 9.6l-160 160c-12.8 12.8-12.8 32 0 44.8l160 160c12.8 12.8 32 12.8 44.8 0 12.8-12.8 12.8-32 0-44.8L108.8 384l137.6-137.6c12.8-12.8 12.8-32 0-44.8-6.4-6.4-14.4-9.6-22.4-9.6z m416 160H80c-17.6 0-32 14.4-32 32s14.4 32 32 32h560c17.6 0 32-14.4 32-32s-14.4-32-32-32z m192-384H480c-52.8 0-96 43.2-96 96V192c0 17.6 14.4 32 32 32s32-14.4 32-32v-128c0-17.6 14.4-32 32-32h352c17.6 0 32 14.4 32 32V704c0 17.6-14.4 32-32 32H480c-17.6 0-32-14.4-32-32v-128c0-17.6-14.4-32-32-32s-32 14.4-32 32V704c0 52.8 43.2 96 96 96h352c52.8 0 96-43.2 96-96v-640c0-52.8-43.2-96-96-96z"  horiz-adv-x="1024" />
    <glyph glyph-name="caidan" unicode="&#58899;" d="M333.275 704.951h597.418c16.511 0 29.871 14.328 29.871 32s-13.36 32-29.871 32H333.275c-16.496 0-29.871-14.328-29.871-32s13.375-32 29.871-32zM930.693 416.5H333.275c-16.496 0-29.871-14.328-29.871-32s13.375-32 29.871-32h597.418c16.511 0 29.871 14.328 29.871 32s-13.36 32-29.871 32z m0-352.451H333.275c-16.496 0-29.871-14.313-29.871-32 0-17.687 13.375-32 29.871-32h597.418c16.511 0 29.871 14.313 29.871 32 0 17.687-13.36 32-29.871 32zM128.197 798.693c-35.211 0-63.76-28.549-63.76-63.76s28.549-63.76 63.76-63.76 63.761 28.549 63.761 63.76-28.55 63.76-63.761 63.76z m-0.118-350.659c-35.146 0-63.642-28.681-63.642-64.055 0-35.373 28.496-64.053 63.642-64.053s63.642 28.681 63.642 64.053c0 35.374-28.496 64.055-63.642 64.055z m-0.382-354.243c-34.935 0-63.26-28.325-63.26-63.261s28.325-63.26 63.26-63.26 63.261 28.324 63.261 63.26-28.326 63.261-63.261 63.261z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_alipay_line" unicode="&#60304;" d="M322.749752 150.762935c74.987878 0 149.936871 47.355541 208.79642 123.163087-83.736123 40.35715-154.673755 69.230758-231.311203 61.753459-20.720927-2.034333-59.624982-11.099802-80.896449-29.652343-63.759139-54.903447-25.614377-155.264203 103.411232-155.264203zM160.016437 831.978894h703.966103c53.016471 0 95.995331-42.97886 95.995331-95.995331v-703.966103c0-53.016471-42.97886-95.995331-95.995331-95.995331H160.016437c-53.016471 0-95.995331 42.97886-95.995331 95.995331V735.983563c0 53.016471 42.97886 95.995331 95.995331 95.995331z m735.964888-600.388073V735.983563c0 17.672498-14.326287 31.998785-31.998785 31.998785H160.016437c-17.672498 0-31.998785-14.326287-31.998785-31.998785v-703.966103c0-17.672498 14.326287-31.998785 31.998785-31.998785h703.966103c17.672498 0 31.998785 14.326287 31.998785 31.998785V111.397369c-64.164369 26.708292-209.505571 87.783299-292.64613 127.259382-73.051783-88.768743-167.301354-142.641721-265.137613-142.641721-165.469636 0-221.660402 142.991692-143.308917 237.131768 17.076934 20.521383 46.147016 40.116673 91.247191 51.093679 70.545706 17.113773 182.841282-10.679223 288.069904-44.970214 18.914792 34.440393 34.853809 72.354911 46.715975 112.724341H296.610418v32.458249h167.223583v58.144258H261.292028v32.457226h202.541973v82.95534s0 13.977339 14.329356 13.97734h81.733513v-96.93268h200.257953v-32.457226H559.89687v-58.144258h163.467025c-15.637142-63.282279-39.414685-121.517611-69.210291-172.657338 49.595558-17.72264 94.132914-34.505885 127.311571-45.469588 56.590879-18.723434 92.449575-29.05064 114.51615-34.735106z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_addressbook" unicode="&#60303;" d="M863.98254 831.978894H224.014007c-53.017494 0-95.995331-42.97886-95.995332-95.995331v-159.991877h-31.998784c-17.671475 0-31.998785-14.325263-31.998785-31.998785s14.32731-31.998785 31.998785-31.998785h31.998784v-255.988232h-31.998784c-17.671475 0-31.998785-14.325263-31.998785-31.998785s14.32731-31.998785 31.998785-31.998785h31.998784v-159.991877c0-53.017494 42.97886-95.995331 95.995332-95.995331h639.969556c53.017494 0 95.995331 42.97886 95.995331 95.995331V735.983563c-0.001023 53.016471-42.97886 95.995331-95.996354 95.995331z m31.998785-799.961434c0-17.673521-14.32731-31.998785-31.998785-31.998785H224.014007c-17.671475 0-31.998785 14.325263-31.998785 31.998785V192.009338h63.996546c17.671475 0 31.998785 14.325263 31.998785 31.998784 0 17.672498-14.32731 31.998785-31.998785 31.998785h-63.996546V511.994116h63.996546c17.671475 0 31.998785 14.325263 31.998785 31.998785s-14.32731 31.998785-31.998785 31.998785h-63.996546V735.983563c0 17.672498 14.32731 31.998785 31.998785 31.998785h639.969556c17.671475 0 31.998785-14.325263 31.998785-31.998785v-703.966103zM702.803627 331.160561c-2.945075 1.183965-5.835915 1.769296-8.600888 1.769297-9.31618 0-17.663288-6.072299-27.530007-18.430768-1.461281-1.837858-2.738367-3.52529-5.234211-6.896061-14.299681-19.305695-21.717627-24.88169-36.490076-20.212344-19.639293 6.17156-37.428448 17.811668-63.325258 44.131103-24.885783 25.297153-32.943296 36.541241-39.920198 51.995211a132.419915 132.419915 0 0 1-1.827624 3.966335c-7.554046 15.692401-1.355881 25.541723 20.494776 44.105521a619.619066 619.619066 0 0 1 3.472078 2.970658 170.380482 170.380482 0 0 1 1.655709 1.441838c15.421224 13.542434 21.182438 29.688159 16.139586 39.58967-12.866029 25.258267-52.41886 83.198887-65.965388 95.577823-8.679683 7.942903-21.99085 6.418176-40.267099-7.153934-5.464455-4.062526-12.710486-11.083429-19.72218-20.907169-11.042497-15.47546-18.10024-33.564443-19.374256-54.298674-4.046153-65.875337 32.448016-148.60248 93.112677-209.950709 57.149605-57.768705 121.326253-86.84902 191.100386-86.84902 5.077645 0 10.187013 0.161682 15.335267 0.480954 21.49864 1.349741 40.185234 9.556657 56.06797 22.405289 5.655813 4.578272 10.561543 9.441023 14.682397 14.277168 2.508123 2.940982 4.29277 5.354961 5.328356 6.945179 2.476401 3.460822 5.273097 8.553817 6.870477 13.929244 2.124384 7.16212 1.421372 12.386098-2.484587 16.114003-14.795984 14.083763-79.847559 59.470463-93.517907 64.999386z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_at" unicode="&#60305;" d="M450.451202 216.348676C525.144368 196.334853 609.444333 253.381104 635.088386 349.075583c25.63996 95.694479-18.844184 187.248661-93.538373 207.262484-74.693166 20.013823-158.993131-37.031405-184.637184-132.725884-25.640983-95.695502 18.84316-187.249685 93.538373-207.263507z m214.549448 324.971349l16.402575 61.217247c4.573155 17.069771 22.12081 27.200502 39.188534 22.626323 17.071817-4.574179 27.201525-22.119787 22.626323-39.190581L703.898565 439.223742c2.210341-15.998369 2.950192-32.494065 2.102894-49.253774 4.584412-29.328979 16.789385-55.654554 34.311457-75.278497 16.850783-18.87386 33.345456-26.687826 43.674708-26.687825 10.329253 0 26.823925 7.812943 43.674709 26.687825 22.575158 25.281803 36.32123 61.684898 36.32123 101.306291 0 194.394409-157.589155 351.983563-351.983563 351.983563-212.066907 0-383.981325-171.914418-383.981325-383.981325s171.914418-383.981325 383.981325-383.981325c153.238057 0 287.122323 82.857103 359.294063 206.212572a32.397874 32.397874 0 0 0 0.953721 1.777483c8.837272 15.304568 28.408003 20.547988 43.712571 11.712763 15.301498-8.836249 20.546965-28.405957 11.711739-43.710524l4.604878 7.978718c-81.794911-147.854443-239.346203-247.967558-420.277995-247.967558-247.411903 0-447.978894 200.566992-447.978895 447.978894s200.568015 447.977871 447.979918 447.977871c229.739405 0 415.980109-186.240705 415.980109-415.980109 0-106.033965-64.467267-191.990662-143.993508-191.990663-41.332361 0-78.595033 23.217794-104.855116 60.404742-47.546899-99.082646-148.956543-155.680688-245.243517-129.880069-110.957091 29.730115-173.095313 157.616784-138.789996 285.642622C329.400219 568.201256 447.158203 647.885086 558.113247 618.154971c44.508703-11.926634 81.163531-39.646975 106.887403-76.834946z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_coinpurse_line" unicode="&#60306;" d="M703.990662 352.001215c-35.344996 0-63.996546-28.652574-63.996546-63.996546s28.652574-63.996546 63.996546-63.996547h127.994116c35.344996 0 63.996546 28.652574 63.996547 63.996547s-28.652574 63.996546-63.996547 63.996546H703.990662z m0 63.99757h127.994116c70.688969 0 127.994116-57.305147 127.994116-127.994116s-57.305147-127.994116-127.994116-127.994116H703.990662c-70.688969 0-127.994116 57.305147-127.994116 127.994116s57.305147 127.994116 127.994116 127.994116zM339.429643 639.988232h396.559804V740.198561c0 3.774977-0.668219 7.520277-1.972934 11.06194-6.109138 16.582677-24.505114 25.073048-41.087791 18.962888L339.429643 639.988232z m-185.66356-0.200568L670.803819 830.275089c49.748031 18.328437 104.934934-7.142677 123.263371-56.890708a95.990215 95.990215 0 0 0 5.918803-33.18582v-100.211352h31.998785c53.016471 0 95.995331-42.97886 95.995331-95.995331v-63.996547c0-17.672498-14.326287-31.998785-31.998784-31.998785s-31.998785 14.326287-31.998785 31.998785v63.996547c0 17.672498-14.326287 31.998785-31.998785 31.998784H160.016437c-17.672498 0-31.998785-14.326287-31.998785-31.998784v-511.975441c0-17.672498 14.326287-31.998785 31.998785-31.998785h671.967318c17.672498 0 31.998785 14.326287 31.998785 31.998785v63.996546c0 17.672498 14.326287 31.998785 31.998785 31.998785s31.998785-14.326287 31.998784-31.998785v-63.996546c0-53.016471-42.97886-95.995331-95.995331-95.995331H160.016437c-53.016471 0-95.995331 42.97886-95.995331 95.995331V543.992901c0 50.916647 39.641859 92.574419 89.744977 95.794763z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_details" unicode="&#60307;" d="M510.651282 543.992901c-26.508747 0-47.998177 21.48943-47.998177 47.998177s21.48943 47.998177 47.998177 47.998177 47.997154-21.48943 47.997154-47.998177-21.48943-47.998177-47.997154-47.998177z m-31.998784-63.99757h31.998784c17.672498 0 31.998785-14.326287 31.998785-31.998785v-287.985993h47.998177c8.836249 0 15.999392-7.163143 15.999393-15.999393s-7.163143-15.999392-15.999393-15.999392H430.655344c-8.836249 0-15.999392 7.163143-15.999393 15.999392s7.163143 15.999392 15.999393 15.999393h47.998177V447.99757h-31.998785c-8.836249 0-15.999392 7.163143-15.999392 15.999392s7.163143 15.999392 15.999392 15.999392h31.997762z m31.998784-495.976048c220.909295 0 399.980717 179.071422 399.980718 399.980717S731.560578 783.980717 510.651282 783.980717 110.670565 604.909295 110.670565 384s179.071422-399.980717 399.980717-399.980717zM62.672388 384c0 247.406786 200.572108 447.978894 447.978894 447.978894s447.978894-200.572108 447.978895-447.978894-200.573131-447.977871-447.978895-447.977871S62.672388 136.594237 62.672388 384z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_delete" unicode="&#60308;" d="M800.162002 579.340967c1.850138 17.575284 17.596773 30.322609 35.172058 28.473495 17.575284-1.850138 30.322609-17.596773 28.473494-35.172058l-57.966202-550.673811c-5.143137-48.856731-46.341445-85.946464-95.467306-85.946464H313.625954c-49.126884 0-90.325192 37.089733-95.468329 85.946464L160.192446 572.641381c-1.850138 17.575284 10.898211 33.32192 28.472471 35.172057 17.575284 1.850138 33.32192-10.898211 35.172058-28.473494l57.965179-550.672788c1.714038-16.285918 15.446807-28.64848 31.822776-28.648481h396.74707c16.375969 0 30.108738 12.363585 31.822776 28.648481l57.967226 550.673811z m-192.176904-99.345636c17.672498 0 31.998785-14.326287 31.998785-31.998785v-223.989447c0-17.672498-14.326287-31.998785-31.998785-31.998785s-31.998785 14.326287-31.998785 31.998785V447.99757c0 17.671475 14.326287 31.997762 31.998785 31.997761z m-191.990662 0c17.672498 0 31.998785-14.326287 31.998785-31.998785v-223.989447c0-17.672498-14.326287-31.998785-31.998785-31.998785s-31.998785 14.326287-31.998785 31.998785V447.99757c0 17.671475 14.326287 31.997762 31.998785 31.997761z m-31.998785 223.989447h255.987209v47.998178c0 8.836249-7.163143 15.999392-15.999393 15.999392H399.995043c-8.836249 0-15.999392-7.163143-15.999392-15.999392v-47.998178z m-63.996546 0V767.981325c0 35.344996 28.652574 63.996546 63.997569 63.996546h255.987209c35.343973 0 63.996546-28.652574 63.996546-63.996546v-63.996547h223.99968c17.672498 0 31.998785-14.326287 31.998785-31.998785s-14.326287-31.998785-31.998785-31.998784H96.019891c-17.672498 0-31.998785 14.326287-31.998785 31.998784s14.326287 31.998785 31.998785 31.998785h223.979214z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_GPS" unicode="&#60309;" d="M512-47.979502c223.989447 224.729298 335.984171 399.577534 335.984171 524.546757 0 187.452299-150.424988 339.412246-335.984171 339.412247S176.015829 664.019555 176.015829 476.567255c0-124.9682 111.994724-299.81746 335.984171-524.546757z m45.327348-45.177945c-25.009603-25.092491-65.645093-25.092491-90.654696 0-235.249909 236.027621-354.653369 422.443311-354.653369 569.724702C112.019283 699.219241 290.950512 879.976048 512 879.976048s399.980717-180.756807 399.980717-403.408793c0-147.281391-119.40346-333.697081-354.653369-569.724702z m-45.327348 445.158662c70.688969 0 127.994116 57.305147 127.994116 127.994116s-57.305147 127.994116-127.994116 127.994116-127.994116-57.305147-127.994116-127.994116 57.305147-127.994116 127.994116-127.994116z m0-63.996546c-106.033965 0-191.990662 85.956697-191.990662 191.990662s85.956697 191.990662 191.990662 191.990662 191.990662-85.956697 191.990662-191.990662-85.957721-191.990662-191.990662-191.990662z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_horn" unicode="&#60310;" d="M702.383048 225.615737c40.534182 40.534182 65.605184 96.531544 65.605184 158.384263s-25.071002 117.850082-65.605184 158.384263c-12.496615 12.495592-12.496615 32.756031 0 45.252647 12.495592 12.496615 32.756031 12.496615 45.252647 0 52.114938-52.114938 84.349083-124.111692 84.349083-203.63691s-32.234145-151.521972-84.349083-203.63691c-12.495592-12.496615-32.756031-12.496615-45.252647 0-12.496615 12.496615-12.496615 32.757055 0 45.252647z m113.130594-113.131617C885.000226 181.970704 927.979086 277.966035 927.979086 384s-42.97886 202.029296-112.465444 271.51588c-12.495592 12.496615-12.495592 32.756031 0 45.252647 12.496615 12.496615 32.756031 12.496615 45.252646 0C941.834652 619.700163 991.976656 507.70544 991.976656 384s-50.142004-235.700163-131.209344-316.768527c-12.496615-12.496615-32.757055-12.496615-45.25367 0-12.495592 12.496615-12.495592 32.757055 0 45.252647zM312.24449 543.992901H112.019283c-8.836249 0-15.999392-7.163143-15.999392-15.999393v-287.985993c0-8.836249 7.163143-15.999392 15.999392-15.999393H312.245514c25.459858 0 49.875944-10.113335 67.87897-28.116361l163.874301-163.874301V735.983563L380.12346 572.109262a95.992261 95.992261 0 0 0-67.87897-28.116361z m41.371247 92.112907L498.746138 781.23621c40.316218 40.316218 109.249193 11.762905 109.249193-45.252647v-703.966103c0-57.015551-68.933999-85.568864-109.249193-45.252647L353.615737 131.894192a95.994308 95.994308 0 0 1-67.878971 28.116361H96.019891c-35.344996 0-63.996546 28.652574-63.996547 63.996546V543.992901c0 35.344996 28.652574 63.996546 63.996547 63.996546h189.716875a95.996354 95.996354 0 0 1 67.878971 28.116361z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_im_voice" unicode="&#60311;" d="M512 891.624343c-280.357246 0-507.624343-227.275283-507.624343-507.624343s227.267097-507.624343 507.624343-507.624343 507.624343 227.275283 507.624343 507.624343S792.356222 891.624343 512 891.624343z m0-983.5221c-262.832104 0-475.897757 213.069747-475.897757 475.897757S249.167896 859.897757 512 859.897757s475.897757-213.069747 475.897757-475.897757-213.065653-475.897757-475.897757-475.897757zM512 288.820244c69.944002 0 126.906342 56.915267 126.906342 127.107933V574.157921c0 70.191642-56.819077 127.107933-126.906342 127.107933-69.944002 0-126.906342-56.915267-126.906342-127.107933v-158.229744c0-70.191642 56.819077-127.107933 126.906342-127.107933zM718.221782 447.453171c-17.521049 0-31.726585-14.205537-31.726586-31.726586 0-96.371908-78.123288-174.49622-174.496219-174.496219S337.502757 319.353654 337.502757 415.726585c0 17.521049-14.205537 31.726585-31.726585 31.726586s-31.726585-14.205537-31.726586-31.726586c0-120.66315 89.804329-220.335221 206.222805-235.857752v-97.270371c0-17.521049 14.205537-31.726585 31.726586-31.726585s31.726585 14.205537 31.726585 31.726585v97.270371c116.418476 15.522532 206.222805 115.194602 206.222805 235.857752 0 17.521049-14.205537 31.726585-31.726585 31.726586z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_notice" unicode="&#60313;" d="M320.009338 495.994724c0-63.996546 0-94.871741-31.998785-191.990663-21.331841-65.37801-63.996546-129.375579-127.994116-191.990662h703.966103c-63.996546 63.996546-106.661252 127.994116-127.994116 191.990662-31.998785 95.995331-31.998785 127.994116-31.998785 191.990663 0 127.994116-31.998785 223.989447-191.990662 223.989447-154.75562 0-191.989639-95.995331-191.989639-223.989447z m282.523585-447.978895H421.467077c13.178137-37.284161 48.735981-63.996546 90.532923-63.996546s77.354785 26.712385 90.532923 63.996546z m3.220344 724.683961c114.993011-31.42164 162.233941-127.552048 162.233942-276.705066 0-89.716324 4.64888-99.556437 28.713972-171.752736 17.921161-53.764508 55.119365-109.561301 112.532982-166.975942 40.316218-40.316218 11.762905-109.249193-45.252646-109.249193H668.791999c-14.823614-73.028247-79.389118-127.994116-156.791999-127.994116S370.031615-25.011394 355.208001 48.015829H160.016437c-57.352219 0-85.751013 69.63087-44.756343 109.74038 57.057507 55.825446 94.02035 111.270223 111.967094 166.273955 15.731286 47.745421 25.325805 105.065917 28.78458 171.96456 0 146.069797 49.270147 243.450684 162.078399 275.986705 9.200546 43.417859 47.750537 75.996858 93.909833 75.996858 45.903469 0 84.282568-32.219819 93.753267-75.278497z"  horiz-adv-x="1024" />
    <glyph glyph-name="icon_phone" unicode="&#60314;" d="M594.366939 129.93456c-159.949922 44.407396-286.332331 171.396625-332.337107 334.574055-7.93574 33.57263 0.589424 58.139142 20.833491 76.930114 2.334161 2.166339 8.812713 7.6574 7.883551 6.846941 5.597485 4.881171 10.837836 9.142218 19.834744 16.252149 2.812045 2.220574 2.812045 2.220574 5.558599 4.393054 21.046339 16.672728 30.17116 25.720801 34.406624 34.540677 5.409197 11.263531-8.538467 51.386344-40.708144 92.706425-37.842887 48.608068-70.305229 71.802326-98.924033 71.802326-20.010753 0-40.808428-24.629957-69.484538-82.763982-15.160281-30.733978-16.61133-108.283192-8.523117-161.977091 5.968945-39.624463 27.458375-117.279077 46.62797-162.884764 78.380138-186.474019 248.529353-320.266188 449.951829-352.145246 98.261954-15.363919 197.22692-8.435113 225.184669 15.370059 27.800159 23.671119 41.494043 42.909276 41.494043 51.451836 0 23.763217-29.543873 70.203922-71.062476 103.345739-40.60479 32.412201-79.886445 46.413076-90.551342 41.162492-7.424086-3.65525-15.161305-10.838859-25.971511-24.202215-3.03001-3.746324-21.337981-27.621081-27.841092-35.579333-25.540699-32.458249-44.096311-39.199791-86.37216-29.823236z m36.237319 69.600171l0.445139 0.553609c5.430686 6.613628 23.953551 30.772864 27.774576 35.496446 16.142655 19.956517 29.889751 32.719192 47.458895 41.370223 39.706327 19.550265 100.614535-2.158153 158.744467-48.560996 55.264675-44.11473 95.134731-106.787118 95.134731-153.361877 0-32.958646-22.99062-65.260329-64.002686-100.17963-46.997384-40.016389-160.744008-47.980781-276.618085-29.862121-223.393883 35.356252-412.053684 183.703929-499.004011 390.5663-21.25714 50.572816-44.165896 133.357264-50.913577 178.150446-9.928117 65.907059-8.283664 153.812131 14.411221 199.821001C123.704416 793.946696 155.817812 831.978894 210.914664 831.978894c53.312206 0 100.621698-33.802874 149.422148-96.484471 45.666062-58.655911 66.9846-119.983675 47.899939-159.724795-9.901511-20.61962-23.690562-34.290991-52.357461-57.001225-2.832512-2.241041-2.832512-2.241041-5.615905-4.439102-8.232498-6.506181-12.850679-10.261715-17.455557-14.277168-0.048095-0.041956-5.324262-4.513804-6.405897-5.518691-4.00522-3.716648-4.495384-5.129834-2.434445-13.976316 39.618323-140.435473 149.21851-250.560616 285.85547-288.543695 16.519232-3.64604 10.199293-5.965875 20.781302 7.5213z"  horiz-adv-x="1024" />
    <glyph glyph-name="weibiaoti-" unicode="&#58961;" d="M943.962529 699.85324c0 35.871975-26.079625 64.449649-59.453552 65.249024l-20.483997 0.399688c-3.09758 0-74.741608 1.898517-149.982825 34.473068-79.837627 34.473068-130.198283 72.943013-132.296644 74.541764l-12.39032 9.492584c-10.291959 7.893833-22.282592 11.990632-34.772833 11.990632h-0.099922c-12.690086 0-24.78064-4.196721-35.272444-12.190476l-11.990632-9.29274c-5.69555-4.296643-55.956284-41.567525-132.596409-74.541764-74.541764-32.174863-148.983607-34.473068-149.583138-34.473068l-20.883685-0.399688c-32.674473-0.699454-59.253708-29.976581-59.253708-65.249024v-374.607338c0-101.720531 54.257611-215.131928 148.883685-311.056987 71.843872-72.943013 156.677596-124.502732 226.822794-137.992194l0.799376-0.199844 29.776737-2.997658 2.198282-0.099922h0.99922c36.671351 0 80.736924 13.389539 127.400468 38.969555 46.064012 25.180328 92.128025 60.552693 133.395785 102.419985 94.626073 95.925059 148.883685 209.436378 148.883684 311.056987l-0.099922 374.507416z m-180.558938-649.492584c-36.271663-37.870414-76.740047-69.745511-117.108509-92.427791-40.967994-23.081967-79.637783-35.172521-111.912568-35.172522h-0.899298l-1.998438 0.099922-26.179548 2.697893-0.699453 0.199844c-61.651835 12.090554-136.093677 58.654176-199.144419 124.502732-83.135051 86.632319-130.697892 188.952381-130.697892 280.680718V669.077283c0 31.775176 23.381733 58.254489 52.059329 58.854021l18.385636 0.399687c0.599532 0 65.948478 1.998439 131.397346 31.075723C443.953162 789.083528 488.018735 822.757221 493.014832 826.654176l10.491803 8.393443c9.192818 7.194379 19.884465 10.991413 30.975801 10.991413h0.099922c10.991413 0 21.583138-3.697112 30.576112-10.891491l10.891491-8.593287c1.898517-1.498829 46.064012-36.171741 116.209212-67.247462 66.0484-29.377049 128.999219-31.075722 131.697111-31.075723l17.985949-0.399687c29.277127-0.699454 52.159251-26.479313 52.15925-58.854021l0.199844-337.935987c-0.199844-91.728337-47.762685-194.0484-130.897736-280.680718zM507.203747 207.13817300000005c-9.79235-9.79235-25.580016-9.79235-35.372365 0L333.339578 345.53005499999995c-9.79235 9.79235-9.79235 25.580016 0 35.372365 9.79235 9.79235 25.580016 9.79235 35.372366 0l138.491803-138.491803c9.79235-9.79235 9.79235-25.580016 0-35.272444zM784.287276 519.594067c9.79235-9.79235 9.79235-25.580016 0-35.372365L507.203747 207.13817300000005c-9.79235-9.79235-25.580016-9.79235-35.372365 0-9.79235 9.79235-9.79235 25.580016 0 35.372366l277.083528 277.083528c9.79235 9.692428 25.679938 9.692428 35.372366 0z"  horiz-adv-x="1024" />
    <glyph glyph-name="zhihang" unicode="&#58964;" d="M751.742464 138.713491H302.225344c-13.785192 0-24.973173 11.187982-24.973173 24.973174s11.187982 24.973173 24.973173 24.973173h449.51712c13.785192 0 24.973173-11.187982 24.973173-24.973173s-11.187982-24.973173-24.973173-24.973174zM751.742464 612.204858H302.225344c-13.785192 0-24.973173 11.187982-24.973173 24.973173s11.187982 24.973173 24.973173 24.973174h449.51712c13.785192 0 24.973173-11.187982 24.973173-24.973174s-11.187982-24.973173-24.973173-24.973173zM520.990342-76.954834H177.359477c-14.384548 0-26.071993 12.087016-26.071993 27.07092V818.982733c0 14.983904 11.687445 27.07092 26.071993 27.07092h687.061945c14.384548 0 26.071993-12.087016 26.071993-27.07092v-523.437713h49.946347V866.032192c0 16.582187-13.285728 29.967808-29.568237 29.967808H130.909375c-16.382402 0-29.568237-13.385621-29.568238-29.967808v-962.965564c0-16.582187 13.285728-29.967808 29.568238-29.967808H520.990342v49.946346zM915.566481 291.549312m-24.973173 0a24.973173 24.973173 0 1 1 49.946347 0 24.973173 24.973173 0 1 1-49.946347 0ZM525.984977-103.026827m-24.973173 0a24.973173 24.973173 0 1 1 49.946346 0 24.973173 24.973173 0 1 1-49.946346 0ZM735.659741-122.306116l-108.183787 71.822846c-11.48766 7.591845-14.584333 23.175105-6.992489 34.662765 7.591845 11.48766 23.175105 14.584333 34.662765 6.992488l108.183787-71.822846c11.48766-7.591845 14.584333-23.175105 6.992488-34.662765-7.691737-11.48766-23.175105-14.584333-34.662764-6.992488zM728.667252-87.643352l165.721978 249.731734c7.591845 11.48766 23.175105 14.584333 34.662765 6.992488 11.48766-7.591845 14.584333-23.175105 6.992488-34.662764l-165.721978-249.731734c-7.591845-11.48766-23.175105-14.584333-34.662764-6.992488-11.48766 7.691737-14.684226 23.175105-6.992489 34.662764zM745.748903 375.459175H296.231782c-13.785192 0-24.973173 11.187982-24.973173 24.973173s11.187982 24.973173 24.973173 24.973173h449.517121c13.785192 0 24.973173-11.187982 24.973173-24.973173s-11.187982-24.973173-24.973173-24.973173z"  horiz-adv-x="1024" />
    <glyph glyph-name="baocun" unicode="&#58965;" d="M894.863499 895.10079H114.849058c-16.385599 0-29.574007-13.388233-29.574007-29.973656v-963.153478c0-16.585423 13.288321-29.973656 29.574007-29.973656h780.014441c16.385599 0 29.574007 13.388233 29.574007 29.973656v963.153478c0 16.585423-13.188409 29.973656-29.574007 29.973656z m-20.382086-946.068494c0-14.986828-11.689726-27.076203-26.077081-27.076203H161.308225c-14.387355 0-26.077081 12.089375-26.07708 27.076203V818.068494c0 14.986828 11.689726 27.076203 26.07708 27.076203h687.196019c14.387355 0 26.077081-12.089375 26.077081-27.076203v-869.036198zM729.608742 59.734999h-449.604839c-13.787882 0-24.978047 11.190165-24.978047 24.978046s11.190165 24.978047 24.978047 24.978047h449.604839c13.787882 0 24.978047-11.190165 24.978047-24.978047s-11.090253-24.978047-24.978047-24.978046zM729.608742 263.555859h-449.604839c-13.787882 0-24.978047 11.190165-24.978047 24.978047s11.190165 24.978047 24.978047 24.978046h449.604839c13.787882 0 24.978047-11.190165 24.978047-24.978046s-11.090253-24.978047-24.978047-24.978047zM255.025856 895.500439v-259.771685c0-27.575763 22.38033-49.956093 49.956093-49.956093h399.648747c27.575763 0 49.956093 22.38033 49.956093 49.956093V895.500439h-499.560933z m449.60484-235.293199c0-13.787882-11.190165-24.978047-24.978047-24.978047h-349.692653c-13.787882 0-24.978047 11.190165-24.978047 24.978047V845.044785h399.648747v-184.837545z"  horiz-adv-x="1024" />
    <glyph glyph-name="zhongzhi" unicode="&#58967;" d="M300.153441 631.329234L45.877599 540.873402c-14.792777-5.297413-31.084822 2.49878-36.382235 17.291557-5.297413 14.792777 2.49878 31.084822 17.291556 36.382235l254.275842 90.455832c14.792777 5.297413 31.084822-2.49878 36.382236-17.291557 5.297413-14.792777-2.49878-31.184773-17.291557-36.382235zM113.244705 828.033187L64.36857 562.562811c-2.798633-15.392484-17.791313-25.687457-33.183797-22.888824-15.392484 2.798633-25.687457 17.791313-22.888824 33.183797L57.172084 838.32816C59.970717 853.720644 74.963397 864.015617 90.355881 861.117033c15.392484-2.798633 25.687457-17.691362 22.888824-33.083846zM84.958516 151.363592m-24.987799 0a24.987799 24.987799 0 1 1 49.975598 0 24.987799 24.987799 0 1 1-49.975598 0ZM512.749634 895.500244C308.649292 895.500244 132.435334 775.958614 50.275451 603.142997h56.072621C184.409956 747.472523 337.135383 845.524646 512.749634 845.524646c255.075451 0 461.774524-206.699073 461.774524-461.774524s-206.699073-461.774524-461.774524-461.774524c-175.614251 0-328.339678 98.052123-406.401562 242.381649H68.966325v-20.989751h-2.998536v-2.998536h-3.39834c86.557735-159.821962 255.675159-268.36896 450.180185-268.36896 282.661981 0 511.750122 229.088141 511.750122 511.750122S795.411615 895.500244 512.749634 895.500244z"  horiz-adv-x="1025" />
    <glyph glyph-name="shanchu" unicode="&#58968;" d="M1000 654H26c-13.8 0-25 11.2-25 25s11.2 25 25 25h974c13.8 0 25-11.2 25-25s-11.2-25-25-25zM855.7 702.6h-684c-27.6 0-50-22.4-50-50v-730c0-27.6 22.4-50 50-50h684c27.6 0 50 22.4 50 50v730c0 27.6-22.4 50-50 50z m0-755c0-13.8-11.2-25-25-25h-634c-13.8 0-25 11.2-25 25v705h684v-705zM788.7 784H237.4c-13.8 0-25 11.2-25 25s11.2 25 25 25h551.3c13.8 0 25-11.2 25-25s-11.2-25-25-25zM452.2 448.6v-322c0-13.8-11.2-25-25-25s-25 11.2-25 25v322c0 13.8 11.2 25 25 25s25-11.2 25-25zM625.2 448.6v-322c0-13.8-11.2-25-25-25s-25 11.2-25 25v322c0 13.8 11.2 25 25 25s25-11.2 25-25z"  horiz-adv-x="1025" />
    <glyph glyph-name="sousuo" unicode="&#58969;" d="M501.6 871.7C262.1 899.8 45.3 728.4 17.3 489s143.3-456.3 382.8-484.3S856.3 148 884.4 387.4 741 843.7 501.6 871.7z m-95.4-814.2C196 82.1 45.5 272.5 70.1 482.8s215 360.7 425.3 336.1 360.7-215 336.1-425.3-215-360.7-425.3-336.1zM1005.2-16l-220 181.9c-10.6 8.8-26.4 7.3-35.2-3.3l-2.1-2.5c-8.8-10.6-7.3-26.4 3.3-35.2l220-181.9c10.6-8.8 26.4-7.3 35.2 3.3l2.1 2.5c8.9 10.6 7.4 26.4-3.3 35.2z"  horiz-adv-x="1024" />
    <glyph glyph-name="fanhui" unicode="&#58970;" d="M511.002727 893.207635C228.973899 893.207635 0.398909 664.632645 0.398909 382.60381800000005s228.57499-510.603818 510.603818-510.603818 510.603818 228.57499 510.603818 510.603818-228.57499 510.603818-510.603818 510.603817z m0-971.343981c-254.50409 0-460.740164 206.236073-460.740164 460.740164s206.236073 460.740164 460.740164 460.740163 460.740164-206.236073 460.740164-460.740163-206.236073-460.740164-460.740164-460.740164zM753.53954 357.67199100000005h-544.511102c-13.762369 0-24.931827 11.169459-24.931827 24.931827s11.169459 24.931827 24.931827 24.931827h544.511102c13.762369 0 24.931827-11.169459 24.931827-24.931827s-11.169459-24.931827-24.931827-24.931827zM829.033113 363.05726500000003l-198.557071-166.544604c-10.571095-8.87573-26.228282-7.479548-35.104012 3.091546-8.87573 10.571095-7.479548 26.228282 3.091546 35.104013L797.020647 401.352552c10.571095 8.87573 26.228282 7.479548 35.104012-3.091547 8.87573-10.571095 7.479548-26.328009-3.091546-35.20374zM829.033113 402.250097l-198.557071 166.544605c-10.571095 8.87573-26.228282 7.479548-35.104012-3.091547-8.87573-10.571095-7.479548-26.228282 3.091546-35.104012l198.557071-166.644332c10.571095-8.87573 26.228282-7.479548 35.104012 3.091547 8.87573 10.571095 7.479548 26.328009-3.091546 35.203739z"  horiz-adv-x="1024" />
    <glyph glyph-name="cuowu" unicode="&#58971;" d="M875.086452 742.269942C676.053818 941.302575 353.260522 941.302575 154.128323 742.269942s-199.032634-521.825929 0-720.958129 521.825929-199.032634 720.958129 0 199.032634 521.825929 0 720.958129zM725.836868 170.561396c-9.757478-9.757478-25.488922-9.757478-35.246399 0L514.557604 346.594261 338.624306 170.561396c-9.757478-9.757478-25.488922-9.757478-35.2464 0s-9.757478 25.488922 0 35.2464l176.032865 176.032864-176.032865 175.933299c-9.757478 9.757478-9.757478 25.488922 0 35.246399 9.757478 9.757478 25.488922 9.757478 35.2464 0l176.032864-176.032865 176.032865 176.032865c9.757478 9.757478 25.488922 9.757478 35.246399 0 9.757478-9.757478 9.757478-25.488922 0-35.246399L549.804004 381.84066 725.836868 205.807796c9.657912-9.757478 9.657912-25.488922 0-35.2464z"  horiz-adv-x="1028" />
    <glyph glyph-name="zhengque" unicode="&#58972;" d="M513.099356 895.400351c-282.634394 0-511.700176-229.065782-511.700176-511.700175s229.065782-511.700176 511.700176-511.700176 511.700176 229.065782 511.700176 511.700176S795.73375 895.400351 513.099356 895.400351z m225.567831-399.865703L461.429631 218.397033c-9.794261-9.794261-25.585009-9.794261-35.37927 0L287.631466 356.91587c-9.794261 9.794261-9.794261 25.585009 0 35.37927 9.794261 9.794261 25.585009 9.794261 35.37927 0l120.829202-120.929144 259.547921 259.547922c9.794261 9.794261 25.585009 9.794261 35.37927 0 9.69432-9.794261 9.69432-25.585009-0.099942-35.37927z"  horiz-adv-x="1025" />
    <glyph glyph-name="jingshi" unicode="&#58974;" d="M878.815746 744.39056C679.198314 943.908184 355.618456 943.908184 156.100832 744.39056S-43.416792 221.293078 156.100832 21.675646s523.097482-199.517624 722.714914 0 199.517624 523.097482 0 722.714914z m-385.361453-48.507036c27.547206 0 49.904358-22.357152 49.904358-49.904358s-22.357152-49.904358-49.904358-49.904358-49.904358 22.357152-49.904358 49.904358 22.357152 49.904358 49.904358 49.904358z m148.714987-600.848472c0-13.773603-11.178576-24.952179-24.952179-24.952179h-199.617432c-13.773603 0-24.952179 11.178576-24.952179 24.952179s11.178576 24.952179 24.952179 24.95218H492.056971v395.242516h-74.457302c-13.773603 0-24.952179 11.178576-24.952179 24.952179s11.178576 24.952179 24.952179 24.952179h99.808716c13.773603 0 24.952179-11.178576 24.952179-24.952179v-420.194695h74.856537c13.773603 0 24.952179-11.178576 24.952179-24.95218z"  horiz-adv-x="1030" />
    <glyph glyph-name="xitongpeizhi" unicode="&#58975;" d="M214 209c-55.2 0-100-44.8-100-100s44.8-100 100-100 100 44.8 100 100-44.8 100-100 100z m0-150c-27.6 0-50 22.4-50 50s22.4 50 50 50 50-22.4 50-50-22.4-50-50-50zM239 167V871c0 13.8-11.2 25-25 25s-25-11.2-25-25v-704h50zM189 50v-153c0-13.8 11.2-25 25-25s25 11.2 25 25V50h-50zM517 452c-55.2 0-100-44.8-100-100s44.8-100 100-100 100 44.8 100 100-44.8 100-100 100z m0-150c-27.6 0-50 22.4-50 50s22.4 50 50 50 50-22.4 50-50-22.4-50-50-50zM542 430V871c0 13.8-11.2 25-25 25s-25-11.2-25-25v-441h50zM492 279v-382c0-13.8 11.2-25 25-25s25 11.2 25 25V279h-50zM910 659c0 55.2-44.8 100-100 100s-100-44.8-100-100 44.8-100 100-100 100 44.8 100 100z m-50 0c0-27.6-22.4-50-50-50s-50 22.4-50 50 22.4 50 50 50 50-22.4 50-50zM835 601v-704c0-13.8-11.2-25-25-25s-25 11.2-25 25V601h50zM785 718V871c0 13.8 11.2 25 25 25s25-11.2 25-25v-153h-50z"  horiz-adv-x="1024" />
    <glyph glyph-name="shujuchaxun" unicode="&#58976;" d="M477-78H108.8c-13.8 0-25 11.2-25 25V821c0 13.8 11.2 25 25 25h750c13.8 0 25-11.2 25-25v-469h50V846c0 27.6-22.4 50-50 50h-800c-27.6 0-50-22.4-50-50v-924c0-27.6 22.4-50 50-50H477v50zM909 354m-25 0a25 25 0 1 1 50 0 25 25 0 1 1-50 0ZM482-103m-25 0a25 25 0 1 1 50 0 25 25 0 1 1-50 0ZM767 647H169c-13.7 0-25 11.2-25 25 0 13.7 11.2 25 25 25h598c13.8 0 25-11.2 25-25s-11.2-25-25-25zM767 385.5H169c-13.7 0-25 11.3-25 25s11.2 25 25 25h598c13.8 0 25-11.3 25-25 0-13.8-11.2-25-25-25zM474 124H184c-13.7 0-25 11.3-25 25 0 13.8 11.2 25 25 25h290c13.7 0 25-11.3 25-25 0-13.8-11.2-25-25-25zM895.8-118.9l-97.5 110.8c-9.1 10.3-8.1 26.2 2.2 35.3 10.3 9.1 26.2 8.1 35.3-2.2l97.5-110.8c9.1-10.3 8.1-26.2-2.2-35.3-10.3-9.1-26.2-8.1-35.3 2.2zM795.7 295.3C708 336 604 297.9 563.3 210.2c-40.7-87.7-2.6-191.7 85.1-232.4 87.7-40.7 191.7-2.6 232.4 85.1 40.7 87.7 2.6 191.8-85.1 232.4zM669.5 23.2c-62.6 29-89.8 103.4-60.8 166S712 279 774.7 250c62.6-29 89.8-103.4 60.8-166-29.1-62.6-103.4-89.9-166-60.8z"  horiz-adv-x="1024" />
    <glyph glyph-name="baobiaoshuchu" unicode="&#58977;" d="M471.539512-102.52487799999994m-25.475122 0a25.475122 25.475122 0 1 1 50.950244 0 25.475122 25.475122 0 1 1-50.950244 0ZM913.108293 353.03024400000004m-25.475122 0a25.475122 25.475122 0 1 1 50.950244 0 25.475122 25.475122 0 1 1-50.950244 0ZM888.632195 896H313.194146l-41.959024-49.95122h592.421463c13.786537 0 24.97561-11.189073 24.97561-24.975609v-472.538537h49.95122V846.04878c0 27.573073-22.378146 49.95122-49.95122 49.95122zM39.461463-43.08292700000004c0-61.539902 22.378146-83.918049 49.95122-83.918049h380.628293v49.95122H114.388293c-13.786537 0-24.97561 11.189073-24.97561 24.97561V642.247805l-47.953171-19.980488M173.330732 755.637073L313.194146 896v-273.732683H39.461463zM579.933659 302.579512H261.244878c-13.786537 0-24.97561 11.189073-24.97561 24.97561s11.189073 24.97561 24.97561 24.97561h318.688781c13.786537 0 24.97561-11.189073 24.975609-24.97561s-11.189073-24.97561-24.975609-24.97561zM705.810732 513.373659H261.244878c-13.786537 0-24.97561 11.189073-24.97561 24.975609s11.189073 24.97561 24.97561 24.97561h444.565854c13.786537 0 24.97561-11.189073 24.975609-24.97561s-11.189073-24.97561-24.975609-24.975609zM751.266341 274.60682899999995c-110.392195 0-199.804878-89.412683-199.804878-199.804878s89.412683-199.804878 199.804878-199.804878 199.804878 89.412683 199.804879 199.804878-89.412683 199.804878-199.804879 199.804878z m0-349.658536c-82.71922 0-149.853659 67.134439-149.853658 149.853658s67.134439 149.853659 149.853658 149.853659 149.853659-67.134439 149.853659-149.853659-67.134439-149.853659-149.853659-149.853658zM845.674146 36.839023999999995H655.859512c-13.786537 0-24.97561 11.189073-24.97561 24.97561s11.189073 24.97561 24.97561 24.97561h189.814634c13.786537 0 24.97561-11.189073 24.97561-24.97561s-11.189073-24.97561-24.97561-24.97561zM829.090341 48.827316999999994L750.766829 109.26829299999997c-10.889366 8.391805-12.887415 24.076488-4.495609 35.065756 8.391805 10.889366 24.076488 12.887415 35.065756 4.49561l78.323512-60.440976c10.889366-8.391805 12.887415-24.076488 4.49561-35.065756-8.491707-10.989268-24.17639-12.987317-35.065757-4.49561zM862.457756 44.63141499999995L786.931512-15.110243999999966c-10.789463-8.59161-26.574049-6.693463-35.065756 4.096l-0.199805 0.199805c-8.59161 10.789463-6.693463 26.574049 4.096 35.065756l75.626147 59.741659c10.789463 8.59161 26.574049 6.693463 35.065756-4.096l0.199805-0.199805c8.491707-10.789463 6.693463-26.474146-4.195903-35.065756z"  horiz-adv-x="1024" />
    <glyph glyph-name="-" unicode="&#58910;" d="M512 896C230.4 896 0 665.6 0 384s230.4-512 512-512 512 230.4 512 512S793.6 896 512 896z m292.571429-585.142857H219.428571v146.285714h585.142858v-146.285714z"  horiz-adv-x="1024" />
    <glyph glyph-name="-1" unicode="&#58911;" d="M512 896C230.4 896 0 665.6 0 384s230.4-512 512-512 512 230.4 512 512S793.6 896 512 896z m-73.142857-797.257143l-270.628572 270.628572 102.4 102.4 168.228572-168.228572 314.514286 314.514286 102.4-102.4L438.857143 98.742857z"  horiz-adv-x="1024" />
    <glyph glyph-name="-2" unicode="&#58912;" d="M512 896C230.4 896 0 665.6 0 384s230.4-512 512-512 512 230.4 512 512S793.6 896 512 896z m292.571429-585.142857h-219.428572v-219.428572h-146.285714v219.428572H219.428571v146.285714h219.428572V676.571429h146.285714v-219.428572h219.428572v-146.285714z"  horiz-adv-x="1024" />
    <glyph glyph-name="-3" unicode="&#58913;" d="M1024 676.571429H0v-146.285715h146.285714v-585.142857c0-40.228571 32.914286-73.142857 73.142857-73.142857h585.142858c40.228571 0 73.142857 32.914286 73.142857 73.142857V530.285714h146.285714V676.571429zM365.714286 18.285714H292.571429V530.285714h73.142857v-512z m182.857143 0h-73.142858V530.285714h73.142858v-512z m182.857142 0h-73.142857V530.285714h73.142857v-512z m0 731.428572H292.571429V896h438.857142v-146.285714z"  horiz-adv-x="1024" />
    <glyph glyph-name="-4" unicode="&#58914;" d="M658.285714 683.885714l153.6-153.6-658.285714-658.285714H0v153.6l658.285714 658.285714z m343.771429 87.771429L899.657143 874.057143c-14.628571 14.628571-36.571429 14.628571-51.2 0l-120.685714-120.685714 153.6-153.6 120.685714 120.685714c14.628571 14.628571 14.628571 36.571429 0 51.2z"  horiz-adv-x="1024" />
    <glyph glyph-name="-5" unicode="&#58915;" d="M512 676.571429V896L219.428571 603.428571l292.571429-292.571428v219.428571c142.628571 0 256-113.371429 256-256s-113.371429-256-256-256-256 113.371429-256 256H109.714286c0-223.085714 179.2-402.285714 402.285714-402.285714s402.285714 179.2 402.285714 402.285714S735.085714 676.571429 512 676.571429z"  horiz-adv-x="1024" />
    <glyph glyph-name="-6" unicode="&#58916;" d="M872.768683 327.516014c3.644128 18.220641 3.644128 36.441281 3.644128 58.30605s-3.644128 36.441281-3.644128 58.30605l112.967972 83.814946c14.576512 10.932384 18.220641 32.797153 10.932384 47.373666l-76.52669 134.83274c-10.932384 14.576512-29.153025 21.864769-47.373666 14.576513l-127.544484-54.661922c-29.153025 25.508897-61.950178 43.729537-98.391459 58.30605L628.6121 866.846975c-7.288256 14.576512-21.864769 29.153025-40.08541 29.153025h-153.05338c-18.220641 0-32.797153-14.576512-36.441282-32.797153l-18.22064-138.476868c-36.441281-14.576512-69.238434-32.797153-98.391459-58.30605L154.875445 724.725979c-18.220641 7.288256-36.441281 0-47.373666-14.576513L30.975089 575.316726c-10.932384-14.576512-3.644128-36.441281 10.932384-47.373666l112.967972-83.814946C151.231317 422.263345 147.587189 404.042705 147.587189 385.822064s3.644128-36.441281 3.644128-58.30605L38.263345 243.701068c-14.576512-10.932384-18.220641-32.797153-10.932384-47.373666l76.52669-134.83274c10.932384-14.576512 29.153025-21.864769 47.373666-14.576513l127.544484 54.661922c29.153025-25.508897 61.950178-43.729537 98.391459-58.30605l18.22064-138.476868c3.644128-18.220641 18.220641-32.797153 36.441281-32.797153H584.882562c18.220641 0 32.797153 14.576512 36.441281 32.797153l18.220641 138.476868c36.441281 14.576512 69.238434 32.797153 98.391459 58.30605l127.544484-54.661922c18.220641-7.288256 36.441281 0 47.373666 14.576513l76.52669 134.83274c10.932384 14.576512 3.644128 36.441281-10.932384 47.373666l-105.679716 83.814946zM512 203.615658c-102.035587 0-182.206406 80.170819-182.206406 182.206406s80.170819 182.206406 182.206406 182.206406 182.206406-80.170819 182.206406-182.206406-80.170819-182.206406-182.206406-182.206406z"  horiz-adv-x="1024" />
    <glyph glyph-name="-7" unicode="&#58917;" d="M808.228571 384l-475.428571-479.085714-80.457143 80.457143 402.285714 398.628571-402.285714 398.628571L332.8 863.085714z"  horiz-adv-x="1024" />
    <glyph glyph-name="-8" unicode="&#58918;" d="M512 87.771429L32.914286 563.2l80.457143 80.457143 398.628571-402.285714 398.628571 402.285714 80.457143-80.457143z"  horiz-adv-x="1024" />
    <glyph glyph-name="-9" unicode="&#58919;" d="M146.285714 530.285714L512 896l365.714286-365.714286zM877.714286 237.714286L512-128 146.285714 237.714286z"  horiz-adv-x="1024" />
    <glyph glyph-name="-10" unicode="&#58920;" d="M815.542857 468.114286l-277.942857-277.942857c-14.628571-14.628571-36.571429-14.628571-51.2 0l-277.942857 277.942857c-21.942857 21.942857-7.314286 62.171429 25.6 62.171428h555.885714c32.914286 0 47.542857-40.228571 25.6-62.171428z"  horiz-adv-x="1024" />
    <glyph glyph-name="-11" unicode="&#58921;" d="M292.571429 310.857143v-219.428572l-292.571429 292.571429 292.571429 292.571429v-219.428572h438.857142v-146.285714H292.571429zM877.714286 896h-292.571429c-80.457143 0-146.285714-65.828571-146.285714-146.285714v-146.285715h146.285714V749.714286h292.571429v-731.428572h-292.571429v146.285715h-146.285714v-146.285715c0-80.457143 65.828571-146.285714 146.285714-146.285714h292.571429c80.457143 0 146.285714 65.828571 146.285714 146.285714V749.714286c0 80.457143-65.828571 146.285714-146.285714 146.285714z"  horiz-adv-x="1024" />
  </font>
</defs></svg>
src/components/MyIcons/iconfont.ttf
Binary files differ
src/components/MyIcons/iconfont.woff
Binary files differ
src/components/MyIcons/index.css
New file
@@ -0,0 +1,345 @@
@font-face {font-family: "iconfont";
  src: url('iconfont.eot?t=1554181418589'); /* IE9 */
  src: url('iconfont.eot?t=1554181418589#iefix') format('embedded-opentype'), /* IE6-IE8 */
  url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
  url('iconfont.woff?t=1554181418589') format('woff'),
  url('iconfont.ttf?t=1554181418589') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
  url('iconfont.svg?t=1554181418589#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
  font-family: "iconfont" !important;
  font-size: 16px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.icon-communityfill:before {
  content: "\e740";
}
.icon-community:before {
  content: "\e741";
}
.icon-lingdang:before {
  content: "\f01f5";
}
.icon-like:before {
  content: "\e69c";
}
.icon-likefill:before {
  content: "\e69d";
}
.icon-plane:before {
  content: "\e6b1";
}
.icon-planefill:before {
  content: "\e6b2";
}
.icon-huiyuan:before {
  content: "\e61d";
}
.icon-biaoxingfill:before {
  content: "\e732";
}
.icon-biaoxing:before {
  content: "\e733";
}
.icon-dianpufill:before {
  content: "\e735";
}
.icon-dianpu:before {
  content: "\e736";
}
.icon-gouwuchefill:before {
  content: "\e73c";
}
.icon-gouwuche:before {
  content: "\e73d";
}
.icon-kefufill:before {
  content: "\e742";
}
.icon-kefu:before {
  content: "\e743";
}
.icon-liuyanfill:before {
  content: "\e744";
}
.icon-liuyan:before {
  content: "\e745";
}
.icon-pengyoufill:before {
  content: "\e746";
}
.icon-pengyou:before {
  content: "\e747";
}
.icon-shouyefill:before {
  content: "\e750";
}
.icon-shouye:before {
  content: "\e751";
}
.icon-tongzhifill:before {
  content: "\e758";
}
.icon-tongzhi:before {
  content: "\e759";
}
.icon-xihuanfill:before {
  content: "\e760";
}
.icon-xihuan:before {
  content: "\e761";
}
.icon-xinxifill:before {
  content: "\e762";
}
.icon-xinxi:before {
  content: "\e763";
}
.icon-yonghufill:before {
  content: "\e787";
}
.icon-yonghu:before {
  content: "\e788";
}
.icon-zantongfill:before {
  content: "\e793";
}
.icon-zantong:before {
  content: "\e794";
}
.icon-leimupinleifenleileibie2:before {
  content: "\e7f8";
}
.icon-leimupinleifenleileibie:before {
  content: "\e7f9";
}
.icon-edit:before {
  content: "\e61c";
}
.icon-917caidan_fenlei:before {
  content: "\e685";
}
.icon-weixuanzhong-01:before {
  content: "\e61a";
}
.icon-xuanzhong:before {
  content: "\e62d";
}
.icon-shujudaping:before {
  content: "\e748";
}
.icon-yigouxuan:before {
  content: "\e63d";
}
.icon-weigouxuan:before {
  content: "\e63e";
}
.icon-phone_light:before {
  content: "\e7fe";
}
.icon-Myassessment:before {
  content: "\e649";
}
.icon-Myquestionandansw:before {
  content: "\e64a";
}
.icon-tuichu:before {
  content: "\e6dd";
}
.icon-caidan:before {
  content: "\e613";
}
.icon-icon_alipay_line:before {
  content: "\eb90";
}
.icon-icon_addressbook:before {
  content: "\eb8f";
}
.icon-icon_at:before {
  content: "\eb91";
}
.icon-icon_coinpurse_line:before {
  content: "\eb92";
}
.icon-icon_details:before {
  content: "\eb93";
}
.icon-icon_delete:before {
  content: "\eb94";
}
.icon-icon_GPS:before {
  content: "\eb95";
}
.icon-icon_horn:before {
  content: "\eb96";
}
.icon-icon_im_voice:before {
  content: "\eb97";
}
.icon-icon_notice:before {
  content: "\eb99";
}
.icon-icon_phone:before {
  content: "\eb9a";
}
.icon-weibiaoti-:before {
  content: "\e651";
}
.icon-zhihang:before {
  content: "\e654";
}
.icon-baocun:before {
  content: "\e655";
}
.icon-zhongzhi:before {
  content: "\e657";
}
.icon-shanchu:before {
  content: "\e658";
}
.icon-sousuo:before {
  content: "\e659";
}
.icon-fanhui:before {
  content: "\e65a";
}
.icon-cuowu:before {
  content: "\e65b";
}
.icon-zhengque:before {
  content: "\e65c";
}
.icon-jingshi:before {
  content: "\e65e";
}
.icon-xitongpeizhi:before {
  content: "\e65f";
}
.icon-shujuchaxun:before {
  content: "\e660";
}
.icon-baobiaoshuchu:before {
  content: "\e661";
}
.icon--:before {
  content: "\e61e";
}
.icon--1:before {
  content: "\e61f";
}
.icon--2:before {
  content: "\e620";
}
.icon--3:before {
  content: "\e621";
}
.icon--4:before {
  content: "\e622";
}
.icon--5:before {
  content: "\e623";
}
.icon--6:before {
  content: "\e624";
}
.icon--7:before {
  content: "\e625";
}
.icon--8:before {
  content: "\e626";
}
.icon--9:before {
  content: "\e627";
}
.icon--10:before {
  content: "\e628";
}
.icon--11:before {
  content: "\e629";
}
src/components/MyIcons/index.vue
New file
@@ -0,0 +1,45 @@
<template>
  <div class="fonts">
    <span><i :class="getIcon" :style="'font-size:'+getSize" />{{ content }}</span>
  </div>
</template>
<script>
export default {
  components: {
  },
  props: {
    content: {
      type: String,
      default: ''
    },
    icons: {
      type: String,
      default: ''
    },
    fontsize: {
      type: String,
      default: '14'
    }
  },
  computed: {
    getIcon() {
      return 'iconfont ' + this.icons
    },
    getSize() {
      return this.fontsize + 'px'
    }
  },
  methods: {
  }
}
</script>
<style src="./index.css"></style>
<style scoped>
  .fonts{
    color: black;
    font-size: 13px;
  }
</style>
src/components/PanThumb/index.vue
@@ -5,8 +5,7 @@
        <slot />
      </div>
    </div>
    <!-- eslint-disable-next-line -->
    <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
    <img :src="image" class="pan-thumb">
  </div>
</template>
@@ -53,8 +52,7 @@
.pan-thumb {
  width: 100%;
  height: 100%;
  background-position: center center;
  background-size: cover;
  background-size: 100%;
  border-radius: 50%;
  overflow: hidden;
  position: absolute;
@@ -62,7 +60,7 @@
  transition: all 0.3s ease-in-out;
}
/* .pan-thumb:after {
.pan-thumb:after {
  content: '';
  width: 8px;
  height: 8px;
@@ -73,7 +71,7 @@
  margin: -4px 0 0 -4px;
  background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
  box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
} */
}
.pan-info {
  position: absolute;
src/components/RuoYi/Breadcrumb/index.vue
New file
@@ -0,0 +1,74 @@
<template>
  <el-breadcrumb class="app-breadcrumb" separator="/">
    <transition-group name="breadcrumb">
      <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
        <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
      </el-breadcrumb-item>
    </transition-group>
  </el-breadcrumb>
</template>
<script>
export default {
  data() {
    return {
      levelList: null
    }
  },
  watch: {
    $route(route) {
      // if you go to the redirect page, do not update the breadcrumbs
      if (route.path.startsWith('/redirect/')) {
        return
      }
      this.getBreadcrumb()
    }
  },
  created() {
    this.getBreadcrumb()
  },
  methods: {
    getBreadcrumb() {
      // only show routes with meta.title
      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
      const first = matched[0]
      if (!this.isDashboard(first)) {
        matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
      }
      this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
    },
    isDashboard(route) {
      const name = route && route.name
      if (!name) {
        return false
      }
      return name.trim() === 'Index'
    },
    handleLink(item) {
      const { redirect, path } = item
      if (redirect) {
        this.$router.push(redirect)
        return
      }
      this.$router.push(path)
    }
  }
}
</script>
<style lang="scss" scoped>
.app-breadcrumb.el-breadcrumb {
  display: inline-block;
  font-size: 14px;
  line-height: 50px;
  margin-left: 8px;
  .no-redirect {
    color: #97a8be;
    cursor: text;
  }
}
</style>
src/components/RuoYi/Crontab/day.vue
src/components/RuoYi/Crontab/hour.vue
src/components/RuoYi/Crontab/index.vue
src/components/RuoYi/Crontab/min.vue
src/components/RuoYi/Crontab/month.vue
src/components/RuoYi/Crontab/result.vue
src/components/RuoYi/Crontab/second.vue
src/components/RuoYi/Crontab/week.vue
src/components/RuoYi/Crontab/year.vue
src/components/RuoYi/DictData/index.js
src/components/RuoYi/DictTag/index.vue
src/components/RuoYi/Editor/index.vue
src/components/RuoYi/FileUpload/index.vue
src/components/RuoYi/Hamburger/index.vue
New file
@@ -0,0 +1,44 @@
<template>
  <div style="padding: 0 15px;" @click="toggleClick">
    <svg
      :class="{'is-active':isActive}"
      class="hamburger"
      viewBox="0 0 1024 1024"
      xmlns="http://www.w3.org/2000/svg"
      width="64"
      height="64"
    >
      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
    </svg>
  </div>
</template>
<script>
export default {
  name: 'Hamburger',
  props: {
    isActive: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    toggleClick() {
      this.$emit('toggleClick')
    }
  }
}
</script>
<style scoped>
.hamburger {
  display: inline-block;
  vertical-align: middle;
  width: 20px;
  height: 20px;
}
.hamburger.is-active {
  transform: rotate(180deg);
}
</style>
src/components/RuoYi/HeaderSearch/index.vue
src/components/RuoYi/IconSelect/index.vue
src/components/RuoYi/IconSelect/requireIcons.js
File was renamed from src/components/IconSelect/requireIcons.js
@@ -1,5 +1,5 @@
const req = require.context('../../assets/icons/svg', false, /\.svg$/)
const req = require.context('../../../assets/icons/svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys()
const re = /\.\/(.*)\.svg/
src/components/RuoYi/ImagePreview/index.vue
src/components/RuoYi/ImageUpload/index.vue
src/components/RuoYi/Pagination/index.vue
src/components/RuoYi/PanThumb/index.vue
New file
@@ -0,0 +1,142 @@
<template>
  <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
    <div class="pan-info">
      <div class="pan-info-roles-container">
        <slot />
      </div>
    </div>
    <!-- eslint-disable-next-line -->
    <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
  </div>
</template>
<script>
export default {
  name: 'PanThumb',
  props: {
    image: {
      type: String,
      required: true
    },
    zIndex: {
      type: Number,
      default: 1
    },
    width: {
      type: String,
      default: '150px'
    },
    height: {
      type: String,
      default: '150px'
    }
  }
}
</script>
<style scoped>
.pan-item {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  display: inline-block;
  position: relative;
  cursor: default;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}
.pan-info-roles-container {
  padding: 20px;
  text-align: center;
}
.pan-thumb {
  width: 100%;
  height: 100%;
  background-position: center center;
  background-size: cover;
  border-radius: 50%;
  overflow: hidden;
  position: absolute;
  transform-origin: 95% 40%;
  transition: all 0.3s ease-in-out;
}
/* .pan-thumb:after {
  content: '';
  width: 8px;
  height: 8px;
  position: absolute;
  border-radius: 50%;
  top: 40%;
  left: 95%;
  margin: -4px 0 0 -4px;
  background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
  box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
} */
.pan-info {
  position: absolute;
  width: inherit;
  height: inherit;
  border-radius: 50%;
  overflow: hidden;
  box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
}
.pan-info h3 {
  color: #fff;
  text-transform: uppercase;
  position: relative;
  letter-spacing: 2px;
  font-size: 18px;
  margin: 0 60px;
  padding: 22px 0 0 0;
  height: 85px;
  font-family: 'Open Sans', Arial, sans-serif;
  text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
}
.pan-info p {
  color: #fff;
  padding: 10px 5px;
  font-style: italic;
  margin: 0 30px;
  font-size: 12px;
  border-top: 1px solid rgba(255, 255, 255, 0.5);
}
.pan-info p a {
  display: block;
  color: #333;
  width: 80px;
  height: 80px;
  background: rgba(255, 255, 255, 0.3);
  border-radius: 50%;
  color: #fff;
  font-style: normal;
  font-weight: 700;
  text-transform: uppercase;
  font-size: 9px;
  letter-spacing: 1px;
  padding-top: 24px;
  margin: 7px auto 0;
  font-family: 'Open Sans', Arial, sans-serif;
  opacity: 0;
  transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s;
  transform: translateX(60px) rotate(90deg);
}
.pan-info p a:hover {
  background: rgba(255, 255, 255, 0.5);
}
.pan-item:hover .pan-thumb {
  transform: rotate(-110deg);
}
.pan-item:hover .pan-info p a {
  opacity: 1;
  transform: translateX(0px) rotate(0deg);
}
</style>
src/components/RuoYi/ParentView/index.vue
src/components/RuoYi/RightPanel/index.vue
src/components/RuoYi/RightToolbar/index.vue
src/components/RuoYi/Screenfull/index.vue
New file
@@ -0,0 +1,57 @@
<template>
  <div>
    <svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" />
  </div>
</template>
<script>
import screenfull from 'screenfull'
export default {
  name: 'Screenfull',
  data() {
    return {
      isFullscreen: false
    }
  },
  mounted() {
    this.init()
  },
  beforeDestroy() {
    this.destroy()
  },
  methods: {
    click() {
      if (!screenfull.isEnabled) {
        this.$message({ message: '你的浏览器不支持全屏', type: 'warning' })
        return false
      }
      screenfull.toggle()
    },
    change() {
      this.isFullscreen = screenfull.isFullscreen
    },
    init() {
      if (screenfull.isEnabled) {
        screenfull.on('change', this.change)
      }
    },
    destroy() {
      if (screenfull.isEnabled) {
        screenfull.off('change', this.change)
      }
    }
  }
}
</script>
<style scoped>
.screenfull-svg {
  display: inline-block;
  cursor: pointer;
  fill: #5a5e66;;
  width: 20px;
  height: 20px;
  vertical-align: 10px;
}
</style>
src/components/RuoYi/SizeSelect/index.vue
src/components/RuoYi/SvgIcon/index.vue
New file
@@ -0,0 +1,61 @@
<template>
  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName" />
  </svg>
</template>
<script>
import { isExternal } from '@/utils/validate'
export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    isExternal() {
      return isExternal(this.iconClass)
    },
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
      }
    }
  }
}
</script>
<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
.svg-external-icon {
  background-color: currentColor;
  mask-size: cover!important;
  display: inline-block;
}
</style>
src/components/RuoYi/ThemePicker/index.vue
src/components/RuoYi/TopNav/index.vue
src/components/RuoYi/iFrame/index.vue
src/components/Screenfull/index.vue
@@ -22,8 +22,11 @@
  },
  methods: {
    click() {
      if (!screenfull.isEnabled) {
        this.$message({ message: '你的浏览器不支持全屏', type: 'warning' })
      if (!screenfull.enabled) {
        this.$message({
          message: 'you browser can not work',
          type: 'warning'
        })
        return false
      }
      screenfull.toggle()
@@ -32,12 +35,12 @@
      this.isFullscreen = screenfull.isFullscreen
    },
    init() {
      if (screenfull.isEnabled) {
      if (screenfull.enabled) {
        screenfull.on('change', this.change)
      }
    },
    destroy() {
      if (screenfull.isEnabled) {
      if (screenfull.enabled) {
        screenfull.off('change', this.change)
      }
    }
src/components/SvgIcon/index.vue
@@ -1,13 +1,10 @@
<template>
  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
  <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName" />
  </svg>
</template>
<script>
import { isExternal } from '@/utils/validate'
export default {
  name: 'SvgIcon',
  props: {
@@ -21,9 +18,6 @@
    }
  },
  computed: {
    isExternal() {
      return isExternal(this.iconClass)
    },
    iconName() {
      return `#icon-${this.iconClass}`
    },
@@ -32,12 +26,6 @@
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
      }
    }
  }
@@ -51,11 +39,5 @@
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
.svg-external-icon {
  background-color: currentColor;
  mask-size: cover!important;
  display: inline-block;
}
</style>
src/components/TextHoverEffect/Mallki.vue
New file
@@ -0,0 +1,113 @@
<template>
  <a :class="className" class="link--mallki" href="#">
    {{ text }}
    <span :data-letters="text" />
    <span :data-letters="text" />
  </a>
</template>
<script>
export default {
  props: {
    className: {
      type: String,
      default: ''
    },
    text: {
      type: String,
      default: 'vue-element-admin'
    }
  }
}
</script>
<style>
/* Mallki */
.link--mallki {
  font-weight: 800;
  color: #4dd9d5;
  font-family: 'Dosis', sans-serif;
  -webkit-transition: color 0.5s 0.25s;
  transition: color 0.5s 0.25s;
  overflow: hidden;
  position: relative;
  display: inline-block;
  line-height: 1;
  outline: none;
  text-decoration: none;
}
.link--mallki:hover {
  -webkit-transition: none;
  transition: none;
  color: transparent;
}
.link--mallki::before {
  content: '';
  width: 100%;
  height: 6px;
  margin: -3px 0 0 0;
  background: #3888fa;
  position: absolute;
  left: 0;
  top: 50%;
  -webkit-transform: translate3d(-100%, 0, 0);
  transform: translate3d(-100%, 0, 0);
  -webkit-transition: -webkit-transform 0.4s;
  transition: transform 0.4s;
  -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
  transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
}
.link--mallki:hover::before {
  -webkit-transform: translate3d(100%, 0, 0);
  transform: translate3d(100%, 0, 0);
}
.link--mallki span {
  position: absolute;
  height: 50%;
  width: 100%;
  left: 0;
  top: 0;
  overflow: hidden;
}
.link--mallki span::before {
  content: attr(data-letters);
  color: red;
  position: absolute;
  left: 0;
  width: 100%;
  color: #3888fa;
  -webkit-transition: -webkit-transform 0.5s;
  transition: transform 0.5s;
}
.link--mallki span:nth-child(2) {
  top: 50%;
}
.link--mallki span:first-child::before {
  top: 0;
  -webkit-transform: translate3d(0, 100%, 0);
  transform: translate3d(0, 100%, 0);
}
.link--mallki span:nth-child(2)::before {
  bottom: 0;
  -webkit-transform: translate3d(0, -100%, 0);
  transform: translate3d(0, -100%, 0);
}
.link--mallki:hover span::before {
  -webkit-transition-delay: 0.3s;
  transition-delay: 0.3s;
  -webkit-transform: translate3d(0, 0, 0);
  transform: translate3d(0, 0, 0);
  -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
  transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
}
</style>
src/components/UserInfo/index.vue
New file
@@ -0,0 +1,78 @@
<template>
  <router-link key="expand" class="user-link" to="/userInfo">
    <img v-if="logo" :src="logo" class="avatar" alt="">
    <div class="user-name">{{ name }}</div>
    <el-divider direction="vertical" />
    <div>
      <div v-if="deptName" class="dept-name">{{ deptName }}</div>
      <div v-if="titleName" class="title-name">{{ titleName }}</div>
    </div>
  </router-link>
</template>
<script>
import { getFtpUrl } from '@/utils/base'
import storage from 'store'
export default {
  name: 'UserInfo',
  data() {
    return {
      name: '欢迎您:admin',
      deptName: storage.get('user').deptName || '',
      logo: '',
      titleName: storage.get('user').titleName || ''
    }
  },
  created() {
    this.name = this.$store.getters.name
    if (this.$store.getters.info.headUrl) {
      this.logo = this.getUrl(JSON.parse(this.$store.getters.info.headUrl)[0].path)
    } else {
      this.logo = 'https://tse1-mm.cn.bing.net/th/id/R-C.6e0766f48cac2b57efcfdf15bbb4124f?rik=XWu%2bR657LNpTRg&riu=http%3a%2f%2fwww.jcrb.com%2fxmtpd%2fmengman%2f201707%2fW020170712672258195967.jpg&ehk=FceMdlWHihzZotopRc8GtPnS6wuFZfWw%2bjA5BGB3qlA%3d&risl=&pid=ImgRaw&r=0'
    }
  },
  methods: {
    getUrl(path) {
      if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
        return path
      } else {
        return getFtpUrl() + path
      }
    }
  }
}
</script>
<style scoped>
.user-link {
  display: flex;
  align-items: center;
  height: 72px;
  margin-right: 10px;
  font-size: 0;
}
.avatar {
  width: 45px;
  height: 45px;
  margin-right: 15px;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
}
.user-name {
  color: #333;
  font-weight: 600;
  font-size: 18px;
  font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
}
.dept-name{
  font-size: 16px;
  color: #333;
}
.title-name{
  font-size: 16px;
  color: #E04E5F;
}
</style>
src/layout/components/Navbar.vue
@@ -36,12 +36,12 @@
<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch'
import Breadcrumb from '@/components/RuoYi/Breadcrumb'
import TopNav from '@/components/RuoYi/TopNav'
import Hamburger from '@/components/RuoYi/Hamburger'
import Screenfull from '@/components/RuoYi/Screenfull'
import SizeSelect from '@/components/RuoYi/SizeSelect'
import Search from '@/components/RuoYi/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
src/layout/components/Settings/index.vue
@@ -38,7 +38,7 @@
        <el-divider/>
        <h3 class="drawer-title">系统布局配置</h3>
        <div class="drawer-item">
          <span>开启 TopNav</span>
          <el-switch v-model="topNav" class="drawer-switch" />
@@ -74,7 +74,7 @@
</template>
<script>
import ThemePicker from '@/components/ThemePicker'
import ThemePicker from '@/components/RuoYi/ThemePicker'
export default {
  components: { ThemePicker },
src/layout/index.vue
@@ -16,7 +16,7 @@
</template>
<script>
import RightPanel from '@/components/RightPanel'
import RightPanel from '@/components/RuoYi/RightPanel'
import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components'
import ResizeMixin from './mixin/ResizeHandler'
import { mapState } from 'vuex'
src/main.js
@@ -20,23 +20,23 @@
import { getConfigKey } from "@/api/system/config";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
// 分页组件
import Pagination from "@/components/Pagination";
import Pagination from "@/components/RuoYi/Pagination";
// 自定义表格工具组件
import RightToolbar from "@/components/RightToolbar"
import RightToolbar from "@/components/RuoYi/RightToolbar"
// 富文本组件
import Editor from "@/components/Editor"
import Editor from "@/components/RuoYi/Editor"
// 文件上传组件
import FileUpload from "@/components/FileUpload"
import FileUpload from "@/components/RuoYi/FileUpload"
// 图片上传组件
import ImageUpload from "@/components/ImageUpload"
import ImageUpload from "@/components/RuoYi/ImageUpload"
// 图片预览组件
import ImagePreview from "@/components/ImagePreview"
import ImagePreview from "@/components/RuoYi/ImagePreview"
// 字典标签组件
import DictTag from '@/components/DictTag'
import DictTag from '@/components/RuoYi/DictTag'
// 头部标签组件
import VueMeta from 'vue-meta'
// 字典数据组件
import DictData from '@/components/DictData'
import DictData from '@/components/RuoYi/DictData'
// 全局方法挂载
Vue.prototype.getDicts = getDicts
src/plugins/ztree/css/zTreeStyle/img/diy/1_close.png
src/plugins/ztree/css/zTreeStyle/img/diy/1_open.png
src/plugins/ztree/css/zTreeStyle/img/diy/2.png
src/plugins/ztree/css/zTreeStyle/img/diy/3.png
src/plugins/ztree/css/zTreeStyle/img/diy/4.png
src/plugins/ztree/css/zTreeStyle/img/diy/5.png
src/plugins/ztree/css/zTreeStyle/img/diy/6.png
src/plugins/ztree/css/zTreeStyle/img/diy/7.png
src/plugins/ztree/css/zTreeStyle/img/diy/8.png
src/plugins/ztree/css/zTreeStyle/img/diy/9.png
src/plugins/ztree/css/zTreeStyle/img/line_conn.gif
src/plugins/ztree/css/zTreeStyle/img/loading.gif
src/plugins/ztree/css/zTreeStyle/img/zTreeStandard.gif
src/plugins/ztree/css/zTreeStyle/img/zTreeStandard.png
src/plugins/ztree/css/zTreeStyle/zTreeStyle.css
New file
@@ -0,0 +1,97 @@
/*-------------------------------------
zTree Style
version:    3.5.19
author:        Hunter.z
email:        hunter.z@263.net
website:    http://code.google.com/p/jquerytree/
-------------------------------------*/
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
.ztree {margin:0; padding:5px; color:#333}
.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
.ztree li ul{ margin:0; padding:0 0 0 18px}
.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}
.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;
    text-decoration:none; vertical-align:top; display: inline-block}
.ztree li a:hover {text-decoration:underline}
.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;
    opacity:0.8; filter:alpha(opacity=80)}
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {}
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
    font-size:12px; border:1px #7EC4CC solid; *border:0px}
.ztree li span {line-height:16px; margin-right:2px}
.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;
    border:0 none; cursor: pointer;outline:none;
    background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
    background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}
.ztree li span.button.switch {width:18px; height:18px}
.ztree li span.button.root_open{background-position:-92px -54px}
.ztree li span.button.root_close{background-position:-74px -54px}
.ztree li span.button.roots_open{background-position:-92px 0}
.ztree li span.button.roots_close{background-position:-74px 0}
.ztree li span.button.center_open{background-position:-92px -18px}
.ztree li span.button.center_close{background-position:-74px -18px}
.ztree li span.button.bottom_open{background-position:-92px -36px}
.ztree li span.button.bottom_close{background-position:-74px -36px}
.ztree li span.button.noline_open{background-position:-92px -72px}
.ztree li span.button.noline_close{background-position:-74px -72px}
.ztree li span.button.root_docu{ background:none;}
.ztree li span.button.roots_docu{background-position:-56px 0}
.ztree li span.button.center_docu{background-position:-56px -18px}
.ztree li span.button.bottom_docu{background-position:-56px -36px}
.ztree li span.button.noline_docu{ background:none;}
.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
    background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
    background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
/* level style*/
/*.ztree li span.button.level0 {
    display:none;
}
.ztree li ul.level0 {
    padding:0;
    background:none;
}*/
src/plugins/ztree/js/jquery-1.4.4.min.js
New file
@@ -0,0 +1,167 @@
/*!
 * jQuery JavaScript Library v1.4.4
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Thu Nov 11 19:04:53 2010 -0500
 */
(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
src/plugins/ztree/js/jquery.ztree.all.js
New file
@@ -0,0 +1,3841 @@
/*
 * JQuery zTree core v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  var settings = {}, roots = {}, caches = {},
    //default consts of core
    _consts = {
      className: {
        BUTTON: "button",
        LEVEL: "level",
        ICO_LOADING: "ico_loading",
        SWITCH: "switch",
        NAME: 'node_name'
      },
      event: {
        NODECREATED: "ztree_nodeCreated",
        CLICK: "ztree_click",
        EXPAND: "ztree_expand",
        COLLAPSE: "ztree_collapse",
        ASYNC_SUCCESS: "ztree_async_success",
        ASYNC_ERROR: "ztree_async_error",
        REMOVE: "ztree_remove",
        SELECTED: "ztree_selected",
        UNSELECTED: "ztree_unselected"
      },
      id: {
        A: "_a",
        ICON: "_ico",
        SPAN: "_span",
        SWITCH: "_switch",
        UL: "_ul"
      },
      line: {
        ROOT: "root",
        ROOTS: "roots",
        CENTER: "center",
        BOTTOM: "bottom",
        NOLINE: "noline",
        LINE: "line"
      },
      folder: {
        OPEN: "open",
        CLOSE: "close",
        DOCU: "docu"
      },
      node: {
        CURSELECTED: "curSelectedNode"
      }
    },
    //default setting of core
    _setting = {
      treeId: "",
      treeObj: null,
      view: {
        addDiyDom: null,
        autoCancelSelected: true,
        dblClickExpand: true,
        expandSpeed: "fast",
        fontCss: {},
        nameIsHTML: false,
        selectedMulti: true,
        showIcon: true,
        showLine: true,
        showTitle: true,
        txtSelectedEnable: false
      },
      data: {
        key: {
          isParent: "isParent",
          children: "children",
          name: "name",
          title: "",
          url: "url",
          icon: "icon"
        },
        simpleData: {
          enable: false,
          idKey: "id",
          pIdKey: "pId",
          rootPId: null
        },
        keep: {
          parent: false,
          leaf: false
        }
      },
      async: {
        enable: false,
        contentType: "application/x-www-form-urlencoded",
        type: "post",
        dataType: "text",
        headers: {},
        xhrFields: {},
        url: "",
        autoParam: [],
        otherParam: [],
        dataFilter: null
      },
      callback: {
        beforeAsync: null,
        beforeClick: null,
        beforeDblClick: null,
        beforeRightClick: null,
        beforeMouseDown: null,
        beforeMouseUp: null,
        beforeExpand: null,
        beforeCollapse: null,
        beforeRemove: null,
        onAsyncError: null,
        onAsyncSuccess: null,
        onNodeCreated: null,
        onClick: null,
        onDblClick: null,
        onRightClick: null,
        onMouseDown: null,
        onMouseUp: null,
        onExpand: null,
        onCollapse: null,
        onRemove: null
      }
    },
    //default root of core
    //zTree use root to save full data
    _initRoot = function (setting) {
      var r = data.getRoot(setting);
      if (!r) {
        r = {};
        data.setRoot(setting, r);
      }
      data.nodeChildren(setting, r, []);
      r.expandTriggerFlag = false;
      r.curSelectedList = [];
      r.noSelection = true;
      r.createdNodes = [];
      r.zId = 0;
      r._ver = (new Date()).getTime();
    },
    //default cache of core
    _initCache = function (setting) {
      var c = data.getCache(setting);
      if (!c) {
        c = {};
        data.setCache(setting, c);
      }
      c.nodes = [];
      c.doms = [];
    },
    //default bindEvent of core
    _bindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.bind(c.NODECREATED, function (event, treeId, node) {
        tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);
      });
      o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {
        tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);
      });
      o.bind(c.EXPAND, function (event, treeId, node) {
        tools.apply(setting.callback.onExpand, [event, treeId, node]);
      });
      o.bind(c.COLLAPSE, function (event, treeId, node) {
        tools.apply(setting.callback.onCollapse, [event, treeId, node]);
      });
      o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {
        tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);
      });
      o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {
        tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);
      });
      o.bind(c.REMOVE, function (event, treeId, treeNode) {
        tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);
      });
      o.bind(c.SELECTED, function (event, treeId, node) {
        tools.apply(setting.callback.onSelected, [treeId, node]);
      });
      o.bind(c.UNSELECTED, function (event, treeId, node) {
        tools.apply(setting.callback.onUnSelected, [treeId, node]);
      });
    },
    _unbindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.unbind(c.NODECREATED)
        .unbind(c.CLICK)
        .unbind(c.EXPAND)
        .unbind(c.COLLAPSE)
        .unbind(c.ASYNC_SUCCESS)
        .unbind(c.ASYNC_ERROR)
        .unbind(c.REMOVE)
        .unbind(c.SELECTED)
        .unbind(c.UNSELECTED);
    },
    //default event proxy of core
    _eventProxy = function (event) {
      var target = event.target,
        setting = data.getSetting(event.data.treeId),
        tId = "", node = null,
        nodeEventType = "", treeEventType = "",
        nodeEventCallback = null, treeEventCallback = null,
        tmp = null;
      if (tools.eqs(event.type, "mousedown")) {
        treeEventType = "mousedown";
      } else if (tools.eqs(event.type, "mouseup")) {
        treeEventType = "mouseup";
      } else if (tools.eqs(event.type, "contextmenu")) {
        treeEventType = "contextmenu";
      } else if (tools.eqs(event.type, "click")) {
        if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.SWITCH) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "switchNode";
        } else {
          tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
          if (tmp) {
            tId = tools.getNodeMainDom(tmp).id;
            nodeEventType = "clickNode";
          }
        }
      } else if (tools.eqs(event.type, "dblclick")) {
        treeEventType = "dblclick";
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
          nodeEventType = "switchNode";
        }
      }
      if (treeEventType.length > 0 && tId.length == 0) {
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
        }
      }
      // event to node
      if (tId.length > 0) {
        node = data.getNodeCache(setting, tId);
        switch (nodeEventType) {
          case "switchNode" :
            var isParent = data.nodeIsParent(setting, node);
            if (!isParent) {
              nodeEventType = "";
            } else if (tools.eqs(event.type, "click")
              || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {
              nodeEventCallback = handler.onSwitchNode;
            } else {
              nodeEventType = "";
            }
            break;
          case "clickNode" :
            nodeEventCallback = handler.onClickNode;
            break;
        }
      }
      // event to zTree
      switch (treeEventType) {
        case "mousedown" :
          treeEventCallback = handler.onZTreeMousedown;
          break;
        case "mouseup" :
          treeEventCallback = handler.onZTreeMouseup;
          break;
        case "dblclick" :
          treeEventCallback = handler.onZTreeDblclick;
          break;
        case "contextmenu" :
          treeEventCallback = handler.onZTreeContextmenu;
          break;
      }
      var proxyResult = {
        stop: false,
        node: node,
        nodeEventType: nodeEventType,
        nodeEventCallback: nodeEventCallback,
        treeEventType: treeEventType,
        treeEventCallback: treeEventCallback
      };
      return proxyResult
    },
    //default init node of core
    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      if (!n) return;
      var r = data.getRoot(setting),
        children = data.nodeChildren(setting, n);
      n.level = level;
      n.tId = setting.treeId + "_" + (++r.zId);
      n.parentTId = parentNode ? parentNode.tId : null;
      n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open;
      var isParent = data.nodeIsParent(setting, n);
      if (tools.isArray(children)) {
        data.nodeIsParent(setting, n, true);
        n.zAsync = true;
      } else {
        isParent = data.nodeIsParent(setting, n, isParent);
        n.open = (isParent && !setting.async.enable) ? n.open : false;
        n.zAsync = !isParent;
      }
      n.isFirstNode = isFirstNode;
      n.isLastNode = isLastNode;
      n.getParentNode = function () {
        return data.getNodeCache(setting, n.parentTId);
      };
      n.getPreNode = function () {
        return data.getPreNode(setting, n);
      };
      n.getNextNode = function () {
        return data.getNextNode(setting, n);
      };
      n.getIndex = function () {
        return data.getNodeIndex(setting, n);
      };
      n.getPath = function () {
        return data.getNodePath(setting, n);
      };
      n.isAjaxing = false;
      data.fixPIdKeyValue(setting, n);
    },
    _init = {
      bind: [_bindEvent],
      unbind: [_unbindEvent],
      caches: [_initCache],
      nodes: [_initNode],
      proxys: [_eventProxy],
      roots: [_initRoot],
      beforeA: [],
      afterA: [],
      innerBeforeA: [],
      innerAfterA: [],
      zTreeTools: []
    },
    //method of operate data
    data = {
      addNodeCache: function (setting, node) {
        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;
      },
      getNodeCacheId: function (tId) {
        return tId.substring(tId.lastIndexOf("_") + 1);
      },
      addAfterA: function (afterA) {
        _init.afterA.push(afterA);
      },
      addBeforeA: function (beforeA) {
        _init.beforeA.push(beforeA);
      },
      addInnerAfterA: function (innerAfterA) {
        _init.innerAfterA.push(innerAfterA);
      },
      addInnerBeforeA: function (innerBeforeA) {
        _init.innerBeforeA.push(innerBeforeA);
      },
      addInitBind: function (bindEvent) {
        _init.bind.push(bindEvent);
      },
      addInitUnBind: function (unbindEvent) {
        _init.unbind.push(unbindEvent);
      },
      addInitCache: function (initCache) {
        _init.caches.push(initCache);
      },
      addInitNode: function (initNode) {
        _init.nodes.push(initNode);
      },
      addInitProxy: function (initProxy, isFirst) {
        if (!!isFirst) {
          _init.proxys.splice(0, 0, initProxy);
        } else {
          _init.proxys.push(initProxy);
        }
      },
      addInitRoot: function (initRoot) {
        _init.roots.push(initRoot);
      },
      addNodesData: function (setting, parentNode, index, nodes) {
        var children = data.nodeChildren(setting, parentNode), params;
        if (!children) {
          children = data.nodeChildren(setting, parentNode, []);
          index = -1;
        } else if (index >= children.length) {
          index = -1;
        }
        if (children.length > 0 && index === 0) {
          children[0].isFirstNode = false;
          view.setNodeLineIcos(setting, children[0]);
        } else if (children.length > 0 && index < 0) {
          children[children.length - 1].isLastNode = false;
          view.setNodeLineIcos(setting, children[children.length - 1]);
        }
        data.nodeIsParent(setting, parentNode, true);
        if (index < 0) {
          data.nodeChildren(setting, parentNode, children.concat(nodes));
        } else {
          params = [index, 0].concat(nodes);
          children.splice.apply(children, params);
        }
      },
      addSelectedNode: function (setting, node) {
        var root = data.getRoot(setting);
        if (!data.isSelectedNode(setting, node)) {
          root.curSelectedList.push(node);
        }
      },
      addCreatedNode: function (setting, node) {
        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
          var root = data.getRoot(setting);
          root.createdNodes.push(node);
        }
      },
      addZTreeTools: function (zTreeTools) {
        _init.zTreeTools.push(zTreeTools);
      },
      exSetting: function (s) {
        $.extend(true, _setting, s);
      },
      fixPIdKeyValue: function (setting, node) {
        if (setting.data.simpleData.enable) {
          node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;
        }
      },
      getAfterA: function (setting, node, array) {
        for (var i = 0, j = _init.afterA.length; i < j; i++) {
          _init.afterA[i].apply(this, arguments);
        }
      },
      getBeforeA: function (setting, node, array) {
        for (var i = 0, j = _init.beforeA.length; i < j; i++) {
          _init.beforeA[i].apply(this, arguments);
        }
      },
      getInnerAfterA: function (setting, node, array) {
        for (var i = 0, j = _init.innerAfterA.length; i < j; i++) {
          _init.innerAfterA[i].apply(this, arguments);
        }
      },
      getInnerBeforeA: function (setting, node, array) {
        for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) {
          _init.innerBeforeA[i].apply(this, arguments);
        }
      },
      getCache: function (setting) {
        return caches[setting.treeId];
      },
      getNodeIndex: function (setting, node) {
        if (!node) return null;
        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
          children = data.nodeChildren(setting, p);
        for (var i = 0, l = children.length - 1; i <= l; i++) {
          if (children[i] === node) {
            return i;
          }
        }
        return -1;
      },
      getNextNode: function (setting, node) {
        if (!node) return null;
        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
          children = data.nodeChildren(setting, p);
        for (var i = 0, l = children.length - 1; i <= l; i++) {
          if (children[i] === node) {
            return (i == l ? null : children[i + 1]);
          }
        }
        return null;
      },
      getNodeByParam: function (setting, nodes, key, value) {
        if (!nodes || !key) return null;
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (node[key] == value) {
            return nodes[i];
          }
          var children = data.nodeChildren(setting, node);
          var tmp = data.getNodeByParam(setting, children, key, value);
          if (tmp) return tmp;
        }
        return null;
      },
      getNodeCache: function (setting, tId) {
        if (!tId) return null;
        var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];
        return n ? n : null;
      },
      getNodePath: function (setting, node) {
        if (!node) return null;
        var path;
        if (node.parentTId) {
          path = node.getParentNode().getPath();
        } else {
          path = [];
        }
        if (path) {
          path.push(node);
        }
        return path;
      },
      getNodes: function (setting) {
        return data.nodeChildren(setting, data.getRoot(setting));
      },
      getNodesByParam: function (setting, nodes, key, value) {
        if (!nodes || !key) return [];
        var result = [];
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (node[key] == value) {
            result.push(node);
          }
          var children = data.nodeChildren(setting, node);
          result = result.concat(data.getNodesByParam(setting, children, key, value));
        }
        return result;
      },
      getNodesByParamFuzzy: function (setting, nodes, key, value) {
        if (!nodes || !key) return [];
        var result = [];
        value = value.toLowerCase();
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) {
            result.push(node);
          }
          var children = data.nodeChildren(setting, node);
          result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value));
        }
        return result;
      },
      getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) {
        if (!nodes) return (isSingle ? null : []);
        var result = isSingle ? null : [];
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (tools.apply(filter, [node, invokeParam], false)) {
            if (isSingle) {
              return node;
            }
            result.push(node);
          }
          var children = data.nodeChildren(setting, node);
          var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam);
          if (isSingle && !!tmpResult) {
            return tmpResult;
          }
          result = isSingle ? tmpResult : result.concat(tmpResult);
        }
        return result;
      },
      getPreNode: function (setting, node) {
        if (!node) return null;
        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
          children = data.nodeChildren(setting, p);
        for (var i = 0, l = children.length; i < l; i++) {
          if (children[i] === node) {
            return (i == 0 ? null : children[i - 1]);
          }
        }
        return null;
      },
      getRoot: function (setting) {
        return setting ? roots[setting.treeId] : null;
      },
      getRoots: function () {
        return roots;
      },
      getSetting: function (treeId) {
        return settings[treeId];
      },
      getSettings: function () {
        return settings;
      },
      getZTreeTools: function (treeId) {
        var r = this.getRoot(this.getSetting(treeId));
        return r ? r.treeTools : null;
      },
      initCache: function (setting) {
        for (var i = 0, j = _init.caches.length; i < j; i++) {
          _init.caches[i].apply(this, arguments);
        }
      },
      initNode: function (setting, level, node, parentNode, preNode, nextNode) {
        for (var i = 0, j = _init.nodes.length; i < j; i++) {
          _init.nodes[i].apply(this, arguments);
        }
      },
      initRoot: function (setting) {
        for (var i = 0, j = _init.roots.length; i < j; i++) {
          _init.roots[i].apply(this, arguments);
        }
      },
      isSelectedNode: function (setting, node) {
        var root = data.getRoot(setting);
        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
          if (node === root.curSelectedList[i]) return true;
        }
        return false;
      },
      nodeChildren: function (setting, node, newChildren) {
        if (!node) {
          return null;
        }
        var key = setting.data.key.children;
        if (typeof newChildren !== 'undefined') {
          node[key] = newChildren;
        }
        return node[key];
      },
      nodeIsParent: function (setting, node, newIsParent) {
        if (!node) {
          return false;
        }
        var key = setting.data.key.isParent;
        if (typeof newIsParent !== 'undefined') {
          if (typeof newIsParent === "string") {
            newIsParent = tools.eqs(newIsParent, "true");
          }
          newIsParent = !!newIsParent;
          node[key] = newIsParent;
        } else if (typeof node[key] == "string"){
          node[key] = tools.eqs(node[key], "true");
        } else {
          node[key] = !!node[key];
        }
        return node[key];
      },
      nodeName: function (setting, node, newName) {
        var key = setting.data.key.name;
        if (typeof newName !== 'undefined') {
          node[key] = newName;
        }
        return "" + node[key];
      },
      nodeTitle: function (setting, node) {
        var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
        return "" + node[t];
      },
      removeNodeCache: function (setting, node) {
        var children = data.nodeChildren(setting, node);
        if (children) {
          for (var i = 0, l = children.length; i < l; i++) {
            data.removeNodeCache(setting, children[i]);
          }
        }
        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;
      },
      removeSelectedNode: function (setting, node) {
        var root = data.getRoot(setting);
        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
          if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {
            root.curSelectedList.splice(i, 1);
            setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);
            i--;
            j--;
          }
        }
      },
      setCache: function (setting, cache) {
        caches[setting.treeId] = cache;
      },
      setRoot: function (setting, root) {
        roots[setting.treeId] = root;
      },
      setZTreeTools: function (setting, zTreeTools) {
        for (var i = 0, j = _init.zTreeTools.length; i < j; i++) {
          _init.zTreeTools[i].apply(this, arguments);
        }
      },
      transformToArrayFormat: function (setting, nodes) {
        if (!nodes) return [];
        var r = [];
        if (tools.isArray(nodes)) {
          for (var i = 0, l = nodes.length; i < l; i++) {
            var node = nodes[i];
            _do(node);
          }
        } else {
          _do(nodes);
        }
        return r;
        function _do(_node) {
          r.push(_node);
          var children = data.nodeChildren(setting, _node);
          if (children) {
            r = r.concat(data.transformToArrayFormat(setting, children));
          }
        }
      },
      transformTozTreeFormat: function (setting, sNodes) {
        var i, l,
          key = setting.data.simpleData.idKey,
          parentKey = setting.data.simpleData.pIdKey;
        if (!key || key == "" || !sNodes) return [];
        if (tools.isArray(sNodes)) {
          var r = [];
          var tmpMap = {};
          for (i = 0, l = sNodes.length; i < l; i++) {
            tmpMap[sNodes[i][key]] = sNodes[i];
          }
          for (i = 0, l = sNodes.length; i < l; i++) {
            var p = tmpMap[sNodes[i][parentKey]];
            if (p && sNodes[i][key] != sNodes[i][parentKey]) {
              var children = data.nodeChildren(setting, p);
              if (!children) {
                children = data.nodeChildren(setting, p, []);
              }
              children.push(sNodes[i]);
            } else {
              r.push(sNodes[i]);
            }
          }
          return r;
        } else {
          return [sNodes];
        }
      }
    },
    //method of event proxy
    event = {
      bindEvent: function (setting) {
        for (var i = 0, j = _init.bind.length; i < j; i++) {
          _init.bind[i].apply(this, arguments);
        }
      },
      unbindEvent: function (setting) {
        for (var i = 0, j = _init.unbind.length; i < j; i++) {
          _init.unbind[i].apply(this, arguments);
        }
      },
      bindTree: function (setting) {
        var eventParam = {
            treeId: setting.treeId
          },
          o = setting.treeObj;
        if (!setting.view.txtSelectedEnable) {
          // for can't select text
          o.bind('selectstart', handler.onSelectStart).css({
            "-moz-user-select": "-moz-none"
          });
        }
        o.bind('click', eventParam, event.proxy);
        o.bind('dblclick', eventParam, event.proxy);
        o.bind('mouseover', eventParam, event.proxy);
        o.bind('mouseout', eventParam, event.proxy);
        o.bind('mousedown', eventParam, event.proxy);
        o.bind('mouseup', eventParam, event.proxy);
        o.bind('contextmenu', eventParam, event.proxy);
      },
      unbindTree: function (setting) {
        var o = setting.treeObj;
        o.unbind('selectstart', handler.onSelectStart)
          .unbind('click', event.proxy)
          .unbind('dblclick', event.proxy)
          .unbind('mouseover', event.proxy)
          .unbind('mouseout', event.proxy)
          .unbind('mousedown', event.proxy)
          .unbind('mouseup', event.proxy)
          .unbind('contextmenu', event.proxy);
      },
      doProxy: function (e) {
        var results = [];
        for (var i = 0, j = _init.proxys.length; i < j; i++) {
          var proxyResult = _init.proxys[i].apply(this, arguments);
          results.push(proxyResult);
          if (proxyResult.stop) {
            break;
          }
        }
        return results;
      },
      proxy: function (e) {
        var setting = data.getSetting(e.data.treeId);
        if (!tools.uCanDo(setting, e)) return true;
        var results = event.doProxy(e),
          r = true, x = false;
        for (var i = 0, l = results.length; i < l; i++) {
          var proxyResult = results[i];
          if (proxyResult.nodeEventCallback) {
            x = true;
            r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
          }
          if (proxyResult.treeEventCallback) {
            x = true;
            r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
          }
        }
        return r;
      }
    },
    //method of event handler
    handler = {
      onSwitchNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (node.open) {
          if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;
          data.getRoot(setting).expandTriggerFlag = true;
          view.switchNode(setting, node);
        } else {
          if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;
          data.getRoot(setting).expandTriggerFlag = true;
          view.switchNode(setting, node);
        }
        return true;
      },
      onClickNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId),
          clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;
        if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;
        if (clickFlag === 0) {
          view.cancelPreSelectedNode(setting, node);
        } else {
          view.selectNode(setting, node, clickFlag === 2);
        }
        setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);
        return true;
      },
      onZTreeMousedown: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);
        }
        return true;
      },
      onZTreeMouseup: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);
        }
        return true;
      },
      onZTreeDblclick: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);
        }
        return true;
      },
      onZTreeContextmenu: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);
        }
        return (typeof setting.callback.onRightClick) != "function";
      },
      onSelectStart: function (e) {
        var n = e.originalEvent.srcElement.nodeName.toLowerCase();
        return (n === "input" || n === "textarea");
      }
    },
    //method of tools for zTree
    tools = {
      apply: function (fun, param, defaultValue) {
        if ((typeof fun) == "function") {
          return fun.apply(zt, param ? param : []);
        }
        return defaultValue;
      },
      canAsync: function (setting, node) {
        var children = data.nodeChildren(setting, node);
        var isParent = data.nodeIsParent(setting, node);
        return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0)));
      },
      clone: function (obj) {
        if (obj === null) return null;
        var o = tools.isArray(obj) ? [] : {};
        for (var i in obj) {
          o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]);
        }
        return o;
      },
      eqs: function (str1, str2) {
        return str1.toLowerCase() === str2.toLowerCase();
      },
      isArray: function (arr) {
        return Object.prototype.toString.apply(arr) === "[object Array]";
      },
      isElement: function (o) {
        return (
          typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
            o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string"
        );
      },
      $: function (node, exp, setting) {
        if (!!exp && typeof exp != "string") {
          setting = exp;
          exp = "";
        }
        if (typeof node == "string") {
          return $(node, setting ? setting.treeObj.get(0).ownerDocument : null);
        } else {
          return $("#" + node.tId + exp, setting ? setting.treeObj : null);
        }
      },
      getMDom: function (setting, curDom, targetExpr) {
        if (!curDom) return null;
        while (curDom && curDom.id !== setting.treeId) {
          for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) {
            if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {
              return curDom;
            }
          }
          curDom = curDom.parentNode;
        }
        return null;
      },
      getNodeMainDom: function (target) {
        return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0));
      },
      isChildOrSelf: function (dom, parentId) {
        return ($(dom).closest("#" + parentId).length > 0);
      },
      uCanDo: function (setting, e) {
        return true;
      }
    },
    //method of operate ztree dom
    view = {
      addNodes: function (setting, parentNode, index, newNodes, isSilent) {
        var isParent = data.nodeIsParent(setting, parentNode);
        if (setting.data.keep.leaf && parentNode && !isParent) {
          return;
        }
        if (!tools.isArray(newNodes)) {
          newNodes = [newNodes];
        }
        if (setting.data.simpleData.enable) {
          newNodes = data.transformTozTreeFormat(setting, newNodes);
        }
        if (parentNode) {
          var target_switchObj = $$(parentNode, consts.id.SWITCH, setting),
            target_icoObj = $$(parentNode, consts.id.ICON, setting),
            target_ulObj = $$(parentNode, consts.id.UL, setting);
          if (!parentNode.open) {
            view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);
            view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);
            parentNode.open = false;
            target_ulObj.css({
              "display": "none"
            });
          }
          data.addNodesData(setting, parentNode, index, newNodes);
          view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);
          if (!isSilent) {
            view.expandCollapseParentNode(setting, parentNode, true);
          }
        } else {
          data.addNodesData(setting, data.getRoot(setting), index, newNodes);
          view.createNodes(setting, 0, newNodes, null, index);
        }
      },
      appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
        if (!nodes) return [];
        var html = [];
        var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
          tmpPChild = data.nodeChildren(setting, tmpPNode),
          isFirstNode, isLastNode;
        if (!tmpPChild || index >= tmpPChild.length - nodes.length) {
          index = -1;
        }
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (initFlag) {
            isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0));
            isLastNode = (index < 0 && i == (nodes.length - 1));
            data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);
            data.addNodeCache(setting, node);
          }
          var isParent = data.nodeIsParent(setting, node);
          var childHtml = [];
          var children = data.nodeChildren(setting, node);
          if (children && children.length > 0) {
            //make child html first, because checkType
            childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open);
          }
          if (openFlag) {
            view.makeDOMNodeMainBefore(html, setting, node);
            view.makeDOMNodeLine(html, setting, node);
            data.getBeforeA(setting, node, html);
            view.makeDOMNodeNameBefore(html, setting, node);
            data.getInnerBeforeA(setting, node, html);
            view.makeDOMNodeIcon(html, setting, node);
            data.getInnerAfterA(setting, node, html);
            view.makeDOMNodeNameAfter(html, setting, node);
            data.getAfterA(setting, node, html);
            if (isParent && node.open) {
              view.makeUlHtml(setting, node, html, childHtml.join(''));
            }
            view.makeDOMNodeMainAfter(html, setting, node);
            data.addCreatedNode(setting, node);
          }
        }
        return html;
      },
      appendParentULDom: function (setting, node) {
        var html = [],
          nObj = $$(node, setting);
        if (!nObj.get(0) && !!node.parentTId) {
          view.appendParentULDom(setting, node.getParentNode());
          nObj = $$(node, setting);
        }
        var ulObj = $$(node, consts.id.UL, setting);
        if (ulObj.get(0)) {
          ulObj.remove();
        }
        var children = data.nodeChildren(setting, node),
          childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true);
        view.makeUlHtml(setting, node, html, childHtml.join(''));
        nObj.append(html.join(''));
      },
      asyncNode: function (setting, node, isSilent, callback) {
        var i, l;
        var isParent = data.nodeIsParent(setting, node);
        if (node && !isParent) {
          tools.apply(callback);
          return false;
        } else if (node && node.isAjaxing) {
          return false;
        } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {
          tools.apply(callback);
          return false;
        }
        if (node) {
          node.isAjaxing = true;
          var icoObj = $$(node, consts.id.ICON, setting);
          icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING});
        }
        var tmpParam = {};
        var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam);
        for (i = 0, l = autoParam.length; node && i < l; i++) {
          var pKey = autoParam[i].split("="), spKey = pKey;
          if (pKey.length > 1) {
            spKey = pKey[1];
            pKey = pKey[0];
          }
          tmpParam[spKey] = node[pKey];
        }
        var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam);
        if (tools.isArray(otherParam)) {
          for (i = 0, l = otherParam.length; i < l; i += 2) {
            tmpParam[otherParam[i]] = otherParam[i + 1];
          }
        } else {
          for (var p in otherParam) {
            tmpParam[p] = otherParam[p];
          }
        }
        var _tmpV = data.getRoot(setting)._ver;
        $.ajax({
          contentType: setting.async.contentType,
          cache: false,
          type: setting.async.type,
          url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),
          data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,
          dataType: setting.async.dataType,
          headers: setting.async.headers,
          xhrFields: setting.async.xhrFields,
          success: function (msg) {
            if (_tmpV != data.getRoot(setting)._ver) {
              return;
            }
            var newNodes = [];
            try {
              if (!msg || msg.length == 0) {
                newNodes = [];
              } else if (typeof msg == "string") {
                newNodes = eval("(" + msg + ")");
              } else {
                newNodes = msg;
              }
            } catch (err) {
              newNodes = msg;
            }
            if (node) {
              node.isAjaxing = null;
              node.zAsync = true;
            }
            view.setNodeLineIcos(setting, node);
            if (newNodes && newNodes !== "") {
              newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);
              view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);
            } else {
              view.addNodes(setting, node, -1, [], !!isSilent);
            }
            setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);
            tools.apply(callback);
          },
          error: function (XMLHttpRequest, textStatus, errorThrown) {
            if (_tmpV != data.getRoot(setting)._ver) {
              return;
            }
            if (node) node.isAjaxing = null;
            view.setNodeLineIcos(setting, node);
            setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);
          }
        });
        return true;
      },
      cancelPreSelectedNode: function (setting, node, excludeNode) {
        var list = data.getRoot(setting).curSelectedList,
          i, n;
        for (i = list.length - 1; i >= 0; i--) {
          n = list[i];
          if (node === n || (!node && (!excludeNode || excludeNode !== n))) {
            $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);
            if (node) {
              data.removeSelectedNode(setting, node);
              break;
            } else {
              list.splice(i, 1);
              setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);
            }
          }
        }
      },
      createNodeCallback: function (setting) {
        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
          var root = data.getRoot(setting);
          while (root.createdNodes.length > 0) {
            var node = root.createdNodes.shift();
            tools.apply(setting.view.addDiyDom, [setting.treeId, node]);
            if (!!setting.callback.onNodeCreated) {
              setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);
            }
          }
        }
      },
      createNodes: function (setting, level, nodes, parentNode, index) {
        if (!nodes || nodes.length == 0) return;
        var root = data.getRoot(setting),
          openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0);
        root.createdNodes = [];
        var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),
          parentObj, nextObj;
        if (!parentNode) {
          parentObj = setting.treeObj;
          //setting.treeObj.append(zTreeHtml.join(''));
        } else {
          var ulObj = $$(parentNode, consts.id.UL, setting);
          if (ulObj.get(0)) {
            parentObj = ulObj;
            //ulObj.append(zTreeHtml.join(''));
          }
        }
        if (parentObj) {
          if (index >= 0) {
            nextObj = parentObj.children()[index];
          }
          if (index >= 0 && nextObj) {
            $(nextObj).before(zTreeHtml.join(''));
          } else {
            parentObj.append(zTreeHtml.join(''));
          }
        }
        view.createNodeCallback(setting);
      },
      destroy: function (setting) {
        if (!setting) return;
        data.initCache(setting);
        data.initRoot(setting);
        event.unbindTree(setting);
        event.unbindEvent(setting);
        setting.treeObj.empty();
        delete settings[setting.treeId];
      },
      expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) {
        var root = data.getRoot(setting);
        var tmpCb, _callback;
        if (!node) {
          tools.apply(callback, []);
          return;
        }
        var children = data.nodeChildren(setting, node);
        var isParent = data.nodeIsParent(setting, node);
        if (root.expandTriggerFlag) {
          _callback = callback;
          tmpCb = function () {
            if (_callback) _callback();
            if (node.open) {
              setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);
            } else {
              setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);
            }
          };
          callback = tmpCb;
          root.expandTriggerFlag = false;
        }
        if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) {
          view.appendParentULDom(setting, node);
          view.createNodeCallback(setting);
        }
        if (node.open == expandFlag) {
          tools.apply(callback, []);
          return;
        }
        var ulObj = $$(node, consts.id.UL, setting),
          switchObj = $$(node, consts.id.SWITCH, setting),
          icoObj = $$(node, consts.id.ICON, setting);
        if (isParent) {
          node.open = !node.open;
          if (node.iconOpen && node.iconClose) {
            icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
          }
          if (node.open) {
            view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);
            view.replaceIcoClass(node, icoObj, consts.folder.OPEN);
            if (animateFlag == false || setting.view.expandSpeed == "") {
              ulObj.show();
              tools.apply(callback, []);
            } else {
              if (children && children.length > 0) {
                ulObj.slideDown(setting.view.expandSpeed, callback);
              } else {
                ulObj.show();
                tools.apply(callback, []);
              }
            }
          } else {
            view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);
            view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);
            if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) {
              ulObj.hide();
              tools.apply(callback, []);
            } else {
              ulObj.slideUp(setting.view.expandSpeed, callback);
            }
          }
        } else {
          tools.apply(callback, []);
        }
      },
      expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) {
        if (!node) return;
        if (!node.parentTId) {
          view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
          return;
        } else {
          view.expandCollapseNode(setting, node, expandFlag, animateFlag);
        }
        if (node.parentTId) {
          view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);
        }
      },
      expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) {
        var root = data.getRoot(setting),
          treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root),
          selfAnimateSign = (node) ? false : animateFlag,
          expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;
        data.getRoot(setting).expandTriggerFlag = false;
        if (treeNodes) {
          for (var i = 0, l = treeNodes.length; i < l; i++) {
            if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);
          }
        }
        data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;
        view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
      },
      isSelectedNode: function (setting, node) {
        if (!node) {
          return false;
        }
        var list = data.getRoot(setting).curSelectedList,
          i;
        for (i = list.length - 1; i >= 0; i--) {
          if (node === list[i]) {
            return true;
          }
        }
        return false;
      },
      makeDOMNodeIcon: function (html, setting, node) {
        var nameStr = data.nodeName(setting, node),
          name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
        html.push("<span id='", node.tId, consts.id.ICON,
          "' title='' treeNode", consts.id.ICON, " class='", view.makeNodeIcoClass(setting, node),
          "' style='", view.makeNodeIcoStyle(setting, node), "'></span><span id='", node.tId, consts.id.SPAN,
          "' class='", consts.className.NAME,
          "'>", name, "</span>");
      },
      makeDOMNodeLine: function (html, setting, node) {
        html.push("<span id='", node.tId, consts.id.SWITCH, "' title='' class='", view.makeNodeLineClass(setting, node), "' treeNode", consts.id.SWITCH, "></span>");
      },
      makeDOMNodeMainAfter: function (html, setting, node) {
        html.push("</li>");
      },
      makeDOMNodeMainBefore: function (html, setting, node) {
        html.push("<li id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
      },
      makeDOMNodeNameAfter: function (html, setting, node) {
        html.push("</a>");
      },
      makeDOMNodeNameBefore: function (html, setting, node) {
        var title = data.nodeTitle(setting, node),
          url = view.makeNodeUrl(setting, node),
          fontcss = view.makeNodeFontCss(setting, node),
          fontStyle = [];
        for (var f in fontcss) {
          fontStyle.push(f, ":", fontcss[f], ";");
        }
        html.push("<a id='", node.tId, consts.id.A, "' class='", consts.className.LEVEL, node.level, "' treeNode", consts.id.A, " onclick=\"", (node.click || ''),
          "\" ", ((url != null && url.length > 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''),
          "'");
        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {
          html.push("title='", title.replace(/'/g, "&#39;").replace(/</g, '&lt;').replace(/>/g, '&gt;'), "'");
        }
        html.push(">");
      },
      makeNodeFontCss: function (setting, node) {
        var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);
        return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {};
      },
      makeNodeIcoClass: function (setting, node) {
        var icoCss = ["ico"];
        if (!node.isAjaxing) {
          var isParent = data.nodeIsParent(setting, node);
          icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0];
          if (isParent) {
            icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
          } else {
            icoCss.push(consts.folder.DOCU);
          }
        }
        return consts.className.BUTTON + " " + icoCss.join('_');
      },
      makeNodeIcoStyle: function (setting, node) {
        var icoStyle = [];
        if (!node.isAjaxing) {
          var isParent = data.nodeIsParent(setting, node);
          var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];
          if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;");
          if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {
            icoStyle.push("width:0px;height:0px;");
          }
        }
        return icoStyle.join('');
      },
      makeNodeLineClass: function (setting, node) {
        var lineClass = [];
        if (setting.view.showLine) {
          if (node.level == 0 && node.isFirstNode && node.isLastNode) {
            lineClass.push(consts.line.ROOT);
          } else if (node.level == 0 && node.isFirstNode) {
            lineClass.push(consts.line.ROOTS);
          } else if (node.isLastNode) {
            lineClass.push(consts.line.BOTTOM);
          } else {
            lineClass.push(consts.line.CENTER);
          }
        } else {
          lineClass.push(consts.line.NOLINE);
        }
        if (data.nodeIsParent(setting, node)) {
          lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
        } else {
          lineClass.push(consts.folder.DOCU);
        }
        return view.makeNodeLineClassEx(node) + lineClass.join('_');
      },
      makeNodeLineClassEx: function (node) {
        return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " ";
      },
      makeNodeTarget: function (node) {
        return (node.target || "_blank");
      },
      makeNodeUrl: function (setting, node) {
        var urlKey = setting.data.key.url;
        return node[urlKey] ? node[urlKey] : null;
      },
      makeUlHtml: function (setting, node, html, content) {
        html.push("<ul id='", node.tId, consts.id.UL, "' class='", consts.className.LEVEL, node.level, " ", view.makeUlLineClass(setting, node), "' style='display:", (node.open ? "block" : "none"), "'>");
        html.push(content);
        html.push("</ul>");
      },
      makeUlLineClass: function (setting, node) {
        return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : "");
      },
      removeChildNodes: function (setting, node) {
        if (!node) return;
        var nodes = data.nodeChildren(setting, node);
        if (!nodes) return;
        for (var i = 0, l = nodes.length; i < l; i++) {
          data.removeNodeCache(setting, nodes[i]);
        }
        data.removeSelectedNode(setting);
        delete node[setting.data.key.children];
        if (!setting.data.keep.parent) {
          data.nodeIsParent(setting, node, false);
          node.open = false;
          var tmp_switchObj = $$(node, consts.id.SWITCH, setting),
            tmp_icoObj = $$(node, consts.id.ICON, setting);
          view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);
          view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);
          $$(node, consts.id.UL, setting).remove();
        } else {
          $$(node, consts.id.UL, setting).empty();
        }
      },
      scrollIntoView: function (setting, dom) {
        if (!dom) {
          return;
        }
        // support IE 7
        if (typeof Element === 'undefined') {
          var contRect = setting.treeObj.get(0).getBoundingClientRect(),
            findMeRect = dom.getBoundingClientRect();
          if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom
            || findMeRect.right > contRect.right || findMeRect.left < contRect.left) {
            dom.scrollIntoView();
          }
          return;
        }
        // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e
        if (!Element.prototype.scrollIntoViewIfNeeded) {
          Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {
            "use strict";
            function makeRange(start, length) {
              return {"start": start, "length": length, "end": start + length};
            }
            function coverRange(inner, outer) {
              if (
                false === centerIfNeeded ||
                (outer.start < inner.end && inner.start < outer.end)
              ) {
                return Math.max(
                  inner.end - outer.length,
                  Math.min(outer.start, inner.start)
                );
              }
              return (inner.start + inner.end - outer.length) / 2;
            }
            function makePoint(x, y) {
              return {
                "x": x,
                "y": y,
                "translate": function translate(dX, dY) {
                  return makePoint(x + dX, y + dY);
                }
              };
            }
            function absolute(elem, pt) {
              while (elem) {
                pt = pt.translate(elem.offsetLeft, elem.offsetTop);
                elem = elem.offsetParent;
              }
              return pt;
            }
            var target = absolute(this, makePoint(0, 0)),
              extent = makePoint(this.offsetWidth, this.offsetHeight),
              elem = this.parentNode,
              origin;
            while (elem instanceof HTMLElement) {
              // Apply desired scroll amount.
              origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop));
              elem.scrollLeft = coverRange(
                makeRange(target.x - origin.x, extent.x),
                makeRange(elem.scrollLeft, elem.clientWidth)
              );
              elem.scrollTop = coverRange(
                makeRange(target.y - origin.y, extent.y),
                makeRange(elem.scrollTop, elem.clientHeight)
              );
              // Determine actual scroll amount by reading back scroll properties.
              target = target.translate(-elem.scrollLeft, -elem.scrollTop);
              elem = elem.parentNode;
            }
          };
        }
        dom.scrollIntoViewIfNeeded();
      },
      setFirstNode: function (setting, parentNode) {
        var children = data.nodeChildren(setting, parentNode);
        if (children.length > 0) {
          children[0].isFirstNode = true;
        }
      },
      setLastNode: function (setting, parentNode) {
        var children = data.nodeChildren(setting, parentNode);
        if (children.length > 0) {
          children[children.length - 1].isLastNode = true;
        }
      },
      removeNode: function (setting, node) {
        var root = data.getRoot(setting),
          parentNode = (node.parentTId) ? node.getParentNode() : root;
        node.isFirstNode = false;
        node.isLastNode = false;
        node.getPreNode = function () {
          return null;
        };
        node.getNextNode = function () {
          return null;
        };
        if (!data.getNodeCache(setting, node.tId)) {
          return;
        }
        $$(node, setting).remove();
        data.removeNodeCache(setting, node);
        data.removeSelectedNode(setting, node);
        var children = data.nodeChildren(setting, parentNode);
        for (var i = 0, l = children.length; i < l; i++) {
          if (children[i].tId == node.tId) {
            children.splice(i, 1);
            break;
          }
        }
        view.setFirstNode(setting, parentNode);
        view.setLastNode(setting, parentNode);
        var tmp_ulObj, tmp_switchObj, tmp_icoObj,
          childLength = children.length;
        //repair nodes old parent
        if (!setting.data.keep.parent && childLength == 0) {
          //old parentNode has no child nodes
          data.nodeIsParent(setting, parentNode, false);
          parentNode.open = false;
          delete parentNode[setting.data.key.children];
          tmp_ulObj = $$(parentNode, consts.id.UL, setting);
          tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);
          tmp_icoObj = $$(parentNode, consts.id.ICON, setting);
          view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);
          view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);
          tmp_ulObj.css("display", "none");
        } else if (setting.view.showLine && childLength > 0) {
          //old parentNode has child nodes
          var newLast = children[childLength - 1];
          tmp_ulObj = $$(newLast, consts.id.UL, setting);
          tmp_switchObj = $$(newLast, consts.id.SWITCH, setting);
          tmp_icoObj = $$(newLast, consts.id.ICON, setting);
          if (parentNode == root) {
            if (children.length == 1) {
              //node was root, and ztree has only one root after move node
              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);
            } else {
              var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting);
              view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS);
              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
            }
          } else {
            view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
          }
          tmp_ulObj.removeClass(consts.line.LINE);
        }
      },
      replaceIcoClass: function (node, obj, newName) {
        if (!obj || node.isAjaxing) return;
        var tmpName = obj.attr("class");
        if (tmpName == undefined) return;
        var tmpList = tmpName.split("_");
        switch (newName) {
          case consts.folder.OPEN:
          case consts.folder.CLOSE:
          case consts.folder.DOCU:
            tmpList[tmpList.length - 1] = newName;
            break;
        }
        obj.attr("class", tmpList.join("_"));
      },
      replaceSwitchClass: function (node, obj, newName) {
        if (!obj) return;
        var tmpName = obj.attr("class");
        if (tmpName == undefined) return;
        var tmpList = tmpName.split("_");
        switch (newName) {
          case consts.line.ROOT:
          case consts.line.ROOTS:
          case consts.line.CENTER:
          case consts.line.BOTTOM:
          case consts.line.NOLINE:
            tmpList[0] = view.makeNodeLineClassEx(node) + newName;
            break;
          case consts.folder.OPEN:
          case consts.folder.CLOSE:
          case consts.folder.DOCU:
            tmpList[1] = newName;
            break;
        }
        obj.attr("class", tmpList.join("_"));
        if (newName !== consts.folder.DOCU) {
          obj.removeAttr("disabled");
        } else {
          obj.attr("disabled", "disabled");
        }
      },
      selectNode: function (setting, node, addFlag) {
        if (!addFlag) {
          view.cancelPreSelectedNode(setting, null, node);
        }
        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);
        data.addSelectedNode(setting, node);
        setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);
      },
      setNodeFontCss: function (setting, treeNode) {
        var aObj = $$(treeNode, consts.id.A, setting),
          fontCss = view.makeNodeFontCss(setting, treeNode);
        if (fontCss) {
          aObj.css(fontCss);
        }
      },
      setNodeLineIcos: function (setting, node) {
        if (!node) return;
        var switchObj = $$(node, consts.id.SWITCH, setting),
          ulObj = $$(node, consts.id.UL, setting),
          icoObj = $$(node, consts.id.ICON, setting),
          ulLine = view.makeUlLineClass(setting, node);
        if (ulLine.length == 0) {
          ulObj.removeClass(consts.line.LINE);
        } else {
          ulObj.addClass(ulLine);
        }
        switchObj.attr("class", view.makeNodeLineClass(setting, node));
        if (data.nodeIsParent(setting, node)) {
          switchObj.removeAttr("disabled");
        } else {
          switchObj.attr("disabled", "disabled");
        }
        icoObj.removeAttr("style");
        icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
        icoObj.attr("class", view.makeNodeIcoClass(setting, node));
      },
      setNodeName: function (setting, node) {
        var title = data.nodeTitle(setting, node),
          nObj = $$(node, consts.id.SPAN, setting);
        nObj.empty();
        if (setting.view.nameIsHTML) {
          nObj.html(data.nodeName(setting, node));
        } else {
          nObj.text(data.nodeName(setting, node));
        }
        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {
          var aObj = $$(node, consts.id.A, setting);
          aObj.attr("title", !title ? "" : title);
        }
      },
      setNodeTarget: function (setting, node) {
        var aObj = $$(node, consts.id.A, setting);
        aObj.attr("target", view.makeNodeTarget(node));
      },
      setNodeUrl: function (setting, node) {
        var aObj = $$(node, consts.id.A, setting),
          url = view.makeNodeUrl(setting, node);
        if (url == null || url.length == 0) {
          aObj.removeAttr("href");
        } else {
          aObj.attr("href", url);
        }
      },
      switchNode: function (setting, node) {
        if (node.open || !tools.canAsync(setting, node)) {
          view.expandCollapseNode(setting, node, !node.open);
        } else if (setting.async.enable) {
          if (!view.asyncNode(setting, node)) {
            view.expandCollapseNode(setting, node, !node.open);
            return;
          }
        } else if (node) {
          view.expandCollapseNode(setting, node, !node.open);
        }
      }
    };
  // zTree defind
  $.fn.zTree = {
    consts: _consts,
    _z: {
      tools: tools,
      view: view,
      event: event,
      data: data
    },
    getZTreeObj: function (treeId) {
      var o = data.getZTreeTools(treeId);
      return o ? o : null;
    },
    destroy: function (treeId) {
      if (!!treeId && treeId.length > 0) {
        view.destroy(data.getSetting(treeId));
      } else {
        for (var s in settings) {
          view.destroy(settings[s]);
        }
      }
    },
    init: function (obj, zSetting, zNodes) {
      var setting = tools.clone(_setting);
      $.extend(true, setting, zSetting);
      setting.treeId = obj.attr("id");
      setting.treeObj = obj;
      setting.treeObj.empty();
      settings[setting.treeId] = setting;
      //For some older browser,(e.g., ie6)
      if (typeof document.body.style.maxHeight === "undefined") {
        setting.view.expandSpeed = "";
      }
      data.initRoot(setting);
      var root = data.getRoot(setting);
      zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : [];
      if (setting.data.simpleData.enable) {
        data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes));
      } else {
        data.nodeChildren(setting, root, zNodes);
      }
      data.initCache(setting);
      event.unbindTree(setting);
      event.bindTree(setting);
      event.unbindEvent(setting);
      event.bindEvent(setting);
      var zTreeTools = {
        setting: setting,
        addNodes: function (parentNode, index, newNodes, isSilent) {
          if (!parentNode) parentNode = null;
          var isParent = data.nodeIsParent(setting, parentNode);
          if (parentNode && !isParent && setting.data.keep.leaf) return null;
          var i = parseInt(index, 10);
          if (isNaN(i)) {
            isSilent = !!newNodes;
            newNodes = index;
            index = -1;
          } else {
            index = i;
          }
          if (!newNodes) return null;
          var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]);
          function addCallback() {
            view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true));
          }
          if (tools.canAsync(setting, parentNode)) {
            view.asyncNode(setting, parentNode, isSilent, addCallback);
          } else {
            addCallback();
          }
          return xNewNodes;
        },
        cancelSelectedNode: function (node) {
          view.cancelPreSelectedNode(setting, node);
        },
        destroy: function () {
          view.destroy(setting);
        },
        expandAll: function (expandFlag) {
          expandFlag = !!expandFlag;
          view.expandCollapseSonNode(setting, null, expandFlag, true);
          return expandFlag;
        },
        expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) {
          if (!node || !data.nodeIsParent(setting, node)) return null;
          if (expandFlag !== true && expandFlag !== false) {
            expandFlag = !node.open;
          }
          callbackFlag = !!callbackFlag;
          if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {
            return null;
          } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {
            return null;
          }
          if (expandFlag && node.parentTId) {
            view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);
          }
          if (expandFlag === node.open && !sonSign) {
            return null;
          }
          data.getRoot(setting).expandTriggerFlag = callbackFlag;
          if (!tools.canAsync(setting, node) && sonSign) {
            view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);
          } else {
            node.open = !expandFlag;
            view.switchNode(this.setting, node);
            showNodeFocus();
          }
          return expandFlag;
          function showNodeFocus() {
            var a = $$(node, setting).get(0);
            if (a && focus !== false) {
              view.scrollIntoView(setting, a);
            }
          }
        },
        getNodes: function () {
          return data.getNodes(setting);
        },
        getNodeByParam: function (key, value, parentNode) {
          if (!key) return null;
          return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
        },
        getNodeByTId: function (tId) {
          return data.getNodeCache(setting, tId);
        },
        getNodesByParam: function (key, value, parentNode) {
          if (!key) return null;
          return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
        },
        getNodesByParamFuzzy: function (key, value, parentNode) {
          if (!key) return null;
          return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
        },
        getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) {
          isSingle = !!isSingle;
          if (!filter || (typeof filter != "function")) return (isSingle ? null : []);
          return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam);
        },
        getNodeIndex: function (node) {
          if (!node) return null;
          var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
          var children = data.nodeChildren(setting, parentNode);
          for (var i = 0, l = children.length; i < l; i++) {
            if (children[i] == node) return i;
          }
          return -1;
        },
        getSelectedNodes: function () {
          var r = [], list = data.getRoot(setting).curSelectedList;
          for (var i = 0, l = list.length; i < l; i++) {
            r.push(list[i]);
          }
          return r;
        },
        isSelectedNode: function (node) {
          return data.isSelectedNode(setting, node);
        },
        reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) {
          var promise = new Promise(function (resolve, reject) {
            try {
              zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () {
                resolve(parentNode);
              });
            } catch (e) {
              reject(e);
            }
          });
          return promise;
        },
        reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) {
          if (!this.setting.async.enable) return;
          var isRoot = !parentNode;
          if (isRoot) {
            parentNode = data.getRoot(setting);
          }
          if (reloadType == "refresh") {
            var children = data.nodeChildren(setting, parentNode);
            for (var i = 0, l = children ? children.length : 0; i < l; i++) {
              data.removeNodeCache(setting, children[i]);
            }
            data.removeSelectedNode(setting);
            data.nodeChildren(setting, parentNode, []);
            if (isRoot) {
              this.setting.treeObj.empty();
            } else {
              var ulObj = $$(parentNode, consts.id.UL, setting);
              ulObj.empty();
            }
          }
          view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback);
        },
        refresh: function () {
          this.setting.treeObj.empty();
          var root = data.getRoot(setting),
            nodes = data.nodeChildren(setting, root);
          data.initRoot(setting);
          data.nodeChildren(setting, root, nodes);
          data.initCache(setting);
          view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1);
        },
        removeChildNodes: function (node) {
          if (!node) return null;
          var nodes = data.nodeChildren(setting, node);
          view.removeChildNodes(setting, node);
          return nodes ? nodes : null;
        },
        removeNode: function (node, callbackFlag) {
          if (!node) return;
          callbackFlag = !!callbackFlag;
          if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;
          view.removeNode(setting, node);
          if (callbackFlag) {
            this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
          }
        },
        selectNode: function (node, addFlag, isSilent) {
          if (!node) return;
          if (tools.uCanDo(setting)) {
            addFlag = setting.view.selectedMulti && addFlag;
            if (node.parentTId) {
              view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);
            } else if (!isSilent) {
              try {
                $$(node, setting).focus().blur();
              } catch (e) {
              }
            }
            view.selectNode(setting, node, addFlag);
          }
          function showNodeFocus() {
            if (isSilent) {
              return;
            }
            var a = $$(node, setting).get(0);
            view.scrollIntoView(setting, a);
          }
        },
        transformTozTreeNodes: function (simpleNodes) {
          return data.transformTozTreeFormat(setting, simpleNodes);
        },
        transformToArray: function (nodes) {
          return data.transformToArrayFormat(setting, nodes);
        },
        updateNode: function (node, checkTypeFlag) {
          if (!node) return;
          var nObj = $$(node, setting);
          if (nObj.get(0) && tools.uCanDo(setting)) {
            view.setNodeName(setting, node);
            view.setNodeTarget(setting, node);
            view.setNodeUrl(setting, node);
            view.setNodeLineIcos(setting, node);
            view.setNodeFontCss(setting, node);
          }
        }
      };
      root.treeTools = zTreeTools;
      data.setZTreeTools(setting, zTreeTools);
      var children = data.nodeChildren(setting, root);
      if (children && children.length > 0) {
        view.createNodes(setting, 0, children, null, -1);
      } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {
        view.asyncNode(setting);
      }
      return zTreeTools;
    }
  };
  var zt = $.fn.zTree,
    $$ = tools.$,
    consts = zt.consts;
})(jQuery);
/*
 * JQuery zTree excheck v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  //default consts of excheck
  var _consts = {
      event: {
        CHECK: "ztree_check"
      },
      id: {
        CHECK: "_check"
      },
      checkbox: {
        STYLE: "checkbox",
        DEFAULT: "chk",
        DISABLED: "disable",
        FALSE: "false",
        TRUE: "true",
        FULL: "full",
        PART: "part",
        FOCUS: "focus"
      },
      radio: {
        STYLE: "radio",
        TYPE_ALL: "all",
        TYPE_LEVEL: "level"
      }
    },
    //default setting of excheck
    _setting = {
      check: {
        enable: false,
        autoCheckTrigger: false,
        chkStyle: _consts.checkbox.STYLE,
        nocheckInherit: false,
        chkDisabledInherit: false,
        radioType: _consts.radio.TYPE_LEVEL,
        chkboxType: {
          "Y": "ps",
          "N": "ps"
        }
      },
      data: {
        key: {
          checked: "checked"
        }
      },
      callback: {
        beforeCheck: null,
        onCheck: null
      }
    },
    //default root of excheck
    _initRoot = function (setting) {
      var r = data.getRoot(setting);
      r.radioCheckedList = [];
    },
    //default cache of excheck
    _initCache = function (treeId) {
    },
    //default bind event of excheck
    _bindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.bind(c.CHECK, function (event, srcEvent, treeId, node) {
        event.srcEvent = srcEvent;
        tools.apply(setting.callback.onCheck, [event, treeId, node]);
      });
    },
    _unbindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.unbind(c.CHECK);
    },
    //default event proxy of excheck
    _eventProxy = function (e) {
      var target = e.target,
        setting = data.getSetting(e.data.treeId),
        tId = "", node = null,
        nodeEventType = "", treeEventType = "",
        nodeEventCallback = null, treeEventCallback = null;
      if (tools.eqs(e.type, "mouseover")) {
        if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "mouseoverCheck";
        }
      } else if (tools.eqs(e.type, "mouseout")) {
        if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "mouseoutCheck";
        }
      } else if (tools.eqs(e.type, "click")) {
        if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "checkNode";
        }
      }
      if (tId.length > 0) {
        node = data.getNodeCache(setting, tId);
        switch (nodeEventType) {
          case "checkNode" :
            nodeEventCallback = _handler.onCheckNode;
            break;
          case "mouseoverCheck" :
            nodeEventCallback = _handler.onMouseoverCheck;
            break;
          case "mouseoutCheck" :
            nodeEventCallback = _handler.onMouseoutCheck;
            break;
        }
      }
      var proxyResult = {
        stop: nodeEventType === "checkNode",
        node: node,
        nodeEventType: nodeEventType,
        nodeEventCallback: nodeEventCallback,
        treeEventType: treeEventType,
        treeEventCallback: treeEventCallback
      };
      return proxyResult
    },
    //default init node of excheck
    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      if (!n) return;
      var checked = data.nodeChecked(setting, n);
      n.checkedOld = checked;
      if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true");
      n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);
      if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true");
      n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);
      if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");
      n.halfCheck = !!n.halfCheck;
      n.check_Child_State = -1;
      n.check_Focus = false;
      n.getCheckStatus = function () {
        return data.getCheckStatus(setting, n);
      };
      if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) {
        var r = data.getRoot(setting);
        r.radioCheckedList.push(n);
      }
    },
    //add dom for check
    _beforeA = function (setting, node, html) {
      if (setting.check.enable) {
        data.makeChkFlag(setting, node);
        html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true ? " style='display:none;'" : ""), "></span>");
      }
    },
    //update zTreeObj, add method of check
    _zTreeTools = function (setting, zTreeTools) {
      zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
        var nodeChecked = data.nodeChecked(setting, node);
        if (node.chkDisabled === true) return;
        if (checked !== true && checked !== false) {
          checked = !nodeChecked;
        }
        callbackFlag = !!callbackFlag;
        if (nodeChecked === checked && !checkTypeFlag) {
          return;
        } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {
          return;
        }
        if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {
          data.nodeChecked(setting, node, checked);
          var checkObj = $$(node, consts.id.CHECK, this.setting);
          if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
          view.setChkClass(this.setting, checkObj, node);
          view.repairParentChkClassWithSelf(this.setting, node);
          if (callbackFlag) {
            this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);
          }
        }
      }
      zTreeTools.checkAllNodes = function (checked) {
        view.repairAllChk(this.setting, !!checked);
      }
      zTreeTools.getCheckedNodes = function (checked) {
        var checked = (checked !== false);
        var children = data.nodeChildren(setting, data.getRoot(this.setting));
        return data.getTreeCheckedNodes(this.setting, children, checked);
      }
      zTreeTools.getChangeCheckedNodes = function () {
        var children = data.nodeChildren(setting, data.getRoot(this.setting));
        return data.getTreeChangeCheckedNodes(this.setting, children);
      }
      zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) {
        disabled = !!disabled;
        inheritParent = !!inheritParent;
        inheritChildren = !!inheritChildren;
        view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);
        view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);
      }
      var _updateNode = zTreeTools.updateNode;
      zTreeTools.updateNode = function (node, checkTypeFlag) {
        if (_updateNode) _updateNode.apply(zTreeTools, arguments);
        if (!node || !this.setting.check.enable) return;
        var nObj = $$(node, this.setting);
        if (nObj.get(0) && tools.uCanDo(this.setting)) {
          var checkObj = $$(node, consts.id.CHECK, this.setting);
          if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
          view.setChkClass(this.setting, checkObj, node);
          view.repairParentChkClassWithSelf(this.setting, node);
        }
      }
    },
    //method of operate data
    _data = {
      getRadioCheckedList: function (setting) {
        var checkedList = data.getRoot(setting).radioCheckedList;
        for (var i = 0, j = checkedList.length; i < j; i++) {
          if (!data.getNodeCache(setting, checkedList[i].tId)) {
            checkedList.splice(i, 1);
            i--;
            j--;
          }
        }
        return checkedList;
      },
      getCheckStatus: function (setting, node) {
        if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;
        var checked = data.nodeChecked(setting, node),
          r = {
            checked: checked,
            half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))
          };
        return r;
      },
      getTreeCheckedNodes: function (setting, nodes, checked, results) {
        if (!nodes) return [];
        var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);
        results = !results ? [] : results;
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          var children = data.nodeChildren(setting, node);
          var nodeChecked = data.nodeChecked(setting, node);
          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) {
            results.push(node);
            if (onlyOne) {
              break;
            }
          }
          data.getTreeCheckedNodes(setting, children, checked, results);
          if (onlyOne && results.length > 0) {
            break;
          }
        }
        return results;
      },
      getTreeChangeCheckedNodes: function (setting, nodes, results) {
        if (!nodes) return [];
        results = !results ? [] : results;
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          var children = data.nodeChildren(setting, node);
          var nodeChecked = data.nodeChecked(setting, node);
          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) {
            results.push(node);
          }
          data.getTreeChangeCheckedNodes(setting, children, results);
        }
        return results;
      },
      makeChkFlag: function (setting, node) {
        if (!node) return;
        var chkFlag = -1;
        var children = data.nodeChildren(setting, node);
        if (children) {
          for (var i = 0, l = children.length; i < l; i++) {
            var cNode = children[i];
            var nodeChecked = data.nodeChecked(setting, cNode);
            var tmp = -1;
            if (setting.check.chkStyle == consts.radio.STYLE) {
              if (cNode.nocheck === true || cNode.chkDisabled === true) {
                tmp = cNode.check_Child_State;
              } else if (cNode.halfCheck === true) {
                tmp = 2;
              } else if (nodeChecked) {
                tmp = 2;
              } else {
                tmp = cNode.check_Child_State > 0 ? 2 : 0;
              }
              if (tmp == 2) {
                chkFlag = 2;
                break;
              } else if (tmp == 0) {
                chkFlag = 0;
              }
            } else if (setting.check.chkStyle == consts.checkbox.STYLE) {
              if (cNode.nocheck === true || cNode.chkDisabled === true) {
                tmp = cNode.check_Child_State;
              } else if (cNode.halfCheck === true) {
                tmp = 1;
              } else if (nodeChecked) {
                tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;
              } else {
                tmp = (cNode.check_Child_State > 0) ? 1 : 0;
              }
              if (tmp === 1) {
                chkFlag = 1;
                break;
              } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {
                chkFlag = 1;
                break;
              } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {
                chkFlag = 1;
                break;
              } else if (tmp > -1) {
                chkFlag = tmp;
              }
            }
          }
        }
        node.check_Child_State = chkFlag;
      }
    },
    //method of event proxy
    _event = {},
    //method of event handler
    _handler = {
      onCheckNode: function (event, node) {
        if (node.chkDisabled === true) return false;
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;
        var nodeChecked = data.nodeChecked(setting, node);
        data.nodeChecked(setting, node, !nodeChecked);
        view.checkNodeRelation(setting, node);
        var checkObj = $$(node, consts.id.CHECK, setting);
        view.setChkClass(setting, checkObj, node);
        view.repairParentChkClassWithSelf(setting, node);
        setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);
        return true;
      },
      onMouseoverCheck: function (event, node) {
        if (node.chkDisabled === true) return false;
        var setting = data.getSetting(event.data.treeId),
          checkObj = $$(node, consts.id.CHECK, setting);
        node.check_Focus = true;
        view.setChkClass(setting, checkObj, node);
        return true;
      },
      onMouseoutCheck: function (event, node) {
        if (node.chkDisabled === true) return false;
        var setting = data.getSetting(event.data.treeId),
          checkObj = $$(node, consts.id.CHECK, setting);
        node.check_Focus = false;
        view.setChkClass(setting, checkObj, node);
        return true;
      }
    },
    //method of tools for zTree
    _tools = {},
    //method of operate ztree dom
    _view = {
      checkNodeRelation: function (setting, node) {
        var pNode, i, l,
          r = consts.radio;
        var nodeChecked = data.nodeChecked(setting, node);
        if (setting.check.chkStyle == r.STYLE) {
          var checkedList = data.getRadioCheckedList(setting);
          if (nodeChecked) {
            if (setting.check.radioType == r.TYPE_ALL) {
              for (i = checkedList.length - 1; i >= 0; i--) {
                pNode = checkedList[i];
                var pNodeChecked = data.nodeChecked(setting, pNode);
                if (pNodeChecked && pNode != node) {
                  data.nodeChecked(setting, pNode, false);
                  checkedList.splice(i, 1);
                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
                  if (pNode.parentTId != node.parentTId) {
                    view.repairParentChkClassWithSelf(setting, pNode);
                  }
                }
              }
              checkedList.push(node);
            } else {
              var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
              var children = data.nodeChildren(setting, parentNode);
              for (i = 0, l = children.length; i < l; i++) {
                pNode = children[i];
                var pNodeChecked = data.nodeChecked(setting, pNode);
                if (pNodeChecked && pNode != node) {
                  data.nodeChecked(setting, pNode, false);
                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
                }
              }
            }
          } else if (setting.check.radioType == r.TYPE_ALL) {
            for (i = 0, l = checkedList.length; i < l; i++) {
              if (node == checkedList[i]) {
                checkedList.splice(i, 1);
                break;
              }
            }
          }
        } else {
          var children = data.nodeChildren(setting, node);
          if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {
            view.setSonNodeCheckBox(setting, node, true);
          }
          if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) {
            view.setSonNodeCheckBox(setting, node, false);
          }
          if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) {
            view.setParentNodeCheckBox(setting, node, true);
          }
          if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) {
            view.setParentNodeCheckBox(setting, node, false);
          }
        }
      },
      makeChkClass: function (setting, node) {
        var c = consts.checkbox, r = consts.radio,
          fullStyle = "";
        var nodeChecked = data.nodeChecked(setting, node);
        if (node.chkDisabled === true) {
          fullStyle = c.DISABLED;
        } else if (node.halfCheck) {
          fullStyle = c.PART;
        } else if (setting.check.chkStyle == r.STYLE) {
          fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART;
        } else {
          fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART);
        }
        var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle;
        chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;
        return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName;
      },
      repairAllChk: function (setting, checked) {
        if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {
          var root = data.getRoot(setting);
          var children = data.nodeChildren(setting, root);
          for (var i = 0, l = children.length; i < l; i++) {
            var node = children[i];
            if (node.nocheck !== true && node.chkDisabled !== true) {
              data.nodeChecked(setting, node, checked);
            }
            view.setSonNodeCheckBox(setting, node, checked);
          }
        }
      },
      repairChkClass: function (setting, node) {
        if (!node) return;
        data.makeChkFlag(setting, node);
        if (node.nocheck !== true) {
          var checkObj = $$(node, consts.id.CHECK, setting);
          view.setChkClass(setting, checkObj, node);
        }
      },
      repairParentChkClass: function (setting, node) {
        if (!node || !node.parentTId) return;
        var pNode = node.getParentNode();
        view.repairChkClass(setting, pNode);
        view.repairParentChkClass(setting, pNode);
      },
      repairParentChkClassWithSelf: function (setting, node) {
        if (!node) return;
        var children = data.nodeChildren(setting, node);
        if (children && children.length > 0) {
          view.repairParentChkClass(setting, children[0]);
        } else {
          view.repairParentChkClass(setting, node);
        }
      },
      repairSonChkDisabled: function (setting, node, chkDisabled, inherit) {
        if (!node) return;
        if (node.chkDisabled != chkDisabled) {
          node.chkDisabled = chkDisabled;
        }
        view.repairChkClass(setting, node);
        var children = data.nodeChildren(setting, node);
        if (children && inherit) {
          for (var i = 0, l = children.length; i < l; i++) {
            var sNode = children[i];
            view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);
          }
        }
      },
      repairParentChkDisabled: function (setting, node, chkDisabled, inherit) {
        if (!node) return;
        if (node.chkDisabled != chkDisabled && inherit) {
          node.chkDisabled = chkDisabled;
        }
        view.repairChkClass(setting, node);
        view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);
      },
      setChkClass: function (setting, obj, node) {
        if (!obj) return;
        if (node.nocheck === true) {
          obj.hide();
        } else {
          obj.show();
        }
        obj.attr('class', view.makeChkClass(setting, node));
      },
      setParentNodeCheckBox: function (setting, node, value, srcNode) {
        var checkObj = $$(node, consts.id.CHECK, setting);
        if (!srcNode) srcNode = node;
        data.makeChkFlag(setting, node);
        if (node.nocheck !== true && node.chkDisabled !== true) {
          data.nodeChecked(setting, node, value);
          view.setChkClass(setting, checkObj, node);
          if (setting.check.autoCheckTrigger && node != srcNode) {
            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
          }
        }
        if (node.parentTId) {
          var pSign = true;
          if (!value) {
            var pNodes = data.nodeChildren(setting, node.getParentNode());
            for (var i = 0, l = pNodes.length; i < l; i++) {
              var pNode = pNodes[i];
              var nodeChecked = data.nodeChecked(setting, pNode);
              if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked)
                || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) {
                pSign = false;
                break;
              }
            }
          }
          if (pSign) {
            view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);
          }
        }
      },
      setSonNodeCheckBox: function (setting, node, value, srcNode) {
        if (!node) return;
        var checkObj = $$(node, consts.id.CHECK, setting);
        if (!srcNode) srcNode = node;
        var hasDisable = false;
        var children = data.nodeChildren(setting, node);
        if (children) {
          for (var i = 0, l = children.length; i < l; i++) {
            var sNode = children[i];
            view.setSonNodeCheckBox(setting, sNode, value, srcNode);
            if (sNode.chkDisabled === true) hasDisable = true;
          }
        }
        if (node != data.getRoot(setting) && node.chkDisabled !== true) {
          if (hasDisable && node.nocheck !== true) {
            data.makeChkFlag(setting, node);
          }
          if (node.nocheck !== true && node.chkDisabled !== true) {
            data.nodeChecked(setting, node, value);
            if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1;
          } else {
            node.check_Child_State = -1;
          }
          view.setChkClass(setting, checkObj, node);
          if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {
            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
          }
        }
      }
    },
    _z = {
      tools: _tools,
      view: _view,
      event: _event,
      data: _data
    };
  $.extend(true, $.fn.zTree.consts, _consts);
  $.extend(true, $.fn.zTree._z, _z);
  var zt = $.fn.zTree,
    tools = zt._z.tools,
    consts = zt.consts,
    view = zt._z.view,
    data = zt._z.data,
    event = zt._z.event,
    $$ = tools.$;
  data.nodeChecked = function (setting, node, newChecked) {
    if (!node) {
      return false;
    }
    var key = setting.data.key.checked;
    if (typeof newChecked !== 'undefined') {
      if (typeof newChecked === "string") {
        newChecked = tools.eqs(newChecked, "true");
      }
      newChecked = !!newChecked;
      node[key] = newChecked;
    } else if (typeof node[key] == "string"){
      node[key] = tools.eqs(node[key], "true");
    } else {
      node[key] = !!node[key];
    }
    return node[key];
  };
  data.exSetting(_setting);
  data.addInitBind(_bindEvent);
  data.addInitUnBind(_unbindEvent);
  data.addInitCache(_initCache);
  data.addInitNode(_initNode);
  data.addInitProxy(_eventProxy, true);
  data.addInitRoot(_initRoot);
  data.addBeforeA(_beforeA);
  data.addZTreeTools(_zTreeTools);
  var _createNodes = view.createNodes;
  view.createNodes = function (setting, level, nodes, parentNode, index) {
    if (_createNodes) _createNodes.apply(view, arguments);
    if (!nodes) return;
    view.repairParentChkClassWithSelf(setting, parentNode);
  }
  var _removeNode = view.removeNode;
  view.removeNode = function (setting, node) {
    var parentNode = node.getParentNode();
    if (_removeNode) _removeNode.apply(view, arguments);
    if (!node || !parentNode) return;
    view.repairChkClass(setting, parentNode);
    view.repairParentChkClass(setting, parentNode);
  }
  var _appendNodes = view.appendNodes;
  view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
    var html = "";
    if (_appendNodes) {
      html = _appendNodes.apply(view, arguments);
    }
    if (parentNode) {
      data.makeChkFlag(setting, parentNode);
    }
    return html;
  }
})(jQuery);
/*
 * JQuery zTree exedit v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  //default consts of exedit
  var _consts = {
      event: {
        DRAG: "ztree_drag",
        DROP: "ztree_drop",
        RENAME: "ztree_rename",
        DRAGMOVE: "ztree_dragmove"
      },
      id: {
        EDIT: "_edit",
        INPUT: "_input",
        REMOVE: "_remove"
      },
      move: {
        TYPE_INNER: "inner",
        TYPE_PREV: "prev",
        TYPE_NEXT: "next"
      },
      node: {
        CURSELECTED_EDIT: "curSelectedNode_Edit",
        TMPTARGET_TREE: "tmpTargetzTree",
        TMPTARGET_NODE: "tmpTargetNode"
      }
    },
    //default setting of exedit
    _setting = {
      edit: {
        enable: false,
        editNameSelectAll: false,
        showRemoveBtn: true,
        showRenameBtn: true,
        removeTitle: "remove",
        renameTitle: "rename",
        drag: {
          autoExpandTrigger: false,
          isCopy: true,
          isMove: true,
          prev: true,
          next: true,
          inner: true,
          minMoveSize: 5,
          borderMax: 10,
          borderMin: -5,
          maxShowNodeNum: 5,
          autoOpenTime: 500
        }
      },
      view: {
        addHoverDom: null,
        removeHoverDom: null
      },
      callback: {
        beforeDrag: null,
        beforeDragOpen: null,
        beforeDrop: null,
        beforeEditName: null,
        beforeRename: null,
        onDrag: null,
        onDragMove: null,
        onDrop: null,
        onRename: null
      }
    },
    //default root of exedit
    _initRoot = function (setting) {
      var r = data.getRoot(setting), rs = data.getRoots();
      r.curEditNode = null;
      r.curEditInput = null;
      r.curHoverNode = null;
      r.dragFlag = 0;
      r.dragNodeShowBefore = [];
      r.dragMaskList = new Array();
      rs.showHoverDom = true;
    },
    //default cache of exedit
    _initCache = function (treeId) {
    },
    //default bind event of exedit
    _bindEvent = function (setting) {
      var o = setting.treeObj;
      var c = consts.event;
      o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {
        tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);
      });
      o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
        tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
      });
      o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {
        tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);
      });
      o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
        tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
      });
    },
    _unbindEvent = function (setting) {
      var o = setting.treeObj;
      var c = consts.event;
      o.unbind(c.RENAME);
      o.unbind(c.DRAG);
      o.unbind(c.DRAGMOVE);
      o.unbind(c.DROP);
    },
    //default event proxy of exedit
    _eventProxy = function (e) {
      var target = e.target,
        setting = data.getSetting(e.data.treeId),
        relatedTarget = e.relatedTarget,
        tId = "", node = null,
        nodeEventType = "", treeEventType = "",
        nodeEventCallback = null, treeEventCallback = null,
        tmp = null;
      if (tools.eqs(e.type, "mouseover")) {
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
          nodeEventType = "hoverOverNode";
        }
      } else if (tools.eqs(e.type, "mouseout")) {
        tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (!tmp) {
          tId = "remove";
          nodeEventType = "hoverOutNode";
        }
      } else if (tools.eqs(e.type, "mousedown")) {
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
          nodeEventType = "mousedownNode";
        }
      }
      if (tId.length > 0) {
        node = data.getNodeCache(setting, tId);
        switch (nodeEventType) {
          case "mousedownNode" :
            nodeEventCallback = _handler.onMousedownNode;
            break;
          case "hoverOverNode" :
            nodeEventCallback = _handler.onHoverOverNode;
            break;
          case "hoverOutNode" :
            nodeEventCallback = _handler.onHoverOutNode;
            break;
        }
      }
      var proxyResult = {
        stop: false,
        node: node,
        nodeEventType: nodeEventType,
        nodeEventCallback: nodeEventCallback,
        treeEventType: treeEventType,
        treeEventCallback: treeEventCallback
      };
      return proxyResult
    },
    //default init node of exedit
    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      if (!n) return;
      n.isHover = false;
      n.editNameFlag = false;
    },
    //update zTreeObj, add method of edit
    _zTreeTools = function (setting, zTreeTools) {
      zTreeTools.cancelEditName = function (newName) {
        var root = data.getRoot(this.setting);
        if (!root.curEditNode) return;
        view.cancelCurEditNode(this.setting, newName ? newName : null, true);
      }
      zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {
        if (!node) return null;
        var isParent = data.nodeIsParent(setting, targetNode);
        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
        var _this = this,
          newNode = tools.clone(node);
        if (!targetNode) {
          targetNode = null;
          moveType = consts.move.TYPE_INNER;
        }
        if (moveType == consts.move.TYPE_INNER) {
          function copyCallback() {
            view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);
          }
          if (tools.canAsync(this.setting, targetNode)) {
            view.asyncNode(this.setting, targetNode, isSilent, copyCallback);
          } else {
            copyCallback();
          }
        } else {
          view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);
          view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);
        }
        return newNode;
      }
      zTreeTools.editName = function (node) {
        if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;
        if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);
        view.editNode(this.setting, node)
      }
      zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {
        if (!node) return node;
        var isParent = data.nodeIsParent(setting, targetNode);
        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
          return null;
        } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) {
          return null;
        } else if (!targetNode) {
          targetNode = null;
        }
        var _this = this;
        function moveCallback() {
          view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);
        }
        if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {
          view.asyncNode(this.setting, targetNode, isSilent, moveCallback);
        } else {
          moveCallback();
        }
        return node;
      }
      zTreeTools.setEditable = function (editable) {
        this.setting.confirm.enable = editable;
        return this.refresh();
      }
    },
    //method of operate data
    _data = {
      setSonNodeLevel: function (setting, parentNode, node) {
        if (!node) return;
        var children = data.nodeChildren(setting, node);
        node.level = (parentNode) ? parentNode.level + 1 : 0;
        if (!children) return;
        for (var i = 0, l = children.length; i < l; i++) {
          if (children[i]) data.setSonNodeLevel(setting, node, children[i]);
        }
      }
    },
    //method of event proxy
    _event = {},
    //method of event handler
    _handler = {
      onHoverOverNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId),
          root = data.getRoot(setting);
        if (root.curHoverNode != node) {
          _handler.onHoverOutNode(event);
        }
        root.curHoverNode = node;
        view.addHoverDom(setting, node);
      },
      onHoverOutNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId),
          root = data.getRoot(setting);
        if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
          view.removeTreeDom(setting, root.curHoverNode);
          root.curHoverNode = null;
        }
      },
      onMousedownNode: function (eventMouseDown, _node) {
        var i, l,
          setting = data.getSetting(eventMouseDown.data.treeId),
          root = data.getRoot(setting), roots = data.getRoots();
        //right click can't drag & drop
        if (eventMouseDown.button == 2 || !setting.confirm.enable || (!setting.confirm.drag.isCopy && !setting.confirm.drag.isMove)) return true;
        //input of edit node name can't drag & drop
        var target = eventMouseDown.target,
          _nodes = data.getRoot(setting).curSelectedList,
          nodes = [];
        if (!data.isSelectedNode(setting, _node)) {
          nodes = [_node];
        } else {
          for (i = 0, l = _nodes.length; i < l; i++) {
            if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) {
              return true;
            }
            nodes.push(_nodes[i]);
            if (nodes[0].parentTId !== _nodes[i].parentTId) {
              nodes = [_node];
              break;
            }
          }
        }
        view.editNodeBlur = true;
        view.cancelCurEditNode(setting);
        var doc = $(setting.treeObj.get(0).ownerDocument),
          body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,
          isOtherTree = false,
          targetSetting = setting,
          sourceSetting = setting,
          preNode, nextNode,
          preTmpTargetNodeId = null,
          preTmpMoveType = null,
          tmpTargetNodeId = null,
          moveType = consts.move.TYPE_INNER,
          mouseDownX = eventMouseDown.clientX,
          mouseDownY = eventMouseDown.clientY,
          startTime = (new Date()).getTime();
        if (tools.uCanDo(setting)) {
          doc.bind("mousemove", _docMouseMove);
        }
        function _docMouseMove(event) {
          //avoid start drag after click node
          if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.confirm.drag.minMoveSize
            && Math.abs(mouseDownY - event.clientY) < setting.confirm.drag.minMoveSize) {
            return true;
          }
          var i, l, tmpNode, tmpDom, tmpNodes;
          body.css("cursor", "pointer");
          if (root.dragFlag == 0) {
            if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
              _docMouseUp(event);
              return true;
            }
            for (i = 0, l = nodes.length; i < l; i++) {
              if (i == 0) {
                root.dragNodeShowBefore = [];
              }
              tmpNode = nodes[i];
              if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {
                view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
                root.dragNodeShowBefore[tmpNode.tId] = true;
              } else {
                root.dragNodeShowBefore[tmpNode.tId] = false;
              }
            }
            root.dragFlag = 1;
            roots.showHoverDom = false;
            tools.showIfameMask(setting, true);
            //sort
            var isOrder = true, lastIndex = -1;
            if (nodes.length > 1) {
              var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);
              tmpNodes = [];
              for (i = 0, l = pNodes.length; i < l; i++) {
                if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
                  if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {
                    isOrder = false;
                  }
                  tmpNodes.push(pNodes[i]);
                  lastIndex = i;
                }
                if (nodes.length === tmpNodes.length) {
                  nodes = tmpNodes;
                  break;
                }
              }
            }
            if (isOrder) {
              preNode = nodes[0].getPreNode();
              nextNode = nodes[nodes.length - 1].getNextNode();
            }
            //set node in selected
            curNode = $$("<ul class='zTreeDragUL'></ul>", setting);
            for (i = 0, l = nodes.length; i < l; i++) {
              tmpNode = nodes[i];
              tmpNode.editNameFlag = false;
              view.selectNode(setting, tmpNode, i > 0);
              view.removeTreeDom(setting, tmpNode);
              if (i > setting.confirm.drag.maxShowNodeNum - 1) {
                continue;
              }
              tmpDom = $$("<li id='" + tmpNode.tId + "_tmp'></li>", setting);
              tmpDom.append($$(tmpNode, consts.id.A, setting).clone());
              tmpDom.css("padding", "0");
              tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
              curNode.append(tmpDom);
              if (i == setting.confirm.drag.maxShowNodeNum - 1) {
                tmpDom = $$("<li id='" + tmpNode.tId + "_moretmp'><a>  ...  </a></li>", setting);
                curNode.append(tmpDom);
              }
            }
            curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
            curNode.addClass(setting.treeObj.attr("class"));
            curNode.appendTo(body);
            tmpArrow = $$("<span class='tmpzTreeMove_arrow'></span>", setting);
            tmpArrow.attr("id", "zTreeMove_arrow_tmp");
            tmpArrow.appendTo(body);
            setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
          }
          if (root.dragFlag == 1) {
            if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
              var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
              event.target = (xT.length > 0) ? xT.get(0) : event.target;
            } else if (tmpTarget) {
              tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
              if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
                .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
            }
            tmpTarget = null;
            tmpTargetNodeId = null;
            //judge drag & drop in multi ztree
            isOtherTree = false;
            targetSetting = setting;
            var settings = data.getSettings();
            for (var s in settings) {
              if (settings[s].treeId && settings[s].confirm.enable && settings[s].treeId != setting.treeId
                && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) {
                isOtherTree = true;
                targetSetting = settings[s];
              }
            }
            var docScrollTop = doc.scrollTop(),
              docScrollLeft = doc.scrollLeft(),
              treeOffset = targetSetting.treeObj.offset(),
              scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
              scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
              dTop = (event.clientY + docScrollTop - treeOffset.top),
              dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
              dLeft = (event.clientX + docScrollLeft - treeOffset.left),
              dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
              isTop = (dTop < setting.confirm.drag.borderMax && dTop > setting.confirm.drag.borderMin),
              isBottom = (dBottom < setting.confirm.drag.borderMax && dBottom > setting.confirm.drag.borderMin),
              isLeft = (dLeft < setting.confirm.drag.borderMax && dLeft > setting.confirm.drag.borderMin),
              isRight = (dRight < setting.confirm.drag.borderMax && dRight > setting.confirm.drag.borderMin),
              isTreeInner = dTop > setting.confirm.drag.borderMin && dBottom > setting.confirm.drag.borderMin && dLeft > setting.confirm.drag.borderMin && dRight > setting.confirm.drag.borderMin,
              isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
              isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),
              isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
              isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);
            if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
              //get node <li> dom
              var targetObj = event.target;
              while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
                targetObj = targetObj.parentNode;
              }
              var canMove = true;
              //don't move to self or children of self
              for (i = 0, l = nodes.length; i < l; i++) {
                tmpNode = nodes[i];
                if (targetObj.id === tmpNode.tId) {
                  canMove = false;
                  break;
                } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) {
                  canMove = false;
                  break;
                }
              }
              if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {
                tmpTarget = $(targetObj);
                tmpTargetNodeId = targetObj.id;
              }
            }
            //the mouse must be in zTree
            tmpNode = nodes[0];
            if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
              //judge mouse move in root of ztree
              if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
                tmpTarget = targetSetting.treeObj;
              }
              //auto scroll top
              if (isTop) {
                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);
              } else if (isBottom) {
                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);
              }
              if (isLeft) {
                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);
              } else if (isRight) {
                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);
              }
              //auto scroll left
              if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);
              }
            }
            curNode.css({
              "top": (event.clientY + docScrollTop + 3) + "px",
              "left": (event.clientX + docScrollLeft + 3) + "px"
            });
            var dX = 0;
            var dY = 0;
            if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) {
              var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),
                isCopy = ((event.ctrlKey || event.metaKey) && setting.confirm.drag.isMove && setting.confirm.drag.isCopy) || (!setting.confirm.drag.isMove && setting.confirm.drag.isCopy),
                isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
                isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
                isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
                canPrev = (isCopy || !isNext) && tools.apply(targetSetting.confirm.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.confirm.drag.prev),
                canNext = (isCopy || !isPrev) && tools.apply(targetSetting.confirm.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.confirm.drag.next),
                canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.confirm.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.confirm.drag.inner);
              function clearMove() {
                tmpTarget = null;
                tmpTargetNodeId = "";
                moveType = consts.move.TYPE_INNER;
                tmpArrow.css({
                  "display": "none"
                });
                if (window.zTreeMoveTimer) {
                  clearTimeout(window.zTreeMoveTimer);
                  window.zTreeMoveTargetNodeTId = null
                }
              }
              if (!canPrev && !canNext && !canInner) {
                clearMove();
              } else {
                var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
                  tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
                  tmpTop = tmpTargetA.offset().top,
                  tmpLeft = tmpTargetA.offset().left,
                  prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,
                  nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,
                  dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();
                if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {
                  dX = 1 - tmpArrow.width();
                  dY = tmpTop - tmpArrow.height() / 2;
                  moveType = consts.move.TYPE_PREV;
                } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {
                  dX = 1 - tmpArrow.width();
                  dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);
                  moveType = consts.move.TYPE_NEXT;
                } else if (canInner) {
                  dX = 5 - tmpArrow.width();
                  dY = tmpTop;
                  moveType = consts.move.TYPE_INNER;
                } else {
                  clearMove();
                }
                if (tmpTarget) {
                  tmpArrow.css({
                    "display": "block",
                    "top": dY + "px",
                    "left": (tmpLeft + dX) + "px"
                  });
                  tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
                  if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
                    startTime = (new Date()).getTime();
                  }
                  if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {
                    var startTimer = true;
                    if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
                      clearTimeout(window.zTreeMoveTimer);
                      window.zTreeMoveTargetNodeTId = null;
                    } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
                      startTimer = false;
                    }
                    if (startTimer) {
                      window.zTreeMoveTimer = setTimeout(function () {
                        if (moveType != consts.move.TYPE_INNER) return;
                        if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.confirm.drag.autoOpenTime
                          && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
                          view.switchNode(targetSetting, tmpTargetNode);
                          if (targetSetting.confirm.drag.autoExpandTrigger) {
                            targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
                          }
                        }
                      }, targetSetting.confirm.drag.autoOpenTime + 50);
                      window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
                    }
                  }
                }
              }
            } else {
              moveType = consts.move.TYPE_INNER;
              if (tmpTarget && tools.apply(targetSetting.confirm.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.confirm.drag.inner)) {
                tmpTarget.addClass(consts.node.TMPTARGET_TREE);
              } else {
                tmpTarget = null;
              }
              tmpArrow.css({
                "display": "none"
              });
              if (window.zTreeMoveTimer) {
                clearTimeout(window.zTreeMoveTimer);
                window.zTreeMoveTargetNodeTId = null;
              }
            }
            preTmpTargetNodeId = tmpTargetNodeId;
            preTmpMoveType = moveType;
            setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);
          }
          return false;
        }
        doc.bind("mouseup", _docMouseUp);
        function _docMouseUp(event) {
          if (window.zTreeMoveTimer) {
            clearTimeout(window.zTreeMoveTimer);
            window.zTreeMoveTargetNodeTId = null;
          }
          preTmpTargetNodeId = null;
          preTmpMoveType = null;
          doc.unbind("mousemove", _docMouseMove);
          doc.unbind("mouseup", _docMouseUp);
          doc.unbind("selectstart", _docSelect);
          body.css("cursor", "");
          if (tmpTarget) {
            tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
            if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
              .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
          }
          tools.showIfameMask(setting, false);
          roots.showHoverDom = true;
          if (root.dragFlag == 0) return;
          root.dragFlag = 0;
          var i, l, tmpNode;
          for (i = 0, l = nodes.length; i < l; i++) {
            tmpNode = nodes[i];
            if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
              view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
              delete root.dragNodeShowBefore[tmpNode.tId];
            }
          }
          if (curNode) curNode.remove();
          if (tmpArrow) tmpArrow.remove();
          var isCopy = ((event.ctrlKey || event.metaKey) && setting.confirm.drag.isMove && setting.confirm.drag.isCopy) || (!setting.confirm.drag.isMove && setting.confirm.drag.isCopy);
          if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
            tmpTarget = null;
          }
          if (tmpTarget) {
            var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);
            if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {
              view.selectNodes(sourceSetting, nodes);
              return;
            }
            var newNodes = isCopy ? tools.clone(nodes) : nodes;
            function dropCallback() {
              if (isOtherTree) {
                if (!isCopy) {
                  for (var i = 0, l = nodes.length; i < l; i++) {
                    view.removeNode(setting, nodes[i]);
                  }
                }
                if (moveType == consts.move.TYPE_INNER) {
                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
                } else {
                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
                }
              } else {
                if (isCopy && moveType == consts.move.TYPE_INNER) {
                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
                } else if (isCopy) {
                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
                } else {
                  if (moveType != consts.move.TYPE_NEXT) {
                    for (i = 0, l = newNodes.length; i < l; i++) {
                      view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
                    }
                  } else {
                    for (i = -1, l = newNodes.length - 1; i < l; l--) {
                      view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
                    }
                  }
                }
              }
              view.selectNodes(targetSetting, newNodes);
              var a = $$(newNodes[0], setting).get(0);
              view.scrollIntoView(setting, a);
              setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
            }
            if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
              view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
            } else {
              dropCallback();
            }
          } else {
            view.selectNodes(sourceSetting, nodes);
            setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
          }
        }
        doc.bind("selectstart", _docSelect);
        function _docSelect() {
          return false;
        }
        // 2018-03-30 FireFox has fixed this issue.
        //Avoid FireFox's Bug
        //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
        // if(eventMouseDown.preventDefault) {
        //     eventMouseDown.preventDefault();
        // }
        return true;
      }
    },
    //method of tools for zTree
    _tools = {
      getAbs: function (obj) {
        var oRect = obj.getBoundingClientRect(),
          scrollTop = document.body.scrollTop + document.documentElement.scrollTop,
          scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
        return [oRect.left + scrollLeft, oRect.top + scrollTop];
      },
      inputFocus: function (inputObj) {
        if (inputObj.get(0)) {
          inputObj.focus();
          tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
        }
      },
      inputSelect: function (inputObj) {
        if (inputObj.get(0)) {
          inputObj.focus();
          inputObj.select();
        }
      },
      setCursorPosition: function (obj, pos) {
        if (obj.setSelectionRange) {
          obj.focus();
          obj.setSelectionRange(pos, pos);
        } else if (obj.createTextRange) {
          var range = obj.createTextRange();
          range.collapse(true);
          range.moveEnd('character', pos);
          range.moveStart('character', pos);
          range.select();
        }
      },
      showIfameMask: function (setting, showSign) {
        var root = data.getRoot(setting);
        //clear full mask
        while (root.dragMaskList.length > 0) {
          root.dragMaskList[0].remove();
          root.dragMaskList.shift();
        }
        if (showSign) {
          //show mask
          var iframeList = $$("iframe", setting);
          for (var i = 0, l = iframeList.length; i < l; i++) {
            var obj = iframeList.get(i),
              r = tools.getAbs(obj),
              dragMask = $$("<div id='zTreeMask_" + i + "' class='zTreeMask' style='top:" + r[1] + "px; left:" + r[0] + "px; width:" + obj.offsetWidth + "px; height:" + obj.offsetHeight + "px;'></div>", setting);
            dragMask.appendTo($$("body", setting));
            root.dragMaskList.push(dragMask);
          }
        }
      }
    },
    //method of operate ztree dom
    _view = {
      addEditBtn: function (setting, node) {
        if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {
          return;
        }
        if (!tools.apply(setting.confirm.showRenameBtn, [setting.treeId, node], setting.confirm.showRenameBtn)) {
          return;
        }
        var aObj = $$(node, consts.id.A, setting),
          editStr = "<span class='" + consts.className.BUTTON + " edit' id='" + node.tId + consts.id.EDIT + "' title='" + tools.apply(setting.confirm.renameTitle, [setting.treeId, node], setting.confirm.renameTitle) + "' treeNode" + consts.id.EDIT + " style='display:none;'></span>";
        aObj.append(editStr);
        $$(node, consts.id.EDIT, setting).bind('click',
          function () {
            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
            view.editNode(setting, node);
            return false;
          }
        ).show();
      },
      addRemoveBtn: function (setting, node) {
        if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {
          return;
        }
        if (!tools.apply(setting.confirm.showRemoveBtn, [setting.treeId, node], setting.confirm.showRemoveBtn)) {
          return;
        }
        var aObj = $$(node, consts.id.A, setting),
          removeStr = "<span class='" + consts.className.BUTTON + " remove' id='" + node.tId + consts.id.REMOVE + "' title='" + tools.apply(setting.confirm.removeTitle, [setting.treeId, node], setting.confirm.removeTitle) + "' treeNode" + consts.id.REMOVE + " style='display:none;'></span>";
        aObj.append(removeStr);
        $$(node, consts.id.REMOVE, setting).bind('click',
          function () {
            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
            view.removeNode(setting, node);
            setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
            return false;
          }
        ).bind('mousedown',
          function (eventMouseDown) {
            return true;
          }
        ).show();
      },
      addHoverDom: function (setting, node) {
        if (data.getRoots().showHoverDom) {
          node.isHover = true;
          if (setting.confirm.enable) {
            view.addEditBtn(setting, node);
            view.addRemoveBtn(setting, node);
          }
          tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
        }
      },
      cancelCurEditNode: function (setting, forceName, isCancel) {
        var root = data.getRoot(setting),
          node = root.curEditNode;
        if (node) {
          var inputObj = root.curEditInput,
            newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());
          if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {
            return false;
          }
          data.nodeName(setting, node, newName);
          var aObj = $$(node, consts.id.A, setting);
          aObj.removeClass(consts.node.CURSELECTED_EDIT);
          inputObj.unbind();
          view.setNodeName(setting, node);
          node.editNameFlag = false;
          root.curEditNode = null;
          root.curEditInput = null;
          view.selectNode(setting, node, false);
          setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);
        }
        root.noSelection = true;
        return true;
      },
      editNode: function (setting, node) {
        var root = data.getRoot(setting);
        view.editNodeBlur = false;
        if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
          setTimeout(function () {
            tools.inputFocus(root.curEditInput);
          }, 0);
          return;
        }
        node.editNameFlag = true;
        view.removeTreeDom(setting, node);
        view.cancelCurEditNode(setting);
        view.selectNode(setting, node, false);
        $$(node, consts.id.SPAN, setting).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
        var inputObj = $$(node, consts.id.INPUT, setting);
        inputObj.attr("value", data.nodeName(setting, node));
        if (setting.confirm.editNameSelectAll) {
          tools.inputSelect(inputObj);
        } else {
          tools.inputFocus(inputObj);
        }
        inputObj.bind('blur', function (event) {
          if (!view.editNodeBlur) {
            view.cancelCurEditNode(setting);
          }
        }).bind('keydown', function (event) {
          if (event.keyCode == "13") {
            view.editNodeBlur = true;
            view.cancelCurEditNode(setting);
          } else if (event.keyCode == "27") {
            view.cancelCurEditNode(setting, null, true);
          }
        }).bind('click', function (event) {
          return false;
        }).bind('dblclick', function (event) {
          return false;
        });
        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);
        root.curEditInput = inputObj;
        root.noSelection = false;
        root.curEditNode = node;
      },
      moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {
        var root = data.getRoot(setting);
        if (targetNode == node) return;
        if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;
        var oldParentNode = (node.parentTId ? node.getParentNode() : root),
          targetNodeIsRoot = (targetNode === null || targetNode == root);
        if (targetNodeIsRoot && targetNode === null) targetNode = root;
        if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
        var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
        if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
          moveType = consts.move.TYPE_INNER;
        }
        if (moveType == consts.move.TYPE_INNER) {
          if (targetNodeIsRoot) {
            //parentTId of root node is null
            node.parentTId = null;
          } else {
            if (!data.nodeIsParent(setting, targetNode)) {
              data.nodeIsParent(setting, targetNode, true);
              targetNode.open = !!targetNode.open;
              view.setNodeLineIcos(setting, targetNode);
            }
            node.parentTId = targetNode.tId;
          }
        }
        //move node Dom
        var targetObj, target_ulObj;
        if (targetNodeIsRoot) {
          targetObj = setting.treeObj;
          target_ulObj = targetObj;
        } else {
          if (!isSilent && moveType == consts.move.TYPE_INNER) {
            view.expandCollapseNode(setting, targetNode, true, false);
          } else if (!isSilent) {
            view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
          }
          targetObj = $$(targetNode, setting);
          target_ulObj = $$(targetNode, consts.id.UL, setting);
          if (!!targetObj.get(0) && !target_ulObj.get(0)) {
            var ulstr = [];
            view.makeUlHtml(setting, targetNode, ulstr, '');
            targetObj.append(ulstr.join(''));
          }
          target_ulObj = $$(targetNode, consts.id.UL, setting);
        }
        var nodeDom = $$(node, setting);
        if (!nodeDom.get(0)) {
          nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');
        } else if (!targetObj.get(0)) {
          nodeDom.remove();
        }
        if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
          target_ulObj.append(nodeDom);
        } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
          targetObj.before(nodeDom);
        } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
          targetObj.after(nodeDom);
        }
        //repair the data after move
        var i, l,
          tmpSrcIndex = -1,
          tmpTargetIndex = 0,
          oldNeighbor = null,
          newNeighbor = null,
          oldLevel = node.level;
        var oldChildren = data.nodeChildren(setting, oldParentNode);
        var targetParentChildren = data.nodeChildren(setting, targetParentNode);
        var targetChildren = data.nodeChildren(setting, targetNode);
        if (node.isFirstNode) {
          tmpSrcIndex = 0;
          if (oldChildren.length > 1) {
            oldNeighbor = oldChildren[1];
            oldNeighbor.isFirstNode = true;
          }
        } else if (node.isLastNode) {
          tmpSrcIndex = oldChildren.length - 1;
          oldNeighbor = oldChildren[tmpSrcIndex - 1];
          oldNeighbor.isLastNode = true;
        } else {
          for (i = 0, l = oldChildren.length; i < l; i++) {
            if (oldChildren[i].tId == node.tId) {
              tmpSrcIndex = i;
              break;
            }
          }
        }
        if (tmpSrcIndex >= 0) {
          oldChildren.splice(tmpSrcIndex, 1);
        }
        if (moveType != consts.move.TYPE_INNER) {
          for (i = 0, l = targetParentChildren.length; i < l; i++) {
            if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;
          }
        }
        if (moveType == consts.move.TYPE_INNER) {
          if (!targetChildren) {
            targetChildren = data.nodeChildren(setting, targetNode, []);
          }
          if (targetChildren.length > 0) {
            newNeighbor = targetChildren[targetChildren.length - 1];
            newNeighbor.isLastNode = false;
          }
          targetChildren.splice(targetChildren.length, 0, node);
          node.isLastNode = true;
          node.isFirstNode = (targetChildren.length == 1);
        } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
          targetParentChildren.splice(tmpTargetIndex, 0, node);
          newNeighbor = targetNode;
          newNeighbor.isFirstNode = false;
          node.parentTId = targetNode.parentTId;
          node.isFirstNode = true;
          node.isLastNode = false;
        } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
          targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
          newNeighbor = targetNode;
          newNeighbor.isLastNode = false;
          node.parentTId = targetNode.parentTId;
          node.isFirstNode = false;
          node.isLastNode = true;
        } else {
          if (moveType == consts.move.TYPE_PREV) {
            targetParentChildren.splice(tmpTargetIndex, 0, node);
          } else {
            targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
          }
          node.parentTId = targetNode.parentTId;
          node.isFirstNode = false;
          node.isLastNode = false;
        }
        data.fixPIdKeyValue(setting, node);
        data.setSonNodeLevel(setting, node.getParentNode(), node);
        //repair node what been moved
        view.setNodeLineIcos(setting, node);
        view.repairNodeLevelClass(setting, node, oldLevel);
        //repair node's old parentNode dom
        if (!setting.data.keep.parent && oldChildren.length < 1) {
          //old parentNode has no child nodes
          data.nodeIsParent(setting, oldParentNode, false);
          oldParentNode.open = false;
          var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),
            tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),
            tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);
          view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
          view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
          tmp_ulObj.css("display", "none");
        } else if (oldNeighbor) {
          //old neigbor node
          view.setNodeLineIcos(setting, oldNeighbor);
        }
        //new neigbor node
        if (newNeighbor) {
          view.setNodeLineIcos(setting, newNeighbor);
        }
        //repair checkbox / radio
        if (!!setting.check && setting.check.enable && view.repairChkClass) {
          view.repairChkClass(setting, oldParentNode);
          view.repairParentChkClassWithSelf(setting, oldParentNode);
          if (oldParentNode != node.parent)
            view.repairParentChkClassWithSelf(setting, node);
        }
        //expand parents after move
        if (!isSilent) {
          view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
        }
      },
      removeEditBtn: function (setting, node) {
        $$(node, consts.id.EDIT, setting).unbind().remove();
      },
      removeRemoveBtn: function (setting, node) {
        $$(node, consts.id.REMOVE, setting).unbind().remove();
      },
      removeTreeDom: function (setting, node) {
        node.isHover = false;
        view.removeEditBtn(setting, node);
        view.removeRemoveBtn(setting, node);
        tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
      },
      repairNodeLevelClass: function (setting, node, oldLevel) {
        if (oldLevel === node.level) return;
        var liObj = $$(node, setting),
          aObj = $$(node, consts.id.A, setting),
          ulObj = $$(node, consts.id.UL, setting),
          oldClass = consts.className.LEVEL + oldLevel,
          newClass = consts.className.LEVEL + node.level;
        liObj.removeClass(oldClass);
        liObj.addClass(newClass);
        aObj.removeClass(oldClass);
        aObj.addClass(newClass);
        ulObj.removeClass(oldClass);
        ulObj.addClass(newClass);
      },
      selectNodes: function (setting, nodes) {
        for (var i = 0, l = nodes.length; i < l; i++) {
          view.selectNode(setting, nodes[i], i > 0);
        }
      }
    },
    _z = {
      tools: _tools,
      view: _view,
      event: _event,
      data: _data
    };
  $.extend(true, $.fn.zTree.consts, _consts);
  $.extend(true, $.fn.zTree._z, _z);
  var zt = $.fn.zTree,
    tools = zt._z.tools,
    consts = zt.consts,
    view = zt._z.view,
    data = zt._z.data,
    event = zt._z.event,
    $$ = tools.$;
  data.exSetting(_setting);
  data.addInitBind(_bindEvent);
  data.addInitUnBind(_unbindEvent);
  data.addInitCache(_initCache);
  data.addInitNode(_initNode);
  data.addInitProxy(_eventProxy);
  data.addInitRoot(_initRoot);
  data.addZTreeTools(_zTreeTools);
  var _cancelPreSelectedNode = view.cancelPreSelectedNode;
  view.cancelPreSelectedNode = function (setting, node) {
    var list = data.getRoot(setting).curSelectedList;
    for (var i = 0, j = list.length; i < j; i++) {
      if (!node || node === list[i]) {
        view.removeTreeDom(setting, list[i]);
        if (node) break;
      }
    }
    if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
  }
  var _createNodes = view.createNodes;
  view.createNodes = function (setting, level, nodes, parentNode, index) {
    if (_createNodes) {
      _createNodes.apply(view, arguments);
    }
    if (!nodes) return;
    if (view.repairParentChkClassWithSelf) {
      view.repairParentChkClassWithSelf(setting, parentNode);
    }
  }
  var _makeNodeUrl = view.makeNodeUrl;
  view.makeNodeUrl = function (setting, node) {
    return setting.confirm.enable ? null : (_makeNodeUrl.apply(view, arguments));
  }
  var _removeNode = view.removeNode;
  view.removeNode = function (setting, node) {
    var root = data.getRoot(setting);
    if (root.curEditNode === node) root.curEditNode = null;
    if (_removeNode) {
      _removeNode.apply(view, arguments);
    }
  }
  var _selectNode = view.selectNode;
  view.selectNode = function (setting, node, addFlag) {
    var root = data.getRoot(setting);
    if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
      return false;
    }
    if (_selectNode) _selectNode.apply(view, arguments);
    view.addHoverDom(setting, node);
    return true;
  }
  var _uCanDo = tools.uCanDo;
  tools.uCanDo = function (setting, e) {
    var root = data.getRoot(setting);
    if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
      return true;
    }
    if (root.curEditNode) {
      view.editNodeBlur = false;
      root.curEditInput.focus();
    }
    return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
  }
})(jQuery);
src/plugins/ztree/js/jquery.ztree.all.min.js
New file
@@ -0,0 +1,166 @@
/*
 * JQuery zTree core v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(r){var J,K,L,M,N,O,v,t={},w={},x={},P={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",
dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},y=[function(a){var b=a.treeObj,c=g.event;b.bind(c.NODECREATED,
function(b,c,i){h.apply(a.callback.onNodeCreated,[b,c,i])});b.bind(c.CLICK,function(b,c,i,e,k){h.apply(a.callback.onClick,[c,i,e,k])});b.bind(c.EXPAND,function(b,c,i){h.apply(a.callback.onExpand,[b,c,i])});b.bind(c.COLLAPSE,function(b,c,i){h.apply(a.callback.onCollapse,[b,c,i])});b.bind(c.ASYNC_SUCCESS,function(b,c,i,e){h.apply(a.callback.onAsyncSuccess,[b,c,i,e])});b.bind(c.ASYNC_ERROR,function(b,c,i,e,k,g){h.apply(a.callback.onAsyncError,[b,c,i,e,k,g])});b.bind(c.REMOVE,function(b,c,i){h.apply(a.callback.onRemove,
[b,c,i])});b.bind(c.SELECTED,function(b,c,i){h.apply(a.callback.onSelected,[c,i])});b.bind(c.UNSELECTED,function(b,c,i){h.apply(a.callback.onUnSelected,[c,i])})}],z=[function(a){var b=g.event;a.treeObj.unbind(b.NODECREATED).unbind(b.CLICK).unbind(b.EXPAND).unbind(b.COLLAPSE).unbind(b.ASYNC_SUCCESS).unbind(b.ASYNC_ERROR).unbind(b.REMOVE).unbind(b.SELECTED).unbind(b.UNSELECTED)}],A=[function(a){var b=e.getCache(a);b||(b={},e.setCache(a,b));b.nodes=[];b.doms=[]}],B=[function(a,b,c,d,f,i){if(c){var m=
e.getRoot(a),k=e.nodeChildren(a,c);c.level=b;c.tId=a.treeId+"_"+ ++m.zId;c.parentTId=d?d.tId:null;c.open=typeof c.open=="string"?h.eqs(c.open,"true"):!!c.open;b=e.nodeIsParent(a,c);h.isArray(k)?(e.nodeIsParent(a,c,!0),c.zAsync=!0):(b=e.nodeIsParent(a,c,b),c.open=b&&!a.async.enable?c.open:!1,c.zAsync=!b);c.isFirstNode=f;c.isLastNode=i;c.getParentNode=function(){return e.getNodeCache(a,c.parentTId)};c.getPreNode=function(){return e.getPreNode(a,c)};c.getNextNode=function(){return e.getNextNode(a,c)};
c.getIndex=function(){return e.getNodeIndex(a,c)};c.getPath=function(){return e.getNodePath(a,c)};c.isAjaxing=!1;e.fixPIdKeyValue(a,c)}}],u=[function(a){var b=a.target,c=e.getSetting(a.data.treeId),d="",f=null,i="",m="",k=null,j=null,o=null;if(h.eqs(a.type,"mousedown"))m="mousedown";else if(h.eqs(a.type,"mouseup"))m="mouseup";else if(h.eqs(a.type,"contextmenu"))m="contextmenu";else if(h.eqs(a.type,"click"))if(h.eqs(b.tagName,"span")&&b.getAttribute("treeNode"+g.id.SWITCH)!==null)d=h.getNodeMainDom(b).id,
i="switchNode";else{if(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}]))d=h.getNodeMainDom(o).id,i="clickNode"}else if(h.eqs(a.type,"dblclick")&&(m="dblclick",o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id,i="switchNode";if(m.length>0&&d.length==0&&(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id;if(d.length>0)switch(f=e.getNodeCache(c,d),i){case "switchNode":e.nodeIsParent(c,f)?h.eqs(a.type,"click")||h.eqs(a.type,
"dblclick")&&h.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?k=J:i="":i="";break;case "clickNode":k=K}switch(m){case "mousedown":j=L;break;case "mouseup":j=M;break;case "dblclick":j=N;break;case "contextmenu":j=O}return{stop:!1,node:f,nodeEventType:i,nodeEventCallback:k,treeEventType:m,treeEventCallback:j}}],C=[function(a){var b=e.getRoot(a);b||(b={},e.setRoot(a,b));e.nodeChildren(a,b,[]);b.expandTriggerFlag=!1;b.curSelectedList=[];b.noSelection=!0;b.createdNodes=[];b.zId=0;b._ver=
(new Date).getTime()}],D=[],E=[],F=[],G=[],H=[],e={addNodeCache:function(a,b){e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=b},getNodeCacheId:function(a){return a.substring(a.lastIndexOf("_")+1)},addAfterA:function(a){E.push(a)},addBeforeA:function(a){D.push(a)},addInnerAfterA:function(a){G.push(a)},addInnerBeforeA:function(a){F.push(a)},addInitBind:function(a){y.push(a)},addInitUnBind:function(a){z.push(a)},addInitCache:function(a){A.push(a)},addInitNode:function(a){B.push(a)},addInitProxy:function(a,
b){b?u.splice(0,0,a):u.push(a)},addInitRoot:function(a){C.push(a)},addNodesData:function(a,b,c,d){var f=e.nodeChildren(a,b);f?c>=f.length&&(c=-1):(f=e.nodeChildren(a,b,[]),c=-1);if(f.length>0&&c===0)f[0].isFirstNode=!1,j.setNodeLineIcos(a,f[0]);else if(f.length>0&&c<0)f[f.length-1].isLastNode=!1,j.setNodeLineIcos(a,f[f.length-1]);e.nodeIsParent(a,b,!0);c<0?e.nodeChildren(a,b,f.concat(d)):(a=[c,0].concat(d),f.splice.apply(f,a))},addSelectedNode:function(a,b){var c=e.getRoot(a);e.isSelectedNode(a,b)||
c.curSelectedList.push(b)},addCreatedNode:function(a,b){(a.callback.onNodeCreated||a.view.addDiyDom)&&e.getRoot(a).createdNodes.push(b)},addZTreeTools:function(a){H.push(a)},exSetting:function(a){r.extend(!0,P,a)},fixPIdKeyValue:function(a,b){a.data.simpleData.enable&&(b[a.data.simpleData.pIdKey]=b.parentTId?b.getParentNode()[a.data.simpleData.idKey]:a.data.simpleData.rootPId)},getAfterA:function(a,b,c){for(var d=0,e=E.length;d<e;d++)E[d].apply(this,arguments)},getBeforeA:function(a,b,c){for(var d=
0,e=D.length;d<e;d++)D[d].apply(this,arguments)},getInnerAfterA:function(a,b,c){for(var d=0,e=G.length;d<e;d++)G[d].apply(this,arguments)},getInnerBeforeA:function(a,b,c){for(var d=0,e=F.length;d<e;d++)F[d].apply(this,arguments)},getCache:function(a){return x[a.treeId]},getNodeIndex:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d;return-1},getNextNode:function(a,b){if(!b)return null;for(var c=
b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d==f?null:c[d+1];return null},getNodeByParam:function(a,b,c,d){if(!b||!c)return null;for(var f=0,i=b.length;f<i;f++){var m=b[f];if(m[c]==d)return b[f];m=e.nodeChildren(a,m);if(m=e.getNodeByParam(a,m,c,d))return m}return null},getNodeCache:function(a,b){if(!b)return null;var c=x[a.treeId].nodes[e.getNodeCacheId(b)];return c?c:null},getNodePath:function(a,b){if(!b)return null;var c;(c=b.parentTId?
b.getParentNode().getPath():[])&&c.push(b);return c},getNodes:function(a){return e.nodeChildren(a,e.getRoot(a))},getNodesByParam:function(a,b,c,d){if(!b||!c)return[];for(var f=[],i=0,m=b.length;i<m;i++){var k=b[i];k[c]==d&&f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParam(a,k,c,d))}return f},getNodesByParamFuzzy:function(a,b,c,d){if(!b||!c)return[];for(var f=[],d=d.toLowerCase(),i=0,m=b.length;i<m;i++){var k=b[i];typeof k[c]=="string"&&b[i][c].toLowerCase().indexOf(d)>-1&&f.push(k);k=e.nodeChildren(a,
k);f=f.concat(e.getNodesByParamFuzzy(a,k,c,d))}return f},getNodesByFilter:function(a,b,c,d,f){if(!b)return d?null:[];for(var i=d?null:[],m=0,k=b.length;m<k;m++){var g=b[m];if(h.apply(c,[g,f],!1)){if(d)return g;i.push(g)}g=e.nodeChildren(a,g);g=e.getNodesByFilter(a,g,c,d,f);if(d&&g)return g;i=d?g:i.concat(g)}return i},getPreNode:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length;d<f;d++)if(c[d]===b)return d==0?null:c[d-1];return null},
getRoot:function(a){return a?w[a.treeId]:null},getRoots:function(){return w},getSetting:function(a){return t[a]},getSettings:function(){return t},getZTreeTools:function(a){return(a=this.getRoot(this.getSetting(a)))?a.treeTools:null},initCache:function(a){for(var b=0,c=A.length;b<c;b++)A[b].apply(this,arguments)},initNode:function(a,b,c,d,e,i){for(var m=0,g=B.length;m<g;m++)B[m].apply(this,arguments)},initRoot:function(a){for(var b=0,c=C.length;b<c;b++)C[b].apply(this,arguments)},isSelectedNode:function(a,
b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d])return!0;return!1},nodeChildren:function(a,b,c){if(!b)return null;a=a.data.key.children;typeof c!=="undefined"&&(b[a]=c);return b[a]},nodeIsParent:function(a,b,c){if(!b)return!1;a=a.data.key.isParent;typeof c!=="undefined"?(typeof c==="string"&&(c=h.eqs(c,"true")),b[a]=!!c):b[a]=typeof b[a]=="string"?h.eqs(b[a],"true"):!!b[a];return b[a]},nodeName:function(a,b,c){a=a.data.key.name;typeof c!=="undefined"&&
(b[a]=c);return""+b[a]},nodeTitle:function(a,b){return""+b[a.data.key.title===""?a.data.key.name:a.data.key.title]},removeNodeCache:function(a,b){var c=e.nodeChildren(a,b);if(c)for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=null},removeSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d]||!e.getNodeCache(a,c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),a.treeObj.trigger(g.event.UNSELECTED,
[a.treeId,b]),d--,f--},setCache:function(a,b){x[a.treeId]=b},setRoot:function(a,b){w[a.treeId]=b},setZTreeTools:function(a,b){for(var c=0,d=H.length;c<d;c++)H[c].apply(this,arguments)},transformToArrayFormat:function(a,b){function c(b){d.push(b);(b=e.nodeChildren(a,b))&&(d=d.concat(e.transformToArrayFormat(a,b)))}if(!b)return[];var d=[];if(h.isArray(b))for(var f=0,i=b.length;f<i;f++)c(b[f]);else c(b);return d},transformTozTreeFormat:function(a,b){var c,d,f=a.data.simpleData.idKey,i=a.data.simpleData.pIdKey;
if(!f||f==""||!b)return[];if(h.isArray(b)){var g=[],k={};for(c=0,d=b.length;c<d;c++)k[b[c][f]]=b[c];for(c=0,d=b.length;c<d;c++){var j=k[b[c][i]];if(j&&b[c][f]!=b[c][i]){var o=e.nodeChildren(a,j);o||(o=e.nodeChildren(a,j,[]));o.push(b[c])}else g.push(b[c])}return g}else return[b]}},n={bindEvent:function(a){for(var b=0,c=y.length;b<c;b++)y[b].apply(this,arguments)},unbindEvent:function(a){for(var b=0,c=z.length;b<c;b++)z[b].apply(this,arguments)},bindTree:function(a){var b={treeId:a.treeId},c=a.treeObj;
a.view.txtSelectedEnable||c.bind("selectstart",v).css({"-moz-user-select":"-moz-none"});c.bind("click",b,n.proxy);c.bind("dblclick",b,n.proxy);c.bind("mouseover",b,n.proxy);c.bind("mouseout",b,n.proxy);c.bind("mousedown",b,n.proxy);c.bind("mouseup",b,n.proxy);c.bind("contextmenu",b,n.proxy)},unbindTree:function(a){a.treeObj.unbind("selectstart",v).unbind("click",n.proxy).unbind("dblclick",n.proxy).unbind("mouseover",n.proxy).unbind("mouseout",n.proxy).unbind("mousedown",n.proxy).unbind("mouseup",
n.proxy).unbind("contextmenu",n.proxy)},doProxy:function(a){for(var b=[],c=0,d=u.length;c<d;c++){var e=u[c].apply(this,arguments);b.push(e);if(e.stop)break}return b},proxy:function(a){var b=e.getSetting(a.data.treeId);if(!h.uCanDo(b,a))return!0;for(var b=n.doProxy(a),c=!0,d=0,f=b.length;d<f;d++){var i=b[d];i.nodeEventCallback&&(c=i.nodeEventCallback.apply(i,[a,i.node])&&c);i.treeEventCallback&&(c=i.treeEventCallback.apply(i,[a,i.node])&&c)}return c}};J=function(a,b){var c=e.getSetting(a.data.treeId);
if(b.open){if(h.apply(c.callback.beforeCollapse,[c.treeId,b],!0)==!1)return!0}else if(h.apply(c.callback.beforeExpand,[c.treeId,b],!0)==!1)return!0;e.getRoot(c).expandTriggerFlag=!0;j.switchNode(c,b);return!0};K=function(a,b){var c=e.getSetting(a.data.treeId),d=c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&e.isSelectedNode(c,b)?0:c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&c.view.selectedMulti?2:1;if(h.apply(c.callback.beforeClick,[c.treeId,b,d],!0)==!1)return!0;d===0?j.cancelPreSelectedNode(c,
b):j.selectNode(c,b,d===2);c.treeObj.trigger(g.event.CLICK,[a,c.treeId,b,d]);return!0};L=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseDown,[c.treeId,b],!0)&&h.apply(c.callback.onMouseDown,[a,c.treeId,b]);return!0};M=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseUp,[c.treeId,b],!0)&&h.apply(c.callback.onMouseUp,[a,c.treeId,b]);return!0};N=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeDblClick,[c.treeId,b],!0)&&
h.apply(c.callback.onDblClick,[a,c.treeId,b]);return!0};O=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeRightClick,[c.treeId,b],!0)&&h.apply(c.callback.onRightClick,[a,c.treeId,b]);return typeof c.callback.onRightClick!="function"};v=function(a){a=a.originalEvent.srcElement.nodeName.toLowerCase();return a==="input"||a==="textarea"};var h={apply:function(a,b,c){return typeof a=="function"?a.apply(Q,b?b:[]):c},canAsync:function(a,b){var c=e.nodeChildren(a,b),d=e.nodeIsParent(a,
b);return a.async.enable&&b&&d&&!(b.zAsync||c&&c.length>0)},clone:function(a){if(a===null)return null;var b=h.isArray(a)?[]:{},c;for(c in a)b[c]=a[c]instanceof Date?new Date(a[c].getTime()):typeof a[c]==="object"?h.clone(a[c]):a[c];return b},eqs:function(a,b){return a.toLowerCase()===b.toLowerCase()},isArray:function(a){return Object.prototype.toString.apply(a)==="[object Array]"},isElement:function(a){return typeof HTMLElement==="object"?a instanceof HTMLElement:a&&typeof a==="object"&&a!==null&&
a.nodeType===1&&typeof a.nodeName==="string"},$:function(a,b,c){b&&typeof b!="string"&&(c=b,b="");return typeof a=="string"?r(a,c?c.treeObj.get(0).ownerDocument:null):r("#"+a.tId+b,c?c.treeObj:null)},getMDom:function(a,b,c){if(!b)return null;for(;b&&b.id!==a.treeId;){for(var d=0,e=c.length;b.tagName&&d<e;d++)if(h.eqs(b.tagName,c[d].tagName)&&b.getAttribute(c[d].attrName)!==null)return b;b=b.parentNode}return null},getNodeMainDom:function(a){return r(a).parent("li").get(0)||r(a).parentsUntil("li").parent().get(0)},
isChildOrSelf:function(a,b){return r(a).closest("#"+b).length>0},uCanDo:function(){return!0}},j={addNodes:function(a,b,c,d,f){var i=e.nodeIsParent(a,b);if(!a.data.keep.leaf||!b||i)if(h.isArray(d)||(d=[d]),a.data.simpleData.enable&&(d=e.transformTozTreeFormat(a,d)),b){var i=l(b,g.id.SWITCH,a),m=l(b,g.id.ICON,a),k=l(b,g.id.UL,a);if(!b.open)j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,m,g.folder.CLOSE),b.open=!1,k.css({display:"none"});e.addNodesData(a,b,c,d);j.createNodes(a,b.level+
1,d,b,c);f||j.expandCollapseParentNode(a,b,!0)}else e.addNodesData(a,e.getRoot(a),c,d),j.createNodes(a,0,d,null,c)},appendNodes:function(a,b,c,d,f,i,g){if(!c)return[];var k=[],h=d?d:e.getRoot(a),h=e.nodeChildren(a,h),o,l;if(!h||f>=h.length-c.length)f=-1;for(var s=0,n=c.length;s<n;s++){var p=c[s];i&&(o=(f===0||h.length==c.length)&&s==0,l=f<0&&s==c.length-1,e.initNode(a,b,p,d,o,l,g),e.addNodeCache(a,p));o=e.nodeIsParent(a,p);l=[];var I=e.nodeChildren(a,p);I&&I.length>0&&(l=j.appendNodes(a,b+1,I,p,-1,
i,g&&p.open));g&&(j.makeDOMNodeMainBefore(k,a,p),j.makeDOMNodeLine(k,a,p),e.getBeforeA(a,p,k),j.makeDOMNodeNameBefore(k,a,p),e.getInnerBeforeA(a,p,k),j.makeDOMNodeIcon(k,a,p),e.getInnerAfterA(a,p,k),j.makeDOMNodeNameAfter(k,a,p),e.getAfterA(a,p,k),o&&p.open&&j.makeUlHtml(a,p,k,l.join("")),j.makeDOMNodeMainAfter(k,a,p),e.addCreatedNode(a,p))}return k},appendParentULDom:function(a,b){var c=[],d=l(b,a);!d.get(0)&&b.parentTId&&(j.appendParentULDom(a,b.getParentNode()),d=l(b,a));var f=l(b,g.id.UL,a);f.get(0)&&
f.remove();f=e.nodeChildren(a,b);f=j.appendNodes(a,b.level+1,f,b,-1,!1,!0);j.makeUlHtml(a,b,c,f.join(""));d.append(c.join(""))},asyncNode:function(a,b,c,d){var f,i;f=e.nodeIsParent(a,b);if(b&&!f)return h.apply(d),!1;else if(b&&b.isAjaxing)return!1;else if(h.apply(a.callback.beforeAsync,[a.treeId,b],!0)==!1)return h.apply(d),!1;if(b)b.isAjaxing=!0,l(b,g.id.ICON,a).attr({style:"","class":g.className.BUTTON+" "+g.className.ICO_LOADING});var m={},k=h.apply(a.async.autoParam,[a.treeId,b],a.async.autoParam);
for(f=0,i=k.length;b&&f<i;f++){var q=k[f].split("="),o=q;q.length>1&&(o=q[1],q=q[0]);m[o]=b[q]}k=h.apply(a.async.otherParam,[a.treeId,b],a.async.otherParam);if(h.isArray(k))for(f=0,i=k.length;f<i;f+=2)m[k[f]]=k[f+1];else for(var n in k)m[n]=k[n];var s=e.getRoot(a)._ver;r.ajax({contentType:a.async.contentType,cache:!1,type:a.async.type,url:h.apply(a.async.url,[a.treeId,b],a.async.url),data:a.async.contentType.indexOf("application/json")>-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,
xhrFields:a.async.xhrFields,success:function(i){if(s==e.getRoot(a)._ver){var f=[];try{f=!i||i.length==0?[]:typeof i=="string"?eval("("+i+")"):i}catch(k){f=i}if(b)b.isAjaxing=null,b.zAsync=!0;j.setNodeLineIcos(a,b);f&&f!==""?(f=h.apply(a.async.dataFilter,[a.treeId,b,f],f),j.addNodes(a,b,-1,f?h.clone(f):[],!!c)):j.addNodes(a,b,-1,[],!!c);a.treeObj.trigger(g.event.ASYNC_SUCCESS,[a.treeId,b,i]);h.apply(d)}},error:function(c,d,i){if(s==e.getRoot(a)._ver){if(b)b.isAjaxing=null;j.setNodeLineIcos(a,b);a.treeObj.trigger(g.event.ASYNC_ERROR,
[a.treeId,b,c,d,i])}}});return!0},cancelPreSelectedNode:function(a,b,c){var d=e.getRoot(a).curSelectedList,f,i;for(f=d.length-1;f>=0;f--)if(i=d[f],b===i||!b&&(!c||c!==i))if(l(i,g.id.A,a).removeClass(g.node.CURSELECTED),b){e.removeSelectedNode(a,b);break}else d.splice(f,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,i])},createNodeCallback:function(a){if(a.callback.onNodeCreated||a.view.addDiyDom)for(var b=e.getRoot(a);b.createdNodes.length>0;){var c=b.createdNodes.shift();h.apply(a.view.addDiyDom,
[a.treeId,c]);a.callback.onNodeCreated&&a.treeObj.trigger(g.event.NODECREATED,[a.treeId,c])}},createNodes:function(a,b,c,d,f){if(c&&c.length!=0){var i=e.getRoot(a),m=!d||d.open||!!l(e.nodeChildren(a,d)[0],a).get(0);i.createdNodes=[];var b=j.appendNodes(a,b,c,d,f,!0,m),k,h;d?(d=l(d,g.id.UL,a),d.get(0)&&(k=d)):k=a.treeObj;k&&(f>=0&&(h=k.children()[f]),f>=0&&h?r(h).before(b.join("")):k.append(b.join("")));j.createNodeCallback(a)}},destroy:function(a){a&&(e.initCache(a),e.initRoot(a),n.unbindTree(a),
n.unbindEvent(a),a.treeObj.empty(),delete t[a.treeId])},expandCollapseNode:function(a,b,c,d,f){var i=e.getRoot(a),m;if(b){var k=e.nodeChildren(a,b),q=e.nodeIsParent(a,b);if(i.expandTriggerFlag)m=f,f=function(){m&&m();b.open?a.treeObj.trigger(g.event.EXPAND,[a.treeId,b]):a.treeObj.trigger(g.event.COLLAPSE,[a.treeId,b])},i.expandTriggerFlag=!1;if(!b.open&&q&&(!l(b,g.id.UL,a).get(0)||k&&k.length>0&&!l(k[0],a).get(0)))j.appendParentULDom(a,b),j.createNodeCallback(a);if(b.open==c)h.apply(f,[]);else{var c=
l(b,g.id.UL,a),i=l(b,g.id.SWITCH,a),o=l(b,g.id.ICON,a);q?(b.open=!b.open,b.iconOpen&&b.iconClose&&o.attr("style",j.makeNodeIcoStyle(a,b)),b.open?(j.replaceSwitchClass(b,i,g.folder.OPEN),j.replaceIcoClass(b,o,g.folder.OPEN),d==!1||a.view.expandSpeed==""?(c.show(),h.apply(f,[])):k&&k.length>0?c.slideDown(a.view.expandSpeed,f):(c.show(),h.apply(f,[]))):(j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,o,g.folder.CLOSE),d==!1||a.view.expandSpeed==""||!(k&&k.length>0)?(c.hide(),h.apply(f,[])):
c.slideUp(a.view.expandSpeed,f))):h.apply(f,[])}}else h.apply(f,[])},expandCollapseParentNode:function(a,b,c,d,e){b&&(b.parentTId?(j.expandCollapseNode(a,b,c,d),b.parentTId&&j.expandCollapseParentNode(a,b.getParentNode(),c,d,e)):j.expandCollapseNode(a,b,c,d,e))},expandCollapseSonNode:function(a,b,c,d,f){var i=e.getRoot(a),i=b?e.nodeChildren(a,b):e.nodeChildren(a,i),g=b?!1:d,k=e.getRoot(a).expandTriggerFlag;e.getRoot(a).expandTriggerFlag=!1;if(i)for(var h=0,l=i.length;h<l;h++)i[h]&&j.expandCollapseSonNode(a,
i[h],c,g);e.getRoot(a).expandTriggerFlag=k;j.expandCollapseNode(a,b,c,d,f)},isSelectedNode:function(a,b){if(!b)return!1;var c=e.getRoot(a).curSelectedList,d;for(d=c.length-1;d>=0;d--)if(b===c[d])return!0;return!1},makeDOMNodeIcon:function(a,b,c){var d=e.nodeName(b,c),d=b.view.nameIsHTML?d:d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");a.push("<span id='",c.tId,g.id.ICON,"' title='' treeNode",g.id.ICON," class='",j.makeNodeIcoClass(b,c),"' style='",j.makeNodeIcoStyle(b,c),"'></span><span id='",
c.tId,g.id.SPAN,"' class='",g.className.NAME,"'>",d,"</span>")},makeDOMNodeLine:function(a,b,c){a.push("<span id='",c.tId,g.id.SWITCH,"' title='' class='",j.makeNodeLineClass(b,c),"' treeNode",g.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(a){a.push("</li>")},makeDOMNodeMainBefore:function(a,b,c){a.push("<li id='",c.tId,"' class='",g.className.LEVEL,c.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(a){a.push("</a>")},makeDOMNodeNameBefore:function(a,b,c){var d=
e.nodeTitle(b,c),f=j.makeNodeUrl(b,c),i=j.makeNodeFontCss(b,c),m=[],k;for(k in i)m.push(k,":",i[k],";");a.push("<a id='",c.tId,g.id.A,"' class='",g.className.LEVEL,c.level,"' treeNode",g.id.A,' onclick="',c.click||"",'" ',f!=null&&f.length>0?"href='"+f+"'":""," target='",j.makeNodeTarget(c),"' style='",m.join(""),"'");h.apply(b.view.showTitle,[b.treeId,c],b.view.showTitle)&&d&&a.push("title='",d.replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"'");a.push(">")},makeNodeFontCss:function(a,
b){var c=h.apply(a.view.fontCss,[a.treeId,b],a.view.fontCss);return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(a,b){var c=["ico"];if(!b.isAjaxing){var d=e.nodeIsParent(a,b);c[0]=(b.iconSkin?b.iconSkin+"_":"")+c[0];d?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU)}return g.className.BUTTON+" "+c.join("_")},makeNodeIcoStyle:function(a,b){var c=[];if(!b.isAjaxing){var d=e.nodeIsParent(a,b)&&b.iconOpen&&b.iconClose?b.open?b.iconOpen:b.iconClose:b[a.data.key.icon];d&&c.push("background:url(",
d,") 0 0 no-repeat;");(a.view.showIcon==!1||!h.apply(a.view.showIcon,[a.treeId,b],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(a,b){var c=[];a.view.showLine?b.level==0&&b.isFirstNode&&b.isLastNode?c.push(g.line.ROOT):b.level==0&&b.isFirstNode?c.push(g.line.ROOTS):b.isLastNode?c.push(g.line.BOTTOM):c.push(g.line.CENTER):c.push(g.line.NOLINE);e.nodeIsParent(a,b)?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU);return j.makeNodeLineClassEx(b)+c.join("_")},
makeNodeLineClassEx:function(a){return g.className.BUTTON+" "+g.className.LEVEL+a.level+" "+g.className.SWITCH+" "},makeNodeTarget:function(a){return a.target||"_blank"},makeNodeUrl:function(a,b){var c=a.data.key.url;return b[c]?b[c]:null},makeUlHtml:function(a,b,c,d){c.push("<ul id='",b.tId,g.id.UL,"' class='",g.className.LEVEL,b.level," ",j.makeUlLineClass(a,b),"' style='display:",b.open?"block":"none","'>");c.push(d);c.push("</ul>")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?
g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c=e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.removeSelectedNode(a);delete b[a.data.key.children];a.data.keep.parent?l(b,g.id.UL,a).empty():(e.nodeIsParent(a,b,!1),b.open=!1,c=l(b,g.id.SWITCH,a),d=l(b,g.id.ICON,a),j.replaceSwitchClass(b,c,g.folder.DOCU),j.replaceIcoClass(b,d,g.folder.DOCU),l(b,g.id.UL,a).remove())}}},scrollIntoView:function(a,b){if(b)if(typeof Element==="undefined"){var c=a.treeObj.get(0).getBoundingClientRect(),
d=b.getBoundingClientRect();(d.top<c.top||d.bottom>c.bottom||d.right>c.right||d.left<c.left)&&b.scrollIntoView()}else{if(!Element.prototype.scrollIntoViewIfNeeded)Element.prototype.scrollIntoViewIfNeeded=function(a){function b(a,c){return{start:a,length:c,end:a+c}}function c(b,d){return!1===a||d.start<b.end&&b.start<d.end?Math.max(b.end-d.length,Math.min(d.start,b.start)):(b.start+b.end-d.length)/2}function d(a,b){return{x:a,y:b,translate:function(c,i){return d(a+c,b+i)}}}function e(a,b){for(;a;)b=
b.translate(a.offsetLeft,a.offsetTop),a=a.offsetParent;return b}for(var g=e(this,d(0,0)),j=d(this.offsetWidth,this.offsetHeight),h=this.parentNode,l;h instanceof HTMLElement;)l=e(h,d(h.clientLeft,h.clientTop)),h.scrollLeft=c(b(g.x-l.x,j.x),b(h.scrollLeft,h.clientWidth)),h.scrollTop=c(b(g.y-l.y,j.y),b(h.scrollTop,h.clientHeight)),g=g.translate(-h.scrollLeft,-h.scrollTop),h=h.parentNode};b.scrollIntoViewIfNeeded()}},setFirstNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[0].isFirstNode=
!0},setLastNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[c.length-1].isLastNode=!0},removeNode:function(a,b){var c=e.getRoot(a),d=b.parentTId?b.getParentNode():c;b.isFirstNode=!1;b.isLastNode=!1;b.getPreNode=function(){return null};b.getNextNode=function(){return null};if(e.getNodeCache(a,b.tId)){l(b,a).remove();e.removeNodeCache(a,b);e.removeSelectedNode(a,b);for(var f=e.nodeChildren(a,d),i=0,h=f.length;i<h;i++)if(f[i].tId==b.tId){f.splice(i,1);break}j.setFirstNode(a,d);j.setLastNode(a,
d);var k,i=f.length;if(!a.data.keep.parent&&i==0)e.nodeIsParent(a,d,!1),d.open=!1,delete d[a.data.key.children],i=l(d,g.id.UL,a),h=l(d,g.id.SWITCH,a),k=l(d,g.id.ICON,a),j.replaceSwitchClass(d,h,g.folder.DOCU),j.replaceIcoClass(d,k,g.folder.DOCU),i.css("display","none");else if(a.view.showLine&&i>0){var q=f[i-1],i=l(q,g.id.UL,a),h=l(q,g.id.SWITCH,a);k=l(q,g.id.ICON,a);d==c?f.length==1?j.replaceSwitchClass(q,h,g.line.ROOT):(c=l(f[0],g.id.SWITCH,a),j.replaceSwitchClass(f[0],c,g.line.ROOTS),j.replaceSwitchClass(q,
h,g.line.BOTTOM)):j.replaceSwitchClass(q,h,g.line.BOTTOM);i.removeClass(g.line.LINE)}}},replaceIcoClass:function(a,b,c){if(b&&!a.isAjaxing&&(a=b.attr("class"),a!=void 0)){a=a.split("_");switch(c){case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:a[a.length-1]=c}b.attr("class",a.join("_"))}},replaceSwitchClass:function(a,b,c){if(b){var d=b.attr("class");if(d!=void 0){d=d.split("_");switch(c){case g.line.ROOT:case g.line.ROOTS:case g.line.CENTER:case g.line.BOTTOM:case g.line.NOLINE:d[0]=j.makeNodeLineClassEx(a)+
c;break;case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:d[1]=c}b.attr("class",d.join("_"));c!==g.folder.DOCU?b.removeAttr("disabled"):b.attr("disabled","disabled")}}},selectNode:function(a,b,c){c||j.cancelPreSelectedNode(a,null,b);l(b,g.id.A,a).addClass(g.node.CURSELECTED);e.addSelectedNode(a,b);a.treeObj.trigger(g.event.SELECTED,[a.treeId,b])},setNodeFontCss:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeFontCss(a,b);d&&c.css(d)},setNodeLineIcos:function(a,b){if(b){var c=l(b,g.id.SWITCH,
a),d=l(b,g.id.UL,a),f=l(b,g.id.ICON,a),i=j.makeUlLineClass(a,b);i.length==0?d.removeClass(g.line.LINE):d.addClass(i);c.attr("class",j.makeNodeLineClass(a,b));e.nodeIsParent(a,b)?c.removeAttr("disabled"):c.attr("disabled","disabled");f.removeAttr("style");f.attr("style",j.makeNodeIcoStyle(a,b));f.attr("class",j.makeNodeIcoClass(a,b))}},setNodeName:function(a,b){var c=e.nodeTitle(a,b),d=l(b,g.id.SPAN,a);d.empty();a.view.nameIsHTML?d.html(e.nodeName(a,b)):d.text(e.nodeName(a,b));h.apply(a.view.showTitle,
[a.treeId,b],a.view.showTitle)&&l(b,g.id.A,a).attr("title",!c?"":c)},setNodeTarget:function(a,b){l(b,g.id.A,a).attr("target",j.makeNodeTarget(b))},setNodeUrl:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeUrl(a,b);d==null||d.length==0?c.removeAttr("href"):c.attr("href",d)},switchNode:function(a,b){b.open||!h.canAsync(a,b)?j.expandCollapseNode(a,b,!b.open):a.async.enable?j.asyncNode(a,b)||j.expandCollapseNode(a,b,!b.open):b&&j.expandCollapseNode(a,b,!b.open)}};r.fn.zTree={consts:{className:{BUTTON:"button",
LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",
CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_z:{tools:h,view:j,event:n,data:e},getZTreeObj:function(a){return(a=e.getZTreeTools(a))?a:null},destroy:function(a){if(a&&a.length>0)j.destroy(e.getSetting(a));else for(var b in t)j.destroy(t[b])},init:function(a,b,c){var d=h.clone(P);r.extend(!0,d,b);d.treeId=a.attr("id");d.treeObj=a;d.treeObj.empty();t[d.treeId]=d;if(typeof document.body.style.maxHeight==="undefined")d.view.expandSpeed="";e.initRoot(d);a=e.getRoot(d);c=c?h.clone(h.isArray(c)?
c:[c]):[];d.data.simpleData.enable?e.nodeChildren(d,a,e.transformTozTreeFormat(d,c)):e.nodeChildren(d,a,c);e.initCache(d);n.unbindTree(d);n.bindTree(d);n.unbindEvent(d);n.bindEvent(d);var f={setting:d,addNodes:function(a,b,c,f){function g(){j.addNodes(d,a,b,n,f==!0)}a||(a=null);var l=e.nodeIsParent(d,a);if(a&&!l&&d.data.keep.leaf)return null;l=parseInt(b,10);isNaN(l)?(f=!!c,c=b,b=-1):b=l;if(!c)return null;var n=h.clone(h.isArray(c)?c:[c]);h.canAsync(d,a)?j.asyncNode(d,a,f,g):g();return n},cancelSelectedNode:function(a){j.cancelPreSelectedNode(d,
a)},destroy:function(){j.destroy(d)},expandAll:function(a){a=!!a;j.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,f,g){function n(){var b=l(a,d).get(0);b&&f!==!1&&j.scrollIntoView(d,b)}if(!a||!e.nodeIsParent(d,a))return null;b!==!0&&b!==!1&&(b=!a.open);if((g=!!g)&&b&&h.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(g&&!b&&h.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&j.expandCollapseParentNode(d,a.getParentNode(),
b,!1);if(b===a.open&&!c)return null;e.getRoot(d).expandTriggerFlag=g;!h.canAsync(d,a)&&c?j.expandCollapseSonNode(d,a,b,!0,n):(a.open=!b,j.switchNode(this.setting,a),n());return b},getNodes:function(){return e.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:e.getNodeByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodeByTId:function(a){return e.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:e.getNodesByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,
b,c){return!a?null:e.getNodesByParamFuzzy(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,f){b=!!b;return!a||typeof a!="function"?b?null:[]:e.getNodesByFilter(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b,f)},getNodeIndex:function(a){if(!a)return null;for(var b=a.parentTId?a.getParentNode():e.getRoot(d),b=e.nodeChildren(d,b),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1},getSelectedNodes:function(){for(var a=[],b=e.getRoot(d).curSelectedList,c=0,f=b.length;c<f;c++)a.push(b[c]);
return a},isSelectedNode:function(a){return e.isSelectedNode(d,a)},reAsyncChildNodesPromise:function(a,b,c){return new Promise(function(d,e){try{f.reAsyncChildNodes(a,b,c,function(){d(a)})}catch(g){e(g)}})},reAsyncChildNodes:function(a,b,c,f){if(this.setting.async.enable){var h=!a;h&&(a=e.getRoot(d));if(b=="refresh"){for(var b=e.nodeChildren(d,a),n=0,r=b?b.length:0;n<r;n++)e.removeNodeCache(d,b[n]);e.removeSelectedNode(d);e.nodeChildren(d,a,[]);h?this.setting.treeObj.empty():l(a,g.id.UL,d).empty()}j.asyncNode(this.setting,
h?null:a,!!c,f)}},refresh:function(){this.setting.treeObj.empty();var a=e.getRoot(d),b=e.nodeChildren(d,a);e.initRoot(d);e.nodeChildren(d,a,b);e.initCache(d);j.createNodes(d,0,e.nodeChildren(d,a),null,-1)},removeChildNodes:function(a){if(!a)return null;var b=e.nodeChildren(d,a);j.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&h.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(j.removeNode(d,a),b&&this.setting.treeObj.trigger(g.event.REMOVE,[d.treeId,a])))},selectNode:function(a,
b,c){function e(){if(!c){var b=l(a,d).get(0);j.scrollIntoView(d,b)}}if(a&&h.uCanDo(d)){b=d.view.selectedMulti&&b;if(a.parentTId)j.expandCollapseParentNode(d,a.getParentNode(),!0,!1,e);else if(!c)try{l(a,d).focus().blur()}catch(f){}j.selectNode(d,a,b)}},transformTozTreeNodes:function(a){return e.transformTozTreeFormat(d,a)},transformToArray:function(a){return e.transformToArrayFormat(d,a)},updateNode:function(a){a&&l(a,d).get(0)&&h.uCanDo(d)&&(j.setNodeName(d,a),j.setNodeTarget(d,a),j.setNodeUrl(d,
a),j.setNodeLineIcos(d,a),j.setNodeFontCss(d,a))}};a.treeTools=f;e.setZTreeTools(d,f);(c=e.nodeChildren(d,a))&&c.length>0?j.createNodes(d,0,c,null,-1):d.async.enable&&d.async.url&&d.async.url!==""&&j.asyncNode(d);return f}};var Q=r.fn.zTree,l=h.$,g=Q.consts})(jQuery);
/*
 * JQuery zTree excheck v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(m){var p,q,r,o={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},v={check:{enable:!1,autoCheckTrigger:!1,chkStyle:o.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:o.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};p=function(c,
a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId);if(i.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;var d=f.nodeChecked(b,a);f.nodeChecked(b,a,!d);e.checkNodeRelation(b,a);d=n(a,h.id.CHECK,b);e.setChkClass(b,d,a);e.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(h.event.CHECK,[c,b.treeId,a]);return!0};q=function(c,a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=n(a,h.id.CHECK,b);a.check_Focus=!0;e.setChkClass(b,d,a);return!0};r=function(c,
a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=n(a,h.id.CHECK,b);a.check_Focus=!1;e.setChkClass(b,d,a);return!0};m.extend(!0,m.fn.zTree.consts,o);m.extend(!0,m.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,j;d=h.radio;b=f.nodeChecked(c,a);if(c.check.chkStyle==d.STYLE){var g=f.getRadioCheckedList(c);if(b)if(c.check.radioType==d.TYPE_ALL){for(d=g.length-1;d>=0;d--){b=g[d];var k=f.nodeChecked(c,b);k&&b!=a&&(f.nodeChecked(c,b,!1),g.splice(d,1),e.setChkClass(c,
n(b,h.id.CHECK,c),b),b.parentTId!=a.parentTId&&e.repairParentChkClassWithSelf(c,b))}g.push(a)}else{g=a.parentTId?a.getParentNode():f.getRoot(c);g=f.nodeChildren(c,g);for(d=0,j=g.length;d<j;d++)if(b=g[d],(k=f.nodeChecked(c,b))&&b!=a)f.nodeChecked(c,b,!1),e.setChkClass(c,n(b,h.id.CHECK,c),b)}else if(c.check.radioType==d.TYPE_ALL)for(d=0,j=g.length;d<j;d++)if(a==g[d]){g.splice(d,1);break}}else g=f.nodeChildren(c,a),b&&(!g||g.length==0||c.check.chkboxType.Y.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,
!0),!b&&(!g||g.length==0||c.check.chkboxType.N.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,!1),b&&c.check.chkboxType.Y.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!0),!b&&c.check.chkboxType.N.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=h.checkbox,d=h.radio,j="",g=f.nodeChecked(c,a),j=a.chkDisabled===!0?b.DISABLED:a.halfCheck?b.PART:c.check.chkStyle==d.STYLE?a.check_Child_State<1?b.FULL:b.PART:g?a.check_Child_State===2||a.check_Child_State===-1?b.FULL:b.PART:
a.check_Child_State<1?b.FULL:b.PART,d=c.check.chkStyle+"_"+(g?b.TRUE:b.FALSE)+"_"+j,d=a.check_Focus&&a.chkDisabled!==!0?d+"_"+b.FOCUS:d;return h.className.BUTTON+" "+b.DEFAULT+" "+d},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===h.checkbox.STYLE)for(var b=f.getRoot(c),b=f.nodeChildren(c,b),d=0,j=b.length;d<j;d++){var g=b[d];g.nocheck!==!0&&g.chkDisabled!==!0&&f.nodeChecked(c,g,a);e.setSonNodeCheckBox(c,g,a)}},repairChkClass:function(c,a){if(a&&(f.makeChkFlag(c,a),a.nocheck!==!0)){var b=
n(a,h.id.CHECK,c);e.setChkClass(c,b,a)}},repairParentChkClass:function(c,a){if(a&&a.parentTId){var b=a.getParentNode();e.repairChkClass(c,b);e.repairParentChkClass(c,b)}},repairParentChkClassWithSelf:function(c,a){if(a){var b=f.nodeChildren(c,a);b&&b.length>0?e.repairParentChkClass(c,b[0]):e.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b)a.chkDisabled=b;e.repairChkClass(c,a);if((a=f.nodeChildren(c,a))&&d)for(var j=0,g=a.length;j<g;j++)e.repairSonChkDisabled(c,
a[j],b,d)}},repairParentChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b&&d)a.chkDisabled=b;e.repairChkClass(c,a);e.repairParentChkDisabled(c,a.getParentNode(),b,d)}},setChkClass:function(c,a,b){a&&(b.nocheck===!0?a.hide():a.show(),a.attr("class",e.makeChkClass(c,b)))},setParentNodeCheckBox:function(c,a,b,d){var j=n(a,h.id.CHECK,c);d||(d=a);f.makeChkFlag(c,a);a.nocheck!==!0&&a.chkDisabled!==!0&&(f.nodeChecked(c,a,b),e.setChkClass(c,j,a),c.check.autoCheckTrigger&&a!=d&&c.treeObj.trigger(h.event.CHECK,
[null,c.treeId,a]));if(a.parentTId){j=!0;if(!b)for(var g=f.nodeChildren(c,a.getParentNode()),k=0,w=g.length;k<w;k++){var l=g[k],i=f.nodeChecked(c,l);if(l.nocheck!==!0&&l.chkDisabled!==!0&&i||(l.nocheck===!0||l.chkDisabled===!0)&&l.check_Child_State>0){j=!1;break}}j&&e.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var j=n(a,h.id.CHECK,c);d||(d=a);var g=!1,k=f.nodeChildren(c,a);if(k)for(var i=0,l=k.length;i<l;i++){var m=k[i];e.setSonNodeCheckBox(c,m,b,d);
m.chkDisabled===!0&&(g=!0)}if(a!=f.getRoot(c)&&a.chkDisabled!==!0){g&&a.nocheck!==!0&&f.makeChkFlag(c,a);if(a.nocheck!==!0&&a.chkDisabled!==!0){if(f.nodeChecked(c,a,b),!g)a.check_Child_State=k&&k.length>0?b?2:0:-1}else a.check_Child_State=-1;e.setChkClass(c,j,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(h.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=f.getRoot(c).radioCheckedList,b=0,d=a.length;b<d;b++)f.getNodeCache(c,
a[b].tId)||(a.splice(b,1),b--,d--);return a},getCheckStatus:function(c,a){if(!c.check.enable||a.nocheck||a.chkDisabled)return null;var b=f.nodeChecked(c,a);return{checked:b,half:a.halfCheck?a.halfCheck:c.check.chkStyle==h.radio.STYLE?a.check_Child_State===2:b?a.check_Child_State>-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var j=b&&c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL,d=!d?[]:d,g=0,e=a.length;g<e;g++){var i=
a[g],l=f.nodeChildren(c,i),m=f.nodeChecked(c,i);if(i.nocheck!==!0&&i.chkDisabled!==!0&&m==b&&(d.push(i),j))break;f.getTreeCheckedNodes(c,l,b,d);if(j&&d.length>0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var b=!b?[]:b,d=0,j=a.length;d<j;d++){var g=a[d],e=f.nodeChildren(c,g),h=f.nodeChecked(c,g);g.nocheck!==!0&&g.chkDisabled!==!0&&h!=g.checkedOld&&b.push(g);f.getTreeChangeCheckedNodes(c,e,b)}return b},makeChkFlag:function(c,a){if(a){var b=-1,d=f.nodeChildren(c,a);
if(d)for(var j=0,g=d.length;j<g;j++){var e=d[j],i=f.nodeChecked(c,e),l=-1;if(c.check.chkStyle==h.radio.STYLE)if(l=e.nocheck===!0||e.chkDisabled===!0?e.check_Child_State:e.halfCheck===!0?2:i?2:e.check_Child_State>0?2:0,l==2){b=2;break}else l==0&&(b=0);else if(c.check.chkStyle==h.checkbox.STYLE)if(l=e.nocheck===!0||e.chkDisabled===!0?e.check_Child_State:e.halfCheck===!0?1:i?e.check_Child_State===-1||e.check_Child_State===2?2:1:e.check_Child_State>0?1:0,l===1){b=1;break}else if(l===2&&b>-1&&j>0&&l!==
b){b=1;break}else if(b===2&&l>-1&&l<2){b=1;break}else l>-1&&(b=l)}a.check_Child_State=b}}}});var m=m.fn.zTree,i=m._z.tools,h=m.consts,e=m._z.view,f=m._z.data,n=i.$;f.nodeChecked=function(c,a,b){if(!a)return!1;c=c.data.key.checked;typeof b!=="undefined"?(typeof b==="string"&&(b=i.eqs(b,"true")),a[c]=!!b):a[c]=typeof a[c]=="string"?i.eqs(a[c],"true"):!!a[c];return a[c]};f.exSetting(v);f.addInitBind(function(c){c.treeObj.bind(h.event.CHECK,function(a,b,d,e){a.srcEvent=b;i.apply(c.callback.onCheck,[a,
d,e])})});f.addInitUnBind(function(c){c.treeObj.unbind(h.event.CHECK)});f.addInitCache(function(){});f.addInitNode(function(c,a,b,d){if(b){a=f.nodeChecked(c,b);b.checkedOld=a;if(typeof b.nocheck=="string")b.nocheck=i.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=i.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=i.eqs(b.halfCheck,
"true");b.halfCheck=!!b.halfCheck;b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return f.getCheckStatus(c,b)};c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL&&a&&f.getRoot(c).radioCheckedList.push(b)}});f.addInitProxy(function(c){var a=c.target,b=f.getSetting(c.data.treeId),d="",e=null,g="",k=null;if(i.eqs(c.type,"mouseover")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoverCheck"}else if(i.eqs(c.type,
"mouseout")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoutCheck"}else if(i.eqs(c.type,"click")&&b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="checkNode";if(d.length>0)switch(e=f.getNodeCache(b,d),g){case "checkNode":k=p;break;case "mouseoverCheck":k=q;break;case "mouseoutCheck":k=r}return{stop:g==="checkNode",node:e,nodeEventType:g,nodeEventCallback:k,
treeEventType:"",treeEventCallback:null}},!0);f.addInitRoot(function(c){f.getRoot(c).radioCheckedList=[]});f.addBeforeA(function(c,a,b){c.check.enable&&(f.makeChkFlag(c,a),b.push("<span ID='",a.tId,h.id.CHECK,"' class='",e.makeChkClass(c,a),"' treeNode",h.id.CHECK,a.nocheck===!0?" style='display:none;'":"","></span>"))});f.addZTreeTools(function(c,a){a.checkNode=function(a,b,g,k){var m=f.nodeChecked(c,a);if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!m),k=!!k,(m!==b||g)&&!(k&&i.apply(this.setting.callback.beforeCheck,
[this.setting.treeId,a],!0)==!1)&&i.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))f.nodeChecked(c,a,b),b=n(a,h.id.CHECK,this.setting),(g||this.setting.check.chkStyle===h.radio.STYLE)&&e.checkNodeRelation(this.setting,a),e.setChkClass(this.setting,b,a),e.repairParentChkClassWithSelf(this.setting,a),k&&this.setting.treeObj.trigger(h.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){e.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var a=a!==!1,b=
f.nodeChildren(c,f.getRoot(this.setting));return f.getTreeCheckedNodes(this.setting,b,a)};a.getChangeCheckedNodes=function(){var a=f.nodeChildren(c,f.getRoot(this.setting));return f.getTreeChangeCheckedNodes(this.setting,a)};a.setChkDisabled=function(a,b,c,f){b=!!b;c=!!c;e.repairSonChkDisabled(this.setting,a,b,!!f);e.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,f){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&n(c,this.setting).get(0)&&
i.uCanDo(this.setting)){var g=n(c,h.id.CHECK,this.setting);(f==!0||this.setting.check.chkStyle===h.radio.STYLE)&&e.checkNodeRelation(this.setting,c);e.setChkClass(this.setting,g,c);e.repairParentChkClassWithSelf(this.setting,c)}}});var s=e.createNodes;e.createNodes=function(c,a,b,d,f){s&&s.apply(e,arguments);b&&e.repairParentChkClassWithSelf(c,d)};var t=e.removeNode;e.removeNode=function(c,a){var b=a.getParentNode();t&&t.apply(e,arguments);a&&b&&(e.repairChkClass(c,b),e.repairParentChkClass(c,b))};
var u=e.appendNodes;e.appendNodes=function(c,a,b,d,h,g,i){var m="";u&&(m=u.apply(e,arguments));d&&f.makeChkFlag(c,d);return m}})(jQuery);
/*
 * JQuery zTree exedit v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(B){var I={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},v={onHoverOverNode:function(a,b){var c=i.getSetting(a.data.treeId),d=i.getRoot(c);if(d.curHoverNode!=b)v.onHoverOutNode(a);d.curHoverNode=b;e.addHoverDom(c,b)},onHoverOutNode:function(a){var a=
i.getSetting(a.data.treeId),b=i.getRoot(a);if(b.curHoverNode&&!i.isSelectedNode(a,b.curHoverNode))e.removeTreeDom(a,b.curHoverNode),b.curHoverNode=null},onMousedownNode:function(a,b){function c(a){if(m.dragFlag==0&&Math.abs(N-a.clientX)<f.confirm.drag.minMoveSize&&Math.abs(O-a.clientY)<f.confirm.drag.minMoveSize)return!0;var b,c,g,j;L.css("cursor","pointer");if(m.dragFlag==0){if(k.apply(f.callback.beforeDrag,[f.treeId,n],!0)==!1)return l(a),!0;for(b=0,c=n.length; b<c; b++){if(b==0)m.dragNodeShowBefore=[];
g=n[b];i.nodeIsParent(f,g)&&g.open?(e.expandCollapseNode(f,g,!g.open),m.dragNodeShowBefore[g.tId]=!0):m.dragNodeShowBefore[g.tId]=!1}m.dragFlag=1;y.showHoverDom=!1;k.showIfameMask(f,!0);j=!0;var p=-1;if(n.length>1){var o=n[0].parentTId?i.nodeChildren(f,n[0].getParentNode()):i.getNodes(f);g=[];for(b=0,c=o.length;b<c;b++)if(m.dragNodeShowBefore[o[b].tId]!==void 0&&(j&&p>-1&&p+1!==b&&(j=!1),g.push(o[b]),p=b),n.length===g.length){n=g;break}}j&&(H=n[0].getPreNode(),Q=n[n.length-1].getNextNode());C=q("<ul class='zTreeDragUL'></ul>",
f);for(b=0,c=n.length;b<c;b++)g=n[b],g.editNameFlag=!1,e.selectNode(f,g,b>0),e.removeTreeDom(f,g),b>f.confirm.drag.maxShowNodeNum-1||(j=q("<li id='"+g.tId+"_tmp'></li>",f),j.append(q(g,d.id.A,f).clone()),j.css("padding","0"),j.children("#"+g.tId+d.id.A).removeClass(d.node.CURSELECTED),C.append(j),b==f.confirm.drag.maxShowNodeNum-1&&(j=q("<li id='"+g.tId+"_moretmp'><a>  ...  </a></li>",f),C.append(j)));C.attr("id",n[0].tId+d.id.UL+"_tmp");C.addClass(f.treeObj.attr("class"));C.appendTo(L);u=q("<span class='tmpzTreeMove_arrow'></span>",
f);u.attr("id","zTreeMove_arrow_tmp");u.appendTo(L);f.treeObj.trigger(d.event.DRAG,[a,f.treeId,n])}if(m.dragFlag==1){t&&u.attr("id")==a.target.id&&w&&a.clientX+G.scrollLeft()+2>B("#"+w+d.id.A,t).offset().left?(g=B("#"+w+d.id.A,t),a.target=g.length>0?g.get(0):a.target):t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));
w=t=null;J=!1;h=f;g=i.getSettings();for(var z in g)if(g[z].treeId&&g[z].confirm.enable&&g[z].treeId!=f.treeId&&(a.target.id==g[z].treeId||B(a.target).parents("#"+g[z].treeId).length>0))J=!0,h=g[z];z=G.scrollTop();j=G.scrollLeft();p=h.treeObj.offset();b=h.treeObj.get(0).scrollHeight;g=h.treeObj.get(0).scrollWidth;c=a.clientY+z-p.top;var E=h.treeObj.height()+p.top-a.clientY-z,r=a.clientX+j-p.left,s=h.treeObj.width()+p.left-a.clientX-j,p=c<f.confirm.drag.borderMax&&c>f.confirm.drag.borderMin,o=E<f.confirm.drag.borderMax&&
E>f.confirm.drag.borderMin,F=r<f.confirm.drag.borderMax&&r>f.confirm.drag.borderMin,v=s<f.confirm.drag.borderMax&&s>f.confirm.drag.borderMin,E=c>f.confirm.drag.borderMin&&E>f.confirm.drag.borderMin&&r>f.confirm.drag.borderMin&&s>f.confirm.drag.borderMin,r=p&&h.treeObj.scrollTop()<=0,s=o&&h.treeObj.scrollTop()+h.treeObj.height()+10>=b,M=F&&h.treeObj.scrollLeft()<=0,P=v&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=g;if(a.target&&k.isChildOrSelf(a.target,h.treeId)){for(var D=a.target; D&&D.tagName&&!k.eqs(D.tagName,"li")&&D.id!=
h.treeId;)D=D.parentNode;var R=!0;for(b=0,c=n.length;b<c;b++)if(g=n[b],D.id===g.tId){R=!1;break}else if(q(g,f).find("#"+D.id).length>0){R=!1;break}if(R&&a.target&&k.isChildOrSelf(a.target,D.id+d.id.A))t=B(D),w=D.id}g=n[0];if(E&&k.isChildOrSelf(a.target,h.treeId)){if(!t&&(a.target.id==h.treeId||r||s||M||P)&&(J||!J&&g.parentTId))t=h.treeObj;p?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):o&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);F?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):v&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+
10);t&&t!=h.treeObj&&t.offset().left<h.treeObj.offset().left&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+t.offset().left-h.treeObj.offset().left)}C.css({top:a.clientY+z+3+"px",left:a.clientX+j+3+"px"});b=j=0;if(t&&t.attr("id")!=h.treeId){var A=w==null?null:i.getNodeCache(h,w),p=(a.ctrlKey||a.metaKey)&&f.confirm.drag.isMove&&f.confirm.drag.isCopy||!f.confirm.drag.isMove&&f.confirm.drag.isCopy;c=!!(H&&w===H.tId);F=!!(Q&&w===Q.tId);o=g.parentTId&&g.parentTId==w;g=(p||!F)&&k.apply(h.confirm.drag.prev,[h.treeId,n,A],
!!h.confirm.drag.prev);c=(p||!c)&&k.apply(h.confirm.drag.next,[h.treeId,n,A],!!h.confirm.drag.next);p=(p||!o)&&!(h.data.keep.leaf&&!i.nodeIsParent(f,A))&&k.apply(h.confirm.drag.inner,[h.treeId,n,A],!!h.confirm.drag.inner);o=function(){t=null;w="";x=d.move.TYPE_INNER;u.css({display:"none"});if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null};if(!g&&!c&&!p)o();else if(F=B("#"+w+d.id.A,t),v=A.isLastNode?null:B("#"+A.getNextNode().tId+d.id.A,t.next()),E=F.offset().top,r=
F.offset().left,s=g?p?0.25:c?0.5:1:-1,M=c?p?0.75:g?0.5:0:-1,z=(a.clientY+z-E)/F.height(),(s==1||z<=s&&z>=-0.2)&&g?(j=1-u.width(),b=E-u.height()/2,x=d.move.TYPE_PREV):(M==0||z>=M&&z<=1.2)&&c?(j=1-u.width(),b=v==null||i.nodeIsParent(f,A)&&A.open?E+F.height()-u.height()/2:v.offset().top-u.height()/2,x=d.move.TYPE_NEXT):p?(j=5-u.width(),b=E,x=d.move.TYPE_INNER):o(),t){u.css({display:"block",top:b+"px",left:r+j+"px"});F.addClass(d.node.TMPTARGET_NODE+"_"+x);if(S!=w||T!=x)K=(new Date).getTime();if(A&&i.nodeIsParent(f,
A)&&x==d.move.TYPE_INNER&&(z=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(z=!1),z))window.zTreeMoveTimer=setTimeout(function(){x==d.move.TYPE_INNER&&A&&i.nodeIsParent(f,A)&&!A.open&&(new Date).getTime()-K>h.confirm.drag.autoOpenTime&&k.apply(h.callback.beforeDragOpen,[h.treeId,A],!0)&&(e.switchNode(h,A),h.confirm.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND,
[h.treeId,A]))},h.confirm.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId}}else if(x=d.move.TYPE_INNER,t&&k.apply(h.confirm.drag.inner,[h.treeId,n,null],!!h.confirm.drag.inner)?t.addClass(d.node.TMPTARGET_TREE):t=null,u.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;S=w;T=x;f.treeObj.trigger(d.event.DRAGMOVE,[a,f.treeId,n])}return!1}function l(a){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=
null;T=S=null;G.unbind("mousemove",c);G.unbind("mouseup",l);G.unbind("selectstart",g);L.css("cursor","");t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));k.showIfameMask(f,!1);y.showHoverDom=!0;if(m.dragFlag!=0){m.dragFlag=0;var b,j,o;for(b=0,j=n.length;b<j;b++)o=n[b],i.nodeIsParent(f,o)&&m.dragNodeShowBefore[o.tId]&&
!o.open&&(e.expandCollapseNode(f,o,!o.open),delete m.dragNodeShowBefore[o.tId]);C&&C.remove();u&&u.remove();var r=(a.ctrlKey||a.metaKey)&&f.confirm.drag.isMove&&f.confirm.drag.isCopy||!f.confirm.drag.isMove&&f.confirm.drag.isCopy;!r&&t&&w&&n[0].parentTId&&w==n[0].parentTId&&x==d.move.TYPE_INNER&&(t=null);if(t){var p=w==null?null:i.getNodeCache(h,w);if(k.apply(f.callback.beforeDrop,[h.treeId,n,p,x,r],!0)==!1)e.selectNodes(v,n);else{var s=r?k.clone(n):n;b=function(){if(J){if(!r)for(var b=0,c=n.length; b<c; b++)e.removeNode(f,
n[b]);x==d.move.TYPE_INNER?e.addNodes(h,p,-1,s):e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s)}else if(r&&x==d.move.TYPE_INNER)e.addNodes(h,p,-1,s);else if(r)e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s);else if(x!=d.move.TYPE_NEXT)for(b=0,c=s.length;b<c;b++)e.moveNode(h,p,s[b],x,!1);else for(b=-1,c=s.length-1;b<c;c--)e.moveNode(h,p,s[c],x,!1);e.selectNodes(h,s);b=q(s[0],f).get(0);e.scrollIntoView(f,b);f.treeObj.trigger(d.event.DROP,
[a,h.treeId,s,p,x,r])};x==d.move.TYPE_INNER&&k.canAsync(h,p)?e.asyncNode(h,p,!1,b):b()}}else e.selectNodes(v,n),f.treeObj.trigger(d.event.DROP,[a,f.treeId,n,null,null,null])}}function g(){return!1}var o,j,f=i.getSetting(a.data.treeId),m=i.getRoot(f),y=i.getRoots();if(a.button==2||!f.confirm.enable||!f.confirm.drag.isCopy&&!f.confirm.drag.isMove)return!0;var r=a.target,s=i.getRoot(f).curSelectedList,n=[];if(i.isSelectedNode(f,b))for(o=0,j=s.length; o<j; o++){if(s[o].editNameFlag&&k.eqs(r.tagName,"input")&&r.getAttribute("treeNode"+
d.id.INPUT)!==null)return!0;n.push(s[o]);if(n[0].parentTId!==s[o].parentTId){n=[b];break}}else n=[b];e.editNodeBlur=!0;e.cancelCurEditNode(f);var G=B(f.treeObj.get(0).ownerDocument),L=B(f.treeObj.get(0).ownerDocument.body),C,u,t,J=!1,h=f,v=f,H,Q,S=null,T=null,w=null,x=d.move.TYPE_INNER,N=a.clientX,O=a.clientY,K=(new Date).getTime();k.uCanDo(f)&&G.bind("mousemove",c);G.bind("mouseup",l);G.bind("selectstart",g);return!0}};B.extend(!0,B.fn.zTree.consts,I);B.extend(!0,B.fn.zTree._z,{tools:{getAbs:function(a){a=
a.getBoundingClientRect();return[a.left+(document.body.scrollLeft+document.documentElement.scrollLeft),a.top+(document.body.scrollTop+document.documentElement.scrollTop)]},inputFocus:function(a){a.get(0)&&(a.focus(),k.setCursorPosition(a.get(0),a.val().length))},inputSelect:function(a){a.get(0)&&(a.focus(),a.select())},setCursorPosition:function(a,b){if(a.setSelectionRange)a.focus(),a.setSelectionRange(b,b);else if(a.createTextRange){var c=a.createTextRange();c.collapse(!0);c.moveEnd("character",
b);c.moveStart("character",b);c.select()}},showIfameMask:function(a,b){for(var c=i.getRoot(a);c.dragMaskList.length>0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(b)for(var d=q("iframe",a),g=0,e=d.length;g<e;g++){var j=d.get(g),f=k.getAbs(j),j=q("<div id='zTreeMask_"+g+"' class='zTreeMask' style='top:"+f[1]+"px; left:"+f[0]+"px; width:"+j.offsetWidth+"px; height:"+j.offsetHeight+"px;'></div>",a);j.appendTo(q("body",a));c.dragMaskList.push(j)}}},view:{addEditBtn:function(a,b){if(!(b.editNameFlag||
q(b,d.id.EDIT,a).length>0)&&k.apply(a.confirm.showRenameBtn,[a.treeId,b],a.confirm.showRenameBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" edit' id='"+b.tId+d.id.EDIT+"' title='"+k.apply(a.confirm.renameTitle,[a.treeId,b],a.confirm.renameTitle)+"' treeNode"+d.id.EDIT+" style='display:none;'></span>";c.append(l);q(b,d.id.EDIT,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeEditName,[a.treeId,b],!0)==!1)return!1;e.editNode(a,b);return!1}).show()}},addRemoveBtn:function(a,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                b){if(!(b.editNameFlag||q(b,d.id.REMOVE,a).length>0)&&k.apply(a.confirm.showRemoveBtn,[a.treeId,b],a.confirm.showRemoveBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" remove' id='"+b.tId+d.id.REMOVE+"' title='"+k.apply(a.confirm.removeTitle,[a.treeId,b],a.confirm.removeTitle)+"' treeNode"+d.id.REMOVE+" style='display:none;'></span>";c.append(l);q(b,d.id.REMOVE,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeRemove,[a.treeId,b],!0)==!1)return!1;e.removeNode(a,b);a.treeObj.trigger(d.event.REMOVE,
[a.treeId,b]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(a,b){if(i.getRoots().showHoverDom)b.isHover=!0,a.confirm.enable&&(e.addEditBtn(a,b),e.addRemoveBtn(a,b)),k.apply(a.view.addHoverDom,[a.treeId,b])},cancelCurEditNode:function(a, b, c){var l=i.getRoot(a),g=l.curEditNode;if(g){var o=l.curEditInput,b=b?b:c?i.nodeName(a,g):o.val();if(k.apply(a.callback.beforeRename,[a.treeId,g,b,c],!0)===!1)return!1;i.nodeName(a,g,b);q(g,d.id.A,a).removeClass(d.node.CURSELECTED_EDIT);
o.unbind();e.setNodeName(a,g);g.editNameFlag=!1;l.curEditNode=null;l.curEditInput=null;e.selectNode(a,g,!1);a.treeObj.trigger(d.event.RENAME,[a.treeId,g,c])}return l.noSelection=!0},editNode:function(a,b){var c=i.getRoot(a);e.editNodeBlur=!1;if(i.isSelectedNode(a,b)&&c.curEditNode==b&&b.editNameFlag)setTimeout(function(){k.inputFocus(c.curEditInput)},0);else{b.editNameFlag=!0;e.removeTreeDom(a,b);e.cancelCurEditNode(a);e.selectNode(a,b,!1);q(b,d.id.SPAN,a).html("<input type=text class='rename' id='"+
b.tId+d.id.INPUT+"' treeNode"+d.id.INPUT+" >");var l=q(b,d.id.INPUT,a);l.attr("value",i.nodeName(a,b));a.confirm.editNameSelectAll?k.inputSelect(l):k.inputFocus(l);l.bind("blur",function(){e.editNodeBlur||e.cancelCurEditNode(a)}).bind("keydown",function(b){b.keyCode=="13"?(e.editNodeBlur=!0,e.cancelCurEditNode(a)):b.keyCode=="27"&&e.cancelCurEditNode(a,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});q(b,d.id.A,a).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=l;
c.noSelection=!1;c.curEditNode=b}},moveNode:function(a,b,c,l,g,k){var j=i.getRoot(a);if(b!=c&&(!a.data.keep.leaf||!b||i.nodeIsParent(a,b)||l!=d.move.TYPE_INNER)){var f=c.parentTId?c.getParentNode():j,m=b===null||b==j;m&&b===null&&(b=j);if(m)l=d.move.TYPE_INNER;j=b.parentTId?b.getParentNode():j;if(l!=d.move.TYPE_PREV&&l!=d.move.TYPE_NEXT)l=d.move.TYPE_INNER;if(l==d.move.TYPE_INNER)if(m)c.parentTId=null;else{if(!i.nodeIsParent(a,b))i.nodeIsParent(a,b,!0),b.open=!!b.open,e.setNodeLineIcos(a,b);c.parentTId=
b.tId}var y;m?y=m=a.treeObj:(!k&&l==d.move.TYPE_INNER?e.expandCollapseNode(a,b,!0,!1):k||e.expandCollapseNode(a,b.getParentNode(),!0,!1),m=q(b,a),y=q(b,d.id.UL,a),m.get(0)&&!y.get(0)&&(y=[],e.makeUlHtml(a,b,y,""),m.append(y.join(""))),y=q(b,d.id.UL,a));var r=q(c,a);r.get(0)?m.get(0)||r.remove():r=e.appendNodes(a,c.level,[c],null,-1,!1,!0).join("");y.get(0)&&l==d.move.TYPE_INNER?y.append(r):m.get(0)&&l==d.move.TYPE_PREV?m.before(r):m.get(0)&&l==d.move.TYPE_NEXT&&m.after(r);var s;y=-1;var r=0,n=null,
m=null,B=c.level,v=i.nodeChildren(a,f),C=i.nodeChildren(a,j),u=i.nodeChildren(a,b);if(c.isFirstNode){if(y=0,v.length>1)n=v[1],n.isFirstNode=!0}else if(c.isLastNode)y=v.length-1,n=v[y-1],n.isLastNode=!0;else for(j=0,s=v.length;j<s;j++)if(v[j].tId==c.tId){y=j;break}y>=0&&v.splice(y,1);if(l!=d.move.TYPE_INNER)for(j=0,s=C.length;j<s;j++)C[j].tId==b.tId&&(r=j);if(l==d.move.TYPE_INNER){u||(u=i.nodeChildren(a,b,[]));if(u.length>0)m=u[u.length-1],m.isLastNode=!1;u.splice(u.length,0,c);c.isLastNode=!0;c.isFirstNode=
u.length==1}else b.isFirstNode&&l==d.move.TYPE_PREV?(C.splice(r,0,c),m=b,m.isFirstNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!0,c.isLastNode=!1):b.isLastNode&&l==d.move.TYPE_NEXT?(C.splice(r+1,0,c),m=b,m.isLastNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(l==d.move.TYPE_PREV?C.splice(r,0,c):C.splice(r+1,0,c),c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!1);i.fixPIdKeyValue(a,c);i.setSonNodeLevel(a,c.getParentNode(),c);e.setNodeLineIcos(a,c);e.repairNodeLevelClass(a,
c,B);!a.data.keep.parent&&v.length<1?(i.nodeIsParent(a,f,!1),f.open=!1,b=q(f,d.id.UL,a),l=q(f,d.id.SWITCH,a),j=q(f,d.id.ICON,a),e.replaceSwitchClass(f,l,d.folder.DOCU),e.replaceIcoClass(f,j,d.folder.DOCU),b.css("display","none")):n&&e.setNodeLineIcos(a,n);m&&e.setNodeLineIcos(a,m);a.check&&a.check.enable&&e.repairChkClass&&(e.repairChkClass(a,f),e.repairParentChkClassWithSelf(a,f),f!=c.parent&&e.repairParentChkClassWithSelf(a,c));k||e.expandCollapseParentNode(a,c.getParentNode(),!0,g)}},removeEditBtn:function(a,
b){q(b,d.id.EDIT,a).unbind().remove()},removeRemoveBtn:function(a,b){q(b,d.id.REMOVE,a).unbind().remove()},removeTreeDom:function(a,b){b.isHover=!1;e.removeEditBtn(a,b);e.removeRemoveBtn(a,b);k.apply(a.view.removeHoverDom,[a.treeId,b])},repairNodeLevelClass:function(a,b,c){if(c!==b.level){var e=q(b,a),g=q(b,d.id.A,a),a=q(b,d.id.UL,a),c=d.className.LEVEL+c,b=d.className.LEVEL+b.level;e.removeClass(c);e.addClass(b);g.removeClass(c);g.addClass(b);a.removeClass(c);a.addClass(b)}},selectNodes:function(a,
b){for(var c=0,d=b.length;c<d;c++)e.selectNode(a,b[c],c>0)}},event:{},data:{setSonNodeLevel:function(a,b,c){if(c){var d=i.nodeChildren(a,c);c.level=b?b.level+1:0;if(d)for(var b=0,g=d.length;b<g;b++)d[b]&&i.setSonNodeLevel(a,c,d[b])}}}});var H=B.fn.zTree,k=H._z.tools,d=H.consts,e=H._z.view,i=H._z.data,q=k.$;i.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,
minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,beforeRename:null,onDrag:null,onDragMove:null,onDrop:null,onRename:null}});i.addInitBind(function(a){var b=a.treeObj,c=d.event;b.bind(c.RENAME,function(b,c,d,e){k.apply(a.callback.onRename,[b,c,d,e])});b.bind(c.DRAG,function(b,c,d,e){k.apply(a.callback.onDrag,[c,d,e])});b.bind(c.DRAGMOVE,function(b,
c,d,e){k.apply(a.callback.onDragMove,[c,d,e])});b.bind(c.DROP,function(b,c,d,e,f,i,q){k.apply(a.callback.onDrop,[c,d,e,f,i,q])})});i.addInitUnBind(function(a){var a=a.treeObj,b=d.event;a.unbind(b.RENAME);a.unbind(b.DRAG);a.unbind(b.DRAGMOVE);a.unbind(b.DROP)});i.addInitCache(function(){});i.addInitNode(function(a,b,c){if(c)c.isHover=!1,c.editNameFlag=!1});i.addInitProxy(function(a){var b=a.target,c=i.getSetting(a.data.treeId),e=a.relatedTarget,g="",o=null,j="",f=null,m=null;if(k.eqs(a.type,"mouseover")){if(m=
k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}]))g=k.getNodeMainDom(m).id,j="hoverOverNode"}else if(k.eqs(a.type,"mouseout"))m=k.getMDom(c,e,[{tagName:"a",attrName:"treeNode"+d.id.A}]),m||(g="remove",j="hoverOutNode");else if(k.eqs(a.type,"mousedown")&&(m=k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}])))g=k.getNodeMainDom(m).id,j="mousedownNode";if(g.length>0)switch(o=i.getNodeCache(c,g),j){case "mousedownNode":f=v.onMousedownNode;break;case "hoverOverNode":f=v.onHoverOverNode;
break;case "hoverOutNode":f=v.onHoverOutNode}return{stop:!1,node:o,nodeEventType:j,nodeEventCallback:f,treeEventType:"",treeEventCallback:null}});i.addInitRoot(function(a){var a=i.getRoot(a),b=i.getRoots();a.curEditNode=null;a.curEditInput=null;a.curHoverNode=null;a.dragFlag=0;a.dragNodeShowBefore=[];a.dragMaskList=[];b.showHoverDom=!0});i.addZTreeTools(function(a,b){b.cancelEditName=function(a){i.getRoot(this.setting).curEditNode&&e.cancelCurEditNode(this.setting,a?a:null,!0)};b.copyNode=function(b,
l,g,o){if(!l)return null;var j=i.nodeIsParent(a,b);if(b&&!j&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;var f=this,m=k.clone(l);if(!b)b=null,g=d.move.TYPE_INNER;g==d.move.TYPE_INNER?(l=function(){e.addNodes(f.setting,b,-1,[m],o)},k.canAsync(this.setting,b)?e.asyncNode(this.setting,b,o,l):l()):(e.addNodes(this.setting,b.parentNode,-1,[m],o),e.moveNode(this.setting,b,m,g,!1,o));return m};b.editName=function(a){a&&a.tId&&a===i.getNodeCache(this.setting,a.tId)&&(a.parentTId&&e.expandCollapseParentNode(this.setting,
a.getParentNode(),!0),e.editNode(this.setting,a))};b.moveNode=function(b,l,g,o){function j(){e.moveNode(m.setting,b,l,g,!1,o)}if(!l)return l;var f=i.nodeIsParent(a,b);if(b&&!f&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;else if(b&&(l.parentTId==b.tId&&g==d.move.TYPE_INNER||q(l,this.setting).find("#"+b.tId).length>0))return null;else b||(b=null);var m=this;k.canAsync(this.setting,b)&&g===d.move.TYPE_INNER?e.asyncNode(this.setting,b,o,j):j();return l};b.setEditable=function(a){this.setting.confirm.enable=
a;return this.refresh()}});var N=e.cancelPreSelectedNode;e.cancelPreSelectedNode=function(a,b){for(var c=i.getRoot(a).curSelectedList,d=0,g=c.length;d<g;d++)if(!b||b===c[d])if(e.removeTreeDom(a,c[d]),b)break;N&&N.apply(e,arguments)};var O=e.createNodes;e.createNodes=function(a,b,c,d,g){O&&O.apply(e,arguments);c&&e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(a,d)};var V=e.makeNodeUrl;e.makeNodeUrl=function(a,b){return a.confirm.enable?null:V.apply(e,arguments)};var K=e.removeNode;e.removeNode=
function(a,b){var c=i.getRoot(a);if(c.curEditNode===b)c.curEditNode=null;K&&K.apply(e,arguments)};var P=e.selectNode;e.selectNode=function(a,b,c){var d=i.getRoot(a);if(i.isSelectedNode(a,b)&&d.curEditNode==b&&b.editNameFlag)return!1;P&&P.apply(e,arguments);e.addHoverDom(a,b);return!0};var U=k.uCanDo;k.uCanDo=function(a,b){var c=i.getRoot(a);if(b&&(k.eqs(b.type,"mouseover")||k.eqs(b.type,"mouseout")||k.eqs(b.type,"mousedown")||k.eqs(b.type,"mouseup")))return!0;if(c.curEditNode)e.editNodeBlur=!1,c.curEditInput.focus();
return!c.curEditNode&&(U?U.apply(e,arguments):!0)}})(jQuery);
src/plugins/ztree/js/jquery.ztree.core.js
New file
@@ -0,0 +1,1986 @@
/*
 * JQuery zTree core v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  var settings = {}, roots = {}, caches = {},
    //default consts of core
    _consts = {
      className: {
        BUTTON: "button",
        LEVEL: "level",
        ICO_LOADING: "ico_loading",
        SWITCH: "switch",
        NAME: 'node_name'
      },
      event: {
        NODECREATED: "ztree_nodeCreated",
        CLICK: "ztree_click",
        EXPAND: "ztree_expand",
        COLLAPSE: "ztree_collapse",
        ASYNC_SUCCESS: "ztree_async_success",
        ASYNC_ERROR: "ztree_async_error",
        REMOVE: "ztree_remove",
        SELECTED: "ztree_selected",
        UNSELECTED: "ztree_unselected"
      },
      id: {
        A: "_a",
        ICON: "_ico",
        SPAN: "_span",
        SWITCH: "_switch",
        UL: "_ul"
      },
      line: {
        ROOT: "root",
        ROOTS: "roots",
        CENTER: "center",
        BOTTOM: "bottom",
        NOLINE: "noline",
        LINE: "line"
      },
      folder: {
        OPEN: "open",
        CLOSE: "close",
        DOCU: "docu"
      },
      node: {
        CURSELECTED: "curSelectedNode"
      }
    },
    //default setting of core
    _setting = {
      treeId: "",
      treeObj: null,
      view: {
        addDiyDom: null,
        autoCancelSelected: true,
        dblClickExpand: true,
        expandSpeed: "fast",
        fontCss: {},
        nameIsHTML: false,
        selectedMulti: true,
        showIcon: true,
        showLine: true,
        showTitle: true,
        txtSelectedEnable: false
      },
      data: {
        key: {
          isParent: "isParent",
          children: "children",
          name: "name",
          title: "",
          url: "url",
          icon: "icon"
        },
        simpleData: {
          enable: false,
          idKey: "id",
          pIdKey: "pId",
          rootPId: null
        },
        keep: {
          parent: false,
          leaf: false
        }
      },
      async: {
        enable: false,
        contentType: "application/x-www-form-urlencoded",
        type: "post",
        dataType: "text",
        headers: {},
        xhrFields: {},
        url: "",
        autoParam: [],
        otherParam: [],
        dataFilter: null
      },
      callback: {
        beforeAsync: null,
        beforeClick: null,
        beforeDblClick: null,
        beforeRightClick: null,
        beforeMouseDown: null,
        beforeMouseUp: null,
        beforeExpand: null,
        beforeCollapse: null,
        beforeRemove: null,
        onAsyncError: null,
        onAsyncSuccess: null,
        onNodeCreated: null,
        onClick: null,
        onDblClick: null,
        onRightClick: null,
        onMouseDown: null,
        onMouseUp: null,
        onExpand: null,
        onCollapse: null,
        onRemove: null
      }
    },
    //default root of core
    //zTree use root to save full data
    _initRoot = function (setting) {
      var r = data.getRoot(setting);
      if (!r) {
        r = {};
        data.setRoot(setting, r);
      }
      data.nodeChildren(setting, r, []);
      r.expandTriggerFlag = false;
      r.curSelectedList = [];
      r.noSelection = true;
      r.createdNodes = [];
      r.zId = 0;
      r._ver = (new Date()).getTime();
    },
    //default cache of core
    _initCache = function (setting) {
      var c = data.getCache(setting);
      if (!c) {
        c = {};
        data.setCache(setting, c);
      }
      c.nodes = [];
      c.doms = [];
    },
    //default bindEvent of core
    _bindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.bind(c.NODECREATED, function (event, treeId, node) {
        tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);
      });
      o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {
        tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);
      });
      o.bind(c.EXPAND, function (event, treeId, node) {
        tools.apply(setting.callback.onExpand, [event, treeId, node]);
      });
      o.bind(c.COLLAPSE, function (event, treeId, node) {
        tools.apply(setting.callback.onCollapse, [event, treeId, node]);
      });
      o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {
        tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);
      });
      o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {
        tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);
      });
      o.bind(c.REMOVE, function (event, treeId, treeNode) {
        tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);
      });
      o.bind(c.SELECTED, function (event, treeId, node) {
        tools.apply(setting.callback.onSelected, [treeId, node]);
      });
      o.bind(c.UNSELECTED, function (event, treeId, node) {
        tools.apply(setting.callback.onUnSelected, [treeId, node]);
      });
    },
    _unbindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.unbind(c.NODECREATED)
        .unbind(c.CLICK)
        .unbind(c.EXPAND)
        .unbind(c.COLLAPSE)
        .unbind(c.ASYNC_SUCCESS)
        .unbind(c.ASYNC_ERROR)
        .unbind(c.REMOVE)
        .unbind(c.SELECTED)
        .unbind(c.UNSELECTED);
    },
    //default event proxy of core
    _eventProxy = function (event) {
      var target = event.target,
        setting = data.getSetting(event.data.treeId),
        tId = "", node = null,
        nodeEventType = "", treeEventType = "",
        nodeEventCallback = null, treeEventCallback = null,
        tmp = null;
      if (tools.eqs(event.type, "mousedown")) {
        treeEventType = "mousedown";
      } else if (tools.eqs(event.type, "mouseup")) {
        treeEventType = "mouseup";
      } else if (tools.eqs(event.type, "contextmenu")) {
        treeEventType = "contextmenu";
      } else if (tools.eqs(event.type, "click")) {
        if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.SWITCH) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "switchNode";
        } else {
          tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
          if (tmp) {
            tId = tools.getNodeMainDom(tmp).id;
            nodeEventType = "clickNode";
          }
        }
      } else if (tools.eqs(event.type, "dblclick")) {
        treeEventType = "dblclick";
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
          nodeEventType = "switchNode";
        }
      }
      if (treeEventType.length > 0 && tId.length == 0) {
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
        }
      }
      // event to node
      if (tId.length > 0) {
        node = data.getNodeCache(setting, tId);
        switch (nodeEventType) {
          case "switchNode" :
            var isParent = data.nodeIsParent(setting, node);
            if (!isParent) {
              nodeEventType = "";
            } else if (tools.eqs(event.type, "click")
              || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {
              nodeEventCallback = handler.onSwitchNode;
            } else {
              nodeEventType = "";
            }
            break;
          case "clickNode" :
            nodeEventCallback = handler.onClickNode;
            break;
        }
      }
      // event to zTree
      switch (treeEventType) {
        case "mousedown" :
          treeEventCallback = handler.onZTreeMousedown;
          break;
        case "mouseup" :
          treeEventCallback = handler.onZTreeMouseup;
          break;
        case "dblclick" :
          treeEventCallback = handler.onZTreeDblclick;
          break;
        case "contextmenu" :
          treeEventCallback = handler.onZTreeContextmenu;
          break;
      }
      var proxyResult = {
        stop: false,
        node: node,
        nodeEventType: nodeEventType,
        nodeEventCallback: nodeEventCallback,
        treeEventType: treeEventType,
        treeEventCallback: treeEventCallback
      };
      return proxyResult
    },
    //default init node of core
    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      if (!n) return;
      var r = data.getRoot(setting),
        children = data.nodeChildren(setting, n);
      n.level = level;
      n.tId = setting.treeId + "_" + (++r.zId);
      n.parentTId = parentNode ? parentNode.tId : null;
      n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open;
      var isParent = data.nodeIsParent(setting, n);
      if (tools.isArray(children)) {
        data.nodeIsParent(setting, n, true);
        n.zAsync = true;
      } else {
        isParent = data.nodeIsParent(setting, n, isParent);
        n.open = (isParent && !setting.async.enable) ? n.open : false;
        n.zAsync = !isParent;
      }
      n.isFirstNode = isFirstNode;
      n.isLastNode = isLastNode;
      n.getParentNode = function () {
        return data.getNodeCache(setting, n.parentTId);
      };
      n.getPreNode = function () {
        return data.getPreNode(setting, n);
      };
      n.getNextNode = function () {
        return data.getNextNode(setting, n);
      };
      n.getIndex = function () {
        return data.getNodeIndex(setting, n);
      };
      n.getPath = function () {
        return data.getNodePath(setting, n);
      };
      n.isAjaxing = false;
      data.fixPIdKeyValue(setting, n);
    },
    _init = {
      bind: [_bindEvent],
      unbind: [_unbindEvent],
      caches: [_initCache],
      nodes: [_initNode],
      proxys: [_eventProxy],
      roots: [_initRoot],
      beforeA: [],
      afterA: [],
      innerBeforeA: [],
      innerAfterA: [],
      zTreeTools: []
    },
    //method of operate data
    data = {
      addNodeCache: function (setting, node) {
        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;
      },
      getNodeCacheId: function (tId) {
        return tId.substring(tId.lastIndexOf("_") + 1);
      },
      addAfterA: function (afterA) {
        _init.afterA.push(afterA);
      },
      addBeforeA: function (beforeA) {
        _init.beforeA.push(beforeA);
      },
      addInnerAfterA: function (innerAfterA) {
        _init.innerAfterA.push(innerAfterA);
      },
      addInnerBeforeA: function (innerBeforeA) {
        _init.innerBeforeA.push(innerBeforeA);
      },
      addInitBind: function (bindEvent) {
        _init.bind.push(bindEvent);
      },
      addInitUnBind: function (unbindEvent) {
        _init.unbind.push(unbindEvent);
      },
      addInitCache: function (initCache) {
        _init.caches.push(initCache);
      },
      addInitNode: function (initNode) {
        _init.nodes.push(initNode);
      },
      addInitProxy: function (initProxy, isFirst) {
        if (!!isFirst) {
          _init.proxys.splice(0, 0, initProxy);
        } else {
          _init.proxys.push(initProxy);
        }
      },
      addInitRoot: function (initRoot) {
        _init.roots.push(initRoot);
      },
      addNodesData: function (setting, parentNode, index, nodes) {
        var children = data.nodeChildren(setting, parentNode), params;
        if (!children) {
          children = data.nodeChildren(setting, parentNode, []);
          index = -1;
        } else if (index >= children.length) {
          index = -1;
        }
        if (children.length > 0 && index === 0) {
          children[0].isFirstNode = false;
          view.setNodeLineIcos(setting, children[0]);
        } else if (children.length > 0 && index < 0) {
          children[children.length - 1].isLastNode = false;
          view.setNodeLineIcos(setting, children[children.length - 1]);
        }
        data.nodeIsParent(setting, parentNode, true);
        if (index < 0) {
          data.nodeChildren(setting, parentNode, children.concat(nodes));
        } else {
          params = [index, 0].concat(nodes);
          children.splice.apply(children, params);
        }
      },
      addSelectedNode: function (setting, node) {
        var root = data.getRoot(setting);
        if (!data.isSelectedNode(setting, node)) {
          root.curSelectedList.push(node);
        }
      },
      addCreatedNode: function (setting, node) {
        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
          var root = data.getRoot(setting);
          root.createdNodes.push(node);
        }
      },
      addZTreeTools: function (zTreeTools) {
        _init.zTreeTools.push(zTreeTools);
      },
      exSetting: function (s) {
        $.extend(true, _setting, s);
      },
      fixPIdKeyValue: function (setting, node) {
        if (setting.data.simpleData.enable) {
          node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;
        }
      },
      getAfterA: function (setting, node, array) {
        for (var i = 0, j = _init.afterA.length; i < j; i++) {
          _init.afterA[i].apply(this, arguments);
        }
      },
      getBeforeA: function (setting, node, array) {
        for (var i = 0, j = _init.beforeA.length; i < j; i++) {
          _init.beforeA[i].apply(this, arguments);
        }
      },
      getInnerAfterA: function (setting, node, array) {
        for (var i = 0, j = _init.innerAfterA.length; i < j; i++) {
          _init.innerAfterA[i].apply(this, arguments);
        }
      },
      getInnerBeforeA: function (setting, node, array) {
        for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) {
          _init.innerBeforeA[i].apply(this, arguments);
        }
      },
      getCache: function (setting) {
        return caches[setting.treeId];
      },
      getNodeIndex: function (setting, node) {
        if (!node) return null;
        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
          children = data.nodeChildren(setting, p);
        for (var i = 0, l = children.length - 1; i <= l; i++) {
          if (children[i] === node) {
            return i;
          }
        }
        return -1;
      },
      getNextNode: function (setting, node) {
        if (!node) return null;
        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
          children = data.nodeChildren(setting, p);
        for (var i = 0, l = children.length - 1; i <= l; i++) {
          if (children[i] === node) {
            return (i == l ? null : children[i + 1]);
          }
        }
        return null;
      },
      getNodeByParam: function (setting, nodes, key, value) {
        if (!nodes || !key) return null;
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (node[key] == value) {
            return nodes[i];
          }
          var children = data.nodeChildren(setting, node);
          var tmp = data.getNodeByParam(setting, children, key, value);
          if (tmp) return tmp;
        }
        return null;
      },
      getNodeCache: function (setting, tId) {
        if (!tId) return null;
        var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];
        return n ? n : null;
      },
      getNodePath: function (setting, node) {
        if (!node) return null;
        var path;
        if (node.parentTId) {
          path = node.getParentNode().getPath();
        } else {
          path = [];
        }
        if (path) {
          path.push(node);
        }
        return path;
      },
      getNodes: function (setting) {
        return data.nodeChildren(setting, data.getRoot(setting));
      },
      getNodesByParam: function (setting, nodes, key, value) {
        if (!nodes || !key) return [];
        var result = [];
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (node[key] == value) {
            result.push(node);
          }
          var children = data.nodeChildren(setting, node);
          result = result.concat(data.getNodesByParam(setting, children, key, value));
        }
        return result;
      },
      getNodesByParamFuzzy: function (setting, nodes, key, value) {
        if (!nodes || !key) return [];
        var result = [];
        value = value.toLowerCase();
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) {
            result.push(node);
          }
          var children = data.nodeChildren(setting, node);
          result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value));
        }
        return result;
      },
      getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) {
        if (!nodes) return (isSingle ? null : []);
        var result = isSingle ? null : [];
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (tools.apply(filter, [node, invokeParam], false)) {
            if (isSingle) {
              return node;
            }
            result.push(node);
          }
          var children = data.nodeChildren(setting, node);
          var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam);
          if (isSingle && !!tmpResult) {
            return tmpResult;
          }
          result = isSingle ? tmpResult : result.concat(tmpResult);
        }
        return result;
      },
      getPreNode: function (setting, node) {
        if (!node) return null;
        var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
          children = data.nodeChildren(setting, p);
        for (var i = 0, l = children.length; i < l; i++) {
          if (children[i] === node) {
            return (i == 0 ? null : children[i - 1]);
          }
        }
        return null;
      },
      getRoot: function (setting) {
        return setting ? roots[setting.treeId] : null;
      },
      getRoots: function () {
        return roots;
      },
      getSetting: function (treeId) {
        return settings[treeId];
      },
      getSettings: function () {
        return settings;
      },
      getZTreeTools: function (treeId) {
        var r = this.getRoot(this.getSetting(treeId));
        return r ? r.treeTools : null;
      },
      initCache: function (setting) {
        for (var i = 0, j = _init.caches.length; i < j; i++) {
          _init.caches[i].apply(this, arguments);
        }
      },
      initNode: function (setting, level, node, parentNode, preNode, nextNode) {
        for (var i = 0, j = _init.nodes.length; i < j; i++) {
          _init.nodes[i].apply(this, arguments);
        }
      },
      initRoot: function (setting) {
        for (var i = 0, j = _init.roots.length; i < j; i++) {
          _init.roots[i].apply(this, arguments);
        }
      },
      isSelectedNode: function (setting, node) {
        var root = data.getRoot(setting);
        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
          if (node === root.curSelectedList[i]) return true;
        }
        return false;
      },
      nodeChildren: function (setting, node, newChildren) {
        if (!node) {
          return null;
        }
        var key = setting.data.key.children;
        if (typeof newChildren !== 'undefined') {
          node[key] = newChildren;
        }
        return node[key];
      },
      nodeIsParent: function (setting, node, newIsParent) {
        if (!node) {
          return false;
        }
        var key = setting.data.key.isParent;
        if (typeof newIsParent !== 'undefined') {
          if (typeof newIsParent === "string") {
            newIsParent = tools.eqs(newIsParent, "true");
          }
          newIsParent = !!newIsParent;
          node[key] = newIsParent;
        } else if (typeof node[key] == "string"){
          node[key] = tools.eqs(node[key], "true");
        } else {
          node[key] = !!node[key];
        }
        return node[key];
      },
      nodeName: function (setting, node, newName) {
        var key = setting.data.key.name;
        if (typeof newName !== 'undefined') {
          node[key] = newName;
        }
        return "" + node[key];
      },
      nodeTitle: function (setting, node) {
        var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
        return "" + node[t];
      },
      removeNodeCache: function (setting, node) {
        var children = data.nodeChildren(setting, node);
        if (children) {
          for (var i = 0, l = children.length; i < l; i++) {
            data.removeNodeCache(setting, children[i]);
          }
        }
        data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;
      },
      removeSelectedNode: function (setting, node) {
        var root = data.getRoot(setting);
        for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
          if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {
            root.curSelectedList.splice(i, 1);
            setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);
            i--;
            j--;
          }
        }
      },
      setCache: function (setting, cache) {
        caches[setting.treeId] = cache;
      },
      setRoot: function (setting, root) {
        roots[setting.treeId] = root;
      },
      setZTreeTools: function (setting, zTreeTools) {
        for (var i = 0, j = _init.zTreeTools.length; i < j; i++) {
          _init.zTreeTools[i].apply(this, arguments);
        }
      },
      transformToArrayFormat: function (setting, nodes) {
        if (!nodes) return [];
        var r = [];
        if (tools.isArray(nodes)) {
          for (var i = 0, l = nodes.length; i < l; i++) {
            var node = nodes[i];
            _do(node);
          }
        } else {
          _do(nodes);
        }
        return r;
        function _do(_node) {
          r.push(_node);
          var children = data.nodeChildren(setting, _node);
          if (children) {
            r = r.concat(data.transformToArrayFormat(setting, children));
          }
        }
      },
      transformTozTreeFormat: function (setting, sNodes) {
        var i, l,
          key = setting.data.simpleData.idKey,
          parentKey = setting.data.simpleData.pIdKey;
        if (!key || key == "" || !sNodes) return [];
        if (tools.isArray(sNodes)) {
          var r = [];
          var tmpMap = {};
          for (i = 0, l = sNodes.length; i < l; i++) {
            tmpMap[sNodes[i][key]] = sNodes[i];
          }
          for (i = 0, l = sNodes.length; i < l; i++) {
            var p = tmpMap[sNodes[i][parentKey]];
            if (p && sNodes[i][key] != sNodes[i][parentKey]) {
              var children = data.nodeChildren(setting, p);
              if (!children) {
                children = data.nodeChildren(setting, p, []);
              }
              children.push(sNodes[i]);
            } else {
              r.push(sNodes[i]);
            }
          }
          return r;
        } else {
          return [sNodes];
        }
      }
    },
    //method of event proxy
    event = {
      bindEvent: function (setting) {
        for (var i = 0, j = _init.bind.length; i < j; i++) {
          _init.bind[i].apply(this, arguments);
        }
      },
      unbindEvent: function (setting) {
        for (var i = 0, j = _init.unbind.length; i < j; i++) {
          _init.unbind[i].apply(this, arguments);
        }
      },
      bindTree: function (setting) {
        var eventParam = {
            treeId: setting.treeId
          },
          o = setting.treeObj;
        if (!setting.view.txtSelectedEnable) {
          // for can't select text
          o.bind('selectstart', handler.onSelectStart).css({
            "-moz-user-select": "-moz-none"
          });
        }
        o.bind('click', eventParam, event.proxy);
        o.bind('dblclick', eventParam, event.proxy);
        o.bind('mouseover', eventParam, event.proxy);
        o.bind('mouseout', eventParam, event.proxy);
        o.bind('mousedown', eventParam, event.proxy);
        o.bind('mouseup', eventParam, event.proxy);
        o.bind('contextmenu', eventParam, event.proxy);
      },
      unbindTree: function (setting) {
        var o = setting.treeObj;
        o.unbind('selectstart', handler.onSelectStart)
          .unbind('click', event.proxy)
          .unbind('dblclick', event.proxy)
          .unbind('mouseover', event.proxy)
          .unbind('mouseout', event.proxy)
          .unbind('mousedown', event.proxy)
          .unbind('mouseup', event.proxy)
          .unbind('contextmenu', event.proxy);
      },
      doProxy: function (e) {
        var results = [];
        for (var i = 0, j = _init.proxys.length; i < j; i++) {
          var proxyResult = _init.proxys[i].apply(this, arguments);
          results.push(proxyResult);
          if (proxyResult.stop) {
            break;
          }
        }
        return results;
      },
      proxy: function (e) {
        var setting = data.getSetting(e.data.treeId);
        if (!tools.uCanDo(setting, e)) return true;
        var results = event.doProxy(e),
          r = true, x = false;
        for (var i = 0, l = results.length; i < l; i++) {
          var proxyResult = results[i];
          if (proxyResult.nodeEventCallback) {
            x = true;
            r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
          }
          if (proxyResult.treeEventCallback) {
            x = true;
            r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
          }
        }
        return r;
      }
    },
    //method of event handler
    handler = {
      onSwitchNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (node.open) {
          if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;
          data.getRoot(setting).expandTriggerFlag = true;
          view.switchNode(setting, node);
        } else {
          if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;
          data.getRoot(setting).expandTriggerFlag = true;
          view.switchNode(setting, node);
        }
        return true;
      },
      onClickNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId),
          clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;
        if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;
        if (clickFlag === 0) {
          view.cancelPreSelectedNode(setting, node);
        } else {
          view.selectNode(setting, node, clickFlag === 2);
        }
        setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);
        return true;
      },
      onZTreeMousedown: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);
        }
        return true;
      },
      onZTreeMouseup: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);
        }
        return true;
      },
      onZTreeDblclick: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);
        }
        return true;
      },
      onZTreeContextmenu: function (event, node) {
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {
          tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);
        }
        return (typeof setting.callback.onRightClick) != "function";
      },
      onSelectStart: function (e) {
        var n = e.originalEvent.srcElement.nodeName.toLowerCase();
        return (n === "input" || n === "textarea");
      }
    },
    //method of tools for zTree
    tools = {
      apply: function (fun, param, defaultValue) {
        if ((typeof fun) == "function") {
          return fun.apply(zt, param ? param : []);
        }
        return defaultValue;
      },
      canAsync: function (setting, node) {
        var children = data.nodeChildren(setting, node);
        var isParent = data.nodeIsParent(setting, node);
        return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0)));
      },
      clone: function (obj) {
        if (obj === null) return null;
        var o = tools.isArray(obj) ? [] : {};
        for (var i in obj) {
          o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]);
        }
        return o;
      },
      eqs: function (str1, str2) {
        return str1.toLowerCase() === str2.toLowerCase();
      },
      isArray: function (arr) {
        return Object.prototype.toString.apply(arr) === "[object Array]";
      },
      isElement: function (o) {
        return (
          typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
            o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string"
        );
      },
      $: function (node, exp, setting) {
        if (!!exp && typeof exp != "string") {
          setting = exp;
          exp = "";
        }
        if (typeof node == "string") {
          return $(node, setting ? setting.treeObj.get(0).ownerDocument : null);
        } else {
          return $("#" + node.tId + exp, setting ? setting.treeObj : null);
        }
      },
      getMDom: function (setting, curDom, targetExpr) {
        if (!curDom) return null;
        while (curDom && curDom.id !== setting.treeId) {
          for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) {
            if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {
              return curDom;
            }
          }
          curDom = curDom.parentNode;
        }
        return null;
      },
      getNodeMainDom: function (target) {
        return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0));
      },
      isChildOrSelf: function (dom, parentId) {
        return ($(dom).closest("#" + parentId).length > 0);
      },
      uCanDo: function (setting, e) {
        return true;
      }
    },
    //method of operate ztree dom
    view = {
      addNodes: function (setting, parentNode, index, newNodes, isSilent) {
        var isParent = data.nodeIsParent(setting, parentNode);
        if (setting.data.keep.leaf && parentNode && !isParent) {
          return;
        }
        if (!tools.isArray(newNodes)) {
          newNodes = [newNodes];
        }
        if (setting.data.simpleData.enable) {
          newNodes = data.transformTozTreeFormat(setting, newNodes);
        }
        if (parentNode) {
          var target_switchObj = $$(parentNode, consts.id.SWITCH, setting),
            target_icoObj = $$(parentNode, consts.id.ICON, setting),
            target_ulObj = $$(parentNode, consts.id.UL, setting);
          if (!parentNode.open) {
            view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);
            view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);
            parentNode.open = false;
            target_ulObj.css({
              "display": "none"
            });
          }
          data.addNodesData(setting, parentNode, index, newNodes);
          view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);
          if (!isSilent) {
            view.expandCollapseParentNode(setting, parentNode, true);
          }
        } else {
          data.addNodesData(setting, data.getRoot(setting), index, newNodes);
          view.createNodes(setting, 0, newNodes, null, index);
        }
      },
      appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
        if (!nodes) return [];
        var html = [];
        var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
          tmpPChild = data.nodeChildren(setting, tmpPNode),
          isFirstNode, isLastNode;
        if (!tmpPChild || index >= tmpPChild.length - nodes.length) {
          index = -1;
        }
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          if (initFlag) {
            isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0));
            isLastNode = (index < 0 && i == (nodes.length - 1));
            data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);
            data.addNodeCache(setting, node);
          }
          var isParent = data.nodeIsParent(setting, node);
          var childHtml = [];
          var children = data.nodeChildren(setting, node);
          if (children && children.length > 0) {
            //make child html first, because checkType
            childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open);
          }
          if (openFlag) {
            view.makeDOMNodeMainBefore(html, setting, node);
            view.makeDOMNodeLine(html, setting, node);
            data.getBeforeA(setting, node, html);
            view.makeDOMNodeNameBefore(html, setting, node);
            data.getInnerBeforeA(setting, node, html);
            view.makeDOMNodeIcon(html, setting, node);
            data.getInnerAfterA(setting, node, html);
            view.makeDOMNodeNameAfter(html, setting, node);
            data.getAfterA(setting, node, html);
            if (isParent && node.open) {
              view.makeUlHtml(setting, node, html, childHtml.join(''));
            }
            view.makeDOMNodeMainAfter(html, setting, node);
            data.addCreatedNode(setting, node);
          }
        }
        return html;
      },
      appendParentULDom: function (setting, node) {
        var html = [],
          nObj = $$(node, setting);
        if (!nObj.get(0) && !!node.parentTId) {
          view.appendParentULDom(setting, node.getParentNode());
          nObj = $$(node, setting);
        }
        var ulObj = $$(node, consts.id.UL, setting);
        if (ulObj.get(0)) {
          ulObj.remove();
        }
        var children = data.nodeChildren(setting, node),
          childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true);
        view.makeUlHtml(setting, node, html, childHtml.join(''));
        nObj.append(html.join(''));
      },
      asyncNode: function (setting, node, isSilent, callback) {
        var i, l;
        var isParent = data.nodeIsParent(setting, node);
        if (node && !isParent) {
          tools.apply(callback);
          return false;
        } else if (node && node.isAjaxing) {
          return false;
        } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {
          tools.apply(callback);
          return false;
        }
        if (node) {
          node.isAjaxing = true;
          var icoObj = $$(node, consts.id.ICON, setting);
          icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING});
        }
        var tmpParam = {};
        var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam);
        for (i = 0, l = autoParam.length; node && i < l; i++) {
          var pKey = autoParam[i].split("="), spKey = pKey;
          if (pKey.length > 1) {
            spKey = pKey[1];
            pKey = pKey[0];
          }
          tmpParam[spKey] = node[pKey];
        }
        var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam);
        if (tools.isArray(otherParam)) {
          for (i = 0, l = otherParam.length; i < l; i += 2) {
            tmpParam[otherParam[i]] = otherParam[i + 1];
          }
        } else {
          for (var p in otherParam) {
            tmpParam[p] = otherParam[p];
          }
        }
        var _tmpV = data.getRoot(setting)._ver;
        $.ajax({
          contentType: setting.async.contentType,
          cache: false,
          type: setting.async.type,
          url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),
          data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,
          dataType: setting.async.dataType,
          headers: setting.async.headers,
          xhrFields: setting.async.xhrFields,
          success: function (msg) {
            if (_tmpV != data.getRoot(setting)._ver) {
              return;
            }
            var newNodes = [];
            try {
              if (!msg || msg.length == 0) {
                newNodes = [];
              } else if (typeof msg == "string") {
                newNodes = eval("(" + msg + ")");
              } else {
                newNodes = msg;
              }
            } catch (err) {
              newNodes = msg;
            }
            if (node) {
              node.isAjaxing = null;
              node.zAsync = true;
            }
            view.setNodeLineIcos(setting, node);
            if (newNodes && newNodes !== "") {
              newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);
              view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);
            } else {
              view.addNodes(setting, node, -1, [], !!isSilent);
            }
            setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);
            tools.apply(callback);
          },
          error: function (XMLHttpRequest, textStatus, errorThrown) {
            if (_tmpV != data.getRoot(setting)._ver) {
              return;
            }
            if (node) node.isAjaxing = null;
            view.setNodeLineIcos(setting, node);
            setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);
          }
        });
        return true;
      },
      cancelPreSelectedNode: function (setting, node, excludeNode) {
        var list = data.getRoot(setting).curSelectedList,
          i, n;
        for (i = list.length - 1; i >= 0; i--) {
          n = list[i];
          if (node === n || (!node && (!excludeNode || excludeNode !== n))) {
            $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);
            if (node) {
              data.removeSelectedNode(setting, node);
              break;
            } else {
              list.splice(i, 1);
              setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);
            }
          }
        }
      },
      createNodeCallback: function (setting) {
        if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
          var root = data.getRoot(setting);
          while (root.createdNodes.length > 0) {
            var node = root.createdNodes.shift();
            tools.apply(setting.view.addDiyDom, [setting.treeId, node]);
            if (!!setting.callback.onNodeCreated) {
              setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);
            }
          }
        }
      },
      createNodes: function (setting, level, nodes, parentNode, index) {
        if (!nodes || nodes.length == 0) return;
        var root = data.getRoot(setting),
          openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0);
        root.createdNodes = [];
        var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),
          parentObj, nextObj;
        if (!parentNode) {
          parentObj = setting.treeObj;
          //setting.treeObj.append(zTreeHtml.join(''));
        } else {
          var ulObj = $$(parentNode, consts.id.UL, setting);
          if (ulObj.get(0)) {
            parentObj = ulObj;
            //ulObj.append(zTreeHtml.join(''));
          }
        }
        if (parentObj) {
          if (index >= 0) {
            nextObj = parentObj.children()[index];
          }
          if (index >= 0 && nextObj) {
            $(nextObj).before(zTreeHtml.join(''));
          } else {
            parentObj.append(zTreeHtml.join(''));
          }
        }
        view.createNodeCallback(setting);
      },
      destroy: function (setting) {
        if (!setting) return;
        data.initCache(setting);
        data.initRoot(setting);
        event.unbindTree(setting);
        event.unbindEvent(setting);
        setting.treeObj.empty();
        delete settings[setting.treeId];
      },
      expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) {
        var root = data.getRoot(setting);
        var tmpCb, _callback;
        if (!node) {
          tools.apply(callback, []);
          return;
        }
        var children = data.nodeChildren(setting, node);
        var isParent = data.nodeIsParent(setting, node);
        if (root.expandTriggerFlag) {
          _callback = callback;
          tmpCb = function () {
            if (_callback) _callback();
            if (node.open) {
              setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);
            } else {
              setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);
            }
          };
          callback = tmpCb;
          root.expandTriggerFlag = false;
        }
        if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) {
          view.appendParentULDom(setting, node);
          view.createNodeCallback(setting);
        }
        if (node.open == expandFlag) {
          tools.apply(callback, []);
          return;
        }
        var ulObj = $$(node, consts.id.UL, setting),
          switchObj = $$(node, consts.id.SWITCH, setting),
          icoObj = $$(node, consts.id.ICON, setting);
        if (isParent) {
          node.open = !node.open;
          if (node.iconOpen && node.iconClose) {
            icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
          }
          if (node.open) {
            view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);
            view.replaceIcoClass(node, icoObj, consts.folder.OPEN);
            if (animateFlag == false || setting.view.expandSpeed == "") {
              ulObj.show();
              tools.apply(callback, []);
            } else {
              if (children && children.length > 0) {
                ulObj.slideDown(setting.view.expandSpeed, callback);
              } else {
                ulObj.show();
                tools.apply(callback, []);
              }
            }
          } else {
            view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);
            view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);
            if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) {
              ulObj.hide();
              tools.apply(callback, []);
            } else {
              ulObj.slideUp(setting.view.expandSpeed, callback);
            }
          }
        } else {
          tools.apply(callback, []);
        }
      },
      expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) {
        if (!node) return;
        if (!node.parentTId) {
          view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
          return;
        } else {
          view.expandCollapseNode(setting, node, expandFlag, animateFlag);
        }
        if (node.parentTId) {
          view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);
        }
      },
      expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) {
        var root = data.getRoot(setting),
          treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root),
          selfAnimateSign = (node) ? false : animateFlag,
          expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;
        data.getRoot(setting).expandTriggerFlag = false;
        if (treeNodes) {
          for (var i = 0, l = treeNodes.length; i < l; i++) {
            if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);
          }
        }
        data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;
        view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
      },
      isSelectedNode: function (setting, node) {
        if (!node) {
          return false;
        }
        var list = data.getRoot(setting).curSelectedList,
          i;
        for (i = list.length - 1; i >= 0; i--) {
          if (node === list[i]) {
            return true;
          }
        }
        return false;
      },
      makeDOMNodeIcon: function (html, setting, node) {
        var nameStr = data.nodeName(setting, node),
          name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
        html.push("<span id='", node.tId, consts.id.ICON,
          "' title='' treeNode", consts.id.ICON, " class='", view.makeNodeIcoClass(setting, node),
          "' style='", view.makeNodeIcoStyle(setting, node), "'></span><span id='", node.tId, consts.id.SPAN,
          "' class='", consts.className.NAME,
          "'>", name, "</span>");
      },
      makeDOMNodeLine: function (html, setting, node) {
        html.push("<span id='", node.tId, consts.id.SWITCH, "' title='' class='", view.makeNodeLineClass(setting, node), "' treeNode", consts.id.SWITCH, "></span>");
      },
      makeDOMNodeMainAfter: function (html, setting, node) {
        html.push("</li>");
      },
      makeDOMNodeMainBefore: function (html, setting, node) {
        html.push("<li id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
      },
      makeDOMNodeNameAfter: function (html, setting, node) {
        html.push("</a>");
      },
      makeDOMNodeNameBefore: function (html, setting, node) {
        var title = data.nodeTitle(setting, node),
          url = view.makeNodeUrl(setting, node),
          fontcss = view.makeNodeFontCss(setting, node),
          fontStyle = [];
        for (var f in fontcss) {
          fontStyle.push(f, ":", fontcss[f], ";");
        }
        html.push("<a id='", node.tId, consts.id.A, "' class='", consts.className.LEVEL, node.level, "' treeNode", consts.id.A, " onclick=\"", (node.click || ''),
          "\" ", ((url != null && url.length > 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''),
          "'");
        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {
          html.push("title='", title.replace(/'/g, "&#39;").replace(/</g, '&lt;').replace(/>/g, '&gt;'), "'");
        }
        html.push(">");
      },
      makeNodeFontCss: function (setting, node) {
        var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);
        return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {};
      },
      makeNodeIcoClass: function (setting, node) {
        var icoCss = ["ico"];
        if (!node.isAjaxing) {
          var isParent = data.nodeIsParent(setting, node);
          icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0];
          if (isParent) {
            icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
          } else {
            icoCss.push(consts.folder.DOCU);
          }
        }
        return consts.className.BUTTON + " " + icoCss.join('_');
      },
      makeNodeIcoStyle: function (setting, node) {
        var icoStyle = [];
        if (!node.isAjaxing) {
          var isParent = data.nodeIsParent(setting, node);
          var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];
          if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;");
          if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {
            icoStyle.push("width:0px;height:0px;");
          }
        }
        return icoStyle.join('');
      },
      makeNodeLineClass: function (setting, node) {
        var lineClass = [];
        if (setting.view.showLine) {
          if (node.level == 0 && node.isFirstNode && node.isLastNode) {
            lineClass.push(consts.line.ROOT);
          } else if (node.level == 0 && node.isFirstNode) {
            lineClass.push(consts.line.ROOTS);
          } else if (node.isLastNode) {
            lineClass.push(consts.line.BOTTOM);
          } else {
            lineClass.push(consts.line.CENTER);
          }
        } else {
          lineClass.push(consts.line.NOLINE);
        }
        if (data.nodeIsParent(setting, node)) {
          lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
        } else {
          lineClass.push(consts.folder.DOCU);
        }
        return view.makeNodeLineClassEx(node) + lineClass.join('_');
      },
      makeNodeLineClassEx: function (node) {
        return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " ";
      },
      makeNodeTarget: function (node) {
        return (node.target || "_blank");
      },
      makeNodeUrl: function (setting, node) {
        var urlKey = setting.data.key.url;
        return node[urlKey] ? node[urlKey] : null;
      },
      makeUlHtml: function (setting, node, html, content) {
        html.push("<ul id='", node.tId, consts.id.UL, "' class='", consts.className.LEVEL, node.level, " ", view.makeUlLineClass(setting, node), "' style='display:", (node.open ? "block" : "none"), "'>");
        html.push(content);
        html.push("</ul>");
      },
      makeUlLineClass: function (setting, node) {
        return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : "");
      },
      removeChildNodes: function (setting, node) {
        if (!node) return;
        var nodes = data.nodeChildren(setting, node);
        if (!nodes) return;
        for (var i = 0, l = nodes.length; i < l; i++) {
          data.removeNodeCache(setting, nodes[i]);
        }
        data.removeSelectedNode(setting);
        delete node[setting.data.key.children];
        if (!setting.data.keep.parent) {
          data.nodeIsParent(setting, node, false);
          node.open = false;
          var tmp_switchObj = $$(node, consts.id.SWITCH, setting),
            tmp_icoObj = $$(node, consts.id.ICON, setting);
          view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);
          view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);
          $$(node, consts.id.UL, setting).remove();
        } else {
          $$(node, consts.id.UL, setting).empty();
        }
      },
      scrollIntoView: function (setting, dom) {
        if (!dom) {
          return;
        }
        // support IE 7
        if (typeof Element === 'undefined') {
          var contRect = setting.treeObj.get(0).getBoundingClientRect(),
            findMeRect = dom.getBoundingClientRect();
          if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom
            || findMeRect.right > contRect.right || findMeRect.left < contRect.left) {
            dom.scrollIntoView();
          }
          return;
        }
        // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e
        if (!Element.prototype.scrollIntoViewIfNeeded) {
          Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {
            "use strict";
            function makeRange(start, length) {
              return {"start": start, "length": length, "end": start + length};
            }
            function coverRange(inner, outer) {
              if (
                false === centerIfNeeded ||
                (outer.start < inner.end && inner.start < outer.end)
              ) {
                return Math.max(
                  inner.end - outer.length,
                  Math.min(outer.start, inner.start)
                );
              }
              return (inner.start + inner.end - outer.length) / 2;
            }
            function makePoint(x, y) {
              return {
                "x": x,
                "y": y,
                "translate": function translate(dX, dY) {
                  return makePoint(x + dX, y + dY);
                }
              };
            }
            function absolute(elem, pt) {
              while (elem) {
                pt = pt.translate(elem.offsetLeft, elem.offsetTop);
                elem = elem.offsetParent;
              }
              return pt;
            }
            var target = absolute(this, makePoint(0, 0)),
              extent = makePoint(this.offsetWidth, this.offsetHeight),
              elem = this.parentNode,
              origin;
            while (elem instanceof HTMLElement) {
              // Apply desired scroll amount.
              origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop));
              elem.scrollLeft = coverRange(
                makeRange(target.x - origin.x, extent.x),
                makeRange(elem.scrollLeft, elem.clientWidth)
              );
              elem.scrollTop = coverRange(
                makeRange(target.y - origin.y, extent.y),
                makeRange(elem.scrollTop, elem.clientHeight)
              );
              // Determine actual scroll amount by reading back scroll properties.
              target = target.translate(-elem.scrollLeft, -elem.scrollTop);
              elem = elem.parentNode;
            }
          };
        }
        dom.scrollIntoViewIfNeeded();
      },
      setFirstNode: function (setting, parentNode) {
        var children = data.nodeChildren(setting, parentNode);
        if (children.length > 0) {
          children[0].isFirstNode = true;
        }
      },
      setLastNode: function (setting, parentNode) {
        var children = data.nodeChildren(setting, parentNode);
        if (children.length > 0) {
          children[children.length - 1].isLastNode = true;
        }
      },
      removeNode: function (setting, node) {
        var root = data.getRoot(setting),
          parentNode = (node.parentTId) ? node.getParentNode() : root;
        node.isFirstNode = false;
        node.isLastNode = false;
        node.getPreNode = function () {
          return null;
        };
        node.getNextNode = function () {
          return null;
        };
        if (!data.getNodeCache(setting, node.tId)) {
          return;
        }
        $$(node, setting).remove();
        data.removeNodeCache(setting, node);
        data.removeSelectedNode(setting, node);
        var children = data.nodeChildren(setting, parentNode);
        for (var i = 0, l = children.length; i < l; i++) {
          if (children[i].tId == node.tId) {
            children.splice(i, 1);
            break;
          }
        }
        view.setFirstNode(setting, parentNode);
        view.setLastNode(setting, parentNode);
        var tmp_ulObj, tmp_switchObj, tmp_icoObj,
          childLength = children.length;
        //repair nodes old parent
        if (!setting.data.keep.parent && childLength == 0) {
          //old parentNode has no child nodes
          data.nodeIsParent(setting, parentNode, false);
          parentNode.open = false;
          delete parentNode[setting.data.key.children];
          tmp_ulObj = $$(parentNode, consts.id.UL, setting);
          tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);
          tmp_icoObj = $$(parentNode, consts.id.ICON, setting);
          view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);
          view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);
          tmp_ulObj.css("display", "none");
        } else if (setting.view.showLine && childLength > 0) {
          //old parentNode has child nodes
          var newLast = children[childLength - 1];
          tmp_ulObj = $$(newLast, consts.id.UL, setting);
          tmp_switchObj = $$(newLast, consts.id.SWITCH, setting);
          tmp_icoObj = $$(newLast, consts.id.ICON, setting);
          if (parentNode == root) {
            if (children.length == 1) {
              //node was root, and ztree has only one root after move node
              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);
            } else {
              var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting);
              view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS);
              view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
            }
          } else {
            view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
          }
          tmp_ulObj.removeClass(consts.line.LINE);
        }
      },
      replaceIcoClass: function (node, obj, newName) {
        if (!obj || node.isAjaxing) return;
        var tmpName = obj.attr("class");
        if (tmpName == undefined) return;
        var tmpList = tmpName.split("_");
        switch (newName) {
          case consts.folder.OPEN:
          case consts.folder.CLOSE:
          case consts.folder.DOCU:
            tmpList[tmpList.length - 1] = newName;
            break;
        }
        obj.attr("class", tmpList.join("_"));
      },
      replaceSwitchClass: function (node, obj, newName) {
        if (!obj) return;
        var tmpName = obj.attr("class");
        if (tmpName == undefined) return;
        var tmpList = tmpName.split("_");
        switch (newName) {
          case consts.line.ROOT:
          case consts.line.ROOTS:
          case consts.line.CENTER:
          case consts.line.BOTTOM:
          case consts.line.NOLINE:
            tmpList[0] = view.makeNodeLineClassEx(node) + newName;
            break;
          case consts.folder.OPEN:
          case consts.folder.CLOSE:
          case consts.folder.DOCU:
            tmpList[1] = newName;
            break;
        }
        obj.attr("class", tmpList.join("_"));
        if (newName !== consts.folder.DOCU) {
          obj.removeAttr("disabled");
        } else {
          obj.attr("disabled", "disabled");
        }
      },
      selectNode: function (setting, node, addFlag) {
        if (!addFlag) {
          view.cancelPreSelectedNode(setting, null, node);
        }
        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);
        data.addSelectedNode(setting, node);
        setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);
      },
      setNodeFontCss: function (setting, treeNode) {
        var aObj = $$(treeNode, consts.id.A, setting),
          fontCss = view.makeNodeFontCss(setting, treeNode);
        if (fontCss) {
          aObj.css(fontCss);
        }
      },
      setNodeLineIcos: function (setting, node) {
        if (!node) return;
        var switchObj = $$(node, consts.id.SWITCH, setting),
          ulObj = $$(node, consts.id.UL, setting),
          icoObj = $$(node, consts.id.ICON, setting),
          ulLine = view.makeUlLineClass(setting, node);
        if (ulLine.length == 0) {
          ulObj.removeClass(consts.line.LINE);
        } else {
          ulObj.addClass(ulLine);
        }
        switchObj.attr("class", view.makeNodeLineClass(setting, node));
        if (data.nodeIsParent(setting, node)) {
          switchObj.removeAttr("disabled");
        } else {
          switchObj.attr("disabled", "disabled");
        }
        icoObj.removeAttr("style");
        icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
        icoObj.attr("class", view.makeNodeIcoClass(setting, node));
      },
      setNodeName: function (setting, node) {
        var title = data.nodeTitle(setting, node),
          nObj = $$(node, consts.id.SPAN, setting);
        nObj.empty();
        if (setting.view.nameIsHTML) {
          nObj.html(data.nodeName(setting, node));
        } else {
          nObj.text(data.nodeName(setting, node));
        }
        if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {
          var aObj = $$(node, consts.id.A, setting);
          aObj.attr("title", !title ? "" : title);
        }
      },
      setNodeTarget: function (setting, node) {
        var aObj = $$(node, consts.id.A, setting);
        aObj.attr("target", view.makeNodeTarget(node));
      },
      setNodeUrl: function (setting, node) {
        var aObj = $$(node, consts.id.A, setting),
          url = view.makeNodeUrl(setting, node);
        if (url == null || url.length == 0) {
          aObj.removeAttr("href");
        } else {
          aObj.attr("href", url);
        }
      },
      switchNode: function (setting, node) {
        if (node.open || !tools.canAsync(setting, node)) {
          view.expandCollapseNode(setting, node, !node.open);
        } else if (setting.async.enable) {
          if (!view.asyncNode(setting, node)) {
            view.expandCollapseNode(setting, node, !node.open);
            return;
          }
        } else if (node) {
          view.expandCollapseNode(setting, node, !node.open);
        }
      }
    };
  // zTree defind
  $.fn.zTree = {
    consts: _consts,
    _z: {
      tools: tools,
      view: view,
      event: event,
      data: data
    },
    getZTreeObj: function (treeId) {
      var o = data.getZTreeTools(treeId);
      return o ? o : null;
    },
    destroy: function (treeId) {
      if (!!treeId && treeId.length > 0) {
        view.destroy(data.getSetting(treeId));
      } else {
        for (var s in settings) {
          view.destroy(settings[s]);
        }
      }
    },
    init: function (obj, zSetting, zNodes) {
      var setting = tools.clone(_setting);
      $.extend(true, setting, zSetting);
      setting.treeId = obj.attr("id");
      setting.treeObj = obj;
      setting.treeObj.empty();
      settings[setting.treeId] = setting;
      //For some older browser,(e.g., ie6)
      if (typeof document.body.style.maxHeight === "undefined") {
        setting.view.expandSpeed = "";
      }
      data.initRoot(setting);
      var root = data.getRoot(setting);
      zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : [];
      if (setting.data.simpleData.enable) {
        data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes));
      } else {
        data.nodeChildren(setting, root, zNodes);
      }
      data.initCache(setting);
      event.unbindTree(setting);
      event.bindTree(setting);
      event.unbindEvent(setting);
      event.bindEvent(setting);
      var zTreeTools = {
        setting: setting,
        addNodes: function (parentNode, index, newNodes, isSilent) {
          if (!parentNode) parentNode = null;
          var isParent = data.nodeIsParent(setting, parentNode);
          if (parentNode && !isParent && setting.data.keep.leaf) return null;
          var i = parseInt(index, 10);
          if (isNaN(i)) {
            isSilent = !!newNodes;
            newNodes = index;
            index = -1;
          } else {
            index = i;
          }
          if (!newNodes) return null;
          var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]);
          function addCallback() {
            view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true));
          }
          if (tools.canAsync(setting, parentNode)) {
            view.asyncNode(setting, parentNode, isSilent, addCallback);
          } else {
            addCallback();
          }
          return xNewNodes;
        },
        cancelSelectedNode: function (node) {
          view.cancelPreSelectedNode(setting, node);
        },
        destroy: function () {
          view.destroy(setting);
        },
        expandAll: function (expandFlag) {
          expandFlag = !!expandFlag;
          view.expandCollapseSonNode(setting, null, expandFlag, true);
          return expandFlag;
        },
        expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) {
          if (!node || !data.nodeIsParent(setting, node)) return null;
          if (expandFlag !== true && expandFlag !== false) {
            expandFlag = !node.open;
          }
          callbackFlag = !!callbackFlag;
          if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {
            return null;
          } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {
            return null;
          }
          if (expandFlag && node.parentTId) {
            view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);
          }
          if (expandFlag === node.open && !sonSign) {
            return null;
          }
          data.getRoot(setting).expandTriggerFlag = callbackFlag;
          if (!tools.canAsync(setting, node) && sonSign) {
            view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);
          } else {
            node.open = !expandFlag;
            view.switchNode(this.setting, node);
            showNodeFocus();
          }
          return expandFlag;
          function showNodeFocus() {
            var a = $$(node, setting).get(0);
            if (a && focus !== false) {
              view.scrollIntoView(setting, a);
            }
          }
        },
        getNodes: function () {
          return data.getNodes(setting);
        },
        getNodeByParam: function (key, value, parentNode) {
          if (!key) return null;
          return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
        },
        getNodeByTId: function (tId) {
          return data.getNodeCache(setting, tId);
        },
        getNodesByParam: function (key, value, parentNode) {
          if (!key) return null;
          return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
        },
        getNodesByParamFuzzy: function (key, value, parentNode) {
          if (!key) return null;
          return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
        },
        getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) {
          isSingle = !!isSingle;
          if (!filter || (typeof filter != "function")) return (isSingle ? null : []);
          return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam);
        },
        getNodeIndex: function (node) {
          if (!node) return null;
          var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
          var children = data.nodeChildren(setting, parentNode);
          for (var i = 0, l = children.length; i < l; i++) {
            if (children[i] == node) return i;
          }
          return -1;
        },
        getSelectedNodes: function () {
          var r = [], list = data.getRoot(setting).curSelectedList;
          for (var i = 0, l = list.length; i < l; i++) {
            r.push(list[i]);
          }
          return r;
        },
        isSelectedNode: function (node) {
          return data.isSelectedNode(setting, node);
        },
        reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) {
          var promise = new Promise(function (resolve, reject) {
            try {
              zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () {
                resolve(parentNode);
              });
            } catch (e) {
              reject(e);
            }
          });
          return promise;
        },
        reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) {
          if (!this.setting.async.enable) return;
          var isRoot = !parentNode;
          if (isRoot) {
            parentNode = data.getRoot(setting);
          }
          if (reloadType == "refresh") {
            var children = data.nodeChildren(setting, parentNode);
            for (var i = 0, l = children ? children.length : 0; i < l; i++) {
              data.removeNodeCache(setting, children[i]);
            }
            data.removeSelectedNode(setting);
            data.nodeChildren(setting, parentNode, []);
            if (isRoot) {
              this.setting.treeObj.empty();
            } else {
              var ulObj = $$(parentNode, consts.id.UL, setting);
              ulObj.empty();
            }
          }
          view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback);
        },
        refresh: function () {
          this.setting.treeObj.empty();
          var root = data.getRoot(setting),
            nodes = data.nodeChildren(setting, root);
          data.initRoot(setting);
          data.nodeChildren(setting, root, nodes);
          data.initCache(setting);
          view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1);
        },
        removeChildNodes: function (node) {
          if (!node) return null;
          var nodes = data.nodeChildren(setting, node);
          view.removeChildNodes(setting, node);
          return nodes ? nodes : null;
        },
        removeNode: function (node, callbackFlag) {
          if (!node) return;
          callbackFlag = !!callbackFlag;
          if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;
          view.removeNode(setting, node);
          if (callbackFlag) {
            this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
          }
        },
        selectNode: function (node, addFlag, isSilent) {
          if (!node) return;
          if (tools.uCanDo(setting)) {
            addFlag = setting.view.selectedMulti && addFlag;
            if (node.parentTId) {
              view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);
            } else if (!isSilent) {
              try {
                $$(node, setting).focus().blur();
              } catch (e) {
              }
            }
            view.selectNode(setting, node, addFlag);
          }
          function showNodeFocus() {
            if (isSilent) {
              return;
            }
            var a = $$(node, setting).get(0);
            view.scrollIntoView(setting, a);
          }
        },
        transformTozTreeNodes: function (simpleNodes) {
          return data.transformTozTreeFormat(setting, simpleNodes);
        },
        transformToArray: function (nodes) {
          return data.transformToArrayFormat(setting, nodes);
        },
        updateNode: function (node, checkTypeFlag) {
          if (!node) return;
          var nObj = $$(node, setting);
          if (nObj.get(0) && tools.uCanDo(setting)) {
            view.setNodeName(setting, node);
            view.setNodeTarget(setting, node);
            view.setNodeUrl(setting, node);
            view.setNodeLineIcos(setting, node);
            view.setNodeFontCss(setting, node);
          }
        }
      };
      root.treeTools = zTreeTools;
      data.setZTreeTools(setting, zTreeTools);
      var children = data.nodeChildren(setting, root);
      if (children && children.length > 0) {
        view.createNodes(setting, 0, children, null, -1);
      } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {
        view.asyncNode(setting);
      }
      return zTreeTools;
    }
  };
  var zt = $.fn.zTree,
    $$ = tools.$,
    consts = zt.consts;
})(jQuery);
src/plugins/ztree/js/jquery.ztree.core.min.js
New file
@@ -0,0 +1,75 @@
/*
 * JQuery zTree core v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(r){var J,K,L,M,N,O,v,t={},w={},x={},P={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",
dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},y=[function(a){var b=a.treeObj,c=g.event;b.bind(c.NODECREATED,
function(b,c,i){h.apply(a.callback.onNodeCreated,[b,c,i])});b.bind(c.CLICK,function(b,c,i,e,k){h.apply(a.callback.onClick,[c,i,e,k])});b.bind(c.EXPAND,function(b,c,i){h.apply(a.callback.onExpand,[b,c,i])});b.bind(c.COLLAPSE,function(b,c,i){h.apply(a.callback.onCollapse,[b,c,i])});b.bind(c.ASYNC_SUCCESS,function(b,c,i,e){h.apply(a.callback.onAsyncSuccess,[b,c,i,e])});b.bind(c.ASYNC_ERROR,function(b,c,i,e,k,g){h.apply(a.callback.onAsyncError,[b,c,i,e,k,g])});b.bind(c.REMOVE,function(b,c,i){h.apply(a.callback.onRemove,
[b,c,i])});b.bind(c.SELECTED,function(b,c,i){h.apply(a.callback.onSelected,[c,i])});b.bind(c.UNSELECTED,function(b,c,i){h.apply(a.callback.onUnSelected,[c,i])})}],z=[function(a){var b=g.event;a.treeObj.unbind(b.NODECREATED).unbind(b.CLICK).unbind(b.EXPAND).unbind(b.COLLAPSE).unbind(b.ASYNC_SUCCESS).unbind(b.ASYNC_ERROR).unbind(b.REMOVE).unbind(b.SELECTED).unbind(b.UNSELECTED)}],A=[function(a){var b=e.getCache(a);b||(b={},e.setCache(a,b));b.nodes=[];b.doms=[]}],B=[function(a,b,c,d,f,i){if(c){var m=
e.getRoot(a),k=e.nodeChildren(a,c);c.level=b;c.tId=a.treeId+"_"+ ++m.zId;c.parentTId=d?d.tId:null;c.open=typeof c.open=="string"?h.eqs(c.open,"true"):!!c.open;b=e.nodeIsParent(a,c);h.isArray(k)?(e.nodeIsParent(a,c,!0),c.zAsync=!0):(b=e.nodeIsParent(a,c,b),c.open=b&&!a.async.enable?c.open:!1,c.zAsync=!b);c.isFirstNode=f;c.isLastNode=i;c.getParentNode=function(){return e.getNodeCache(a,c.parentTId)};c.getPreNode=function(){return e.getPreNode(a,c)};c.getNextNode=function(){return e.getNextNode(a,c)};
c.getIndex=function(){return e.getNodeIndex(a,c)};c.getPath=function(){return e.getNodePath(a,c)};c.isAjaxing=!1;e.fixPIdKeyValue(a,c)}}],u=[function(a){var b=a.target,c=e.getSetting(a.data.treeId),d="",f=null,i="",m="",k=null,j=null,o=null;if(h.eqs(a.type,"mousedown"))m="mousedown";else if(h.eqs(a.type,"mouseup"))m="mouseup";else if(h.eqs(a.type,"contextmenu"))m="contextmenu";else if(h.eqs(a.type,"click"))if(h.eqs(b.tagName,"span")&&b.getAttribute("treeNode"+g.id.SWITCH)!==null)d=h.getNodeMainDom(b).id,
i="switchNode";else{if(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}]))d=h.getNodeMainDom(o).id,i="clickNode"}else if(h.eqs(a.type,"dblclick")&&(m="dblclick",o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id,i="switchNode";if(m.length>0&&d.length==0&&(o=h.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+g.id.A}])))d=h.getNodeMainDom(o).id;if(d.length>0)switch(f=e.getNodeCache(c,d),i){case "switchNode":e.nodeIsParent(c,f)?h.eqs(a.type,"click")||h.eqs(a.type,
"dblclick")&&h.apply(c.view.dblClickExpand,[c.treeId,f],c.view.dblClickExpand)?k=J:i="":i="";break;case "clickNode":k=K}switch(m){case "mousedown":j=L;break;case "mouseup":j=M;break;case "dblclick":j=N;break;case "contextmenu":j=O}return{stop:!1,node:f,nodeEventType:i,nodeEventCallback:k,treeEventType:m,treeEventCallback:j}}],C=[function(a){var b=e.getRoot(a);b||(b={},e.setRoot(a,b));e.nodeChildren(a,b,[]);b.expandTriggerFlag=!1;b.curSelectedList=[];b.noSelection=!0;b.createdNodes=[];b.zId=0;b._ver=
(new Date).getTime()}],D=[],E=[],F=[],G=[],H=[],e={addNodeCache:function(a,b){e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=b},getNodeCacheId:function(a){return a.substring(a.lastIndexOf("_")+1)},addAfterA:function(a){E.push(a)},addBeforeA:function(a){D.push(a)},addInnerAfterA:function(a){G.push(a)},addInnerBeforeA:function(a){F.push(a)},addInitBind:function(a){y.push(a)},addInitUnBind:function(a){z.push(a)},addInitCache:function(a){A.push(a)},addInitNode:function(a){B.push(a)},addInitProxy:function(a,
b){b?u.splice(0,0,a):u.push(a)},addInitRoot:function(a){C.push(a)},addNodesData:function(a,b,c,d){var f=e.nodeChildren(a,b);f?c>=f.length&&(c=-1):(f=e.nodeChildren(a,b,[]),c=-1);if(f.length>0&&c===0)f[0].isFirstNode=!1,j.setNodeLineIcos(a,f[0]);else if(f.length>0&&c<0)f[f.length-1].isLastNode=!1,j.setNodeLineIcos(a,f[f.length-1]);e.nodeIsParent(a,b,!0);c<0?e.nodeChildren(a,b,f.concat(d)):(a=[c,0].concat(d),f.splice.apply(f,a))},addSelectedNode:function(a,b){var c=e.getRoot(a);e.isSelectedNode(a,b)||
c.curSelectedList.push(b)},addCreatedNode:function(a,b){(a.callback.onNodeCreated||a.view.addDiyDom)&&e.getRoot(a).createdNodes.push(b)},addZTreeTools:function(a){H.push(a)},exSetting:function(a){r.extend(!0,P,a)},fixPIdKeyValue:function(a,b){a.data.simpleData.enable&&(b[a.data.simpleData.pIdKey]=b.parentTId?b.getParentNode()[a.data.simpleData.idKey]:a.data.simpleData.rootPId)},getAfterA:function(a,b,c){for(var d=0,e=E.length;d<e;d++)E[d].apply(this,arguments)},getBeforeA:function(a,b,c){for(var d=
0,e=D.length;d<e;d++)D[d].apply(this,arguments)},getInnerAfterA:function(a,b,c){for(var d=0,e=G.length;d<e;d++)G[d].apply(this,arguments)},getInnerBeforeA:function(a,b,c){for(var d=0,e=F.length;d<e;d++)F[d].apply(this,arguments)},getCache:function(a){return x[a.treeId]},getNodeIndex:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d;return-1},getNextNode:function(a,b){if(!b)return null;for(var c=
b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length-1;d<=f;d++)if(c[d]===b)return d==f?null:c[d+1];return null},getNodeByParam:function(a,b,c,d){if(!b||!c)return null;for(var f=0,i=b.length;f<i;f++){var m=b[f];if(m[c]==d)return b[f];m=e.nodeChildren(a,m);if(m=e.getNodeByParam(a,m,c,d))return m}return null},getNodeCache:function(a,b){if(!b)return null;var c=x[a.treeId].nodes[e.getNodeCacheId(b)];return c?c:null},getNodePath:function(a,b){if(!b)return null;var c;(c=b.parentTId?
b.getParentNode().getPath():[])&&c.push(b);return c},getNodes:function(a){return e.nodeChildren(a,e.getRoot(a))},getNodesByParam:function(a,b,c,d){if(!b||!c)return[];for(var f=[],i=0,m=b.length;i<m;i++){var k=b[i];k[c]==d&&f.push(k);k=e.nodeChildren(a,k);f=f.concat(e.getNodesByParam(a,k,c,d))}return f},getNodesByParamFuzzy:function(a,b,c,d){if(!b||!c)return[];for(var f=[],d=d.toLowerCase(),i=0,m=b.length;i<m;i++){var k=b[i];typeof k[c]=="string"&&b[i][c].toLowerCase().indexOf(d)>-1&&f.push(k);k=e.nodeChildren(a,
k);f=f.concat(e.getNodesByParamFuzzy(a,k,c,d))}return f},getNodesByFilter:function(a,b,c,d,f){if(!b)return d?null:[];for(var i=d?null:[],m=0,k=b.length;m<k;m++){var g=b[m];if(h.apply(c,[g,f],!1)){if(d)return g;i.push(g)}g=e.nodeChildren(a,g);g=e.getNodesByFilter(a,g,c,d,f);if(d&&g)return g;i=d?g:i.concat(g)}return i},getPreNode:function(a,b){if(!b)return null;for(var c=b.parentTId?b.getParentNode():e.getRoot(a),c=e.nodeChildren(a,c),d=0,f=c.length;d<f;d++)if(c[d]===b)return d==0?null:c[d-1];return null},
getRoot:function(a){return a?w[a.treeId]:null},getRoots:function(){return w},getSetting:function(a){return t[a]},getSettings:function(){return t},getZTreeTools:function(a){return(a=this.getRoot(this.getSetting(a)))?a.treeTools:null},initCache:function(a){for(var b=0,c=A.length;b<c;b++)A[b].apply(this,arguments)},initNode:function(a,b,c,d,e,i){for(var m=0,g=B.length;m<g;m++)B[m].apply(this,arguments)},initRoot:function(a){for(var b=0,c=C.length;b<c;b++)C[b].apply(this,arguments)},isSelectedNode:function(a,
b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d])return!0;return!1},nodeChildren:function(a,b,c){if(!b)return null;a=a.data.key.children;typeof c!=="undefined"&&(b[a]=c);return b[a]},nodeIsParent:function(a,b,c){if(!b)return!1;a=a.data.key.isParent;typeof c!=="undefined"?(typeof c==="string"&&(c=h.eqs(c,"true")),b[a]=!!c):b[a]=typeof b[a]=="string"?h.eqs(b[a],"true"):!!b[a];return b[a]},nodeName:function(a,b,c){a=a.data.key.name;typeof c!=="undefined"&&
(b[a]=c);return""+b[a]},nodeTitle:function(a,b){return""+b[a.data.key.title===""?a.data.key.name:a.data.key.title]},removeNodeCache:function(a,b){var c=e.nodeChildren(a,b);if(c)for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.getCache(a).nodes[e.getNodeCacheId(b.tId)]=null},removeSelectedNode:function(a,b){for(var c=e.getRoot(a),d=0,f=c.curSelectedList.length;d<f;d++)if(b===c.curSelectedList[d]||!e.getNodeCache(a,c.curSelectedList[d].tId))c.curSelectedList.splice(d,1),a.treeObj.trigger(g.event.UNSELECTED,
[a.treeId,b]),d--,f--},setCache:function(a,b){x[a.treeId]=b},setRoot:function(a,b){w[a.treeId]=b},setZTreeTools:function(a,b){for(var c=0,d=H.length;c<d;c++)H[c].apply(this,arguments)},transformToArrayFormat:function(a,b){function c(b){d.push(b);(b=e.nodeChildren(a,b))&&(d=d.concat(e.transformToArrayFormat(a,b)))}if(!b)return[];var d=[];if(h.isArray(b))for(var f=0,i=b.length;f<i;f++)c(b[f]);else c(b);return d},transformTozTreeFormat:function(a,b){var c,d,f=a.data.simpleData.idKey,i=a.data.simpleData.pIdKey;
if(!f||f==""||!b)return[];if(h.isArray(b)){var g=[],k={};for(c=0,d=b.length;c<d;c++)k[b[c][f]]=b[c];for(c=0,d=b.length;c<d;c++){var j=k[b[c][i]];if(j&&b[c][f]!=b[c][i]){var o=e.nodeChildren(a,j);o||(o=e.nodeChildren(a,j,[]));o.push(b[c])}else g.push(b[c])}return g}else return[b]}},n={bindEvent:function(a){for(var b=0,c=y.length;b<c;b++)y[b].apply(this,arguments)},unbindEvent:function(a){for(var b=0,c=z.length;b<c;b++)z[b].apply(this,arguments)},bindTree:function(a){var b={treeId:a.treeId},c=a.treeObj;
a.view.txtSelectedEnable||c.bind("selectstart",v).css({"-moz-user-select":"-moz-none"});c.bind("click",b,n.proxy);c.bind("dblclick",b,n.proxy);c.bind("mouseover",b,n.proxy);c.bind("mouseout",b,n.proxy);c.bind("mousedown",b,n.proxy);c.bind("mouseup",b,n.proxy);c.bind("contextmenu",b,n.proxy)},unbindTree:function(a){a.treeObj.unbind("selectstart",v).unbind("click",n.proxy).unbind("dblclick",n.proxy).unbind("mouseover",n.proxy).unbind("mouseout",n.proxy).unbind("mousedown",n.proxy).unbind("mouseup",
n.proxy).unbind("contextmenu",n.proxy)},doProxy:function(a){for(var b=[],c=0,d=u.length;c<d;c++){var e=u[c].apply(this,arguments);b.push(e);if(e.stop)break}return b},proxy:function(a){var b=e.getSetting(a.data.treeId);if(!h.uCanDo(b,a))return!0;for(var b=n.doProxy(a),c=!0,d=0,f=b.length;d<f;d++){var i=b[d];i.nodeEventCallback&&(c=i.nodeEventCallback.apply(i,[a,i.node])&&c);i.treeEventCallback&&(c=i.treeEventCallback.apply(i,[a,i.node])&&c)}return c}};J=function(a,b){var c=e.getSetting(a.data.treeId);
if(b.open){if(h.apply(c.callback.beforeCollapse,[c.treeId,b],!0)==!1)return!0}else if(h.apply(c.callback.beforeExpand,[c.treeId,b],!0)==!1)return!0;e.getRoot(c).expandTriggerFlag=!0;j.switchNode(c,b);return!0};K=function(a,b){var c=e.getSetting(a.data.treeId),d=c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&e.isSelectedNode(c,b)?0:c.view.autoCancelSelected&&(a.ctrlKey||a.metaKey)&&c.view.selectedMulti?2:1;if(h.apply(c.callback.beforeClick,[c.treeId,b,d],!0)==!1)return!0;d===0?j.cancelPreSelectedNode(c,
b):j.selectNode(c,b,d===2);c.treeObj.trigger(g.event.CLICK,[a,c.treeId,b,d]);return!0};L=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseDown,[c.treeId,b],!0)&&h.apply(c.callback.onMouseDown,[a,c.treeId,b]);return!0};M=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeMouseUp,[c.treeId,b],!0)&&h.apply(c.callback.onMouseUp,[a,c.treeId,b]);return!0};N=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeDblClick,[c.treeId,b],!0)&&
h.apply(c.callback.onDblClick,[a,c.treeId,b]);return!0};O=function(a,b){var c=e.getSetting(a.data.treeId);h.apply(c.callback.beforeRightClick,[c.treeId,b],!0)&&h.apply(c.callback.onRightClick,[a,c.treeId,b]);return typeof c.callback.onRightClick!="function"};v=function(a){a=a.originalEvent.srcElement.nodeName.toLowerCase();return a==="input"||a==="textarea"};var h={apply:function(a,b,c){return typeof a=="function"?a.apply(Q,b?b:[]):c},canAsync:function(a,b){var c=e.nodeChildren(a,b),d=e.nodeIsParent(a,
b);return a.async.enable&&b&&d&&!(b.zAsync||c&&c.length>0)},clone:function(a){if(a===null)return null;var b=h.isArray(a)?[]:{},c;for(c in a)b[c]=a[c]instanceof Date?new Date(a[c].getTime()):typeof a[c]==="object"?h.clone(a[c]):a[c];return b},eqs:function(a,b){return a.toLowerCase()===b.toLowerCase()},isArray:function(a){return Object.prototype.toString.apply(a)==="[object Array]"},isElement:function(a){return typeof HTMLElement==="object"?a instanceof HTMLElement:a&&typeof a==="object"&&a!==null&&
a.nodeType===1&&typeof a.nodeName==="string"},$:function(a,b,c){b&&typeof b!="string"&&(c=b,b="");return typeof a=="string"?r(a,c?c.treeObj.get(0).ownerDocument:null):r("#"+a.tId+b,c?c.treeObj:null)},getMDom:function(a,b,c){if(!b)return null;for(;b&&b.id!==a.treeId;){for(var d=0,e=c.length;b.tagName&&d<e;d++)if(h.eqs(b.tagName,c[d].tagName)&&b.getAttribute(c[d].attrName)!==null)return b;b=b.parentNode}return null},getNodeMainDom:function(a){return r(a).parent("li").get(0)||r(a).parentsUntil("li").parent().get(0)},
isChildOrSelf:function(a,b){return r(a).closest("#"+b).length>0},uCanDo:function(){return!0}},j={addNodes:function(a,b,c,d,f){var i=e.nodeIsParent(a,b);if(!a.data.keep.leaf||!b||i)if(h.isArray(d)||(d=[d]),a.data.simpleData.enable&&(d=e.transformTozTreeFormat(a,d)),b){var i=l(b,g.id.SWITCH,a),m=l(b,g.id.ICON,a),k=l(b,g.id.UL,a);if(!b.open)j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,m,g.folder.CLOSE),b.open=!1,k.css({display:"none"});e.addNodesData(a,b,c,d);j.createNodes(a,b.level+
1,d,b,c);f||j.expandCollapseParentNode(a,b,!0)}else e.addNodesData(a,e.getRoot(a),c,d),j.createNodes(a,0,d,null,c)},appendNodes:function(a,b,c,d,f,i,g){if(!c)return[];var k=[],h=d?d:e.getRoot(a),h=e.nodeChildren(a,h),o,l;if(!h||f>=h.length-c.length)f=-1;for(var s=0,n=c.length;s<n;s++){var p=c[s];i&&(o=(f===0||h.length==c.length)&&s==0,l=f<0&&s==c.length-1,e.initNode(a,b,p,d,o,l,g),e.addNodeCache(a,p));o=e.nodeIsParent(a,p);l=[];var I=e.nodeChildren(a,p);I&&I.length>0&&(l=j.appendNodes(a,b+1,I,p,-1,
i,g&&p.open));g&&(j.makeDOMNodeMainBefore(k,a,p),j.makeDOMNodeLine(k,a,p),e.getBeforeA(a,p,k),j.makeDOMNodeNameBefore(k,a,p),e.getInnerBeforeA(a,p,k),j.makeDOMNodeIcon(k,a,p),e.getInnerAfterA(a,p,k),j.makeDOMNodeNameAfter(k,a,p),e.getAfterA(a,p,k),o&&p.open&&j.makeUlHtml(a,p,k,l.join("")),j.makeDOMNodeMainAfter(k,a,p),e.addCreatedNode(a,p))}return k},appendParentULDom:function(a,b){var c=[],d=l(b,a);!d.get(0)&&b.parentTId&&(j.appendParentULDom(a,b.getParentNode()),d=l(b,a));var f=l(b,g.id.UL,a);f.get(0)&&
f.remove();f=e.nodeChildren(a,b);f=j.appendNodes(a,b.level+1,f,b,-1,!1,!0);j.makeUlHtml(a,b,c,f.join(""));d.append(c.join(""))},asyncNode:function(a,b,c,d){var f,i;f=e.nodeIsParent(a,b);if(b&&!f)return h.apply(d),!1;else if(b&&b.isAjaxing)return!1;else if(h.apply(a.callback.beforeAsync,[a.treeId,b],!0)==!1)return h.apply(d),!1;if(b)b.isAjaxing=!0,l(b,g.id.ICON,a).attr({style:"","class":g.className.BUTTON+" "+g.className.ICO_LOADING});var m={},k=h.apply(a.async.autoParam,[a.treeId,b],a.async.autoParam);
for(f=0,i=k.length;b&&f<i;f++){var q=k[f].split("="),o=q;q.length>1&&(o=q[1],q=q[0]);m[o]=b[q]}k=h.apply(a.async.otherParam,[a.treeId,b],a.async.otherParam);if(h.isArray(k))for(f=0,i=k.length;f<i;f+=2)m[k[f]]=k[f+1];else for(var n in k)m[n]=k[n];var s=e.getRoot(a)._ver;r.ajax({contentType:a.async.contentType,cache:!1,type:a.async.type,url:h.apply(a.async.url,[a.treeId,b],a.async.url),data:a.async.contentType.indexOf("application/json")>-1?JSON.stringify(m):m,dataType:a.async.dataType,headers:a.async.headers,
xhrFields:a.async.xhrFields,success:function(i){if(s==e.getRoot(a)._ver){var f=[];try{f=!i||i.length==0?[]:typeof i=="string"?eval("("+i+")"):i}catch(k){f=i}if(b)b.isAjaxing=null,b.zAsync=!0;j.setNodeLineIcos(a,b);f&&f!==""?(f=h.apply(a.async.dataFilter,[a.treeId,b,f],f),j.addNodes(a,b,-1,f?h.clone(f):[],!!c)):j.addNodes(a,b,-1,[],!!c);a.treeObj.trigger(g.event.ASYNC_SUCCESS,[a.treeId,b,i]);h.apply(d)}},error:function(c,d,i){if(s==e.getRoot(a)._ver){if(b)b.isAjaxing=null;j.setNodeLineIcos(a,b);a.treeObj.trigger(g.event.ASYNC_ERROR,
[a.treeId,b,c,d,i])}}});return!0},cancelPreSelectedNode:function(a,b,c){var d=e.getRoot(a).curSelectedList,f,i;for(f=d.length-1;f>=0;f--)if(i=d[f],b===i||!b&&(!c||c!==i))if(l(i,g.id.A,a).removeClass(g.node.CURSELECTED),b){e.removeSelectedNode(a,b);break}else d.splice(f,1),a.treeObj.trigger(g.event.UNSELECTED,[a.treeId,i])},createNodeCallback:function(a){if(a.callback.onNodeCreated||a.view.addDiyDom)for(var b=e.getRoot(a);b.createdNodes.length>0;){var c=b.createdNodes.shift();h.apply(a.view.addDiyDom,
[a.treeId,c]);a.callback.onNodeCreated&&a.treeObj.trigger(g.event.NODECREATED,[a.treeId,c])}},createNodes:function(a,b,c,d,f){if(c&&c.length!=0){var i=e.getRoot(a),m=!d||d.open||!!l(e.nodeChildren(a,d)[0],a).get(0);i.createdNodes=[];var b=j.appendNodes(a,b,c,d,f,!0,m),k,h;d?(d=l(d,g.id.UL,a),d.get(0)&&(k=d)):k=a.treeObj;k&&(f>=0&&(h=k.children()[f]),f>=0&&h?r(h).before(b.join("")):k.append(b.join("")));j.createNodeCallback(a)}},destroy:function(a){a&&(e.initCache(a),e.initRoot(a),n.unbindTree(a),
n.unbindEvent(a),a.treeObj.empty(),delete t[a.treeId])},expandCollapseNode:function(a,b,c,d,f){var i=e.getRoot(a),m;if(b){var k=e.nodeChildren(a,b),q=e.nodeIsParent(a,b);if(i.expandTriggerFlag)m=f,f=function(){m&&m();b.open?a.treeObj.trigger(g.event.EXPAND,[a.treeId,b]):a.treeObj.trigger(g.event.COLLAPSE,[a.treeId,b])},i.expandTriggerFlag=!1;if(!b.open&&q&&(!l(b,g.id.UL,a).get(0)||k&&k.length>0&&!l(k[0],a).get(0)))j.appendParentULDom(a,b),j.createNodeCallback(a);if(b.open==c)h.apply(f,[]);else{var c=
l(b,g.id.UL,a),i=l(b,g.id.SWITCH,a),o=l(b,g.id.ICON,a);q?(b.open=!b.open,b.iconOpen&&b.iconClose&&o.attr("style",j.makeNodeIcoStyle(a,b)),b.open?(j.replaceSwitchClass(b,i,g.folder.OPEN),j.replaceIcoClass(b,o,g.folder.OPEN),d==!1||a.view.expandSpeed==""?(c.show(),h.apply(f,[])):k&&k.length>0?c.slideDown(a.view.expandSpeed,f):(c.show(),h.apply(f,[]))):(j.replaceSwitchClass(b,i,g.folder.CLOSE),j.replaceIcoClass(b,o,g.folder.CLOSE),d==!1||a.view.expandSpeed==""||!(k&&k.length>0)?(c.hide(),h.apply(f,[])):
c.slideUp(a.view.expandSpeed,f))):h.apply(f,[])}}else h.apply(f,[])},expandCollapseParentNode:function(a,b,c,d,e){b&&(b.parentTId?(j.expandCollapseNode(a,b,c,d),b.parentTId&&j.expandCollapseParentNode(a,b.getParentNode(),c,d,e)):j.expandCollapseNode(a,b,c,d,e))},expandCollapseSonNode:function(a,b,c,d,f){var i=e.getRoot(a),i=b?e.nodeChildren(a,b):e.nodeChildren(a,i),g=b?!1:d,k=e.getRoot(a).expandTriggerFlag;e.getRoot(a).expandTriggerFlag=!1;if(i)for(var h=0,l=i.length;h<l;h++)i[h]&&j.expandCollapseSonNode(a,
i[h],c,g);e.getRoot(a).expandTriggerFlag=k;j.expandCollapseNode(a,b,c,d,f)},isSelectedNode:function(a,b){if(!b)return!1;var c=e.getRoot(a).curSelectedList,d;for(d=c.length-1;d>=0;d--)if(b===c[d])return!0;return!1},makeDOMNodeIcon:function(a,b,c){var d=e.nodeName(b,c),d=b.view.nameIsHTML?d:d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");a.push("<span id='",c.tId,g.id.ICON,"' title='' treeNode",g.id.ICON," class='",j.makeNodeIcoClass(b,c),"' style='",j.makeNodeIcoStyle(b,c),"'></span><span id='",
c.tId,g.id.SPAN,"' class='",g.className.NAME,"'>",d,"</span>")},makeDOMNodeLine:function(a,b,c){a.push("<span id='",c.tId,g.id.SWITCH,"' title='' class='",j.makeNodeLineClass(b,c),"' treeNode",g.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(a){a.push("</li>")},makeDOMNodeMainBefore:function(a,b,c){a.push("<li id='",c.tId,"' class='",g.className.LEVEL,c.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(a){a.push("</a>")},makeDOMNodeNameBefore:function(a,b,c){var d=
e.nodeTitle(b,c),f=j.makeNodeUrl(b,c),i=j.makeNodeFontCss(b,c),m=[],k;for(k in i)m.push(k,":",i[k],";");a.push("<a id='",c.tId,g.id.A,"' class='",g.className.LEVEL,c.level,"' treeNode",g.id.A,' onclick="',c.click||"",'" ',f!=null&&f.length>0?"href='"+f+"'":""," target='",j.makeNodeTarget(c),"' style='",m.join(""),"'");h.apply(b.view.showTitle,[b.treeId,c],b.view.showTitle)&&d&&a.push("title='",d.replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"'");a.push(">")},makeNodeFontCss:function(a,
b){var c=h.apply(a.view.fontCss,[a.treeId,b],a.view.fontCss);return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(a,b){var c=["ico"];if(!b.isAjaxing){var d=e.nodeIsParent(a,b);c[0]=(b.iconSkin?b.iconSkin+"_":"")+c[0];d?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU)}return g.className.BUTTON+" "+c.join("_")},makeNodeIcoStyle:function(a,b){var c=[];if(!b.isAjaxing){var d=e.nodeIsParent(a,b)&&b.iconOpen&&b.iconClose?b.open?b.iconOpen:b.iconClose:b[a.data.key.icon];d&&c.push("background:url(",
d,") 0 0 no-repeat;");(a.view.showIcon==!1||!h.apply(a.view.showIcon,[a.treeId,b],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(a,b){var c=[];a.view.showLine?b.level==0&&b.isFirstNode&&b.isLastNode?c.push(g.line.ROOT):b.level==0&&b.isFirstNode?c.push(g.line.ROOTS):b.isLastNode?c.push(g.line.BOTTOM):c.push(g.line.CENTER):c.push(g.line.NOLINE);e.nodeIsParent(a,b)?c.push(b.open?g.folder.OPEN:g.folder.CLOSE):c.push(g.folder.DOCU);return j.makeNodeLineClassEx(b)+c.join("_")},
makeNodeLineClassEx:function(a){return g.className.BUTTON+" "+g.className.LEVEL+a.level+" "+g.className.SWITCH+" "},makeNodeTarget:function(a){return a.target||"_blank"},makeNodeUrl:function(a,b){var c=a.data.key.url;return b[c]?b[c]:null},makeUlHtml:function(a,b,c,d){c.push("<ul id='",b.tId,g.id.UL,"' class='",g.className.LEVEL,b.level," ",j.makeUlLineClass(a,b),"' style='display:",b.open?"block":"none","'>");c.push(d);c.push("</ul>")},makeUlLineClass:function(a,b){return a.view.showLine&&!b.isLastNode?
g.line.LINE:""},removeChildNodes:function(a,b){if(b){var c=e.nodeChildren(a,b);if(c){for(var d=0,f=c.length;d<f;d++)e.removeNodeCache(a,c[d]);e.removeSelectedNode(a);delete b[a.data.key.children];a.data.keep.parent?l(b,g.id.UL,a).empty():(e.nodeIsParent(a,b,!1),b.open=!1,c=l(b,g.id.SWITCH,a),d=l(b,g.id.ICON,a),j.replaceSwitchClass(b,c,g.folder.DOCU),j.replaceIcoClass(b,d,g.folder.DOCU),l(b,g.id.UL,a).remove())}}},scrollIntoView:function(a,b){if(b)if(typeof Element==="undefined"){var c=a.treeObj.get(0).getBoundingClientRect(),
d=b.getBoundingClientRect();(d.top<c.top||d.bottom>c.bottom||d.right>c.right||d.left<c.left)&&b.scrollIntoView()}else{if(!Element.prototype.scrollIntoViewIfNeeded)Element.prototype.scrollIntoViewIfNeeded=function(a){function b(a,c){return{start:a,length:c,end:a+c}}function c(b,d){return!1===a||d.start<b.end&&b.start<d.end?Math.max(b.end-d.length,Math.min(d.start,b.start)):(b.start+b.end-d.length)/2}function d(a,b){return{x:a,y:b,translate:function(c,i){return d(a+c,b+i)}}}function e(a,b){for(;a;)b=
b.translate(a.offsetLeft,a.offsetTop),a=a.offsetParent;return b}for(var g=e(this,d(0,0)),j=d(this.offsetWidth,this.offsetHeight),h=this.parentNode,l;h instanceof HTMLElement;)l=e(h,d(h.clientLeft,h.clientTop)),h.scrollLeft=c(b(g.x-l.x,j.x),b(h.scrollLeft,h.clientWidth)),h.scrollTop=c(b(g.y-l.y,j.y),b(h.scrollTop,h.clientHeight)),g=g.translate(-h.scrollLeft,-h.scrollTop),h=h.parentNode};b.scrollIntoViewIfNeeded()}},setFirstNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[0].isFirstNode=
!0},setLastNode:function(a,b){var c=e.nodeChildren(a,b);if(c.length>0)c[c.length-1].isLastNode=!0},removeNode:function(a,b){var c=e.getRoot(a),d=b.parentTId?b.getParentNode():c;b.isFirstNode=!1;b.isLastNode=!1;b.getPreNode=function(){return null};b.getNextNode=function(){return null};if(e.getNodeCache(a,b.tId)){l(b,a).remove();e.removeNodeCache(a,b);e.removeSelectedNode(a,b);for(var f=e.nodeChildren(a,d),i=0,h=f.length;i<h;i++)if(f[i].tId==b.tId){f.splice(i,1);break}j.setFirstNode(a,d);j.setLastNode(a,
d);var k,i=f.length;if(!a.data.keep.parent&&i==0)e.nodeIsParent(a,d,!1),d.open=!1,delete d[a.data.key.children],i=l(d,g.id.UL,a),h=l(d,g.id.SWITCH,a),k=l(d,g.id.ICON,a),j.replaceSwitchClass(d,h,g.folder.DOCU),j.replaceIcoClass(d,k,g.folder.DOCU),i.css("display","none");else if(a.view.showLine&&i>0){var q=f[i-1],i=l(q,g.id.UL,a),h=l(q,g.id.SWITCH,a);k=l(q,g.id.ICON,a);d==c?f.length==1?j.replaceSwitchClass(q,h,g.line.ROOT):(c=l(f[0],g.id.SWITCH,a),j.replaceSwitchClass(f[0],c,g.line.ROOTS),j.replaceSwitchClass(q,
h,g.line.BOTTOM)):j.replaceSwitchClass(q,h,g.line.BOTTOM);i.removeClass(g.line.LINE)}}},replaceIcoClass:function(a,b,c){if(b&&!a.isAjaxing&&(a=b.attr("class"),a!=void 0)){a=a.split("_");switch(c){case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:a[a.length-1]=c}b.attr("class",a.join("_"))}},replaceSwitchClass:function(a,b,c){if(b){var d=b.attr("class");if(d!=void 0){d=d.split("_");switch(c){case g.line.ROOT:case g.line.ROOTS:case g.line.CENTER:case g.line.BOTTOM:case g.line.NOLINE:d[0]=j.makeNodeLineClassEx(a)+
c;break;case g.folder.OPEN:case g.folder.CLOSE:case g.folder.DOCU:d[1]=c}b.attr("class",d.join("_"));c!==g.folder.DOCU?b.removeAttr("disabled"):b.attr("disabled","disabled")}}},selectNode:function(a,b,c){c||j.cancelPreSelectedNode(a,null,b);l(b,g.id.A,a).addClass(g.node.CURSELECTED);e.addSelectedNode(a,b);a.treeObj.trigger(g.event.SELECTED,[a.treeId,b])},setNodeFontCss:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeFontCss(a,b);d&&c.css(d)},setNodeLineIcos:function(a,b){if(b){var c=l(b,g.id.SWITCH,
a),d=l(b,g.id.UL,a),f=l(b,g.id.ICON,a),i=j.makeUlLineClass(a,b);i.length==0?d.removeClass(g.line.LINE):d.addClass(i);c.attr("class",j.makeNodeLineClass(a,b));e.nodeIsParent(a,b)?c.removeAttr("disabled"):c.attr("disabled","disabled");f.removeAttr("style");f.attr("style",j.makeNodeIcoStyle(a,b));f.attr("class",j.makeNodeIcoClass(a,b))}},setNodeName:function(a,b){var c=e.nodeTitle(a,b),d=l(b,g.id.SPAN,a);d.empty();a.view.nameIsHTML?d.html(e.nodeName(a,b)):d.text(e.nodeName(a,b));h.apply(a.view.showTitle,
[a.treeId,b],a.view.showTitle)&&l(b,g.id.A,a).attr("title",!c?"":c)},setNodeTarget:function(a,b){l(b,g.id.A,a).attr("target",j.makeNodeTarget(b))},setNodeUrl:function(a,b){var c=l(b,g.id.A,a),d=j.makeNodeUrl(a,b);d==null||d.length==0?c.removeAttr("href"):c.attr("href",d)},switchNode:function(a,b){b.open||!h.canAsync(a,b)?j.expandCollapseNode(a,b,!b.open):a.async.enable?j.asyncNode(a,b)||j.expandCollapseNode(a,b,!b.open):b&&j.expandCollapseNode(a,b,!b.open)}};r.fn.zTree={consts:{className:{BUTTON:"button",
LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",
CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_z:{tools:h,view:j,event:n,data:e},getZTreeObj:function(a){return(a=e.getZTreeTools(a))?a:null},destroy:function(a){if(a&&a.length>0)j.destroy(e.getSetting(a));else for(var b in t)j.destroy(t[b])},init:function(a,b,c){var d=h.clone(P);r.extend(!0,d,b);d.treeId=a.attr("id");d.treeObj=a;d.treeObj.empty();t[d.treeId]=d;if(typeof document.body.style.maxHeight==="undefined")d.view.expandSpeed="";e.initRoot(d);a=e.getRoot(d);c=c?h.clone(h.isArray(c)?
c:[c]):[];d.data.simpleData.enable?e.nodeChildren(d,a,e.transformTozTreeFormat(d,c)):e.nodeChildren(d,a,c);e.initCache(d);n.unbindTree(d);n.bindTree(d);n.unbindEvent(d);n.bindEvent(d);var f={setting:d,addNodes:function(a,b,c,f){function g(){j.addNodes(d,a,b,n,f==!0)}a||(a=null);var l=e.nodeIsParent(d,a);if(a&&!l&&d.data.keep.leaf)return null;l=parseInt(b,10);isNaN(l)?(f=!!c,c=b,b=-1):b=l;if(!c)return null;var n=h.clone(h.isArray(c)?c:[c]);h.canAsync(d,a)?j.asyncNode(d,a,f,g):g();return n},cancelSelectedNode:function(a){j.cancelPreSelectedNode(d,
a)},destroy:function(){j.destroy(d)},expandAll:function(a){a=!!a;j.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,f,g){function n(){var b=l(a,d).get(0);b&&f!==!1&&j.scrollIntoView(d,b)}if(!a||!e.nodeIsParent(d,a))return null;b!==!0&&b!==!1&&(b=!a.open);if((g=!!g)&&b&&h.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(g&&!b&&h.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&j.expandCollapseParentNode(d,a.getParentNode(),
b,!1);if(b===a.open&&!c)return null;e.getRoot(d).expandTriggerFlag=g;!h.canAsync(d,a)&&c?j.expandCollapseSonNode(d,a,b,!0,n):(a.open=!b,j.switchNode(this.setting,a),n());return b},getNodes:function(){return e.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:e.getNodeByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodeByTId:function(a){return e.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:e.getNodesByParam(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,
b,c){return!a?null:e.getNodesByParamFuzzy(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,f){b=!!b;return!a||typeof a!="function"?b?null:[]:e.getNodesByFilter(d,c?e.nodeChildren(d,c):e.getNodes(d),a,b,f)},getNodeIndex:function(a){if(!a)return null;for(var b=a.parentTId?a.getParentNode():e.getRoot(d),b=e.nodeChildren(d,b),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1},getSelectedNodes:function(){for(var a=[],b=e.getRoot(d).curSelectedList,c=0,f=b.length;c<f;c++)a.push(b[c]);
return a},isSelectedNode:function(a){return e.isSelectedNode(d,a)},reAsyncChildNodesPromise:function(a,b,c){return new Promise(function(d,e){try{f.reAsyncChildNodes(a,b,c,function(){d(a)})}catch(g){e(g)}})},reAsyncChildNodes:function(a,b,c,f){if(this.setting.async.enable){var h=!a;h&&(a=e.getRoot(d));if(b=="refresh"){for(var b=e.nodeChildren(d,a),n=0,r=b?b.length:0;n<r;n++)e.removeNodeCache(d,b[n]);e.removeSelectedNode(d);e.nodeChildren(d,a,[]);h?this.setting.treeObj.empty():l(a,g.id.UL,d).empty()}j.asyncNode(this.setting,
h?null:a,!!c,f)}},refresh:function(){this.setting.treeObj.empty();var a=e.getRoot(d),b=e.nodeChildren(d,a);e.initRoot(d);e.nodeChildren(d,a,b);e.initCache(d);j.createNodes(d,0,e.nodeChildren(d,a),null,-1)},removeChildNodes:function(a){if(!a)return null;var b=e.nodeChildren(d,a);j.removeChildNodes(d,a);return b?b:null},removeNode:function(a,b){a&&(b=!!b,b&&h.apply(d.callback.beforeRemove,[d.treeId,a],!0)==!1||(j.removeNode(d,a),b&&this.setting.treeObj.trigger(g.event.REMOVE,[d.treeId,a])))},selectNode:function(a,
b,c){function e(){if(!c){var b=l(a,d).get(0);j.scrollIntoView(d,b)}}if(a&&h.uCanDo(d)){b=d.view.selectedMulti&&b;if(a.parentTId)j.expandCollapseParentNode(d,a.getParentNode(),!0,!1,e);else if(!c)try{l(a,d).focus().blur()}catch(f){}j.selectNode(d,a,b)}},transformTozTreeNodes:function(a){return e.transformTozTreeFormat(d,a)},transformToArray:function(a){return e.transformToArrayFormat(d,a)},updateNode:function(a){a&&l(a,d).get(0)&&h.uCanDo(d)&&(j.setNodeName(d,a),j.setNodeTarget(d,a),j.setNodeUrl(d,
a),j.setNodeLineIcos(d,a),j.setNodeFontCss(d,a))}};a.treeTools=f;e.setZTreeTools(d,f);(c=e.nodeChildren(d,a))&&c.length>0?j.createNodes(d,0,c,null,-1):d.async.enable&&d.async.url&&d.async.url!==""&&j.asyncNode(d);return f}};var Q=r.fn.zTree,l=h.$,g=Q.consts})(jQuery);
src/plugins/ztree/js/jquery.ztree.excheck.js
New file
@@ -0,0 +1,651 @@
/*
 * JQuery zTree excheck v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  //default consts of excheck
  var _consts = {
      event: {
        CHECK: "ztree_check"
      },
      id: {
        CHECK: "_check"
      },
      checkbox: {
        STYLE: "checkbox",
        DEFAULT: "chk",
        DISABLED: "disable",
        FALSE: "false",
        TRUE: "true",
        FULL: "full",
        PART: "part",
        FOCUS: "focus"
      },
      radio: {
        STYLE: "radio",
        TYPE_ALL: "all",
        TYPE_LEVEL: "level"
      }
    },
    //default setting of excheck
    _setting = {
      check: {
        enable: false,
        autoCheckTrigger: false,
        chkStyle: _consts.checkbox.STYLE,
        nocheckInherit: false,
        chkDisabledInherit: false,
        radioType: _consts.radio.TYPE_LEVEL,
        chkboxType: {
          "Y": "ps",
          "N": "ps"
        }
      },
      data: {
        key: {
          checked: "checked"
        }
      },
      callback: {
        beforeCheck: null,
        onCheck: null
      }
    },
    //default root of excheck
    _initRoot = function (setting) {
      var r = data.getRoot(setting);
      r.radioCheckedList = [];
    },
    //default cache of excheck
    _initCache = function (treeId) {
    },
    //default bind event of excheck
    _bindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.bind(c.CHECK, function (event, srcEvent, treeId, node) {
        event.srcEvent = srcEvent;
        tools.apply(setting.callback.onCheck, [event, treeId, node]);
      });
    },
    _unbindEvent = function (setting) {
      var o = setting.treeObj,
        c = consts.event;
      o.unbind(c.CHECK);
    },
    //default event proxy of excheck
    _eventProxy = function (e) {
      var target = e.target,
        setting = data.getSetting(e.data.treeId),
        tId = "", node = null,
        nodeEventType = "", treeEventType = "",
        nodeEventCallback = null, treeEventCallback = null;
      if (tools.eqs(e.type, "mouseover")) {
        if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "mouseoverCheck";
        }
      } else if (tools.eqs(e.type, "mouseout")) {
        if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "mouseoutCheck";
        }
      } else if (tools.eqs(e.type, "click")) {
        if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
          tId = tools.getNodeMainDom(target).id;
          nodeEventType = "checkNode";
        }
      }
      if (tId.length > 0) {
        node = data.getNodeCache(setting, tId);
        switch (nodeEventType) {
          case "checkNode" :
            nodeEventCallback = _handler.onCheckNode;
            break;
          case "mouseoverCheck" :
            nodeEventCallback = _handler.onMouseoverCheck;
            break;
          case "mouseoutCheck" :
            nodeEventCallback = _handler.onMouseoutCheck;
            break;
        }
      }
      var proxyResult = {
        stop: nodeEventType === "checkNode",
        node: node,
        nodeEventType: nodeEventType,
        nodeEventCallback: nodeEventCallback,
        treeEventType: treeEventType,
        treeEventCallback: treeEventCallback
      };
      return proxyResult
    },
    //default init node of excheck
    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      if (!n) return;
      var checked = data.nodeChecked(setting, n);
      n.checkedOld = checked;
      if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true");
      n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);
      if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true");
      n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);
      if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");
      n.halfCheck = !!n.halfCheck;
      n.check_Child_State = -1;
      n.check_Focus = false;
      n.getCheckStatus = function () {
        return data.getCheckStatus(setting, n);
      };
      if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) {
        var r = data.getRoot(setting);
        r.radioCheckedList.push(n);
      }
    },
    //add dom for check
    _beforeA = function (setting, node, html) {
      if (setting.check.enable) {
        data.makeChkFlag(setting, node);
        html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true ? " style='display:none;'" : ""), "></span>");
      }
    },
    //update zTreeObj, add method of check
    _zTreeTools = function (setting, zTreeTools) {
      zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
        var nodeChecked = data.nodeChecked(setting, node);
        if (node.chkDisabled === true) return;
        if (checked !== true && checked !== false) {
          checked = !nodeChecked;
        }
        callbackFlag = !!callbackFlag;
        if (nodeChecked === checked && !checkTypeFlag) {
          return;
        } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {
          return;
        }
        if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {
          data.nodeChecked(setting, node, checked);
          var checkObj = $$(node, consts.id.CHECK, this.setting);
          if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
          view.setChkClass(this.setting, checkObj, node);
          view.repairParentChkClassWithSelf(this.setting, node);
          if (callbackFlag) {
            this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);
          }
        }
      }
      zTreeTools.checkAllNodes = function (checked) {
        view.repairAllChk(this.setting, !!checked);
      }
      zTreeTools.getCheckedNodes = function (checked) {
        var checked = (checked !== false);
        var children = data.nodeChildren(setting, data.getRoot(this.setting));
        return data.getTreeCheckedNodes(this.setting, children, checked);
      }
      zTreeTools.getChangeCheckedNodes = function () {
        var children = data.nodeChildren(setting, data.getRoot(this.setting));
        return data.getTreeChangeCheckedNodes(this.setting, children);
      }
      zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) {
        disabled = !!disabled;
        inheritParent = !!inheritParent;
        inheritChildren = !!inheritChildren;
        view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);
        view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);
      }
      var _updateNode = zTreeTools.updateNode;
      zTreeTools.updateNode = function (node, checkTypeFlag) {
        if (_updateNode) _updateNode.apply(zTreeTools, arguments);
        if (!node || !this.setting.check.enable) return;
        var nObj = $$(node, this.setting);
        if (nObj.get(0) && tools.uCanDo(this.setting)) {
          var checkObj = $$(node, consts.id.CHECK, this.setting);
          if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
          view.setChkClass(this.setting, checkObj, node);
          view.repairParentChkClassWithSelf(this.setting, node);
        }
      }
    },
    //method of operate data
    _data = {
      getRadioCheckedList: function (setting) {
        var checkedList = data.getRoot(setting).radioCheckedList;
        for (var i = 0, j = checkedList.length; i < j; i++) {
          if (!data.getNodeCache(setting, checkedList[i].tId)) {
            checkedList.splice(i, 1);
            i--;
            j--;
          }
        }
        return checkedList;
      },
      getCheckStatus: function (setting, node) {
        if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;
        var checked = data.nodeChecked(setting, node),
          r = {
            checked: checked,
            half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))
          };
        return r;
      },
      getTreeCheckedNodes: function (setting, nodes, checked, results) {
        if (!nodes) return [];
        var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);
        results = !results ? [] : results;
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          var children = data.nodeChildren(setting, node);
          var nodeChecked = data.nodeChecked(setting, node);
          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) {
            results.push(node);
            if (onlyOne) {
              break;
            }
          }
          data.getTreeCheckedNodes(setting, children, checked, results);
          if (onlyOne && results.length > 0) {
            break;
          }
        }
        return results;
      },
      getTreeChangeCheckedNodes: function (setting, nodes, results) {
        if (!nodes) return [];
        results = !results ? [] : results;
        for (var i = 0, l = nodes.length; i < l; i++) {
          var node = nodes[i];
          var children = data.nodeChildren(setting, node);
          var nodeChecked = data.nodeChecked(setting, node);
          if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) {
            results.push(node);
          }
          data.getTreeChangeCheckedNodes(setting, children, results);
        }
        return results;
      },
      makeChkFlag: function (setting, node) {
        if (!node) return;
        var chkFlag = -1;
        var children = data.nodeChildren(setting, node);
        if (children) {
          for (var i = 0, l = children.length; i < l; i++) {
            var cNode = children[i];
            var nodeChecked = data.nodeChecked(setting, cNode);
            var tmp = -1;
            if (setting.check.chkStyle == consts.radio.STYLE) {
              if (cNode.nocheck === true || cNode.chkDisabled === true) {
                tmp = cNode.check_Child_State;
              } else if (cNode.halfCheck === true) {
                tmp = 2;
              } else if (nodeChecked) {
                tmp = 2;
              } else {
                tmp = cNode.check_Child_State > 0 ? 2 : 0;
              }
              if (tmp == 2) {
                chkFlag = 2;
                break;
              } else if (tmp == 0) {
                chkFlag = 0;
              }
            } else if (setting.check.chkStyle == consts.checkbox.STYLE) {
              if (cNode.nocheck === true || cNode.chkDisabled === true) {
                tmp = cNode.check_Child_State;
              } else if (cNode.halfCheck === true) {
                tmp = 1;
              } else if (nodeChecked) {
                tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;
              } else {
                tmp = (cNode.check_Child_State > 0) ? 1 : 0;
              }
              if (tmp === 1) {
                chkFlag = 1;
                break;
              } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {
                chkFlag = 1;
                break;
              } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {
                chkFlag = 1;
                break;
              } else if (tmp > -1) {
                chkFlag = tmp;
              }
            }
          }
        }
        node.check_Child_State = chkFlag;
      }
    },
    //method of event proxy
    _event = {},
    //method of event handler
    _handler = {
      onCheckNode: function (event, node) {
        if (node.chkDisabled === true) return false;
        var setting = data.getSetting(event.data.treeId);
        if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;
        var nodeChecked = data.nodeChecked(setting, node);
        data.nodeChecked(setting, node, !nodeChecked);
        view.checkNodeRelation(setting, node);
        var checkObj = $$(node, consts.id.CHECK, setting);
        view.setChkClass(setting, checkObj, node);
        view.repairParentChkClassWithSelf(setting, node);
        setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);
        return true;
      },
      onMouseoverCheck: function (event, node) {
        if (node.chkDisabled === true) return false;
        var setting = data.getSetting(event.data.treeId),
          checkObj = $$(node, consts.id.CHECK, setting);
        node.check_Focus = true;
        view.setChkClass(setting, checkObj, node);
        return true;
      },
      onMouseoutCheck: function (event, node) {
        if (node.chkDisabled === true) return false;
        var setting = data.getSetting(event.data.treeId),
          checkObj = $$(node, consts.id.CHECK, setting);
        node.check_Focus = false;
        view.setChkClass(setting, checkObj, node);
        return true;
      }
    },
    //method of tools for zTree
    _tools = {},
    //method of operate ztree dom
    _view = {
      checkNodeRelation: function (setting, node) {
        var pNode, i, l,
          r = consts.radio;
        var nodeChecked = data.nodeChecked(setting, node);
        if (setting.check.chkStyle == r.STYLE) {
          var checkedList = data.getRadioCheckedList(setting);
          if (nodeChecked) {
            if (setting.check.radioType == r.TYPE_ALL) {
              for (i = checkedList.length - 1; i >= 0; i--) {
                pNode = checkedList[i];
                var pNodeChecked = data.nodeChecked(setting, pNode);
                if (pNodeChecked && pNode != node) {
                  data.nodeChecked(setting, pNode, false);
                  checkedList.splice(i, 1);
                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
                  if (pNode.parentTId != node.parentTId) {
                    view.repairParentChkClassWithSelf(setting, pNode);
                  }
                }
              }
              checkedList.push(node);
            } else {
              var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
              var children = data.nodeChildren(setting, parentNode);
              for (i = 0, l = children.length; i < l; i++) {
                pNode = children[i];
                var pNodeChecked = data.nodeChecked(setting, pNode);
                if (pNodeChecked && pNode != node) {
                  data.nodeChecked(setting, pNode, false);
                  view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
                }
              }
            }
          } else if (setting.check.radioType == r.TYPE_ALL) {
            for (i = 0, l = checkedList.length; i < l; i++) {
              if (node == checkedList[i]) {
                checkedList.splice(i, 1);
                break;
              }
            }
          }
        } else {
          var children = data.nodeChildren(setting, node);
          if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {
            view.setSonNodeCheckBox(setting, node, true);
          }
          if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) {
            view.setSonNodeCheckBox(setting, node, false);
          }
          if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) {
            view.setParentNodeCheckBox(setting, node, true);
          }
          if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) {
            view.setParentNodeCheckBox(setting, node, false);
          }
        }
      },
      makeChkClass: function (setting, node) {
        var c = consts.checkbox, r = consts.radio,
          fullStyle = "";
        var nodeChecked = data.nodeChecked(setting, node);
        if (node.chkDisabled === true) {
          fullStyle = c.DISABLED;
        } else if (node.halfCheck) {
          fullStyle = c.PART;
        } else if (setting.check.chkStyle == r.STYLE) {
          fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART;
        } else {
          fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART);
        }
        var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle;
        chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;
        return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName;
      },
      repairAllChk: function (setting, checked) {
        if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {
          var root = data.getRoot(setting);
          var children = data.nodeChildren(setting, root);
          for (var i = 0, l = children.length; i < l; i++) {
            var node = children[i];
            if (node.nocheck !== true && node.chkDisabled !== true) {
              data.nodeChecked(setting, node, checked);
            }
            view.setSonNodeCheckBox(setting, node, checked);
          }
        }
      },
      repairChkClass: function (setting, node) {
        if (!node) return;
        data.makeChkFlag(setting, node);
        if (node.nocheck !== true) {
          var checkObj = $$(node, consts.id.CHECK, setting);
          view.setChkClass(setting, checkObj, node);
        }
      },
      repairParentChkClass: function (setting, node) {
        if (!node || !node.parentTId) return;
        var pNode = node.getParentNode();
        view.repairChkClass(setting, pNode);
        view.repairParentChkClass(setting, pNode);
      },
      repairParentChkClassWithSelf: function (setting, node) {
        if (!node) return;
        var children = data.nodeChildren(setting, node);
        if (children && children.length > 0) {
          view.repairParentChkClass(setting, children[0]);
        } else {
          view.repairParentChkClass(setting, node);
        }
      },
      repairSonChkDisabled: function (setting, node, chkDisabled, inherit) {
        if (!node) return;
        if (node.chkDisabled != chkDisabled) {
          node.chkDisabled = chkDisabled;
        }
        view.repairChkClass(setting, node);
        var children = data.nodeChildren(setting, node);
        if (children && inherit) {
          for (var i = 0, l = children.length; i < l; i++) {
            var sNode = children[i];
            view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);
          }
        }
      },
      repairParentChkDisabled: function (setting, node, chkDisabled, inherit) {
        if (!node) return;
        if (node.chkDisabled != chkDisabled && inherit) {
          node.chkDisabled = chkDisabled;
        }
        view.repairChkClass(setting, node);
        view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);
      },
      setChkClass: function (setting, obj, node) {
        if (!obj) return;
        if (node.nocheck === true) {
          obj.hide();
        } else {
          obj.show();
        }
        obj.attr('class', view.makeChkClass(setting, node));
      },
      setParentNodeCheckBox: function (setting, node, value, srcNode) {
        var checkObj = $$(node, consts.id.CHECK, setting);
        if (!srcNode) srcNode = node;
        data.makeChkFlag(setting, node);
        if (node.nocheck !== true && node.chkDisabled !== true) {
          data.nodeChecked(setting, node, value);
          view.setChkClass(setting, checkObj, node);
          if (setting.check.autoCheckTrigger && node != srcNode) {
            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
          }
        }
        if (node.parentTId) {
          var pSign = true;
          if (!value) {
            var pNodes = data.nodeChildren(setting, node.getParentNode());
            for (var i = 0, l = pNodes.length; i < l; i++) {
              var pNode = pNodes[i];
              var nodeChecked = data.nodeChecked(setting, pNode);
              if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked)
                || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) {
                pSign = false;
                break;
              }
            }
          }
          if (pSign) {
            view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);
          }
        }
      },
      setSonNodeCheckBox: function (setting, node, value, srcNode) {
        if (!node) return;
        var checkObj = $$(node, consts.id.CHECK, setting);
        if (!srcNode) srcNode = node;
        var hasDisable = false;
        var children = data.nodeChildren(setting, node);
        if (children) {
          for (var i = 0, l = children.length; i < l; i++) {
            var sNode = children[i];
            view.setSonNodeCheckBox(setting, sNode, value, srcNode);
            if (sNode.chkDisabled === true) hasDisable = true;
          }
        }
        if (node != data.getRoot(setting) && node.chkDisabled !== true) {
          if (hasDisable && node.nocheck !== true) {
            data.makeChkFlag(setting, node);
          }
          if (node.nocheck !== true && node.chkDisabled !== true) {
            data.nodeChecked(setting, node, value);
            if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1;
          } else {
            node.check_Child_State = -1;
          }
          view.setChkClass(setting, checkObj, node);
          if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {
            setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
          }
        }
      }
    },
    _z = {
      tools: _tools,
      view: _view,
      event: _event,
      data: _data
    };
  $.extend(true, $.fn.zTree.consts, _consts);
  $.extend(true, $.fn.zTree._z, _z);
  var zt = $.fn.zTree,
    tools = zt._z.tools,
    consts = zt.consts,
    view = zt._z.view,
    data = zt._z.data,
    event = zt._z.event,
    $$ = tools.$;
  data.nodeChecked = function (setting, node, newChecked) {
    if (!node) {
      return false;
    }
    var key = setting.data.key.checked;
    if (typeof newChecked !== 'undefined') {
      if (typeof newChecked === "string") {
        newChecked = tools.eqs(newChecked, "true");
      }
      newChecked = !!newChecked;
      node[key] = newChecked;
    } else if (typeof node[key] == "string"){
      node[key] = tools.eqs(node[key], "true");
    } else {
      node[key] = !!node[key];
    }
    return node[key];
  };
  data.exSetting(_setting);
  data.addInitBind(_bindEvent);
  data.addInitUnBind(_unbindEvent);
  data.addInitCache(_initCache);
  data.addInitNode(_initNode);
  data.addInitProxy(_eventProxy, true);
  data.addInitRoot(_initRoot);
  data.addBeforeA(_beforeA);
  data.addZTreeTools(_zTreeTools);
  var _createNodes = view.createNodes;
  view.createNodes = function (setting, level, nodes, parentNode, index) {
    if (_createNodes) _createNodes.apply(view, arguments);
    if (!nodes) return;
    view.repairParentChkClassWithSelf(setting, parentNode);
  }
  var _removeNode = view.removeNode;
  view.removeNode = function (setting, node) {
    var parentNode = node.getParentNode();
    if (_removeNode) _removeNode.apply(view, arguments);
    if (!node || !parentNode) return;
    view.repairChkClass(setting, parentNode);
    view.repairParentChkClass(setting, parentNode);
  }
  var _appendNodes = view.appendNodes;
  view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
    var html = "";
    if (_appendNodes) {
      html = _appendNodes.apply(view, arguments);
    }
    if (parentNode) {
      data.makeChkFlag(setting, parentNode);
    }
    return html;
  }
})(jQuery);
src/plugins/ztree/js/jquery.ztree.excheck.min.js
New file
@@ -0,0 +1,34 @@
/*
 * JQuery zTree excheck v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(m){var p,q,r,o={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},v={check:{enable:!1,autoCheckTrigger:!1,chkStyle:o.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:o.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};p=function(c,
a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId);if(i.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;var d=f.nodeChecked(b,a);f.nodeChecked(b,a,!d);e.checkNodeRelation(b,a);d=n(a,h.id.CHECK,b);e.setChkClass(b,d,a);e.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(h.event.CHECK,[c,b.treeId,a]);return!0};q=function(c,a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=n(a,h.id.CHECK,b);a.check_Focus=!0;e.setChkClass(b,d,a);return!0};r=function(c,
a){if(a.chkDisabled===!0)return!1;var b=f.getSetting(c.data.treeId),d=n(a,h.id.CHECK,b);a.check_Focus=!1;e.setChkClass(b,d,a);return!0};m.extend(!0,m.fn.zTree.consts,o);m.extend(!0,m.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,j;d=h.radio;b=f.nodeChecked(c,a);if(c.check.chkStyle==d.STYLE){var g=f.getRadioCheckedList(c);if(b)if(c.check.radioType==d.TYPE_ALL){for(d=g.length-1;d>=0;d--){b=g[d];var k=f.nodeChecked(c,b);k&&b!=a&&(f.nodeChecked(c,b,!1),g.splice(d,1),e.setChkClass(c,
n(b,h.id.CHECK,c),b),b.parentTId!=a.parentTId&&e.repairParentChkClassWithSelf(c,b))}g.push(a)}else{g=a.parentTId?a.getParentNode():f.getRoot(c);g=f.nodeChildren(c,g);for(d=0,j=g.length;d<j;d++)if(b=g[d],(k=f.nodeChecked(c,b))&&b!=a)f.nodeChecked(c,b,!1),e.setChkClass(c,n(b,h.id.CHECK,c),b)}else if(c.check.radioType==d.TYPE_ALL)for(d=0,j=g.length;d<j;d++)if(a==g[d]){g.splice(d,1);break}}else g=f.nodeChildren(c,a),b&&(!g||g.length==0||c.check.chkboxType.Y.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,
!0),!b&&(!g||g.length==0||c.check.chkboxType.N.indexOf("s")>-1)&&e.setSonNodeCheckBox(c,a,!1),b&&c.check.chkboxType.Y.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!0),!b&&c.check.chkboxType.N.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=h.checkbox,d=h.radio,j="",g=f.nodeChecked(c,a),j=a.chkDisabled===!0?b.DISABLED:a.halfCheck?b.PART:c.check.chkStyle==d.STYLE?a.check_Child_State<1?b.FULL:b.PART:g?a.check_Child_State===2||a.check_Child_State===-1?b.FULL:b.PART:
a.check_Child_State<1?b.FULL:b.PART,d=c.check.chkStyle+"_"+(g?b.TRUE:b.FALSE)+"_"+j,d=a.check_Focus&&a.chkDisabled!==!0?d+"_"+b.FOCUS:d;return h.className.BUTTON+" "+b.DEFAULT+" "+d},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===h.checkbox.STYLE)for(var b=f.getRoot(c),b=f.nodeChildren(c,b),d=0,j=b.length;d<j;d++){var g=b[d];g.nocheck!==!0&&g.chkDisabled!==!0&&f.nodeChecked(c,g,a);e.setSonNodeCheckBox(c,g,a)}},repairChkClass:function(c,a){if(a&&(f.makeChkFlag(c,a),a.nocheck!==!0)){var b=
n(a,h.id.CHECK,c);e.setChkClass(c,b,a)}},repairParentChkClass:function(c,a){if(a&&a.parentTId){var b=a.getParentNode();e.repairChkClass(c,b);e.repairParentChkClass(c,b)}},repairParentChkClassWithSelf:function(c,a){if(a){var b=f.nodeChildren(c,a);b&&b.length>0?e.repairParentChkClass(c,b[0]):e.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b)a.chkDisabled=b;e.repairChkClass(c,a);if((a=f.nodeChildren(c,a))&&d)for(var j=0,g=a.length;j<g;j++)e.repairSonChkDisabled(c,
a[j],b,d)}},repairParentChkDisabled:function(c,a,b,d){if(a){if(a.chkDisabled!=b&&d)a.chkDisabled=b;e.repairChkClass(c,a);e.repairParentChkDisabled(c,a.getParentNode(),b,d)}},setChkClass:function(c,a,b){a&&(b.nocheck===!0?a.hide():a.show(),a.attr("class",e.makeChkClass(c,b)))},setParentNodeCheckBox:function(c,a,b,d){var j=n(a,h.id.CHECK,c);d||(d=a);f.makeChkFlag(c,a);a.nocheck!==!0&&a.chkDisabled!==!0&&(f.nodeChecked(c,a,b),e.setChkClass(c,j,a),c.check.autoCheckTrigger&&a!=d&&c.treeObj.trigger(h.event.CHECK,
[null,c.treeId,a]));if(a.parentTId){j=!0;if(!b)for(var g=f.nodeChildren(c,a.getParentNode()),k=0,w=g.length;k<w;k++){var l=g[k],i=f.nodeChecked(c,l);if(l.nocheck!==!0&&l.chkDisabled!==!0&&i||(l.nocheck===!0||l.chkDisabled===!0)&&l.check_Child_State>0){j=!1;break}}j&&e.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var j=n(a,h.id.CHECK,c);d||(d=a);var g=!1,k=f.nodeChildren(c,a);if(k)for(var i=0,l=k.length;i<l;i++){var m=k[i];e.setSonNodeCheckBox(c,m,b,d);
m.chkDisabled===!0&&(g=!0)}if(a!=f.getRoot(c)&&a.chkDisabled!==!0){g&&a.nocheck!==!0&&f.makeChkFlag(c,a);if(a.nocheck!==!0&&a.chkDisabled!==!0){if(f.nodeChecked(c,a,b),!g)a.check_Child_State=k&&k.length>0?b?2:0:-1}else a.check_Child_State=-1;e.setChkClass(c,j,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(h.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=f.getRoot(c).radioCheckedList,b=0,d=a.length;b<d;b++)f.getNodeCache(c,
a[b].tId)||(a.splice(b,1),b--,d--);return a},getCheckStatus:function(c,a){if(!c.check.enable||a.nocheck||a.chkDisabled)return null;var b=f.nodeChecked(c,a);return{checked:b,half:a.halfCheck?a.halfCheck:c.check.chkStyle==h.radio.STYLE?a.check_Child_State===2:b?a.check_Child_State>-1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var j=b&&c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL,d=!d?[]:d,g=0,e=a.length;g<e;g++){var i=
a[g],l=f.nodeChildren(c,i),m=f.nodeChecked(c,i);if(i.nocheck!==!0&&i.chkDisabled!==!0&&m==b&&(d.push(i),j))break;f.getTreeCheckedNodes(c,l,b,d);if(j&&d.length>0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var b=!b?[]:b,d=0,j=a.length;d<j;d++){var g=a[d],e=f.nodeChildren(c,g),h=f.nodeChecked(c,g);g.nocheck!==!0&&g.chkDisabled!==!0&&h!=g.checkedOld&&b.push(g);f.getTreeChangeCheckedNodes(c,e,b)}return b},makeChkFlag:function(c,a){if(a){var b=-1,d=f.nodeChildren(c,a);
if(d)for(var j=0,g=d.length;j<g;j++){var e=d[j],i=f.nodeChecked(c,e),l=-1;if(c.check.chkStyle==h.radio.STYLE)if(l=e.nocheck===!0||e.chkDisabled===!0?e.check_Child_State:e.halfCheck===!0?2:i?2:e.check_Child_State>0?2:0,l==2){b=2;break}else l==0&&(b=0);else if(c.check.chkStyle==h.checkbox.STYLE)if(l=e.nocheck===!0||e.chkDisabled===!0?e.check_Child_State:e.halfCheck===!0?1:i?e.check_Child_State===-1||e.check_Child_State===2?2:1:e.check_Child_State>0?1:0,l===1){b=1;break}else if(l===2&&b>-1&&j>0&&l!==
b){b=1;break}else if(b===2&&l>-1&&l<2){b=1;break}else l>-1&&(b=l)}a.check_Child_State=b}}}});var m=m.fn.zTree,i=m._z.tools,h=m.consts,e=m._z.view,f=m._z.data,n=i.$;f.nodeChecked=function(c,a,b){if(!a)return!1;c=c.data.key.checked;typeof b!=="undefined"?(typeof b==="string"&&(b=i.eqs(b,"true")),a[c]=!!b):a[c]=typeof a[c]=="string"?i.eqs(a[c],"true"):!!a[c];return a[c]};f.exSetting(v);f.addInitBind(function(c){c.treeObj.bind(h.event.CHECK,function(a,b,d,e){a.srcEvent=b;i.apply(c.callback.onCheck,[a,
d,e])})});f.addInitUnBind(function(c){c.treeObj.unbind(h.event.CHECK)});f.addInitCache(function(){});f.addInitNode(function(c,a,b,d){if(b){a=f.nodeChecked(c,b);b.checkedOld=a;if(typeof b.nocheck=="string")b.nocheck=i.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=i.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=i.eqs(b.halfCheck,
"true");b.halfCheck=!!b.halfCheck;b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return f.getCheckStatus(c,b)};c.check.chkStyle==h.radio.STYLE&&c.check.radioType==h.radio.TYPE_ALL&&a&&f.getRoot(c).radioCheckedList.push(b)}});f.addInitProxy(function(c){var a=c.target,b=f.getSetting(c.data.treeId),d="",e=null,g="",k=null;if(i.eqs(c.type,"mouseover")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoverCheck"}else if(i.eqs(c.type,
"mouseout")){if(b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="mouseoutCheck"}else if(i.eqs(c.type,"click")&&b.check.enable&&i.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+h.id.CHECK)!==null)d=i.getNodeMainDom(a).id,g="checkNode";if(d.length>0)switch(e=f.getNodeCache(b,d),g){case "checkNode":k=p;break;case "mouseoverCheck":k=q;break;case "mouseoutCheck":k=r}return{stop:g==="checkNode",node:e,nodeEventType:g,nodeEventCallback:k,
treeEventType:"",treeEventCallback:null}},!0);f.addInitRoot(function(c){f.getRoot(c).radioCheckedList=[]});f.addBeforeA(function(c,a,b){c.check.enable&&(f.makeChkFlag(c,a),b.push("<span ID='",a.tId,h.id.CHECK,"' class='",e.makeChkClass(c,a),"' treeNode",h.id.CHECK,a.nocheck===!0?" style='display:none;'":"","></span>"))});f.addZTreeTools(function(c,a){a.checkNode=function(a,b,g,k){var m=f.nodeChecked(c,a);if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!m),k=!!k,(m!==b||g)&&!(k&&i.apply(this.setting.callback.beforeCheck,
[this.setting.treeId,a],!0)==!1)&&i.uCanDo(this.setting)&&this.setting.check.enable&&a.nocheck!==!0))f.nodeChecked(c,a,b),b=n(a,h.id.CHECK,this.setting),(g||this.setting.check.chkStyle===h.radio.STYLE)&&e.checkNodeRelation(this.setting,a),e.setChkClass(this.setting,b,a),e.repairParentChkClassWithSelf(this.setting,a),k&&this.setting.treeObj.trigger(h.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){e.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var a=a!==!1,b=
f.nodeChildren(c,f.getRoot(this.setting));return f.getTreeCheckedNodes(this.setting,b,a)};a.getChangeCheckedNodes=function(){var a=f.nodeChildren(c,f.getRoot(this.setting));return f.getTreeChangeCheckedNodes(this.setting,a)};a.setChkDisabled=function(a,b,c,f){b=!!b;c=!!c;e.repairSonChkDisabled(this.setting,a,b,!!f);e.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,f){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&n(c,this.setting).get(0)&&
i.uCanDo(this.setting)){var g=n(c,h.id.CHECK,this.setting);(f==!0||this.setting.check.chkStyle===h.radio.STYLE)&&e.checkNodeRelation(this.setting,c);e.setChkClass(this.setting,g,c);e.repairParentChkClassWithSelf(this.setting,c)}}});var s=e.createNodes;e.createNodes=function(c,a,b,d,f){s&&s.apply(e,arguments);b&&e.repairParentChkClassWithSelf(c,d)};var t=e.removeNode;e.removeNode=function(c,a){var b=a.getParentNode();t&&t.apply(e,arguments);a&&b&&(e.repairChkClass(c,b),e.repairParentChkClass(c,b))};
var u=e.appendNodes;e.appendNodes=function(c,a,b,d,h,g,i){var m="";u&&(m=u.apply(e,arguments));d&&f.makeChkFlag(c,d);return m}})(jQuery);
src/plugins/ztree/js/jquery.ztree.exedit.js
New file
@@ -0,0 +1,1203 @@
/*
 * JQuery zTree exedit v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  //default consts of exedit
  var _consts = {
      event: {
        DRAG: "ztree_drag",
        DROP: "ztree_drop",
        RENAME: "ztree_rename",
        DRAGMOVE: "ztree_dragmove"
      },
      id: {
        EDIT: "_edit",
        INPUT: "_input",
        REMOVE: "_remove"
      },
      move: {
        TYPE_INNER: "inner",
        TYPE_PREV: "prev",
        TYPE_NEXT: "next"
      },
      node: {
        CURSELECTED_EDIT: "curSelectedNode_Edit",
        TMPTARGET_TREE: "tmpTargetzTree",
        TMPTARGET_NODE: "tmpTargetNode"
      }
    },
    //default setting of exedit
    _setting = {
      edit: {
        enable: false,
        editNameSelectAll: false,
        showRemoveBtn: true,
        showRenameBtn: true,
        removeTitle: "remove",
        renameTitle: "rename",
        drag: {
          autoExpandTrigger: false,
          isCopy: true,
          isMove: true,
          prev: true,
          next: true,
          inner: true,
          minMoveSize: 5,
          borderMax: 10,
          borderMin: -5,
          maxShowNodeNum: 5,
          autoOpenTime: 500
        }
      },
      view: {
        addHoverDom: null,
        removeHoverDom: null
      },
      callback: {
        beforeDrag: null,
        beforeDragOpen: null,
        beforeDrop: null,
        beforeEditName: null,
        beforeRename: null,
        onDrag: null,
        onDragMove: null,
        onDrop: null,
        onRename: null
      }
    },
    //default root of exedit
    _initRoot = function (setting) {
      var r = data.getRoot(setting), rs = data.getRoots();
      r.curEditNode = null;
      r.curEditInput = null;
      r.curHoverNode = null;
      r.dragFlag = 0;
      r.dragNodeShowBefore = [];
      r.dragMaskList = new Array();
      rs.showHoverDom = true;
    },
    //default cache of exedit
    _initCache = function (treeId) {
    },
    //default bind event of exedit
    _bindEvent = function (setting) {
      var o = setting.treeObj;
      var c = consts.event;
      o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {
        tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);
      });
      o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
        tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
      });
      o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {
        tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);
      });
      o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
        tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
      });
    },
    _unbindEvent = function (setting) {
      var o = setting.treeObj;
      var c = consts.event;
      o.unbind(c.RENAME);
      o.unbind(c.DRAG);
      o.unbind(c.DRAGMOVE);
      o.unbind(c.DROP);
    },
    //default event proxy of exedit
    _eventProxy = function (e) {
      var target = e.target,
        setting = data.getSetting(e.data.treeId),
        relatedTarget = e.relatedTarget,
        tId = "", node = null,
        nodeEventType = "", treeEventType = "",
        nodeEventCallback = null, treeEventCallback = null,
        tmp = null;
      if (tools.eqs(e.type, "mouseover")) {
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
          nodeEventType = "hoverOverNode";
        }
      } else if (tools.eqs(e.type, "mouseout")) {
        tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (!tmp) {
          tId = "remove";
          nodeEventType = "hoverOutNode";
        }
      } else if (tools.eqs(e.type, "mousedown")) {
        tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
        if (tmp) {
          tId = tools.getNodeMainDom(tmp).id;
          nodeEventType = "mousedownNode";
        }
      }
      if (tId.length > 0) {
        node = data.getNodeCache(setting, tId);
        switch (nodeEventType) {
          case "mousedownNode" :
            nodeEventCallback = _handler.onMousedownNode;
            break;
          case "hoverOverNode" :
            nodeEventCallback = _handler.onHoverOverNode;
            break;
          case "hoverOutNode" :
            nodeEventCallback = _handler.onHoverOutNode;
            break;
        }
      }
      var proxyResult = {
        stop: false,
        node: node,
        nodeEventType: nodeEventType,
        nodeEventCallback: nodeEventCallback,
        treeEventType: treeEventType,
        treeEventCallback: treeEventCallback
      };
      return proxyResult
    },
    //default init node of exedit
    _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      if (!n) return;
      n.isHover = false;
      n.editNameFlag = false;
    },
    //update zTreeObj, add method of edit
    _zTreeTools = function (setting, zTreeTools) {
      zTreeTools.cancelEditName = function (newName) {
        var root = data.getRoot(this.setting);
        if (!root.curEditNode) return;
        view.cancelCurEditNode(this.setting, newName ? newName : null, true);
      }
      zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {
        if (!node) return null;
        var isParent = data.nodeIsParent(setting, targetNode);
        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
        var _this = this,
          newNode = tools.clone(node);
        if (!targetNode) {
          targetNode = null;
          moveType = consts.move.TYPE_INNER;
        }
        if (moveType == consts.move.TYPE_INNER) {
          function copyCallback() {
            view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);
          }
          if (tools.canAsync(this.setting, targetNode)) {
            view.asyncNode(this.setting, targetNode, isSilent, copyCallback);
          } else {
            copyCallback();
          }
        } else {
          view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);
          view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);
        }
        return newNode;
      }
      zTreeTools.editName = function (node) {
        if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;
        if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);
        view.editNode(this.setting, node)
      }
      zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {
        if (!node) return node;
        var isParent = data.nodeIsParent(setting, targetNode);
        if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
          return null;
        } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) {
          return null;
        } else if (!targetNode) {
          targetNode = null;
        }
        var _this = this;
        function moveCallback() {
          view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);
        }
        if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {
          view.asyncNode(this.setting, targetNode, isSilent, moveCallback);
        } else {
          moveCallback();
        }
        return node;
      }
      zTreeTools.setEditable = function (editable) {
        this.setting.confirm.enable = editable;
        return this.refresh();
      }
    },
    //method of operate data
    _data = {
      setSonNodeLevel: function (setting, parentNode, node) {
        if (!node) return;
        var children = data.nodeChildren(setting, node);
        node.level = (parentNode) ? parentNode.level + 1 : 0;
        if (!children) return;
        for (var i = 0, l = children.length; i < l; i++) {
          if (children[i]) data.setSonNodeLevel(setting, node, children[i]);
        }
      }
    },
    //method of event proxy
    _event = {},
    //method of event handler
    _handler = {
      onHoverOverNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId),
          root = data.getRoot(setting);
        if (root.curHoverNode != node) {
          _handler.onHoverOutNode(event);
        }
        root.curHoverNode = node;
        view.addHoverDom(setting, node);
      },
      onHoverOutNode: function (event, node) {
        var setting = data.getSetting(event.data.treeId),
          root = data.getRoot(setting);
        if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
          view.removeTreeDom(setting, root.curHoverNode);
          root.curHoverNode = null;
        }
      },
      onMousedownNode: function (eventMouseDown, _node) {
        var i, l,
          setting = data.getSetting(eventMouseDown.data.treeId),
          root = data.getRoot(setting), roots = data.getRoots();
        //right click can't drag & drop
        if (eventMouseDown.button == 2 || !setting.confirm.enable || (!setting.confirm.drag.isCopy && !setting.confirm.drag.isMove)) return true;
        //input of edit node name can't drag & drop
        var target = eventMouseDown.target,
          _nodes = data.getRoot(setting).curSelectedList,
          nodes = [];
        if (!data.isSelectedNode(setting, _node)) {
          nodes = [_node];
        } else {
          for (i = 0, l = _nodes.length; i < l; i++) {
            if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) {
              return true;
            }
            nodes.push(_nodes[i]);
            if (nodes[0].parentTId !== _nodes[i].parentTId) {
              nodes = [_node];
              break;
            }
          }
        }
        view.editNodeBlur = true;
        view.cancelCurEditNode(setting);
        var doc = $(setting.treeObj.get(0).ownerDocument),
          body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,
          isOtherTree = false,
          targetSetting = setting,
          sourceSetting = setting,
          preNode, nextNode,
          preTmpTargetNodeId = null,
          preTmpMoveType = null,
          tmpTargetNodeId = null,
          moveType = consts.move.TYPE_INNER,
          mouseDownX = eventMouseDown.clientX,
          mouseDownY = eventMouseDown.clientY,
          startTime = (new Date()).getTime();
        if (tools.uCanDo(setting)) {
          doc.bind("mousemove", _docMouseMove);
        }
        function _docMouseMove(event) {
          //avoid start drag after click node
          if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.confirm.drag.minMoveSize
            && Math.abs(mouseDownY - event.clientY) < setting.confirm.drag.minMoveSize) {
            return true;
          }
          var i, l, tmpNode, tmpDom, tmpNodes;
          body.css("cursor", "pointer");
          if (root.dragFlag == 0) {
            if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
              _docMouseUp(event);
              return true;
            }
            for (i = 0, l = nodes.length; i < l; i++) {
              if (i == 0) {
                root.dragNodeShowBefore = [];
              }
              tmpNode = nodes[i];
              if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {
                view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
                root.dragNodeShowBefore[tmpNode.tId] = true;
              } else {
                root.dragNodeShowBefore[tmpNode.tId] = false;
              }
            }
            root.dragFlag = 1;
            roots.showHoverDom = false;
            tools.showIfameMask(setting, true);
            //sort
            var isOrder = true, lastIndex = -1;
            if (nodes.length > 1) {
              var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);
              tmpNodes = [];
              for (i = 0, l = pNodes.length; i < l; i++) {
                if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
                  if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {
                    isOrder = false;
                  }
                  tmpNodes.push(pNodes[i]);
                  lastIndex = i;
                }
                if (nodes.length === tmpNodes.length) {
                  nodes = tmpNodes;
                  break;
                }
              }
            }
            if (isOrder) {
              preNode = nodes[0].getPreNode();
              nextNode = nodes[nodes.length - 1].getNextNode();
            }
            //set node in selected
            curNode = $$("<ul class='zTreeDragUL'></ul>", setting);
            for (i = 0, l = nodes.length; i < l; i++) {
              tmpNode = nodes[i];
              tmpNode.editNameFlag = false;
              view.selectNode(setting, tmpNode, i > 0);
              view.removeTreeDom(setting, tmpNode);
              if (i > setting.confirm.drag.maxShowNodeNum - 1) {
                continue;
              }
              tmpDom = $$("<li id='" + tmpNode.tId + "_tmp'></li>", setting);
              tmpDom.append($$(tmpNode, consts.id.A, setting).clone());
              tmpDom.css("padding", "0");
              tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
              curNode.append(tmpDom);
              if (i == setting.confirm.drag.maxShowNodeNum - 1) {
                tmpDom = $$("<li id='" + tmpNode.tId + "_moretmp'><a>  ...  </a></li>", setting);
                curNode.append(tmpDom);
              }
            }
            curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
            curNode.addClass(setting.treeObj.attr("class"));
            curNode.appendTo(body);
            tmpArrow = $$("<span class='tmpzTreeMove_arrow'></span>", setting);
            tmpArrow.attr("id", "zTreeMove_arrow_tmp");
            tmpArrow.appendTo(body);
            setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
          }
          if (root.dragFlag == 1) {
            if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
              var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
              event.target = (xT.length > 0) ? xT.get(0) : event.target;
            } else if (tmpTarget) {
              tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
              if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
                .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
            }
            tmpTarget = null;
            tmpTargetNodeId = null;
            //judge drag & drop in multi ztree
            isOtherTree = false;
            targetSetting = setting;
            var settings = data.getSettings();
            for (var s in settings) {
              if (settings[s].treeId && settings[s].confirm.enable && settings[s].treeId != setting.treeId
                && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) {
                isOtherTree = true;
                targetSetting = settings[s];
              }
            }
            var docScrollTop = doc.scrollTop(),
              docScrollLeft = doc.scrollLeft(),
              treeOffset = targetSetting.treeObj.offset(),
              scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
              scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
              dTop = (event.clientY + docScrollTop - treeOffset.top),
              dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
              dLeft = (event.clientX + docScrollLeft - treeOffset.left),
              dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
              isTop = (dTop < setting.confirm.drag.borderMax && dTop > setting.confirm.drag.borderMin),
              isBottom = (dBottom < setting.confirm.drag.borderMax && dBottom > setting.confirm.drag.borderMin),
              isLeft = (dLeft < setting.confirm.drag.borderMax && dLeft > setting.confirm.drag.borderMin),
              isRight = (dRight < setting.confirm.drag.borderMax && dRight > setting.confirm.drag.borderMin),
              isTreeInner = dTop > setting.confirm.drag.borderMin && dBottom > setting.confirm.drag.borderMin && dLeft > setting.confirm.drag.borderMin && dRight > setting.confirm.drag.borderMin,
              isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
              isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),
              isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
              isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);
            if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
              //get node <li> dom
              var targetObj = event.target;
              while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
                targetObj = targetObj.parentNode;
              }
              var canMove = true;
              //don't move to self or children of self
              for (i = 0, l = nodes.length; i < l; i++) {
                tmpNode = nodes[i];
                if (targetObj.id === tmpNode.tId) {
                  canMove = false;
                  break;
                } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) {
                  canMove = false;
                  break;
                }
              }
              if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {
                tmpTarget = $(targetObj);
                tmpTargetNodeId = targetObj.id;
              }
            }
            //the mouse must be in zTree
            tmpNode = nodes[0];
            if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
              //judge mouse move in root of ztree
              if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
                tmpTarget = targetSetting.treeObj;
              }
              //auto scroll top
              if (isTop) {
                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);
              } else if (isBottom) {
                targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);
              }
              if (isLeft) {
                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);
              } else if (isRight) {
                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);
              }
              //auto scroll left
              if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
                targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);
              }
            }
            curNode.css({
              "top": (event.clientY + docScrollTop + 3) + "px",
              "left": (event.clientX + docScrollLeft + 3) + "px"
            });
            var dX = 0;
            var dY = 0;
            if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) {
              var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),
                isCopy = ((event.ctrlKey || event.metaKey) && setting.confirm.drag.isMove && setting.confirm.drag.isCopy) || (!setting.confirm.drag.isMove && setting.confirm.drag.isCopy),
                isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
                isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
                isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
                canPrev = (isCopy || !isNext) && tools.apply(targetSetting.confirm.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.confirm.drag.prev),
                canNext = (isCopy || !isPrev) && tools.apply(targetSetting.confirm.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.confirm.drag.next),
                canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.confirm.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.confirm.drag.inner);
              function clearMove() {
                tmpTarget = null;
                tmpTargetNodeId = "";
                moveType = consts.move.TYPE_INNER;
                tmpArrow.css({
                  "display": "none"
                });
                if (window.zTreeMoveTimer) {
                  clearTimeout(window.zTreeMoveTimer);
                  window.zTreeMoveTargetNodeTId = null
                }
              }
              if (!canPrev && !canNext && !canInner) {
                clearMove();
              } else {
                var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
                  tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
                  tmpTop = tmpTargetA.offset().top,
                  tmpLeft = tmpTargetA.offset().left,
                  prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,
                  nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,
                  dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();
                if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {
                  dX = 1 - tmpArrow.width();
                  dY = tmpTop - tmpArrow.height() / 2;
                  moveType = consts.move.TYPE_PREV;
                } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {
                  dX = 1 - tmpArrow.width();
                  dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);
                  moveType = consts.move.TYPE_NEXT;
                } else if (canInner) {
                  dX = 5 - tmpArrow.width();
                  dY = tmpTop;
                  moveType = consts.move.TYPE_INNER;
                } else {
                  clearMove();
                }
                if (tmpTarget) {
                  tmpArrow.css({
                    "display": "block",
                    "top": dY + "px",
                    "left": (tmpLeft + dX) + "px"
                  });
                  tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
                  if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
                    startTime = (new Date()).getTime();
                  }
                  if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {
                    var startTimer = true;
                    if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
                      clearTimeout(window.zTreeMoveTimer);
                      window.zTreeMoveTargetNodeTId = null;
                    } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
                      startTimer = false;
                    }
                    if (startTimer) {
                      window.zTreeMoveTimer = setTimeout(function () {
                        if (moveType != consts.move.TYPE_INNER) return;
                        if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.confirm.drag.autoOpenTime
                          && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
                          view.switchNode(targetSetting, tmpTargetNode);
                          if (targetSetting.confirm.drag.autoExpandTrigger) {
                            targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
                          }
                        }
                      }, targetSetting.confirm.drag.autoOpenTime + 50);
                      window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
                    }
                  }
                }
              }
            } else {
              moveType = consts.move.TYPE_INNER;
              if (tmpTarget && tools.apply(targetSetting.confirm.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.confirm.drag.inner)) {
                tmpTarget.addClass(consts.node.TMPTARGET_TREE);
              } else {
                tmpTarget = null;
              }
              tmpArrow.css({
                "display": "none"
              });
              if (window.zTreeMoveTimer) {
                clearTimeout(window.zTreeMoveTimer);
                window.zTreeMoveTargetNodeTId = null;
              }
            }
            preTmpTargetNodeId = tmpTargetNodeId;
            preTmpMoveType = moveType;
            setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);
          }
          return false;
        }
        doc.bind("mouseup", _docMouseUp);
        function _docMouseUp(event) {
          if (window.zTreeMoveTimer) {
            clearTimeout(window.zTreeMoveTimer);
            window.zTreeMoveTargetNodeTId = null;
          }
          preTmpTargetNodeId = null;
          preTmpMoveType = null;
          doc.unbind("mousemove", _docMouseMove);
          doc.unbind("mouseup", _docMouseUp);
          doc.unbind("selectstart", _docSelect);
          body.css("cursor", "");
          if (tmpTarget) {
            tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
            if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
              .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
          }
          tools.showIfameMask(setting, false);
          roots.showHoverDom = true;
          if (root.dragFlag == 0) return;
          root.dragFlag = 0;
          var i, l, tmpNode;
          for (i = 0, l = nodes.length; i < l; i++) {
            tmpNode = nodes[i];
            if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
              view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
              delete root.dragNodeShowBefore[tmpNode.tId];
            }
          }
          if (curNode) curNode.remove();
          if (tmpArrow) tmpArrow.remove();
          var isCopy = ((event.ctrlKey || event.metaKey) && setting.confirm.drag.isMove && setting.confirm.drag.isCopy) || (!setting.confirm.drag.isMove && setting.confirm.drag.isCopy);
          if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
            tmpTarget = null;
          }
          if (tmpTarget) {
            var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);
            if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {
              view.selectNodes(sourceSetting, nodes);
              return;
            }
            var newNodes = isCopy ? tools.clone(nodes) : nodes;
            function dropCallback() {
              if (isOtherTree) {
                if (!isCopy) {
                  for (var i = 0, l = nodes.length; i < l; i++) {
                    view.removeNode(setting, nodes[i]);
                  }
                }
                if (moveType == consts.move.TYPE_INNER) {
                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
                } else {
                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
                }
              } else {
                if (isCopy && moveType == consts.move.TYPE_INNER) {
                  view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
                } else if (isCopy) {
                  view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
                } else {
                  if (moveType != consts.move.TYPE_NEXT) {
                    for (i = 0, l = newNodes.length; i < l; i++) {
                      view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
                    }
                  } else {
                    for (i = -1, l = newNodes.length - 1; i < l; l--) {
                      view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
                    }
                  }
                }
              }
              view.selectNodes(targetSetting, newNodes);
              var a = $$(newNodes[0], setting).get(0);
              view.scrollIntoView(setting, a);
              setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
            }
            if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
              view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
            } else {
              dropCallback();
            }
          } else {
            view.selectNodes(sourceSetting, nodes);
            setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
          }
        }
        doc.bind("selectstart", _docSelect);
        function _docSelect() {
          return false;
        }
        // 2018-03-30 FireFox has fixed this issue.
        //Avoid FireFox's Bug
        //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
        // if(eventMouseDown.preventDefault) {
        //     eventMouseDown.preventDefault();
        // }
        return true;
      }
    },
    //method of tools for zTree
    _tools = {
      getAbs: function (obj) {
        var oRect = obj.getBoundingClientRect(),
          scrollTop = document.body.scrollTop + document.documentElement.scrollTop,
          scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
        return [oRect.left + scrollLeft, oRect.top + scrollTop];
      },
      inputFocus: function (inputObj) {
        if (inputObj.get(0)) {
          inputObj.focus();
          tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
        }
      },
      inputSelect: function (inputObj) {
        if (inputObj.get(0)) {
          inputObj.focus();
          inputObj.select();
        }
      },
      setCursorPosition: function (obj, pos) {
        if (obj.setSelectionRange) {
          obj.focus();
          obj.setSelectionRange(pos, pos);
        } else if (obj.createTextRange) {
          var range = obj.createTextRange();
          range.collapse(true);
          range.moveEnd('character', pos);
          range.moveStart('character', pos);
          range.select();
        }
      },
      showIfameMask: function (setting, showSign) {
        var root = data.getRoot(setting);
        //clear full mask
        while (root.dragMaskList.length > 0) {
          root.dragMaskList[0].remove();
          root.dragMaskList.shift();
        }
        if (showSign) {
          //show mask
          var iframeList = $$("iframe", setting);
          for (var i = 0, l = iframeList.length; i < l; i++) {
            var obj = iframeList.get(i),
              r = tools.getAbs(obj),
              dragMask = $$("<div id='zTreeMask_" + i + "' class='zTreeMask' style='top:" + r[1] + "px; left:" + r[0] + "px; width:" + obj.offsetWidth + "px; height:" + obj.offsetHeight + "px;'></div>", setting);
            dragMask.appendTo($$("body", setting));
            root.dragMaskList.push(dragMask);
          }
        }
      }
    },
    //method of operate ztree dom
    _view = {
      addEditBtn: function (setting, node) {
        if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {
          return;
        }
        if (!tools.apply(setting.confirm.showRenameBtn, [setting.treeId, node], setting.confirm.showRenameBtn)) {
          return;
        }
        var aObj = $$(node, consts.id.A, setting),
          editStr = "<span class='" + consts.className.BUTTON + " edit' id='" + node.tId + consts.id.EDIT + "' title='" + tools.apply(setting.confirm.renameTitle, [setting.treeId, node], setting.confirm.renameTitle) + "' treeNode" + consts.id.EDIT + " style='display:none;'></span>";
        aObj.append(editStr);
        $$(node, consts.id.EDIT, setting).bind('click',
          function () {
            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
            view.editNode(setting, node);
            return false;
          }
        ).show();
      },
      addRemoveBtn: function (setting, node) {
        if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {
          return;
        }
        if (!tools.apply(setting.confirm.showRemoveBtn, [setting.treeId, node], setting.confirm.showRemoveBtn)) {
          return;
        }
        var aObj = $$(node, consts.id.A, setting),
          removeStr = "<span class='" + consts.className.BUTTON + " remove' id='" + node.tId + consts.id.REMOVE + "' title='" + tools.apply(setting.confirm.removeTitle, [setting.treeId, node], setting.confirm.removeTitle) + "' treeNode" + consts.id.REMOVE + " style='display:none;'></span>";
        aObj.append(removeStr);
        $$(node, consts.id.REMOVE, setting).bind('click',
          function () {
            if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
            view.removeNode(setting, node);
            setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
            return false;
          }
        ).bind('mousedown',
          function (eventMouseDown) {
            return true;
          }
        ).show();
      },
      addHoverDom: function (setting, node) {
        if (data.getRoots().showHoverDom) {
          node.isHover = true;
          if (setting.confirm.enable) {
            view.addEditBtn(setting, node);
            view.addRemoveBtn(setting, node);
          }
          tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
        }
      },
      cancelCurEditNode: function (setting, forceName, isCancel) {
        var root = data.getRoot(setting),
          node = root.curEditNode;
        if (node) {
          var inputObj = root.curEditInput,
            newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());
          if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {
            return false;
          }
          data.nodeName(setting, node, newName);
          var aObj = $$(node, consts.id.A, setting);
          aObj.removeClass(consts.node.CURSELECTED_EDIT);
          inputObj.unbind();
          view.setNodeName(setting, node);
          node.editNameFlag = false;
          root.curEditNode = null;
          root.curEditInput = null;
          view.selectNode(setting, node, false);
          setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);
        }
        root.noSelection = true;
        return true;
      },
      editNode: function (setting, node) {
        var root = data.getRoot(setting);
        view.editNodeBlur = false;
        if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
          setTimeout(function () {
            tools.inputFocus(root.curEditInput);
          }, 0);
          return;
        }
        node.editNameFlag = true;
        view.removeTreeDom(setting, node);
        view.cancelCurEditNode(setting);
        view.selectNode(setting, node, false);
        $$(node, consts.id.SPAN, setting).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
        var inputObj = $$(node, consts.id.INPUT, setting);
        inputObj.attr("value", data.nodeName(setting, node));
        if (setting.confirm.editNameSelectAll) {
          tools.inputSelect(inputObj);
        } else {
          tools.inputFocus(inputObj);
        }
        inputObj.bind('blur', function (event) {
          if (!view.editNodeBlur) {
            view.cancelCurEditNode(setting);
          }
        }).bind('keydown', function (event) {
          if (event.keyCode == "13") {
            view.editNodeBlur = true;
            view.cancelCurEditNode(setting);
          } else if (event.keyCode == "27") {
            view.cancelCurEditNode(setting, null, true);
          }
        }).bind('click', function (event) {
          return false;
        }).bind('dblclick', function (event) {
          return false;
        });
        $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);
        root.curEditInput = inputObj;
        root.noSelection = false;
        root.curEditNode = node;
      },
      moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {
        var root = data.getRoot(setting);
        if (targetNode == node) return;
        if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;
        var oldParentNode = (node.parentTId ? node.getParentNode() : root),
          targetNodeIsRoot = (targetNode === null || targetNode == root);
        if (targetNodeIsRoot && targetNode === null) targetNode = root;
        if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
        var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
        if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
          moveType = consts.move.TYPE_INNER;
        }
        if (moveType == consts.move.TYPE_INNER) {
          if (targetNodeIsRoot) {
            //parentTId of root node is null
            node.parentTId = null;
          } else {
            if (!data.nodeIsParent(setting, targetNode)) {
              data.nodeIsParent(setting, targetNode, true);
              targetNode.open = !!targetNode.open;
              view.setNodeLineIcos(setting, targetNode);
            }
            node.parentTId = targetNode.tId;
          }
        }
        //move node Dom
        var targetObj, target_ulObj;
        if (targetNodeIsRoot) {
          targetObj = setting.treeObj;
          target_ulObj = targetObj;
        } else {
          if (!isSilent && moveType == consts.move.TYPE_INNER) {
            view.expandCollapseNode(setting, targetNode, true, false);
          } else if (!isSilent) {
            view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
          }
          targetObj = $$(targetNode, setting);
          target_ulObj = $$(targetNode, consts.id.UL, setting);
          if (!!targetObj.get(0) && !target_ulObj.get(0)) {
            var ulstr = [];
            view.makeUlHtml(setting, targetNode, ulstr, '');
            targetObj.append(ulstr.join(''));
          }
          target_ulObj = $$(targetNode, consts.id.UL, setting);
        }
        var nodeDom = $$(node, setting);
        if (!nodeDom.get(0)) {
          nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');
        } else if (!targetObj.get(0)) {
          nodeDom.remove();
        }
        if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
          target_ulObj.append(nodeDom);
        } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
          targetObj.before(nodeDom);
        } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
          targetObj.after(nodeDom);
        }
        //repair the data after move
        var i, l,
          tmpSrcIndex = -1,
          tmpTargetIndex = 0,
          oldNeighbor = null,
          newNeighbor = null,
          oldLevel = node.level;
        var oldChildren = data.nodeChildren(setting, oldParentNode);
        var targetParentChildren = data.nodeChildren(setting, targetParentNode);
        var targetChildren = data.nodeChildren(setting, targetNode);
        if (node.isFirstNode) {
          tmpSrcIndex = 0;
          if (oldChildren.length > 1) {
            oldNeighbor = oldChildren[1];
            oldNeighbor.isFirstNode = true;
          }
        } else if (node.isLastNode) {
          tmpSrcIndex = oldChildren.length - 1;
          oldNeighbor = oldChildren[tmpSrcIndex - 1];
          oldNeighbor.isLastNode = true;
        } else {
          for (i = 0, l = oldChildren.length; i < l; i++) {
            if (oldChildren[i].tId == node.tId) {
              tmpSrcIndex = i;
              break;
            }
          }
        }
        if (tmpSrcIndex >= 0) {
          oldChildren.splice(tmpSrcIndex, 1);
        }
        if (moveType != consts.move.TYPE_INNER) {
          for (i = 0, l = targetParentChildren.length; i < l; i++) {
            if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;
          }
        }
        if (moveType == consts.move.TYPE_INNER) {
          if (!targetChildren) {
            targetChildren = data.nodeChildren(setting, targetNode, []);
          }
          if (targetChildren.length > 0) {
            newNeighbor = targetChildren[targetChildren.length - 1];
            newNeighbor.isLastNode = false;
          }
          targetChildren.splice(targetChildren.length, 0, node);
          node.isLastNode = true;
          node.isFirstNode = (targetChildren.length == 1);
        } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
          targetParentChildren.splice(tmpTargetIndex, 0, node);
          newNeighbor = targetNode;
          newNeighbor.isFirstNode = false;
          node.parentTId = targetNode.parentTId;
          node.isFirstNode = true;
          node.isLastNode = false;
        } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
          targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
          newNeighbor = targetNode;
          newNeighbor.isLastNode = false;
          node.parentTId = targetNode.parentTId;
          node.isFirstNode = false;
          node.isLastNode = true;
        } else {
          if (moveType == consts.move.TYPE_PREV) {
            targetParentChildren.splice(tmpTargetIndex, 0, node);
          } else {
            targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
          }
          node.parentTId = targetNode.parentTId;
          node.isFirstNode = false;
          node.isLastNode = false;
        }
        data.fixPIdKeyValue(setting, node);
        data.setSonNodeLevel(setting, node.getParentNode(), node);
        //repair node what been moved
        view.setNodeLineIcos(setting, node);
        view.repairNodeLevelClass(setting, node, oldLevel);
        //repair node's old parentNode dom
        if (!setting.data.keep.parent && oldChildren.length < 1) {
          //old parentNode has no child nodes
          data.nodeIsParent(setting, oldParentNode, false);
          oldParentNode.open = false;
          var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),
            tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),
            tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);
          view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
          view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
          tmp_ulObj.css("display", "none");
        } else if (oldNeighbor) {
          //old neigbor node
          view.setNodeLineIcos(setting, oldNeighbor);
        }
        //new neigbor node
        if (newNeighbor) {
          view.setNodeLineIcos(setting, newNeighbor);
        }
        //repair checkbox / radio
        if (!!setting.check && setting.check.enable && view.repairChkClass) {
          view.repairChkClass(setting, oldParentNode);
          view.repairParentChkClassWithSelf(setting, oldParentNode);
          if (oldParentNode != node.parent)
            view.repairParentChkClassWithSelf(setting, node);
        }
        //expand parents after move
        if (!isSilent) {
          view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
        }
      },
      removeEditBtn: function (setting, node) {
        $$(node, consts.id.EDIT, setting).unbind().remove();
      },
      removeRemoveBtn: function (setting, node) {
        $$(node, consts.id.REMOVE, setting).unbind().remove();
      },
      removeTreeDom: function (setting, node) {
        node.isHover = false;
        view.removeEditBtn(setting, node);
        view.removeRemoveBtn(setting, node);
        tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
      },
      repairNodeLevelClass: function (setting, node, oldLevel) {
        if (oldLevel === node.level) return;
        var liObj = $$(node, setting),
          aObj = $$(node, consts.id.A, setting),
          ulObj = $$(node, consts.id.UL, setting),
          oldClass = consts.className.LEVEL + oldLevel,
          newClass = consts.className.LEVEL + node.level;
        liObj.removeClass(oldClass);
        liObj.addClass(newClass);
        aObj.removeClass(oldClass);
        aObj.addClass(newClass);
        ulObj.removeClass(oldClass);
        ulObj.addClass(newClass);
      },
      selectNodes: function (setting, nodes) {
        for (var i = 0, l = nodes.length; i < l; i++) {
          view.selectNode(setting, nodes[i], i > 0);
        }
      }
    },
    _z = {
      tools: _tools,
      view: _view,
      event: _event,
      data: _data
    };
  $.extend(true, $.fn.zTree.consts, _consts);
  $.extend(true, $.fn.zTree._z, _z);
  var zt = $.fn.zTree,
    tools = zt._z.tools,
    consts = zt.consts,
    view = zt._z.view,
    data = zt._z.data,
    event = zt._z.event,
    $$ = tools.$;
  data.exSetting(_setting);
  data.addInitBind(_bindEvent);
  data.addInitUnBind(_unbindEvent);
  data.addInitCache(_initCache);
  data.addInitNode(_initNode);
  data.addInitProxy(_eventProxy);
  data.addInitRoot(_initRoot);
  data.addZTreeTools(_zTreeTools);
  var _cancelPreSelectedNode = view.cancelPreSelectedNode;
  view.cancelPreSelectedNode = function (setting, node) {
    var list = data.getRoot(setting).curSelectedList;
    for (var i = 0, j = list.length; i < j; i++) {
      if (!node || node === list[i]) {
        view.removeTreeDom(setting, list[i]);
        if (node) break;
      }
    }
    if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
  }
  var _createNodes = view.createNodes;
  view.createNodes = function (setting, level, nodes, parentNode, index) {
    if (_createNodes) {
      _createNodes.apply(view, arguments);
    }
    if (!nodes) return;
    if (view.repairParentChkClassWithSelf) {
      view.repairParentChkClassWithSelf(setting, parentNode);
    }
  }
  var _makeNodeUrl = view.makeNodeUrl;
  view.makeNodeUrl = function (setting, node) {
    return setting.confirm.enable ? null : (_makeNodeUrl.apply(view, arguments));
  }
  var _removeNode = view.removeNode;
  view.removeNode = function (setting, node) {
    var root = data.getRoot(setting);
    if (root.curEditNode === node) root.curEditNode = null;
    if (_removeNode) {
      _removeNode.apply(view, arguments);
    }
  }
  var _selectNode = view.selectNode;
  view.selectNode = function (setting, node, addFlag) {
    var root = data.getRoot(setting);
    if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
      return false;
    }
    if (_selectNode) _selectNode.apply(view, arguments);
    view.addHoverDom(setting, node);
    return true;
  }
  var _uCanDo = tools.uCanDo;
  tools.uCanDo = function (setting, e) {
    var root = data.getRoot(setting);
    if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
      return true;
    }
    if (root.curEditNode) {
      view.editNodeBlur = false;
      root.curEditInput.focus();
    }
    return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
  }
})(jQuery);
src/plugins/ztree/js/jquery.ztree.exedit.min.js
New file
@@ -0,0 +1,53 @@
/*
 * JQuery zTree exedit v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(B){var I={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},v={onHoverOverNode:function(a,b){var c=i.getSetting(a.data.treeId),d=i.getRoot(c);if(d.curHoverNode!=b)v.onHoverOutNode(a);d.curHoverNode=b;e.addHoverDom(c,b)},onHoverOutNode:function(a){var a=
i.getSetting(a.data.treeId),b=i.getRoot(a);if(b.curHoverNode&&!i.isSelectedNode(a,b.curHoverNode))e.removeTreeDom(a,b.curHoverNode),b.curHoverNode=null},onMousedownNode:function(a,b){function c(a){if(m.dragFlag==0&&Math.abs(N-a.clientX)<f.confirm.drag.minMoveSize&&Math.abs(O-a.clientY)<f.confirm.drag.minMoveSize)return!0;var b,c,g,j;L.css("cursor","pointer");if(m.dragFlag==0){if(k.apply(f.callback.beforeDrag,[f.treeId,n],!0)==!1)return l(a),!0;for(b=0,c=n.length; b<c; b++){if(b==0)m.dragNodeShowBefore=[];
g=n[b];i.nodeIsParent(f,g)&&g.open?(e.expandCollapseNode(f,g,!g.open),m.dragNodeShowBefore[g.tId]=!0):m.dragNodeShowBefore[g.tId]=!1}m.dragFlag=1;y.showHoverDom=!1;k.showIfameMask(f,!0);j=!0;var p=-1;if(n.length>1){var o=n[0].parentTId?i.nodeChildren(f,n[0].getParentNode()):i.getNodes(f);g=[];for(b=0,c=o.length;b<c;b++)if(m.dragNodeShowBefore[o[b].tId]!==void 0&&(j&&p>-1&&p+1!==b&&(j=!1),g.push(o[b]),p=b),n.length===g.length){n=g;break}}j&&(H=n[0].getPreNode(),Q=n[n.length-1].getNextNode());C=q("<ul class='zTreeDragUL'></ul>",
f);for(b=0,c=n.length;b<c;b++)g=n[b],g.editNameFlag=!1,e.selectNode(f,g,b>0),e.removeTreeDom(f,g),b>f.confirm.drag.maxShowNodeNum-1||(j=q("<li id='"+g.tId+"_tmp'></li>",f),j.append(q(g,d.id.A,f).clone()),j.css("padding","0"),j.children("#"+g.tId+d.id.A).removeClass(d.node.CURSELECTED),C.append(j),b==f.confirm.drag.maxShowNodeNum-1&&(j=q("<li id='"+g.tId+"_moretmp'><a>  ...  </a></li>",f),C.append(j)));C.attr("id",n[0].tId+d.id.UL+"_tmp");C.addClass(f.treeObj.attr("class"));C.appendTo(L);u=q("<span class='tmpzTreeMove_arrow'></span>",
f);u.attr("id","zTreeMove_arrow_tmp");u.appendTo(L);f.treeObj.trigger(d.event.DRAG,[a,f.treeId,n])}if(m.dragFlag==1){t&&u.attr("id")==a.target.id&&w&&a.clientX+G.scrollLeft()+2>B("#"+w+d.id.A,t).offset().left?(g=B("#"+w+d.id.A,t),a.target=g.length>0?g.get(0):a.target):t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));
w=t=null;J=!1;h=f;g=i.getSettings();for(var z in g)if(g[z].treeId&&g[z].confirm.enable&&g[z].treeId!=f.treeId&&(a.target.id==g[z].treeId||B(a.target).parents("#"+g[z].treeId).length>0))J=!0,h=g[z];z=G.scrollTop();j=G.scrollLeft();p=h.treeObj.offset();b=h.treeObj.get(0).scrollHeight;g=h.treeObj.get(0).scrollWidth;c=a.clientY+z-p.top;var E=h.treeObj.height()+p.top-a.clientY-z,r=a.clientX+j-p.left,s=h.treeObj.width()+p.left-a.clientX-j,p=c<f.confirm.drag.borderMax&&c>f.confirm.drag.borderMin,o=E<f.confirm.drag.borderMax&&
E>f.confirm.drag.borderMin,F=r<f.confirm.drag.borderMax&&r>f.confirm.drag.borderMin,v=s<f.confirm.drag.borderMax&&s>f.confirm.drag.borderMin,E=c>f.confirm.drag.borderMin&&E>f.confirm.drag.borderMin&&r>f.confirm.drag.borderMin&&s>f.confirm.drag.borderMin,r=p&&h.treeObj.scrollTop()<=0,s=o&&h.treeObj.scrollTop()+h.treeObj.height()+10>=b,M=F&&h.treeObj.scrollLeft()<=0,P=v&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=g;if(a.target&&k.isChildOrSelf(a.target,h.treeId)){for(var D=a.target; D&&D.tagName&&!k.eqs(D.tagName,"li")&&D.id!=
h.treeId;)D=D.parentNode;var R=!0;for(b=0,c=n.length;b<c;b++)if(g=n[b],D.id===g.tId){R=!1;break}else if(q(g,f).find("#"+D.id).length>0){R=!1;break}if(R&&a.target&&k.isChildOrSelf(a.target,D.id+d.id.A))t=B(D),w=D.id}g=n[0];if(E&&k.isChildOrSelf(a.target,h.treeId)){if(!t&&(a.target.id==h.treeId||r||s||M||P)&&(J||!J&&g.parentTId))t=h.treeObj;p?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):o&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);F?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):v&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+
10);t&&t!=h.treeObj&&t.offset().left<h.treeObj.offset().left&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+t.offset().left-h.treeObj.offset().left)}C.css({top:a.clientY+z+3+"px",left:a.clientX+j+3+"px"});b=j=0;if(t&&t.attr("id")!=h.treeId){var A=w==null?null:i.getNodeCache(h,w),p=(a.ctrlKey||a.metaKey)&&f.confirm.drag.isMove&&f.confirm.drag.isCopy||!f.confirm.drag.isMove&&f.confirm.drag.isCopy;c=!!(H&&w===H.tId);F=!!(Q&&w===Q.tId);o=g.parentTId&&g.parentTId==w;g=(p||!F)&&k.apply(h.confirm.drag.prev,[h.treeId,n,A],
!!h.confirm.drag.prev);c=(p||!c)&&k.apply(h.confirm.drag.next,[h.treeId,n,A],!!h.confirm.drag.next);p=(p||!o)&&!(h.data.keep.leaf&&!i.nodeIsParent(f,A))&&k.apply(h.confirm.drag.inner,[h.treeId,n,A],!!h.confirm.drag.inner);o=function(){t=null;w="";x=d.move.TYPE_INNER;u.css({display:"none"});if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null};if(!g&&!c&&!p)o();else if(F=B("#"+w+d.id.A,t),v=A.isLastNode?null:B("#"+A.getNextNode().tId+d.id.A,t.next()),E=F.offset().top,r=
F.offset().left,s=g?p?0.25:c?0.5:1:-1,M=c?p?0.75:g?0.5:0:-1,z=(a.clientY+z-E)/F.height(),(s==1||z<=s&&z>=-0.2)&&g?(j=1-u.width(),b=E-u.height()/2,x=d.move.TYPE_PREV):(M==0||z>=M&&z<=1.2)&&c?(j=1-u.width(),b=v==null||i.nodeIsParent(f,A)&&A.open?E+F.height()-u.height()/2:v.offset().top-u.height()/2,x=d.move.TYPE_NEXT):p?(j=5-u.width(),b=E,x=d.move.TYPE_INNER):o(),t){u.css({display:"block",top:b+"px",left:r+j+"px"});F.addClass(d.node.TMPTARGET_NODE+"_"+x);if(S!=w||T!=x)K=(new Date).getTime();if(A&&i.nodeIsParent(f,
A)&&x==d.move.TYPE_INNER&&(z=!0,window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(z=!1),z))window.zTreeMoveTimer=setTimeout(function(){x==d.move.TYPE_INNER&&A&&i.nodeIsParent(f,A)&&!A.open&&(new Date).getTime()-K>h.confirm.drag.autoOpenTime&&k.apply(h.callback.beforeDragOpen,[h.treeId,A],!0)&&(e.switchNode(h,A),h.confirm.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND,
[h.treeId,A]))},h.confirm.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId}}else if(x=d.move.TYPE_INNER,t&&k.apply(h.confirm.drag.inner,[h.treeId,n,null],!!h.confirm.drag.inner)?t.addClass(d.node.TMPTARGET_TREE):t=null,u.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;S=w;T=x;f.treeObj.trigger(d.event.DRAGMOVE,[a,f.treeId,n])}return!1}function l(a){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=
null;T=S=null;G.unbind("mousemove",c);G.unbind("mouseup",l);G.unbind("selectstart",g);L.css("cursor","");t&&(t.removeClass(d.node.TMPTARGET_TREE),w&&B("#"+w+d.id.A,t).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));k.showIfameMask(f,!1);y.showHoverDom=!0;if(m.dragFlag!=0){m.dragFlag=0;var b,j,o;for(b=0,j=n.length;b<j;b++)o=n[b],i.nodeIsParent(f,o)&&m.dragNodeShowBefore[o.tId]&&
!o.open&&(e.expandCollapseNode(f,o,!o.open),delete m.dragNodeShowBefore[o.tId]);C&&C.remove();u&&u.remove();var r=(a.ctrlKey||a.metaKey)&&f.confirm.drag.isMove&&f.confirm.drag.isCopy||!f.confirm.drag.isMove&&f.confirm.drag.isCopy;!r&&t&&w&&n[0].parentTId&&w==n[0].parentTId&&x==d.move.TYPE_INNER&&(t=null);if(t){var p=w==null?null:i.getNodeCache(h,w);if(k.apply(f.callback.beforeDrop,[h.treeId,n,p,x,r],!0)==!1)e.selectNodes(v,n);else{var s=r?k.clone(n):n;b=function(){if(J){if(!r)for(var b=0,c=n.length; b<c; b++)e.removeNode(f,
n[b]);x==d.move.TYPE_INNER?e.addNodes(h,p,-1,s):e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s)}else if(r&&x==d.move.TYPE_INNER)e.addNodes(h,p,-1,s);else if(r)e.addNodes(h,p.getParentNode(),x==d.move.TYPE_PREV?p.getIndex():p.getIndex()+1,s);else if(x!=d.move.TYPE_NEXT)for(b=0,c=s.length;b<c;b++)e.moveNode(h,p,s[b],x,!1);else for(b=-1,c=s.length-1;b<c;c--)e.moveNode(h,p,s[c],x,!1);e.selectNodes(h,s);b=q(s[0],f).get(0);e.scrollIntoView(f,b);f.treeObj.trigger(d.event.DROP,
[a,h.treeId,s,p,x,r])};x==d.move.TYPE_INNER&&k.canAsync(h,p)?e.asyncNode(h,p,!1,b):b()}}else e.selectNodes(v,n),f.treeObj.trigger(d.event.DROP,[a,f.treeId,n,null,null,null])}}function g(){return!1}var o,j,f=i.getSetting(a.data.treeId),m=i.getRoot(f),y=i.getRoots();if(a.button==2||!f.confirm.enable||!f.confirm.drag.isCopy&&!f.confirm.drag.isMove)return!0;var r=a.target,s=i.getRoot(f).curSelectedList,n=[];if(i.isSelectedNode(f,b))for(o=0,j=s.length; o<j; o++){if(s[o].editNameFlag&&k.eqs(r.tagName,"input")&&r.getAttribute("treeNode"+
d.id.INPUT)!==null)return!0;n.push(s[o]);if(n[0].parentTId!==s[o].parentTId){n=[b];break}}else n=[b];e.editNodeBlur=!0;e.cancelCurEditNode(f);var G=B(f.treeObj.get(0).ownerDocument),L=B(f.treeObj.get(0).ownerDocument.body),C,u,t,J=!1,h=f,v=f,H,Q,S=null,T=null,w=null,x=d.move.TYPE_INNER,N=a.clientX,O=a.clientY,K=(new Date).getTime();k.uCanDo(f)&&G.bind("mousemove",c);G.bind("mouseup",l);G.bind("selectstart",g);return!0}};B.extend(!0,B.fn.zTree.consts,I);B.extend(!0,B.fn.zTree._z,{tools:{getAbs:function(a){a=
a.getBoundingClientRect();return[a.left+(document.body.scrollLeft+document.documentElement.scrollLeft),a.top+(document.body.scrollTop+document.documentElement.scrollTop)]},inputFocus:function(a){a.get(0)&&(a.focus(),k.setCursorPosition(a.get(0),a.val().length))},inputSelect:function(a){a.get(0)&&(a.focus(),a.select())},setCursorPosition:function(a,b){if(a.setSelectionRange)a.focus(),a.setSelectionRange(b,b);else if(a.createTextRange){var c=a.createTextRange();c.collapse(!0);c.moveEnd("character",
b);c.moveStart("character",b);c.select()}},showIfameMask:function(a,b){for(var c=i.getRoot(a);c.dragMaskList.length>0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(b)for(var d=q("iframe",a),g=0,e=d.length;g<e;g++){var j=d.get(g),f=k.getAbs(j),j=q("<div id='zTreeMask_"+g+"' class='zTreeMask' style='top:"+f[1]+"px; left:"+f[0]+"px; width:"+j.offsetWidth+"px; height:"+j.offsetHeight+"px;'></div>",a);j.appendTo(q("body",a));c.dragMaskList.push(j)}}},view:{addEditBtn:function(a,b){if(!(b.editNameFlag||
q(b,d.id.EDIT,a).length>0)&&k.apply(a.confirm.showRenameBtn,[a.treeId,b],a.confirm.showRenameBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" edit' id='"+b.tId+d.id.EDIT+"' title='"+k.apply(a.confirm.renameTitle,[a.treeId,b],a.confirm.renameTitle)+"' treeNode"+d.id.EDIT+" style='display:none;'></span>";c.append(l);q(b,d.id.EDIT,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeEditName,[a.treeId,b],!0)==!1)return!1;e.editNode(a,b);return!1}).show()}},addRemoveBtn:function(a,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                b){if(!(b.editNameFlag||q(b,d.id.REMOVE,a).length>0)&&k.apply(a.confirm.showRemoveBtn,[a.treeId,b],a.confirm.showRemoveBtn)){var c=q(b,d.id.A,a),l="<span class='"+d.className.BUTTON+" remove' id='"+b.tId+d.id.REMOVE+"' title='"+k.apply(a.confirm.removeTitle,[a.treeId,b],a.confirm.removeTitle)+"' treeNode"+d.id.REMOVE+" style='display:none;'></span>";c.append(l);q(b,d.id.REMOVE,a).bind("click",function(){if(!k.uCanDo(a)||k.apply(a.callback.beforeRemove,[a.treeId,b],!0)==!1)return!1;e.removeNode(a,b);a.treeObj.trigger(d.event.REMOVE,
[a.treeId,b]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(a,b){if(i.getRoots().showHoverDom)b.isHover=!0,a.confirm.enable&&(e.addEditBtn(a,b),e.addRemoveBtn(a,b)),k.apply(a.view.addHoverDom,[a.treeId,b])},cancelCurEditNode:function(a, b, c){var l=i.getRoot(a),g=l.curEditNode;if(g){var o=l.curEditInput,b=b?b:c?i.nodeName(a,g):o.val();if(k.apply(a.callback.beforeRename,[a.treeId,g,b,c],!0)===!1)return!1;i.nodeName(a,g,b);q(g,d.id.A,a).removeClass(d.node.CURSELECTED_EDIT);
o.unbind();e.setNodeName(a,g);g.editNameFlag=!1;l.curEditNode=null;l.curEditInput=null;e.selectNode(a,g,!1);a.treeObj.trigger(d.event.RENAME,[a.treeId,g,c])}return l.noSelection=!0},editNode:function(a,b){var c=i.getRoot(a);e.editNodeBlur=!1;if(i.isSelectedNode(a,b)&&c.curEditNode==b&&b.editNameFlag)setTimeout(function(){k.inputFocus(c.curEditInput)},0);else{b.editNameFlag=!0;e.removeTreeDom(a,b);e.cancelCurEditNode(a);e.selectNode(a,b,!1);q(b,d.id.SPAN,a).html("<input type=text class='rename' id='"+
b.tId+d.id.INPUT+"' treeNode"+d.id.INPUT+" >");var l=q(b,d.id.INPUT,a);l.attr("value",i.nodeName(a,b));a.confirm.editNameSelectAll?k.inputSelect(l):k.inputFocus(l);l.bind("blur",function(){e.editNodeBlur||e.cancelCurEditNode(a)}).bind("keydown",function(b){b.keyCode=="13"?(e.editNodeBlur=!0,e.cancelCurEditNode(a)):b.keyCode=="27"&&e.cancelCurEditNode(a,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});q(b,d.id.A,a).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=l;
c.noSelection=!1;c.curEditNode=b}},moveNode:function(a,b,c,l,g,k){var j=i.getRoot(a);if(b!=c&&(!a.data.keep.leaf||!b||i.nodeIsParent(a,b)||l!=d.move.TYPE_INNER)){var f=c.parentTId?c.getParentNode():j,m=b===null||b==j;m&&b===null&&(b=j);if(m)l=d.move.TYPE_INNER;j=b.parentTId?b.getParentNode():j;if(l!=d.move.TYPE_PREV&&l!=d.move.TYPE_NEXT)l=d.move.TYPE_INNER;if(l==d.move.TYPE_INNER)if(m)c.parentTId=null;else{if(!i.nodeIsParent(a,b))i.nodeIsParent(a,b,!0),b.open=!!b.open,e.setNodeLineIcos(a,b);c.parentTId=
b.tId}var y;m?y=m=a.treeObj:(!k&&l==d.move.TYPE_INNER?e.expandCollapseNode(a,b,!0,!1):k||e.expandCollapseNode(a,b.getParentNode(),!0,!1),m=q(b,a),y=q(b,d.id.UL,a),m.get(0)&&!y.get(0)&&(y=[],e.makeUlHtml(a,b,y,""),m.append(y.join(""))),y=q(b,d.id.UL,a));var r=q(c,a);r.get(0)?m.get(0)||r.remove():r=e.appendNodes(a,c.level,[c],null,-1,!1,!0).join("");y.get(0)&&l==d.move.TYPE_INNER?y.append(r):m.get(0)&&l==d.move.TYPE_PREV?m.before(r):m.get(0)&&l==d.move.TYPE_NEXT&&m.after(r);var s;y=-1;var r=0,n=null,
m=null,B=c.level,v=i.nodeChildren(a,f),C=i.nodeChildren(a,j),u=i.nodeChildren(a,b);if(c.isFirstNode){if(y=0,v.length>1)n=v[1],n.isFirstNode=!0}else if(c.isLastNode)y=v.length-1,n=v[y-1],n.isLastNode=!0;else for(j=0,s=v.length;j<s;j++)if(v[j].tId==c.tId){y=j;break}y>=0&&v.splice(y,1);if(l!=d.move.TYPE_INNER)for(j=0,s=C.length;j<s;j++)C[j].tId==b.tId&&(r=j);if(l==d.move.TYPE_INNER){u||(u=i.nodeChildren(a,b,[]));if(u.length>0)m=u[u.length-1],m.isLastNode=!1;u.splice(u.length,0,c);c.isLastNode=!0;c.isFirstNode=
u.length==1}else b.isFirstNode&&l==d.move.TYPE_PREV?(C.splice(r,0,c),m=b,m.isFirstNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!0,c.isLastNode=!1):b.isLastNode&&l==d.move.TYPE_NEXT?(C.splice(r+1,0,c),m=b,m.isLastNode=!1,c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(l==d.move.TYPE_PREV?C.splice(r,0,c):C.splice(r+1,0,c),c.parentTId=b.parentTId,c.isFirstNode=!1,c.isLastNode=!1);i.fixPIdKeyValue(a,c);i.setSonNodeLevel(a,c.getParentNode(),c);e.setNodeLineIcos(a,c);e.repairNodeLevelClass(a,
c,B);!a.data.keep.parent&&v.length<1?(i.nodeIsParent(a,f,!1),f.open=!1,b=q(f,d.id.UL,a),l=q(f,d.id.SWITCH,a),j=q(f,d.id.ICON,a),e.replaceSwitchClass(f,l,d.folder.DOCU),e.replaceIcoClass(f,j,d.folder.DOCU),b.css("display","none")):n&&e.setNodeLineIcos(a,n);m&&e.setNodeLineIcos(a,m);a.check&&a.check.enable&&e.repairChkClass&&(e.repairChkClass(a,f),e.repairParentChkClassWithSelf(a,f),f!=c.parent&&e.repairParentChkClassWithSelf(a,c));k||e.expandCollapseParentNode(a,c.getParentNode(),!0,g)}},removeEditBtn:function(a,
b){q(b,d.id.EDIT,a).unbind().remove()},removeRemoveBtn:function(a,b){q(b,d.id.REMOVE,a).unbind().remove()},removeTreeDom:function(a,b){b.isHover=!1;e.removeEditBtn(a,b);e.removeRemoveBtn(a,b);k.apply(a.view.removeHoverDom,[a.treeId,b])},repairNodeLevelClass:function(a,b,c){if(c!==b.level){var e=q(b,a),g=q(b,d.id.A,a),a=q(b,d.id.UL,a),c=d.className.LEVEL+c,b=d.className.LEVEL+b.level;e.removeClass(c);e.addClass(b);g.removeClass(c);g.addClass(b);a.removeClass(c);a.addClass(b)}},selectNodes:function(a,
b){for(var c=0,d=b.length;c<d;c++)e.selectNode(a,b[c],c>0)}},event:{},data:{setSonNodeLevel:function(a,b,c){if(c){var d=i.nodeChildren(a,c);c.level=b?b.level+1:0;if(d)for(var b=0,g=d.length;b<g;b++)d[b]&&i.setSonNodeLevel(a,c,d[b])}}}});var H=B.fn.zTree,k=H._z.tools,d=H.consts,e=H._z.view,i=H._z.data,q=k.$;i.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,
minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,beforeRename:null,onDrag:null,onDragMove:null,onDrop:null,onRename:null}});i.addInitBind(function(a){var b=a.treeObj,c=d.event;b.bind(c.RENAME,function(b,c,d,e){k.apply(a.callback.onRename,[b,c,d,e])});b.bind(c.DRAG,function(b,c,d,e){k.apply(a.callback.onDrag,[c,d,e])});b.bind(c.DRAGMOVE,function(b,
c,d,e){k.apply(a.callback.onDragMove,[c,d,e])});b.bind(c.DROP,function(b,c,d,e,f,i,q){k.apply(a.callback.onDrop,[c,d,e,f,i,q])})});i.addInitUnBind(function(a){var a=a.treeObj,b=d.event;a.unbind(b.RENAME);a.unbind(b.DRAG);a.unbind(b.DRAGMOVE);a.unbind(b.DROP)});i.addInitCache(function(){});i.addInitNode(function(a,b,c){if(c)c.isHover=!1,c.editNameFlag=!1});i.addInitProxy(function(a){var b=a.target,c=i.getSetting(a.data.treeId),e=a.relatedTarget,g="",o=null,j="",f=null,m=null;if(k.eqs(a.type,"mouseover")){if(m=
k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}]))g=k.getNodeMainDom(m).id,j="hoverOverNode"}else if(k.eqs(a.type,"mouseout"))m=k.getMDom(c,e,[{tagName:"a",attrName:"treeNode"+d.id.A}]),m||(g="remove",j="hoverOutNode");else if(k.eqs(a.type,"mousedown")&&(m=k.getMDom(c,b,[{tagName:"a",attrName:"treeNode"+d.id.A}])))g=k.getNodeMainDom(m).id,j="mousedownNode";if(g.length>0)switch(o=i.getNodeCache(c,g),j){case "mousedownNode":f=v.onMousedownNode;break;case "hoverOverNode":f=v.onHoverOverNode;
break;case "hoverOutNode":f=v.onHoverOutNode}return{stop:!1,node:o,nodeEventType:j,nodeEventCallback:f,treeEventType:"",treeEventCallback:null}});i.addInitRoot(function(a){var a=i.getRoot(a),b=i.getRoots();a.curEditNode=null;a.curEditInput=null;a.curHoverNode=null;a.dragFlag=0;a.dragNodeShowBefore=[];a.dragMaskList=[];b.showHoverDom=!0});i.addZTreeTools(function(a,b){b.cancelEditName=function(a){i.getRoot(this.setting).curEditNode&&e.cancelCurEditNode(this.setting,a?a:null,!0)};b.copyNode=function(b,
l,g,o){if(!l)return null;var j=i.nodeIsParent(a,b);if(b&&!j&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;var f=this,m=k.clone(l);if(!b)b=null,g=d.move.TYPE_INNER;g==d.move.TYPE_INNER?(l=function(){e.addNodes(f.setting,b,-1,[m],o)},k.canAsync(this.setting,b)?e.asyncNode(this.setting,b,o,l):l()):(e.addNodes(this.setting,b.parentNode,-1,[m],o),e.moveNode(this.setting,b,m,g,!1,o));return m};b.editName=function(a){a&&a.tId&&a===i.getNodeCache(this.setting,a.tId)&&(a.parentTId&&e.expandCollapseParentNode(this.setting,
a.getParentNode(),!0),e.editNode(this.setting,a))};b.moveNode=function(b,l,g,o){function j(){e.moveNode(m.setting,b,l,g,!1,o)}if(!l)return l;var f=i.nodeIsParent(a,b);if(b&&!f&&this.setting.data.keep.leaf&&g===d.move.TYPE_INNER)return null;else if(b&&(l.parentTId==b.tId&&g==d.move.TYPE_INNER||q(l,this.setting).find("#"+b.tId).length>0))return null;else b||(b=null);var m=this;k.canAsync(this.setting,b)&&g===d.move.TYPE_INNER?e.asyncNode(this.setting,b,o,j):j();return l};b.setEditable=function(a){this.setting.confirm.enable=
a;return this.refresh()}});var N=e.cancelPreSelectedNode;e.cancelPreSelectedNode=function(a,b){for(var c=i.getRoot(a).curSelectedList,d=0,g=c.length;d<g;d++)if(!b||b===c[d])if(e.removeTreeDom(a,c[d]),b)break;N&&N.apply(e,arguments)};var O=e.createNodes;e.createNodes=function(a,b,c,d,g){O&&O.apply(e,arguments);c&&e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(a,d)};var V=e.makeNodeUrl;e.makeNodeUrl=function(a,b){return a.confirm.enable?null:V.apply(e,arguments)};var K=e.removeNode;e.removeNode=
function(a,b){var c=i.getRoot(a);if(c.curEditNode===b)c.curEditNode=null;K&&K.apply(e,arguments)};var P=e.selectNode;e.selectNode=function(a,b,c){var d=i.getRoot(a);if(i.isSelectedNode(a,b)&&d.curEditNode==b&&b.editNameFlag)return!1;P&&P.apply(e,arguments);e.addHoverDom(a,b);return!0};var U=k.uCanDo;k.uCanDo=function(a,b){var c=i.getRoot(a);if(b&&(k.eqs(b.type,"mouseover")||k.eqs(b.type,"mouseout")||k.eqs(b.type,"mousedown")||k.eqs(b.type,"mouseup")))return!0;if(c.curEditNode)e.editNodeBlur=!1,c.curEditInput.focus();
return!c.curEditNode&&(U?U.apply(e,arguments):!0)}})(jQuery);
src/plugins/ztree/js/jquery.ztree.exhide.js
New file
@@ -0,0 +1,404 @@
/*
 * JQuery zTree exHideNodes v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function ($) {
  var _setting = {
    data: {
      key: {
        isHidden: "isHidden"
      }
    }
  };
  //default init node of exLib
  var _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
      var isHidden = data.isHidden(setting, n);
      data.isHidden(setting, n, isHidden);
      data.initHideForExCheck(setting, n);
    },
    //add dom for check
    _beforeA = function (setting, node, html) {
    },
    //update zTreeObj, add method of exLib
    _zTreeTools = function (setting, zTreeTools) {
      zTreeTools.showNodes = function (nodes, options) {
        view.showNodes(setting, nodes, options);
      }
      zTreeTools.showNode = function (node, options) {
        if (!node) {
          return;
        }
        view.showNodes(setting, [node], options);
      }
      zTreeTools.hideNodes = function (nodes, options) {
        view.hideNodes(setting, nodes, options);
      }
      zTreeTools.hideNode = function (node, options) {
        if (!node) {
          return;
        }
        view.hideNodes(setting, [node], options);
      }
      var _checkNode = zTreeTools.checkNode;
      if (_checkNode) {
        zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
          if (!!node && !!data.isHidden(setting, node)) {
            return;
          }
          _checkNode.apply(zTreeTools, arguments);
        }
      }
    },
    //method of operate data
    _data = {
      initHideForExCheck: function (setting, n) {
        var isHidden = data.isHidden(setting, n);
        if (isHidden && setting.check && setting.check.enable) {
          if (typeof n._nocheck == "undefined") {
            n._nocheck = !!n.nocheck
            n.nocheck = true;
          }
          n.check_Child_State = -1;
          if (view.repairParentChkClassWithSelf) {
            view.repairParentChkClassWithSelf(setting, n);
          }
        }
      },
      initShowForExCheck: function (setting, n) {
        var isHidden = data.isHidden(setting, n);
        if (!isHidden && setting.check && setting.check.enable) {
          if (typeof n._nocheck != "undefined") {
            n.nocheck = n._nocheck;
            delete n._nocheck;
          }
          if (view.setChkClass) {
            var checkObj = $$(n, consts.id.CHECK, setting);
            view.setChkClass(setting, checkObj, n);
          }
          if (view.repairParentChkClassWithSelf) {
            view.repairParentChkClassWithSelf(setting, n);
          }
        }
      }
    },
    //method of operate ztree dom
    _view = {
      clearOldFirstNode: function (setting, node) {
        var n = node.getNextNode();
        while (!!n) {
          if (n.isFirstNode) {
            n.isFirstNode = false;
            view.setNodeLineIcos(setting, n);
            break;
          }
          if (n.isLastNode) {
            break;
          }
          n = n.getNextNode();
        }
      },
      clearOldLastNode: function (setting, node, openFlag) {
        var n = node.getPreNode();
        while (!!n) {
          if (n.isLastNode) {
            n.isLastNode = false;
            if (openFlag) {
              view.setNodeLineIcos(setting, n);
            }
            break;
          }
          if (n.isFirstNode) {
            break;
          }
          n = n.getPreNode();
        }
      },
      makeDOMNodeMainBefore: function (html, setting, node) {
        var isHidden = data.isHidden(setting, node);
        html.push("<li ", (isHidden ? "style='display:none;' " : ""), "id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
      },
      showNode: function (setting, node, options) {
        data.isHidden(setting, node, false);
        data.initShowForExCheck(setting, node);
        $$(node, setting).show();
      },
      showNodes: function (setting, nodes, options) {
        if (!nodes || nodes.length == 0) {
          return;
        }
        var pList = {}, i, j;
        for (i = 0, j = nodes.length; i < j; i++) {
          var n = nodes[i];
          if (!pList[n.parentTId]) {
            var pn = n.getParentNode();
            pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();
          }
          view.showNode(setting, n, options);
        }
        for (var tId in pList) {
          var children = data.nodeChildren(setting, pList[tId]);
          view.setFirstNodeForShow(setting, children);
          view.setLastNodeForShow(setting, children);
        }
      },
      hideNode: function (setting, node, options) {
        data.isHidden(setting, node, true);
        node.isFirstNode = false;
        node.isLastNode = false;
        data.initHideForExCheck(setting, node);
        view.cancelPreSelectedNode(setting, node);
        $$(node, setting).hide();
      },
      hideNodes: function (setting, nodes, options) {
        if (!nodes || nodes.length == 0) {
          return;
        }
        var pList = {}, i, j;
        for (i = 0, j = nodes.length; i < j; i++) {
          var n = nodes[i];
          if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {
            var pn = n.getParentNode();
            pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();
          }
          view.hideNode(setting, n, options);
        }
        for (var tId in pList) {
          var children = data.nodeChildren(setting, pList[tId]);
          view.setFirstNodeForHide(setting, children);
          view.setLastNodeForHide(setting, children);
        }
      },
      setFirstNode: function (setting, parentNode) {
        var children = data.nodeChildren(setting, parentNode);
        var isHidden = data.isHidden(setting, children[0], false);
        if (children.length > 0 && !isHidden) {
          children[0].isFirstNode = true;
        } else if (children.length > 0) {
          view.setFirstNodeForHide(setting, children);
        }
      },
      setLastNode: function (setting, parentNode) {
        var children = data.nodeChildren(setting, parentNode);
        var isHidden = data.isHidden(setting, children[0]);
        if (children.length > 0 && !isHidden) {
          children[children.length - 1].isLastNode = true;
        } else if (children.length > 0) {
          view.setLastNodeForHide(setting, children);
        }
      },
      setFirstNodeForHide: function (setting, nodes) {
        var n, i, j;
        for (i = 0, j = nodes.length; i < j; i++) {
          n = nodes[i];
          if (n.isFirstNode) {
            break;
          }
          var isHidden = data.isHidden(setting, n);
          if (!isHidden && !n.isFirstNode) {
            n.isFirstNode = true;
            view.setNodeLineIcos(setting, n);
            break;
          } else {
            n = null;
          }
        }
        return n;
      },
      setFirstNodeForShow: function (setting, nodes) {
        var n, i, j, first, old;
        for (i = 0, j = nodes.length; i < j; i++) {
          n = nodes[i];
          var isHidden = data.isHidden(setting, n);
          if (!first && !isHidden && n.isFirstNode) {
            first = n;
            break;
          } else if (!first && !isHidden && !n.isFirstNode) {
            n.isFirstNode = true;
            first = n;
            view.setNodeLineIcos(setting, n);
          } else if (first && n.isFirstNode) {
            n.isFirstNode = false;
            old = n;
            view.setNodeLineIcos(setting, n);
            break;
          } else {
            n = null;
          }
        }
        return {"new": first, "old": old};
      },
      setLastNodeForHide: function (setting, nodes) {
        var n, i;
        for (i = nodes.length - 1; i >= 0; i--) {
          n = nodes[i];
          if (n.isLastNode) {
            break;
          }
          var isHidden = data.isHidden(setting, n);
          if (!isHidden && !n.isLastNode) {
            n.isLastNode = true;
            view.setNodeLineIcos(setting, n);
            break;
          } else {
            n = null;
          }
        }
        return n;
      },
      setLastNodeForShow: function (setting, nodes) {
        var n, i, j, last, old;
        for (i = nodes.length - 1; i >= 0; i--) {
          n = nodes[i];
          var isHidden = data.isHidden(setting, n);
          if (!last && !isHidden && n.isLastNode) {
            last = n;
            break;
          } else if (!last && !isHidden && !n.isLastNode) {
            n.isLastNode = true;
            last = n;
            view.setNodeLineIcos(setting, n);
          } else if (last && n.isLastNode) {
            n.isLastNode = false;
            old = n;
            view.setNodeLineIcos(setting, n);
            break;
          } else {
            n = null;
          }
        }
        return {"new": last, "old": old};
      }
    },
    _z = {
      view: _view,
      data: _data
    };
  $.extend(true, $.fn.zTree._z, _z);
  var zt = $.fn.zTree,
    tools = zt._z.tools,
    consts = zt.consts,
    view = zt._z.view,
    data = zt._z.data,
    event = zt._z.event,
    $$ = tools.$;
  data.isHidden = function (setting, node, newIsHidden) {
    if (!node) {
      return false;
    }
    var key = setting.data.key.isHidden;
    if (typeof newIsHidden !== 'undefined') {
      if (typeof newIsHidden === "string") {
        newIsHidden = tools.eqs(newIsHidden, "true");
      }
      newIsHidden = !!newIsHidden;
      node[key] = newIsHidden;
    } else if (typeof node[key] == "string"){
      node[key] = tools.eqs(node[key], "true");
    } else {
      node[key] = !!node[key];
    }
    return node[key];
  };
  data.exSetting(_setting);
  data.addInitNode(_initNode);
  data.addBeforeA(_beforeA);
  data.addZTreeTools(_zTreeTools);
//    Override method in core
  var _dInitNode = data.initNode;
  data.initNode = function (setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {
    var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
      children = tmpPNode[setting.data.key.children];
    data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);
    data.tmpHideLastNode = view.setLastNodeForHide(setting, children);
    if (openFlag) {
      view.setNodeLineIcos(setting, data.tmpHideFirstNode);
      view.setNodeLineIcos(setting, data.tmpHideLastNode);
    }
    isFirstNode = (data.tmpHideFirstNode === node);
    isLastNode = (data.tmpHideLastNode === node);
    if (_dInitNode) _dInitNode.apply(data, arguments);
    if (openFlag && isLastNode) {
      view.clearOldLastNode(setting, node, openFlag);
    }
  };
  var _makeChkFlag = data.makeChkFlag;
  if (!!_makeChkFlag) {
    data.makeChkFlag = function (setting, node) {
      if (!!node && !!data.isHidden(setting, node)) {
        return;
      }
      _makeChkFlag.apply(data, arguments);
    }
  }
  var _getTreeCheckedNodes = data.getTreeCheckedNodes;
  if (!!_getTreeCheckedNodes) {
    data.getTreeCheckedNodes = function (setting, nodes, checked, results) {
      if (!!nodes && nodes.length > 0) {
        var p = nodes[0].getParentNode();
        if (!!p && !!data.isHidden(setting, p)) {
          return [];
        }
      }
      return _getTreeCheckedNodes.apply(data, arguments);
    }
  }
  var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;
  if (!!_getTreeChangeCheckedNodes) {
    data.getTreeChangeCheckedNodes = function (setting, nodes, results) {
      if (!!nodes && nodes.length > 0) {
        var p = nodes[0].getParentNode();
        if (!!p && !!data.isHidden(setting, p)) {
          return [];
        }
      }
      return _getTreeChangeCheckedNodes.apply(data, arguments);
    }
  }
  var _expandCollapseSonNode = view.expandCollapseSonNode;
  if (!!_expandCollapseSonNode) {
    view.expandCollapseSonNode = function (setting, node, expandFlag, animateFlag, callback) {
      if (!!node && !!data.isHidden(setting, node)) {
        return;
      }
      _expandCollapseSonNode.apply(view, arguments);
    }
  }
  var _setSonNodeCheckBox = view.setSonNodeCheckBox;
  if (!!_setSonNodeCheckBox) {
    view.setSonNodeCheckBox = function (setting, node, value, srcNode) {
      if (!!node && !!data.isHidden(setting, node)) {
        return;
      }
      _setSonNodeCheckBox.apply(view, arguments);
    }
  }
  var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;
  if (!!_repairParentChkClassWithSelf) {
    view.repairParentChkClassWithSelf = function (setting, node) {
      if (!!node && !!data.isHidden(setting, node)) {
        return;
      }
      _repairParentChkClassWithSelf.apply(view, arguments);
    }
  }
})(jQuery);
src/plugins/ztree/js/jquery.ztree.exhide.min.js
New file
@@ -0,0 +1,23 @@
/*
 * JQuery zTree exHideNodes v3.5.40
 * http://treejs.cn/
 *
 * Copyright (c) 2010 Hunter.z
 *
 * Licensed same as jquery - MIT License
 * http://www.opensource.org/licenses/mit-license.php
 *
 * email: hunter.z@263.net
 * Date: 2019-01-18
 */
(function(j){j.extend(!0,j.fn.zTree._z,{view:{clearOldFirstNode:function(c,a){for(var b=a.getNextNode();b;){if(b.isFirstNode){b.isFirstNode=!1;e.setNodeLineIcos(c,b);break}if(b.isLastNode)break;b=b.getNextNode()}},clearOldLastNode:function(c,a,b){for(a=a.getPreNode();a;){if(a.isLastNode){a.isLastNode=!1;b&&e.setNodeLineIcos(c,a);break}if(a.isFirstNode)break;a=a.getPreNode()}},makeDOMNodeMainBefore:function(c,a,b){a=d.isHidden(a,b);c.push("<li ",a?"style='display:none;' ":"","id='",b.tId,"' class='",
m.className.LEVEL,b.level,"' tabindex='0' hidefocus='true' treenode>")},showNode:function(c,a){d.isHidden(c,a,!1);d.initShowForExCheck(c,a);k(a,c).show()},showNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g<i;g++){var h=a[g];if(!f[h.parentTId]){var u=h.getParentNode();f[h.parentTId]=u===null?d.getRoot(c):h.getParentNode()}e.showNode(c,h,b)}for(var j in f)a=d.nodeChildren(c,f[j]),e.setFirstNodeForShow(c,a),e.setLastNodeForShow(c,a)}},hideNode:function(c,a){d.isHidden(c,a,
!0);a.isFirstNode=!1;a.isLastNode=!1;d.initHideForExCheck(c,a);e.cancelPreSelectedNode(c,a);k(a,c).hide()},hideNodes:function(c,a,b){if(a&&a.length!=0){var f={},g,i;for(g=0,i=a.length;g<i;g++){var h=a[g];if((h.isFirstNode||h.isLastNode)&&!f[h.parentTId]){var j=h.getParentNode();f[h.parentTId]=j===null?d.getRoot(c):h.getParentNode()}e.hideNode(c,h,b)}for(var k in f)a=d.nodeChildren(c,f[k]),e.setFirstNodeForHide(c,a),e.setLastNodeForHide(c,a)}},setFirstNode:function(c,a){var b=d.nodeChildren(c,a),f=
d.isHidden(c,b[0],!1);b.length>0&&!f?b[0].isFirstNode=!0:b.length>0&&e.setFirstNodeForHide(c,b)},setLastNode:function(c,a){var b=d.nodeChildren(c,a),f=d.isHidden(c,b[0]);b.length>0&&!f?b[b.length-1].isLastNode=!0:b.length>0&&e.setLastNodeForHide(c,b)},setFirstNodeForHide:function(c,a){var b,f,g;for(f=0,g=a.length;f<g;f++){b=a[f];if(b.isFirstNode)break;if(!d.isHidden(c,b)&&!b.isFirstNode){b.isFirstNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setFirstNodeForShow:function(c,a){var b,f,
g,i,h;for(f=0,g=a.length;f<g;f++){b=a[f];var j=d.isHidden(c,b);if(!i&&!j&&b.isFirstNode){i=b;break}else if(!i&&!j&&!b.isFirstNode)b.isFirstNode=!0,i=b,e.setNodeLineIcos(c,b);else if(i&&b.isFirstNode){b.isFirstNode=!1;h=b;e.setNodeLineIcos(c,b);break}}return{"new":i,old:h}},setLastNodeForHide:function(c,a){var b,f;for(f=a.length-1;f>=0;f--){b=a[f];if(b.isLastNode)break;if(!d.isHidden(c,b)&&!b.isLastNode){b.isLastNode=!0;e.setNodeLineIcos(c,b);break}else b=null}return b},setLastNodeForShow:function(c,
a){var b,f,g,i;for(f=a.length-1;f>=0;f--){b=a[f];var h=d.isHidden(c,b);if(!g&&!h&&b.isLastNode){g=b;break}else if(!g&&!h&&!b.isLastNode)b.isLastNode=!0,g=b,e.setNodeLineIcos(c,b);else if(g&&b.isLastNode){b.isLastNode=!1;i=b;e.setNodeLineIcos(c,b);break}}return{"new":g,old:i}}},data:{initHideForExCheck:function(c,a){if(d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck=="undefined")a._nocheck=!!a.nocheck,a.nocheck=!0;a.check_Child_State=-1;e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,
a)}},initShowForExCheck:function(c,a){if(!d.isHidden(c,a)&&c.check&&c.check.enable){if(typeof a._nocheck!="undefined")a.nocheck=a._nocheck,delete a._nocheck;if(e.setChkClass){var b=k(a,m.id.CHECK,c);e.setChkClass(c,b,a)}e.repairParentChkClassWithSelf&&e.repairParentChkClassWithSelf(c,a)}}}});var j=j.fn.zTree,l=j._z.tools,m=j.consts,e=j._z.view,d=j._z.data,k=l.$;d.isHidden=function(c,a,b){if(!a)return!1;c=c.data.key.isHidden;typeof b!=="undefined"?(typeof b==="string"&&(b=l.eqs(b,"true")),a[c]=!!b):
a[c]=typeof a[c]=="string"?l.eqs(a[c],"true"):!!a[c];return a[c]};d.exSetting({data:{key:{isHidden:"isHidden"}}});d.addInitNode(function(c,a,b){a=d.isHidden(c,b);d.isHidden(c,b,a);d.initHideForExCheck(c,b)});d.addBeforeA(function(){});d.addZTreeTools(function(c,a){a.showNodes=function(a,b){e.showNodes(c,a,b)};a.showNode=function(a,b){a&&e.showNodes(c,[a],b)};a.hideNodes=function(a,b){e.hideNodes(c,a,b)};a.hideNode=function(a,b){a&&e.hideNodes(c,[a],b)};var b=a.checkNode;if(b)a.checkNode=function(f,
e,i,h){(!f||!d.isHidden(c,f))&&b.apply(a,arguments)}});var n=d.initNode;d.initNode=function(c,a,b,f,g,i,h){var j=(f?f:d.getRoot(c))[c.data.key.children];d.tmpHideFirstNode=e.setFirstNodeForHide(c,j);d.tmpHideLastNode=e.setLastNodeForHide(c,j);h&&(e.setNodeLineIcos(c,d.tmpHideFirstNode),e.setNodeLineIcos(c,d.tmpHideLastNode));g=d.tmpHideFirstNode===b;i=d.tmpHideLastNode===b;n&&n.apply(d,arguments);h&&i&&e.clearOldLastNode(c,b,h)};var o=d.makeChkFlag;if(o)d.makeChkFlag=function(c,a){(!a||!d.isHidden(c,
a))&&o.apply(d,arguments)};var p=d.getTreeCheckedNodes;if(p)d.getTreeCheckedNodes=function(c,a,b,f){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return p.apply(d,arguments)};var q=d.getTreeChangeCheckedNodes;if(q)d.getTreeChangeCheckedNodes=function(c,a,b){if(a&&a.length>0){var e=a[0].getParentNode();if(e&&d.isHidden(c,e))return[]}return q.apply(d,arguments)};var r=e.expandCollapseSonNode;if(r)e.expandCollapseSonNode=function(c,a,b,f,g){(!a||!d.isHidden(c,a))&&r.apply(e,
arguments)};var s=e.setSonNodeCheckBox;if(s)e.setSonNodeCheckBox=function(c,a,b,f){(!a||!d.isHidden(c,a))&&s.apply(e,arguments)};var t=e.repairParentChkClassWithSelf;if(t)e.repairParentChkClassWithSelf=function(c,a){(!a||!d.isHidden(c,a))&&t.apply(e,arguments)}})(jQuery);
src/store/modules/permission.js
@@ -2,7 +2,7 @@
import router, { constantRoutes, dynamicRoutes } from '@/router'
import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView'
import ParentView from '@/components/RuoYi/ParentView'
import InnerLink from '@/layout/components/InnerLink'
const permission = {
src/store/modules/user.js
@@ -1,6 +1,6 @@
import { login, logout, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import log from "@/views/monitor/job/log";
import {encrypt} from '@/utils/jsencrypt'
const user = {
  state: {
@@ -33,7 +33,8 @@
    // 登录
    Login({ commit }, userInfo) {
      const username = userInfo.username.trim()
      const password = userInfo.password
      // const password = userInfo.password
      const password = encrypt(userInfo.password)
      const code = userInfo.code
      const uuid = userInfo.uuid
      const loginType = userInfo.loginType
src/utils/base.js
New file
@@ -0,0 +1,14 @@
// Base Url
export function getBaseUrl() {
  return globalConf.baseUrl
}
// Ftp Url
export function getFtpUrl() {
  return globalConf.ftpUrl
}
// Ftp 上传地址
export function getUploadUrl() {
  return getBaseUrl() + '/v1/base/upload/file/fileUpload'
}
src/utils/date.js
New file
@@ -0,0 +1,77 @@
export function formatDate(date, fmt) {
  try {
    if (!(date instanceof Date)) {
      date = new Date(date)
    }
    if (fmt == undefined || fmt == '') {
      fmt = 'yyyy-MM-dd hh:mm:ss'
    }
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    const o = {
      'M+': date.getMonth() + 1,
      'd+': date.getDate(),
      'h+': date.getHours(),
      'm+': date.getMinutes(),
      's+': date.getSeconds()
    }
    for (const k in o) {
      if (new RegExp(`(${k})`).test(fmt)) {
        const str = o[k] + ''
        fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : padLeftZero(str))
      }
    }
    return fmt
  } catch (e) {
    console.log(e)
    return '-'
  }
}
function padLeftZero(str) {
  return ('00' + str).substr(str.length)
}
/**
 * @Author wh
 * @Date 2022/2/25 - 14:35
 * @Description //日期比较
 **/
export function compare(date1, date2) {
  const dates1 = new Date(date1)
  const dates2 = new Date(date2)
  if (dates1 > dates2) {
    return true
  } else {
    return false
  }
}
/**
 * @Author wh
 * @Date 2022/5/13 - 15:43
 * @Description //时间格式转换
 * 传值时自动调用了toJSON()函数,手动转成你想要的字符串格式
 **/
export function FormatTime(t, date) {
  var date = new Date(date)
  var o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(t)) {
    t = t.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(t)) {
      t = t.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return t
}
src/utils/jsencrypt.js
@@ -2,8 +2,7 @@
// 密钥对生成 http://web.chacuo.net/netrsakeypair
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' +
  'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTREknOkrusbeH7kBe3mSw4AwVT438IWmX/jKmcvYxaAWRrBJiMl7gk37L78HBG/ZstLLcdKBYYdj/5cvVWDQfv+uxbv/piZhOmQej98jWIXEA8aFEk724nFRJ7nfcEhHSWfzbTfgZw0KDO1mWdjWHnHIx/MtD0HIFFIyzg3aO7wIDAQAB'
const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' +
  '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' +
@@ -21,7 +20,7 @@
  return encryptor.encrypt(txt) // 对数据进行加密
}
// 解密
// 解密(客户端不会实现解密,2023-04-07)
export function decrypt(txt) {
  const encryptor = new JSEncrypt()
  encryptor.setPrivateKey(privateKey) // 设置私钥
src/utils/tools.js
New file
@@ -0,0 +1,228 @@
/**
 * 对象深度拷贝
 * @param obj
 * @returns {Array}
 */
export function objClone(obj) {
  const result = Array.isArray(obj) ? [] : {}
  if (obj == undefined) {
    return result
  }
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (typeof obj[key] === 'object') {
        result[key] = objClone(obj[key]) // 递归复制
      } else {
        result[key] = obj[key]
      }
    }
  }
  return result
}
/* 检查空 */
export function isBlank(str) {
  return str === undefined || str === 'undefined' || str === null || str === '' || str === 'null' || str === '[]' || str === '{}' || str === null || str === JSON.stringify({}) || str === JSON.stringify([])
}
export function isNotBlank(str) {
  return !isBlank(str)
}
/**
 * 两数相加 arg1 + arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function add(arg1, arg2) {
  let t = 0
  arg1 = arg1 ? arg1.toString() : '0'
  arg2 = arg2 ? arg2.toString() : '0'
  if (arg1.includes('.')) {
    t = arg1.split('.')[1].length
  }
  if (arg2.includes('.')) {
    t = Math.max(arg2.split('.')[1].length, t)
  }
  const m = Math.pow(10, t)
  return (multiply(arg1, m) + multiply(arg2, m)) / m
}
/**
 * 两数相减 arg1 - arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function subtract(arg1, arg2) {
  let t = 0
  arg1 = arg1 ? arg1.toString() : '0'
  arg2 = arg2 ? arg2.toString() : '0'
  if (arg1.includes('.')) {
    t = arg1.split('.')[1].length
  }
  if (arg2.includes('.')) {
    t = Math.max(arg2.split('.')[1].length, t)
  }
  const m = Math.pow(10, t)
  return Number(((multiply(arg1, m) - multiply(arg2, m)) / m).toFixed(t))
}
/**
 * 两数相乘 arg1 * arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function multiply(arg1, arg2) {
  let t = 0
  arg1 = arg1 ? arg1.toString() : '0'
  arg2 = arg2 ? arg2.toString() : '0'
  if (arg1.includes('.')) {
    t += arg1.split('.')[1].length
  }
  if (arg2.includes('.')) {
    t += arg2.split('.')[1].length
  }
  const r1 = Number(arg1.replace('.', ''))
  const r2 = Number(arg2.replace('.', ''))
  return (r1 * r2) / Math.pow(10, t)
}
/**
 * 两数相除 arg1 / arg2
 * @param arg1
 * @param arg2
 * @returns {number}
 */
export function abs(arg1, arg2) {
  let t = 0
  arg1 = arg1 ? arg1.toString() : '0'
  arg2 = arg2 ? arg2.toString() : '0'
  if (arg2.includes('.')) {
    t = arg2.split('.')[1].length
  }
  if (arg1.includes('.')) {
    t -= arg1.split('.')[1].length
  }
  const r1 = Number(arg1.replace('.', ''))
  const r2 = Number(arg2.replace('.', ''))
  return multiply((r1 / r2), Math.pow(10, t))
}
/**
 * array转Str
 * @param array
 * @returns {*}
 */
export function array2Str(array) {
  if (array == null || array.length == 0) {
    return null
  }
  return array.length == 0 ? null : JSON.stringify(array)
}
/**
 * Str转Array
 * @param array
 * @returns {*}
 */
export function str2Array(str) {
  if (!str) {
    return []
  }
  if (typeof (str) == 'object') {
    return str
  }
  return JSON.parse(str)
}
/*
 * @Author : liu.q [916000612@qq.com]
 * @Date : 2019-08-16 10:52
 * @Description :uuid
 */
export function guid() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    const r = Math.random() * 16 | 0
    const v = c == 'x' ? r : (r & 0x3 | 0x8)
    return v.toString(16)
  })
}
/**
 * @author Lx
 * @description 详情显示附件展示
 * @return 返回一个对象,用isShow判断附件是否为空; 用data循环附件数据
 * */
export function showAppendix(appendix) {
  const appendixArray = JSON.parse(appendix)
  // 附件数据
  const appendixData = []
  // 判断附件是否为空,如果不为空组织数据
  let isShow = false
  if (appendix) {
    isShow = true
    appendixArray.forEach(item => {
      appendixData.push({
        path: globalConf.ftpUrl + item.path,
        name: item.name
      })
    })
  }
  return {
    isShow: isShow,
    data: appendixData
  }
}
export function showImage(appendix) {
  const appendixArray = JSON.parse(appendix)
  // 附件数据
  const appendixData = []
  // 判断附件是否为空,如果不为空组织数据
  let isShow = false
  if (appendix) {
    isShow = true
    appendixArray.forEach(item => {
      appendixData.push({
        path: item.path,
        name: item.name
      })
    })
  }
  return {
    isShow: isShow,
    data: appendixData
  }
}
export function uuid(len, radix) {
  var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  var uuid = []; var i
  radix = radix || chars.length
  if (len) {
    // Compact form
    for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
  } else {
    // rfc4122, version 4 form
    var r
    // rfc4122 requires these characters
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
    uuid[14] = '4'
    // Fill in random data.  At i==19 set the high bits of clock sequence as
    // per rfc4122, sec. 4.1.5
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | Math.random() * 16
        uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]
      }
    }
  }
  return uuid.join('')
}
src/views/components/buttonSelect/index.vue
New file
@@ -0,0 +1,42 @@
<template>
  <a-dropdown style="margin-left: 5px;" :trigger="['click','hover']">
    <a-button size="small">
      更多
      <a-icon type="down" />
    </a-button>
    <a-menu slot="overlay">
      <a-menu-item key="1">
        <span @click="testC(1)">1st item</span>
      </a-menu-item>
      <a-menu-item key="2">
        <span @click="testC(2)">1st item</span>
      </a-menu-item>
      <a-menu-item key="3">
        <span @click="testC(3)">1st item</span>
      </a-menu-item>
    </a-menu>
  </a-dropdown>
</template>
<script>
export default {
  methods: {
    testC(e) {
      console.log('click', e)
    }
  }
}
</script>
<style scoped>
  .a-button-cus{
    font-size: 12px;
  }
  .ant-btn-sm {
    padding: 0px 7px;
    font-size: 12px;
    border-radius: 3px;
    height: 20px;
  }
  .ant-btn > .anticon + span, .ant-btn > span + .anticon {
     margin-left: unset;
  }
</style>
src/views/components/chooseAddress.vue
New file
@@ -0,0 +1,206 @@
<template>
  <div>
    <el-row :gutter="20" style="margin-bottom: 10px">
      <el-col :span="18">
        <!--<el-form :inline="true" :model="myForm">-->
        <!--<el-form-item label="地址">-->
        <el-input id="place" v-model="myForm.address" type="textarea" :rows="1" placeholder="输入可以检索地址" />
        <span style="color: #F56C6C;">自动识别的地址存在误差。如有错误,请自行更正!</span>
      <!--</el-form-item>-->
      <!--<el-form-item>-->
      <!--</el-form-item>-->
        <!--</el-form>-->
      </el-col>
      <el-col :span="6">
        <el-button type="primary" @click="save">确定</el-button>
      </el-col>
    </el-row>
    <!--<el-form :inline="true" label-width="100px" :model="myForm" class="demo-form-inline">-->
    <!--&lt;!&ndash;<el-form-item label="检索地址">&ndash;&gt;-->
    <!--&lt;!&ndash;<el-input id="place" v-model="myForm.address" placeholder="检索地址" />&ndash;&gt;-->
    <!--&lt;!&ndash;</el-form-item>&ndash;&gt;-->
    <!--<el-form-item label="省">-->
    <!--<el-input v-model="myForm.prov" />-->
    <!--</el-form-item>-->
    <!--<el-form-item label="市">-->
    <!--<el-input v-model="myForm.city" />-->
    <!--</el-form-item>-->
    <!--<el-form-item label="区">-->
    <!--<el-input v-model="myForm.area" />-->
    <!--</el-form-item>-->
    <!--<el-form-item label="经度">-->
    <!--<el-input v-model="myForm.lat" />-->
    <!--</el-form-item>-->
    <!--<el-form-item label="维度">-->
    <!--<el-input v-model="myForm.lng" />-->
    <!--</el-form-item>-->
    <!--<el-form-item>-->
    <!--<el-button type="primary" @click="save">确定</el-button>-->
    <!--</el-form-item>-->
    <!--</el-form>-->
    <div id="container" style="width: 100%;height: 500px" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      myForm: {
        prov: '',
        city: '',
        area: '',
        address: '',
        lat: '',
        lng: ''
      }
    }
  },
  created() {
  },
  mounted() {
    this.init()
  },
  methods: {
    init() {
      // console.log(this.myForm)
      const that = this
      const center = new window.qq.maps.LatLng(39.916527, 116.397128) // 地图的中心地理坐标。
      const map = new window.qq.maps.Map(document.getElementById('container'), {
        center: center,
        zoom: 13
      })
      // 获取城市列表接口设置中心点
      const citylocation = new window.qq.maps.CityService({
        complete: function(result) {
          map.setCenter(result.detailWin.latLng)
        }
      })
      // 调用searchLocalCity();方法    根据用户IP查询城市信息。
      citylocation.searchLocalCity()
      const geocoder = new window.qq.maps.Geocoder()
      // 设置服务请求成功的回调函数
      geocoder.setComplete(function(result) {
        // console.log('逆地址解析', result)
        const addressComponents = result.detailWin.addressComponents
        that.myForm.prov = addressComponents.province
        that.myForm.city = addressComponents.city
        that.myForm.area = addressComponents.district
        const location = result.detailWin.location
        that.myForm.lat = location.lat
        that.myForm.lng = location.lng
        const nearPois = result.detailWin.nearPois
        that.myForm.address = nearPois[0].address + ' ' + nearPois[0].name
        var marker = new window.qq.maps.Marker({
          position: location,
          map: map
        })
        window.qq.maps.event.addListener(map, 'click', function(event) {
          marker.setMap(null)
        })
        map.setCenter(location)
        map.zoomTo(18)
        // console.log(JSON.stringify(that.myForm))
      })
      // 添加监听事件  获取鼠标点击事件
      window.qq.maps.event.addListener(map, 'click', function(event) {
        // var marker = new qq.maps.Marker({
        //   position: event.latLng,
        //   map: map
        // })
        // qq.maps.event.addListener(map, 'click', function(event) {
        //   marker.setMap(null)
        // })
        // // 添加到提示窗
        // const info = new qq.maps.InfoWindow({
        //   map: map
        // })
        // // 添加标记点击事件
        // qq.maps.event.addListener(marker, 'click', function() {
        //   info.open()
        //   info.setContent('<div style="text-align:center;white-space:nowrap;' +
        //     'margin:10px;">单击标记</div>')
        //   info.setPosition(event.latLng)
        // })
        geocoder.getAddress(event.latLng)
      })
      var ap = new window.qq.maps.place.Autocomplete(document.getElementById('place'), {
        zIndex: 999999
      })
      var keyword = ''
      // 调用Poi检索类。用于进行本地检索、周边检索等服务。
      var searchService = new qq.maps.SearchService({
        complete: function(results) {
          // console.log(results)
          if (results.type === 'CITY_LIST') {
            searchService.setLocation(results.detailWin.cities[0].cityName)
            searchService.search(keyword)
            return
          }
          var pois = results.detailWin.pois
          var latlngBounds = new qq.maps.LatLngBounds()
          geocoder.getAddress(pois[0].latLng)
          // for (var i = 0, l = pois.length; i < l; i++) {
          //   var poi = pois[i]
          //   if (i == 0) {
          //     geocoder.getAddress(poi.latLng)
          //
          //     // that.myForm.address = poi.address + ' ' + poi.name
          //   }
          //   latlngBounds.extend(poi.latLng)
          //   var marker = new qq.maps.Marker({
          //     map: map,
          //     position: poi.latLng
          //   })
          //
          //   // 添加到提示窗
          //   const info = new qq.maps.InfoWindow({
          //     map: map
          //   })
          //
          //   // 添加标记点击事件
          //   qq.maps.event.addListener(marker, 'click', function() {
          //     info.open()
          //     info.setContent('<div style="text-align:center;white-space:nowrap;' +
          //       'margin:10px;">单击标记</div>')
          //     info.setPosition(poi.latLng)
          //   })
          //
          //   marker.setTitle(poi.name)
          // }
          map.fitBounds(latlngBounds)
        }
      })
      // 添加监听事件
      window.qq.maps.event.addListener(ap, 'confirm', function(res) {
        keyword = res.value
        searchService.search(keyword)
      })
    },
    save() {
      if (this.myForm.lat == '' || this.myForm.lat == '') {
        this.$message.error('请先标记地图位置!')
        return false
      }
      this.$emit('save', this.myForm)
    }
  }
}
</script>
<style scoped>
body >div:last-child{
  z-index: 1000000000 !important;
}
</style>
src/views/components/dateSelector/index.vue
New file
@@ -0,0 +1,508 @@
<template>
  <el-date-picker
    v-model="timeArr"
    :type="mySetting.type"
    :picker-options="pickerOptions"
    :placeholder="mySetting.placeholder"
    :range-separator="mySetting.separator"
    :start-placeholder="mySetting.startPlaceholder"
    :end-placeholder="mySetting.endPlaceholder"
    :format="mySetting.format"
    :value-format="mySetting.valueFormat"
    :default-time="mySetting.defaultTime"
    :align="mySetting.align"
    :clearable="mySetting.clearable"
    :editable="mySetting.editable"
    :disabled="mySetting.disabled"
    :readonly="mySetting.readonly"
    :unlink-panels="mySetting.unLink"
    :style="defaultStyle"
    @change="change"
  />
</template>
<script>
/**
   daterange     日期范围选择 (默认)
   date          日期单选
   datetimerange 日期时间范围选择
   datetime      日期时间单选
   monthrange    月份范围选择
   */
export default {
  props: {
    setting: {
      type: Object,
      default: () => {
        return {}
      }
    },
    options: {
      type: Object,
      default: () => {
        return {}
      }
    },
    value: {
      // type: [Array, String],
      required: true
    },
    myStyle: {
      type: Object,
      default: () => {
        return {}
      }
    }
  },
  data() {
    return {
      timeArr: null,
      mySetting: {
        shortcut: true, // 使用快捷选项
        shortcuts: [], // 使用的预设的快捷选项 (当shortcut为 true 且未自定义快捷选项时有效) 数组值为shortcutObj定义的key
        clearable: true, // 可清空
        editable: true, // 可编辑
        disabled: false, // 禁用
        readonly: false, // 只读
        afterToday: false, // 只能选择之后的日期
        beforeToday: false, // 只能选择之前的日期
        unLink: true, // 取消多个日期面板的联动
        type: 'daterange', // 类型 可选项 year/month/date/dates/ week/datetime/datetimerange/daterange/monthrange
        format: 'yyyy-MM-dd', // 显示在输入框的格式化类型
        valueFormat: 'yyyy-MM-dd HH:mm:ss', // 绑定值的格式化类型
        align: 'right', // 对齐方式 可选项 left, center, right
        placeholder: '请选择日期',
        separator: '至', // 范围选择时的分隔符
        startPlaceholder: '开始日期', // 范围选择时开始占位文本
        endPlaceholder: '结束日期', // 范围选择时结束占位文本
        defaultTime: ['00:00:00', '23:59:59'] // 范围选择时选中日期所使用的当日内具体时刻
      },
      pickerOptions: { // 组件配置 详情参考官网
        shortcuts: null, // 设置快捷选项,需要传入 { text, onClick } type: Array
        disabledDate: null, // 设置禁用状态,参数为当前日期,要求返回 Boolean   type: Function
        firstDayOfWeek: 7, // 周起始日 1 到 7  type: number
        onPick: null // 选中日期后会执行的回调,只有当daterange或datetimerange才生效 type:Function({ maxDate, minDate })
      },
      defaultStyle: {} // 默认样式
    }
  },
  watch: {
    value(val) {
      this.init(val)
    }
  },
  created() {
    this.init(this.value)
  },
  mounted() {
    window.zxc = this
  },
  methods: {
    /**
       * 根据type 初始化默认配置信息
       * @author zxc
       * @Date 2019/7/9 11:19
       **/
    init(obj) {
      /** **********************************************初始化配置信息************************************************************/
      const type = this.setting.type || this.mySetting.type
      switch (type) {
        case 'datetimerange': // 日期时间范围
          this.mySetting.format = 'yyyy-MM-dd HH:mm:ss'
          if (obj.length > 0 && obj.every(item => item)) {
            this.timeArr = [].concat(obj)
          } else {
            this.timeArr = null
          }
          break
        case 'daterange': // 日期范围
          this.mySetting.format = 'yyyy-MM-dd'
          if (obj.length > 0 && obj.every(item => item)) {
            this.timeArr = [].concat(obj)
          } else {
            this.timeArr = null
          }
          break
        case 'monthrange': // 日期范围
          this.mySetting.format = 'yyyy-MM'
          if (obj.length > 0 && obj.every(item => item)) {
            this.timeArr = [].concat(obj)
          } else {
            this.timeArr = null
          }
          break
        case 'datetime':
          this.mySetting.format = 'yyyy-MM-dd HH:mm:ss'
          this.mySetting.defaultTime = null // 不置空会报错
          this.timeArr = this.value
          break
        case 'date':
          this.mySetting.format = 'yyyy-MM-dd'
          this.mySetting.defaultTime = null // 不置空会报错
          this.timeArr = this.value
          break
        default:
          break
      }
      Object.assign(this.mySetting, this.setting)
      Object.assign(this.defaultStyle, this.myStyle)
      Object.assign(this.pickerOptions, this.options)
      defaultTime = this.mySetting.defaultTime
      /** **********************************************初始禁用项************************************************************/
      if (this.pickerOptions.disabledDate == null) {
        if (this.mySetting.afterToday) { // 只能选择之后的日期
          this.pickerOptions.disabledDate = (date) => {
            let da = new Date()
            switch (type) {
              case 'date':
              case 'datetime':
              case 'datetimerange':
              case 'daterange':
                da = new Date(da.getFullYear(), da.getMonth(), da.getDate())
                break
              case 'monthrange':
                da = new Date(da.getFullYear(), da.getMonth())
                break
            }
            return da > date
          }
        } else if (this.mySetting.beforeToday) { // 只能选择之前的日期
          this.pickerOptions.disabledDate = (date) => {
            let da = new Date()
            switch (type) {
              case 'date':
              case 'datetime':
              case 'datetimerange':
              case 'daterange':
                da = new Date(da.getFullYear(), da.getMonth(), da.getDate(), 23, 59, 59)
                break
              case 'monthrange': // 月份设置 日时分秒为 0
                da = new Date(da.getFullYear(), da.getMonth() + 1, 0, 23, 59, 59)
                break
            }
            return da < date
          }
        }
      }
      /** **********************************************初始化快捷选项************************************************************/
      // 使用快捷选项 且 未定义选项时赋予默认值
      if (this.mySetting.shortcut && this.pickerOptions.shortcuts == null) {
        if (this.mySetting.shortcuts.length > 0) {
          this.pickerOptions.shortcuts = shortcut(this.mySetting.shortcuts)
        } else if (this.mySetting.afterToday) { // 之后日期快捷选项
          switch (this.mySetting.type) {
            case 'datetimerange':
            case 'daterange':
              this.pickerOptions.shortcuts = shortcut(['DA1W', 'DA1M', 'DA3M', 'DATYe'])
              break
            case 'monthrange':
              this.pickerOptions.shortcuts = shortcut(['MTT', 'MA6M', 'MA1Y', 'MATYe'])
              break
          }
        } else if (this.mySetting.beforeToday) { // 之前日期快捷选项
          switch (this.mySetting.type) {
            case 'datetimerange':
            case 'daterange':
              this.pickerOptions.shortcuts = shortcut(['DB1W', 'DB1M', 'DB3M', 'DBYbT'])
              break
            case 'monthrange':
              this.pickerOptions.shortcuts = shortcut(['MTT', 'MB6M', 'MB1Y', 'MBYbT'])
              break
          }
        } else { // 默认快捷选项
          switch (this.mySetting.type) {
            case 'datetimerange':
            case 'daterange':
              this.pickerOptions.shortcuts = shortcut(['DB1W', 'DB1M', 'DB3M', 'DBYbT'])
              break
            case 'monthrange':
              this.pickerOptions.shortcuts = shortcut(['MTT', 'MB6M', 'MB1Y', 'MBYbT'])
              break
          }
        }
      }
    },
    /**
       * 选中后的回调
       * @author zxc
       * @Date 2019/7/9 11:17
       **/
    change(val) {
      switch (this.mySetting.type) {
        case 'monthrange':
          if (val == null) {
            this.value.length = 0
          } else {
            // 月份结束日期设为当月最后一天 (默认为 1号)
            const d = new Date(val[1])
            d.setMonth(d.getMonth() + 1)
            d.setDate(d.getDate() - 1)
            val[1] = this.formatDate(d, this.mySetting.valueFormat)
            for (const i in val) {
              this.value[i] = val[i]
            }
          }
          break
        case 'datetimerange':
        case 'daterange':
          if (val == null) {
            this.value.length = 0
          } else {
            for (const i in val) {
              this.value[i] = val[i]
            }
          }
          break
        case 'datetime': // 须绑定change事件 | 调用 getContent 方法获取选中时间
          break
      }
      console.log(val)
      this.$emit('change', val)
    },
    /**
       * 日期格式化
       * @author zxc
       * @Date 2019/8/28 19:17
       **/
    formatDate(date, fmt) {
      try {
        if (!(date instanceof Date)) {
          date = new Date(date)
        }
        if (fmt == undefined || fmt == '') {
          fmt = 'yyyy-MM-dd HH:mm:ss'
        }
        if (/(y+)/.test(fmt)) {
          fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
        }
        const o = {
          'M+': date.getMonth() + 1,
          'd+': date.getDate(),
          'H+': date.getHours(),
          'm+': date.getMinutes(),
          's+': date.getSeconds()
        }
        for (const k in o) {
          if (new RegExp(`(${k})`).test(fmt)) {
            const str = o[k] + ''
            fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str))
          }
        }
        return fmt
      } catch (e) {
        console.log(e)
        return '-'
      }
    },
    padLeftZero(str) {
      return ('00' + str).substr(str.length)
    },
    /**
       * 获取选中日期
       * 返回值类型与type相关 通过 this.$refs['refVal'].getContent() 调用
       * @author zxc
       * @Date 2019/7/9 11:18
       **/
    getContent() {
      return this.timeArr
    }
  }
}
let defaultTime = null
/**
   * 设置快捷选项
   * @author zxc
   * @Date 2019/8/28 19:18
   **/
function shortcut(arr) {
  const returnArr = []
  for (const a of arr) {
    if (shortcutObj[a]) {
      returnArr.push(shortcutObj[a])
    }
  }
  return returnArr.length > 0 ? returnArr : null
}
/**
   * 设置默认时间
   * @author zxc
   * @Date 2019/8/28 19:17
   **/
function setTime(start, end) {
  if (Array.isArray(defaultTime)) {
    // beginTime
    const s = (defaultTime[0]).split(':')
    start.setHours(Number(s[0]))
    start.setMinutes(Number(s[1]))
    start.setSeconds(Number(s[2]))
    // endTime
    const e = (defaultTime[1]).split(':')
    end.setHours(Number(e[0]))
    end.setMinutes(Number(e[1]))
    end.setSeconds(Number(e[2]))
  }
}
/**
   * 快捷选项key命名规则:
   * 第一位: T/D/M/Y   T:时间范围选择    D:日期范围选择    M:月份范围选择    Y:年份范围选择 (暂无)
   * 第二位: A/B/T     A:该选项是之后的日期(未来)    B:该选项是之前的日期(最近)    T:该选项是当前的日期 (本)
   * 第三位之后:       m/H/D/W/M/Y/T    m:分  H:时  D:天  W:周  M:月  Y:年  (与数字组成具体时间段)  T:当前日期
   *                  Wb:周初   We:周末   Mb:月初   Me:月末   Yb:年初   Ye: 年末  (搭配 T 使用)
   * @author zxc
   * @Date 2019/8/25 10:13
   **/
const shortcutObj = {
  'DA1W': {
    text: '未来一周',
    onClick: (picker) => {
      const start = new Date()
      const end = new Date(start)
      end.setDate(start.getDate() + 6)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DA1M': {
    text: '未来一个月',
    onClick: (picker) => {
      const start = new Date()
      const end = new Date(start)
      end.setMonth(start.getMonth() + 1)
      end.setDate(start.getDate() - 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DA3M': {
    text: '未来三个月',
    onClick: (picker) => {
      const start = new Date()
      const end = new Date(start)
      end.setMonth(start.getMonth() + 3)
      end.setDate(start.getDate() - 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DATYe': {
    text: '今日至年末',
    onClick: (picker) => {
      const start = new Date()
      const end = new Date(start.getFullYear() + 1, 0, 0)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MTT': {
    text: '本月',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), temp.getMonth(), 1)
      const end = new Date(temp.getFullYear(), temp.getMonth(), 0)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MA6M': {
    text: '未来半年',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), temp.getMonth(), 1)
      const end = new Date(temp.getFullYear(), temp.getMonth() + 5, 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MA1Y': {
    text: '未来一年',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), temp.getMonth(), 1)
      const end = new Date(temp.getFullYear(), temp.getMonth() + 11, 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MATYe': {
    text: '本月至年末',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), temp.getMonth(), 1)
      const end = new Date(temp.getFullYear(), 11, 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DB1W': {
    text: '最近一周',
    onClick: (picker) => {
      const end = new Date()
      const start = new Date(end)
      start.setDate(end.getDate() - 6)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DB1M': {
    text: '最近一个月',
    onClick: (picker) => {
      const end = new Date()
      const start = new Date(end)
      start.setMonth(end.getMonth() - 1)
      start.setDate(end.getDate() + 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DB3M': {
    text: '最近三个月',
    onClick: (picker) => {
      const end = new Date()
      const start = new Date(end)
      start.setMonth(end.getMonth() - 3)
      start.setDate(end.getDate() + 1)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'DBYbT': {
    text: '今年至今',
    onClick: (picker) => {
      const end = new Date()
      const start = new Date(end.getFullYear(), 0)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MB6M': {
    text: '最近半年',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), temp.getMonth() - 5, 1)
      const end = new Date(temp.getFullYear(), temp.getMonth(), 0)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MB1Y': {
    text: '最近一年',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), temp.getMonth() - 11, 1)
      const end = new Date(temp.getFullYear(), temp.getMonth(), 0)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  },
  'MBYbT': {
    text: '今年至今',
    onClick: (picker) => {
      const temp = new Date()
      const start = new Date(temp.getFullYear(), 0, 1)
      const end = new Date(temp.getFullYear(), temp.getMonth(), 0)
      setTime(start, end)
      picker.$emit('pick', [start, end])
    }
  }
}
</script>
src/views/components/editableCell.vue
New file
@@ -0,0 +1,161 @@
<template>
  <div class="edit-cell" @click="onFieldClick">
    <el-tooltip
      v-if="!editMode && !showInput"
      :placement="toolTipPlacement"
      :open-delay="toolTipDelay"
      :content="toolTipContent"
    >
      <div
        tabindex="0"
        class="cell-content"
        :class="{'edit-enabled-cell': canEdit}"
      >
        <!-- @keyup.enter="onFieldClick"-->
        <slot name="content" />
      </div>
    </el-tooltip>
    <!--@focus="onFieldClick"-->
    <el-input
      v-if="editMode || showInput"
      ref="input"
      v-model="model"
      placeholder="请输入内容"
      :class="error"
      @keyup.enter.native="onInputEnter"
      v-on="listeners"
    />
  </div>
</template>
<script>
import { multiply, abs } from '@/utils/tools'
import { validInteger } from '@/utils/validate'
export default {
  name: 'EditableCell',
  inheritAttrs: false,
  props: {
    value: {
      type: String,
      default: ''
    },
    toolTipContent: {
      type: String,
      default: '点击编辑'
    },
    toolTipDelay: {
      type: Number,
      default: 500
    },
    toolTipPlacement: {
      type: String,
      default: 'top-start'
    },
    showInput: {
      type: Boolean,
      default: false
    },
    editableComponent: {
      type: String,
      default: 'el-input'
    },
    closeEvent: {
      type: String,
      default: 'blur'
    },
    canEdit: {
      type: Boolean,
      default: false
    },
    rowData: {
      type: Object,
      default: function() {
        return {}
      }
    },
    flag: {
      type: String
    }
  },
  data() {
    return {
      editMode: false,
      error: ''
    }
  },
  computed: {
    model: {
      get() {
        return this.value
      },
      set(val) {
        this.$emit('input', val)
      }
    },
    listeners() {
      return {
        [this.closeEvent]: this.onInputExit,
        ...this.$listeners
      }
    }
  },
  methods: {
    onFieldClick() {
      if (this.canEdit) {
        this.editMode = true
        this.$nextTick(() => {
          const inputRef = this.$refs.input
          if (inputRef && inputRef.focus) {
            inputRef.focus()
          }
        })
      }
    },
    onInputEnter() {
      // enter 触发blur
      this.$refs.input.blur()
    },
    // 在这里做自定义校验
    onInputExit() {
      this.error = ''
      console.log(this.rowData)
      if (this.flag == 'bargain') {
        const rate = this.rowData.minEarningRate
        const price = abs(this.rowData.negotiatedPrice * (1 + abs(rate, 100)), 100)
        console.log('控制价:', price)
        console.log('输入价:', this.model)
        if (this.model < price) {
          this.$refs.input.focus()
          this.$message.error('不能小于最低盈利率')
          this.error = 'error'
          return false
        }
      } else {
        const ratio = this.rowData.batchRatio
        if (!validInteger(ratio)) {
          this.$message.error('请输入整数')
          return false
        }
        if (ratio < 0 || ratio > 100) {
          this.$message.error('请输入0~100之间的数字')
          return false
        }
      }
      this.editMode = false
      return false
    }
  }
}
</script>
<style>
  .cell-content {
    min-height: 28px;
    padding-left: 5px;
    padding-top: 2px;
    border: 1px solid transparent;
  }
  .error input{
    border-color: red!important;
  }
</style>
src/views/components/generalRemark/index.vue
New file
@@ -0,0 +1,94 @@
<template>
  <win2 :title="setting.type == 1 ? '备注' : '沟通记录'" @close="close">
    <el-form ref="formData" :model="formData" :rules="rules" label-width="100px">
      <el-form-item :label="setting.type == 1 ? '备注' : '沟通记录' + ':'" prop="content">
        <el-input
          v-model="formData.content"
          type="textarea"
          :rows="3"
          maxlength="500"
          show-word-limit
        />
      </el-form-item>
      <el-form-item label="附件:">
        <upload ref="appendix" :settings="settings" :values="formData.appendix" />
      </el-form-item>
    </el-form>
    <div slot="footer" align="center" class="dialog-footer">
      <my-button-v2 name="取消" site="form" @click="close" />
      <my-button-v2 name="保存" site="form" @click="save" />
    </div>
  </win2>
</template>
<script>
import win2 from '@/views/components/win2'
import upload from '@/views/components/upload'
import myButtonV2 from '@/views/components/myButtonV2'
import { getUploadUrl } from '@/utils/base'
import { saveRemark } from '@/api/common.js'
export default {
  components: { win2, upload, myButtonV2 },
  props: {
    setting: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      settings: {
        uploadUrl: getUploadUrl(),
        num: 1,
        accept: '.jpg,.jpeg,.png,.bmp,.pdf,.doc,.docx,.xls,.xlsx,.zip,' // 限制格式
      },
      formData: {
        id: null,
        businessType: null,
        businessId: null,
        type: null,
        content: null,
        appendix: []
      },
      rules: {
        content: [
          { required: true, message: '必填项', trigger: 'blur' }
        ]
      }
    }
  },
  created() {
    Object.assign(this.formData, this.setting)
  },
  methods: {
    close() {
      this.$emit('close')
    },
    save() {
      this.$refs.formData.validate(valid => {
        if (valid) {
          const params = Object.assign({}, this.formData)
          const appendix = this.$refs.appendix.getContent()
          if (appendix.length > 0) {
            params.appendix = JSON.stringify(appendix)
          }
          if (!params.businessType || !params.businessId || !params.type) {
            this.$message.error('缺少业务ID,业务类型,备注类型!')
            return false
          }
          saveRemark(params).then(response => {
            if (response.code == 10000 && response.data > 0) {
              this.$message.success('保存成功!')
              this.close()
            } else {
              this.$message.error(response.description || '保存失败!')
            }
          })
        }
      })
    }
  }
}
</script>
src/views/components/generalRemark/query.vue
New file
@@ -0,0 +1,73 @@
<template>
  <div class="app-container">
    <el-timeline>
      <el-timeline-item v-for="(item ,idx) in activities" :key="idx">
        <h4>{{ item.content }}</h4>
        <p v-if="showAppendix(item.appendix)"><el-link target="_blank" :href="getAppendix(item.appendix).path" type="primary">{{ getAppendix(item.appendix).name }}</el-link></p>
        <p class="timeline-user"><span>{{ item.createUserName }}</span>&nbsp;&nbsp;&nbsp;&nbsp;<span>{{ getFormatDate(item.createTime) }}</span></p>
      </el-timeline-item>
    </el-timeline>
  </div>
</template>
<script>
import { getReamrkList } from '@/api/common.js'
import { formatDate } from '@/utils/date.js'
export default {
  props: {
    setting: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      activities: []
    }
  },
  watch: {
    setting: {
      handler(v, o) {
        if (v.businessId !== o.businessId) {
          this.init()
        }
      },
      deep: true
    }
  },
  created() {
    this.init()
  },
  methods: {
    init() {
      if (this.setting.businessType && this.setting.businessId && this.setting.type) {
        getReamrkList(this.setting).then(res => {
          this.activities = res.data
        })
      }
    },
    showAppendix(appendix) {
      if (appendix) {
        return true
      }
      return false
    },
    getAppendix(appendix) {
      const appendixArray = JSON.parse(appendix)
      return {
        path: globalConf.ftpUrl + appendixArray[0].path,
        name: appendixArray[0].name
      }
    },
    getFormatDate(time) {
      return formatDate(time, 'yyyy-MM-dd hh:mm:ss')
    }
  }
}
</script>
<style scoped>
</style>
src/views/components/help/index.vue
New file
@@ -0,0 +1,34 @@
<template>
  <el-tooltip class="item" effect="dark" placement="top-start">
    <div slot="content" v-html="contents" />
    <svg-icon icon-class="help" />
  </el-tooltip>
</template>
<script>
export default {
  props: {
    content: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      contents: this.content
    }
  },
  watch: {
    content(v) {
      this.contents = v
    }
  },
  created() {
    this.contents = this.content
  }
}
</script>
<style scoped>
</style>
src/views/components/myBlockTable.vue
New file
@@ -0,0 +1,315 @@
<template>
  <div>
    <!--工具条-->
    <div class="table-tool-bar">
      <!--自定义工具-->
      <my-button-v2
        v-for="(custom,idx) in myTable.tools.custom"
        :key="idx"
        :check-permission="custom.checkPermission"
        :name="custom.name"
        site="tools"
        @click="custom.click"
      />
    </div>
    <!--table列表-->
    <el-row :gutter="20" style="margin: 10px 0;">
      <el-col v-for="(item,index) in myTable.rows" :key="index" :span="4">
        <div>
          <!-- 弹出框 -->
          <el-popover placement="right" width="190" trigger="hover" transition="none">
            <ul>
              <li>
                姓名:&nbsp;&nbsp;&nbsp;
                <span>{{ item.name }}</span>
              </li>
              <li>
                职务:&nbsp;&nbsp;&nbsp;
                <span>{{ item.duties }}</span>
              </li>
              <li>
                职称:&nbsp;&nbsp;&nbsp;
                <span>{{ item.title }}</span>
              </li>
              <li>
                手机号:&nbsp;&nbsp;&nbsp;
                <span>{{ item.tel }}</span>
              </li>
            </ul>
            <!-- 测试图片 -->
            <img v-if="item.sex===2" slot="reference" :src="item.photo ? getImagePath(item.photo) : womanHeadSculpture" class="image" @click="clickInfo(item)">
            <img v-else slot="reference" :src="item.photo ? getImagePath(item.photo) : manHeadSculpture" class="image" @click="clickInfo(item)">
          </el-popover>
          <div style="padding: 10px 5px;">
            <span>{{ item.name }}({{ item.duties }})</span>
            <div class="bottom clearfix">
              <!-- 操作按钮部分 -->
              <div class="operation">
                <template v-for="(custom,idx) in myTable.operation.attr">
                  <my-button-v2
                    :key="idx"
                    :name="custom.title"
                    site="operation"
                    @click="custom.events(item)"
                  />
                </template>
                <template v-if="myTable.operation.more && myTable.operation.more.length>0">
                  <a-dropdown
                    :trigger="['hover','click']"
                    :overlay-style="{'z-index':'999999!important'}"
                  >
                    <a-button style="margin-left: 8px" size="small">
                      更多
                      <a-icon type="down" />
                    </a-button>
                    <a-menu slot="overlay">
                      <template v-for="(m,i) in myTable.operation.more">
                        <a-menu-item :key="i" @click="m.events(item)">
                          <my-button-v2 :name="m.title" :check-permission="m.checkPermission" />
                        </a-menu-item>
                      </template>
                    </a-menu>
                  </a-dropdown>
                </template>
              </div>
            </div>
          </div>
        </div>
      </el-col>
    </el-row>
    <el-pagination
      :current-page="myTable.paging.page.pageNumber"
      :page-size="myTable.paging.page.pageSize"
      :page-sizes="[24, 24*2 ,24*5,24*10]"
      :small="myTable.paging.page.small"
      :total="myTable.paging.page.total"
      layout="total, sizes, prev, pager, next, jumper"
      @current-change="handleCurrentChange"
      @size-change="handleSizeChange"
    />
  </div>
</template>
<script>
import request from '@/utils/request'
import myButtonV2 from '@/views/components/myButtonV2'
import { str2Array } from '@/utils/tools'
import femaleImg from '@/assets/images/staff-female.jpg'
import maleImg from '@/assets/images/staff-male.jpg'
export default {
  components: { myButtonV2 },
  props: {
    table: {
      type: Object,
      default() {
        return null
      }
    },
    filter: {
      type: Object,
      default() {
        return null
      }
    }
  },
  data() {
    return {
      /** table列表数据*/
      myTable: {
        url: '',
        // 工具条
        tools: {
          custom: []
        },
        rows: [],
        operation: {
          attr: [], // 操作
          more: [] // 更多
        },
        paging: {
          show: true, // 显示分页
          // 分页信息
          page: {
            small: false,
            pageNumber: 1,
            pageSize: 24,
            total: 0
          }
        }
      },
      // 用户为男性的头像
      manHeadSculpture: maleImg,
      // 用户为女性的头像
      womanHeadSculpture: femaleImg
    }
  },
  created() {
    if (this.table != null) {
      Object.assign(this.myTable, this.table)
      if (this.myTable.paging.page == undefined) {
        this.$set(this.myTable.paging, 'page', {
          small: false,
          pageNumber: 1,
          pageSize: 10,
          total: 0
        })
      }
      this.$nextTick(() => {
        this.search({})
      })
    }
  },
  methods: {
    search(param) {
      this.$nextTick(() => {
        this.myTable.loading = true
        const params = Object.assign({}, this.filter)
        params.pageSize = this.myTable.paging.page.pageSize
        if (param && param.pageNumber) {
          this.myTable.paging.page.pageNumber = param.pageNumber
        }
        params.pageNumber = this.myTable.paging.page.pageNumber
        request({
          url: this.myTable.url,
          method: 'get',
          params: params
        }).then(res => {
          this.$set(this.myTable, 'rows', res.data.rows)
          this.$set(
            this.myTable.paging,
            'page',
            Object.assign(this.myTable.paging.page, {
              pageSize: res.data.pageSize,
              pageNumber: res.data.pageNumber,
              total: res.data.total
            })
          )
          this.myTable.loading = false
        })
      })
    },
    /*
     * @Author : liu.q [916000612@qq.com]
     * @Date : 2019-07-17 14:22
     * @Description :切换pageSize
     */
    handleSizeChange(pageSize) {
      this.myTable.paging.page.pageSize = pageSize
      this.search({ pageNumber: 1 })
    },
    /*
     * @Author : liu.q [916000612@qq.com]
     * @Date : 2019-07-17 14:22
     * @Description :切换pageNumber
     */
    handleCurrentChange(pageNumber) {
      this.myTable.paging.page.pageNumber = pageNumber
      this.search()
    },
    getImagePath(str) {
      const strArray = str2Array(str)
      return globalConf.ftpUrl + strArray[0].path
    },
    clickInfo(params) {
      this.$emit('clickInfo', params)
    }
  }
}
</script>
<style scoped>
/*详情表单*/
.demo-table-expand .el-form-item {
  width: 100%;
}
.el-col-4 {
  margin: 10px 0;
}
.el-col-4 > div {
  border: 1px solid rgb(242, 242, 242);
}
.table-tool-bar {
  text-align: left;
}
/* 列表块 */
.grid-content bg-purple {
  text-align: center;
}
.el-card__body img {
  width: 80%;
  margin-top: 10px;
}
.el-card__body > div {
  text-align: center;
  font-size: 16px;
}
/* 操作按钮区域 */
.operation .el-button--mini:nth-of-type(1) {
  margin-left: 10px;
}
.operation .el-button--mini {
  padding: 2px 5px;
  margin-left: 5px;
}
.ant-dropdown-trigger{
  margin-left: 2px!important;
}
.ant-dropdown-menu-item .el-button--mini{
  padding: 2px 7px!important;
}
/* 弹出层样式 */
.el-popover ul {
  list-style: none;
  margin: 0;
  padding-left: 10px;
}
.el-popover ul li {
  color: rgb(51, 51, 51);
  font-size: 13px;
  margin-bottom: 20px;
}
.el-popover ul li:last-of-type {
  margin-bottom: 0;
}
/*列表内文字过长加省略*/
.content-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/*分页上边距*/
.el-pagination {
  white-space: nowrap;
  padding: 2px 5px;
  color: #303133;
  font-weight: 700;
  margin-top: 10px;
}
.el-radio {
  margin-right: 10px;
}
.el-radio__label {
  font-size: 14px;
  padding-left: 2px !important;
}
.a-button-cus {
  font-size: 12px;
}
.ant-btn-sm {
  padding: 0px 7px;
  font-size: 12px;
  border-radius: 3px;
  height: 20px;
}
.ant-btn > .anticon + span,
.ant-btn > span + .anticon {
  margin-left: unset;
}
.ant-dropdown {
  z-index: 9999 !important;
}
</style>
src/views/components/myButton.vue
New file
@@ -0,0 +1,172 @@
<template>
  <el-button v-if="show" :loading="loading" :icon="myIcon" :round="myRound" :plain="myPlain" :size="mySize" :type="myType" @click="click">
    {{ myName }}
  </el-button>
</template>
<script>
export default {
  name: 'MyButton',
  props: {
    checkPermission: {
      type: String,
      default: ''
    },
    type: {
      type: String,
      default: ''
    },
    name: {
      type: String,
      default: '按钮'
    },
    icon: {
      type: String,
      default: ''
    },
    size: {
      type: String,
      default: ''
    },
    plain: {
      type: Boolean,
      default: true
    },
    clazz: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      loading: false,
      myType: this.type, // 按钮类型
      myName: this.name, // 按钮名称
      myIcon: this.icon, // 按钮图标
      mySize: this.size, // 按钮大小
      myRound: false, // 是否圆角按钮
      myPlain: this.plain, // 是否朴素按钮
      show: true, // 是否显示
      myClazz: this.clazz
    }
  },
  created() {
    if (this.checkPermission != '' && this.$store.getters.myButtonPermission && this.$store.getters.myButtonPermission.indexOf(this.checkPermission) < 0) {
      this.show = false
    }
    const name = this.myName
    if (this.myClazz == 'tools') {
      if (name == '添加') {
        this.setDefault({
          myIcon: 'el-icon-circle-plus-outline',
          mySize: 'small'
        })
      } else if (name.includes('导入')) {
        this.setDefault({
          myIcon: 'el-icon-upload2',
          mySize: 'small'
        })
      } else if (name.includes('导出')) {
        this.setDefault({
          myIcon: 'el-icon-download',
          mySize: 'small'
        })
      }
      return
    }
    if (name == '搜索') {
      this.setDefault({
        myType: 'primary',
        myIcon: 'el-icon-search',
        mySize: 'small'
      })
    } else if (name == '重置') {
      this.setDefault({
        myType: 'success',
        myIcon: 'el-icon-refresh',
        mySize: 'small'
      })
    } else if (name == '保存' || name == '保 存') {
      this.setDefault({
        myType: 'primary',
        mySize: 'small'
      })
    } else if (name == '添加') {
      this.setDefault({
        myType: 'primary',
        myIcon: 'el-icon-edit',
        mySize: 'small'
      })
    } else if (name == '发布') {
      this.setDefault({
        myType: 'primary',
        myIcon: 'el-icon-plus',
        mySize: 'small'
      })
    } else if (name == '确定' || name == '确 定') {
      this.setDefault({
        myType: 'primary',
        mySize: 'small'
      })
    } else if (name.includes('导入')) {
      this.setDefault({
        myType: 'primary',
        myIcon: 'el-icon-upload2',
        mySize: 'small'
      })
    } else if (name.includes('导出')) {
      this.setDefault({
        myType: 'primary',
        myIcon: 'el-icon-download',
        mySize: 'small'
      })
    } else if (name == '批量删除') {
      this.setDefault({
        myType: 'danger',
        myIcon: 'el-icon-delete',
        mySize: 'small'
      })
    } else if (name == '编辑') {
      this.setDefault({
        myType: 'primary',
        mySize: 'mini',
        myPlain: true
      })
    } else if (name == '删除') {
      this.setDefault({
        myType: 'danger',
        mySize: 'mini',
        myPlain: true
      })
    } else if (name == '上架商品') {
      this.setDefault({
        myType: 'primary',
        myIcon: 'el-icon-edit',
        mySize: 'small'
      })
    } else {
      this.setDefault({
        myType: 'primary',
        mySize: 'small',
        myPlain: false
      })
    }
  },
  methods: {
    click() {
      this.loading = true
      this.$emit('click')
      setTimeout(() => {
        this.loading = false
      }, 1000)// 一秒内不能重复点击
    },
    setDefault(param) {
      Object.keys(param).forEach(key => {
        if (this[key] == '') {
          this[key] = param[key]
        }
      })
    }
  }
}
</script>
src/views/components/myButtonV2.vue
New file
@@ -0,0 +1,428 @@
<template>
  <el-link
    v-if="site==='operation'&&show"
    style="padding: 0 10px"
    :icon="myIcon"
    :loading="loading"
    :plain="myPlain"
    :size="mySize"
    :type="myType"
    @click="click"
  >{{ myName }}
  </el-link>
  <el-button
    v-else-if="show"
    :icon="myIcon"
    :loading="loading"
    :plain="myPlain"
    :size="mySize"
    :type="myType"
    @click="click"
  >{{ myName }}
  </el-button>
</template>
<script>
export default {
  name: 'MyButtonV2',
  props: {
    checkPermission: { // 按钮权限
      type: String,
      default: ''
    },
    site: { // filter 搜索条,tools 工具条,operation 操作栏,form 表单
      type: String,
      default: ''
    },
    type: {// 按钮类型
      type: String,
      default: ''
    },
    name: {// 按钮名称
      type: String,
      default: ''
    },
    icons: {// 图标
      type: String,
      default: null
    }
  },
  data() {
    return {
      filter: {// 搜索条上的按钮名称集合
        size: 'small',
        plain: false,
        other: {
          '搜索': {
            type: 'primary',
            icon: 'el-icon-search'
          },
          '重置': {
            type: '',
            icon: 'el-icon-refresh'
          },
          '完结': {
            type: 'warning',
            icon: 'el-icon-warning-outline'
          },
          '进入系统': {
            type: '',
            icon: 'el-icon-login'
          }
        }
      },
      tools: {// 工具条上的按钮集合
        size: 'mini',
        plain: false,
        type: 'default',
        other: {
          '添加': {
            icon: 'el-icon-edit-outline'
          },
          '批量删除': {
            icon: 'el-icon-delete'
          },
          '批量启用': {
            icon: 'el-icon-refresh'
          },
          '导入': {
            icon: 'el-icon-upload2'
          },
          '导入模板下载': {
            icon: 'el-icon-download'
          },
          '批量导入': {
            icon: 'el-icon-upload2'
          },
          '导出': {
            icon: 'el-icon-download'
          },
          '批量下架': {
            icon: 'el-icon-edit-outline'
          },
          '批量延期': {
            icon: 'el-icon-date'
          },
          '查重': {
            icon: 'el-icon-s-help'
          },
          '打印': {
            icon: 'el-icon-printer'
          },
          '导出EXCEL': {
            icon: 'el-icon-download'
          },
          '导出EXCEL(不分页)': {
            icon: 'el-icon-download'
          },
          '导出EXCEL(分页)': {
            icon: 'el-icon-download'
          },
          '导出WORD': {
            icon: 'el-icon-download'
          },
          '导出PDF': {
            icon: 'el-icon-download'
          }
        }
      },
      operation: {// 操作栏上的按钮集合
        size: 'mini',
        plain: true,
        other: {
          '编辑': {
            type: 'success'
          },
          '处理': {
            type: 'primary'
          },
          '审批': {
            type: 'success'
          },
          '事务反馈': {
            type: 'primary'
          },
          '发布': {
            type: 'primary'
          },
          '删除': {
            type: 'primary'
          },
          '权限': {
            type: 'warning'
          },
          '角色': {
            type: 'info'
          },
          '重置密码': {
            type: 'warning'
          },
          '组织架构': {
            type: 'danger'
          },
          '人员': {
            type: 'success'
          },
          '上架': {
            type: 'success'
          },
          '下架': {
            type: 'danger'
          },
          '延期': {
            type: 'warning'
          },
          '备件需求': {
            type: 'warning'
          },
          '维修/改造': {
            type: 'success'
          },
          '备注': {
            type: 'warning'
          },
          '沟通记录': {
            type: 'success'
          },
          '查看备注': {
            type: 'info'
          },
          '查看沟通记录': {
            type: 'success'
          },
          '启用': {
            type: 'success'
          },
          '禁用': {
            type: 'warning'
          },
          '启用黑名单': {
            type: 'success'
          },
          '加入黑名单': {
            type: 'danger'
          },
          '授权用户': {
            type: 'danger'
          },
          '查看': {
            type: 'success'
          },
          '查看详情': {
            type: 'info'
          },
          '记录': {
            type: 'primary'
          },
          '设置利润率': {
            type: 'success'
          },
          '审核': {
            type: 'success'
          },
          '采购': {
            type: 'success'
          },
          '质检确认': {
            type: 'success'
          },
          '关联客户经理': {
            type: 'primary'
          },
          '处理确认': {
            type: 'primary'
          },
          '详情': {
            type: 'success'
          },
          '委外加工': {
            type: 'primary'
          },
          '制造进度': {
            type: 'warning'
          },
          '入库确认': {
            type: 'warning'
          },
          '定价': {
            type: 'danger'
          },
          '虚拟入库': {
            type: 'primary'
          },
          '受理审核': {
            type: 'primary'
          },
          '查看记录': {
            type: 'info'
          },
          '关联该商品': {
            type: 'info'
          },
          '议价处理': {
            type: 'warning'
          },
          '分期审批': {
            type: 'success'
          },
          '签合同': {
            type: 'success'
          },
          '设计': {
            type: 'primary'
          },
          '测量': {
            type: 'success'
          },
          '开票': {
            type: 'success'
          },
          '受理确认': {
            type: 'success'
          },
          '售后处理': {
            type: 'success'
          },
          '确认支付': {
            type: 'warning'
          },
          '上传发票': {
            type: 'primary'
          },
          '确认收款': {
            type: 'warning'
          },
          '收款详细': {
            type: 'success'
          },
          '预览': {
            type: 'warning'
          }
        }
      },
      form: { // 表单上的按钮
        size: 'small',
        plain: false,
        other: {
          '提交': {
            type: 'primary'
          },
          '发布': {
            type: 'primary'
          },
          '关闭': {
            type: 'default'
          },
          '保存': {
            type: 'primary'
          },
          '取消': {
            type: 'default'
          },
          '重置': {
            type: 'default'
          },
          '暂存': {
            type: 'warning'
          },
          '查询': {
            type: 'primary'
          },
          '关联该用户': {
            type: 'success'
          },
          '确认': {
            type: 'primary'
          },
          '确定': {
            type: 'primary'
          },
          '报价': {
            type: 'success'
          },
          '下一步': {
            type: 'primary'
          },
          '上一步': {
            type: 'default'
          },
          '选择': {
            type: 'primary'
          },
          '驳回': {
            type: 'primary'
          },
          '通过': {
            type: 'success'
          }
        }
      },
      text: { // 表单上的按钮
        size: 'mini',
        type: 'text',
        icon: '',
        other: {
          '添加': {
            icon: 'el-icon-circle-plus-outline'
          }
        }
      },
      loading: false,
      myType: this.type, // 按钮类型
      myName: this.name, // 按钮名称
      myIcon: this.icon, // 按钮图标
      mySize: this.size, // 按钮大小
      myPlain: this.plain, // 是否朴素按钮
      show: true // 是否显示
    }
  },
  created() {
    if (this.checkPermission != '' && this.$store.getters.myButtonPermission.indexOf(this.checkPermission) < 0) {
      this.show = false
      return
    }
    this.myName = this.name
    if (this.site == 'filter') {
      this.mySize = this.filter.size
      this.myPlain = this.filter.plain
      this.myType = (this && this.type) || this.filter.other[this.myName].type
      this.myIcon = this.filter.other[this.myName].icon
    } else if (this.site == 'tools') {
      this.mySize = this.tools.size
      this.myPlain = this.tools.plain
      this.myType = (this && this.type) || this.tools.type
      if (this.icons != null) {
        this.myIcon = this.icons
      } else {
        this.myIcon = this.tools.other[this.myName].icon
      }
    } else if (this.site == 'operation') {
      this.mySize = this.operation.size
      this.myPlain = this.operation.plain
      this.myType = this.type || (this.operation.other[this.myName] ? this.operation.other[this.myName].type : '')
    } else if (this.site == 'form') {
      this.mySize = this.form.size
      this.myPlain = this.form.plain
      this.myType = (this && this.type) || this.form.other[this.myName].type
    } else if (this.site == 'text') {
      this.mySize = this.text.size
      this.myType = (this && this.type) || this.text.type
      this.myIcon = this.text.other[this.myName].icon
    } else {
      this.mySize = 'mini'
      this.myPlain = false
      this.myType = 'text'
    }
  },
  methods: {
    click() {
      if (this.site == 'form') {
        this.loading = true
      }
      this.$emit('click')
      setTimeout(() => {
        this.loading = false
      }, 1500)// 1.5秒内不能重复点击
    }
  }
}
</script>
src/views/components/myImport.vue
New file
@@ -0,0 +1,147 @@
<template>
  <el-dialog
    v-if="dialogShow"
    width="40%"
    :center="true"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    :title="dialogTitle"
    :before-close="beforeClose"
    :visible="dialogShow"
  >
    <el-row v-loading="loading" element-loading-text="数据导入中">
      <el-col :span="24">
        <el-form>
          <el-form-item v-if="templateSettings.templateUrl != null" label="下载模板:" prop="lon">
            <a class="blue-txt" style="color:#409EFF" :href="templateSettings.templateUrl" target="_blank">{{ templateSettings.templateName }}</a>
          </el-form-item>
          <el-form-item label="选取文件:" prop="lon">
            <el-upload
              :ref="fileSettings.ref"
              class="upload-demo"
              name="file"
              :action="fileSettings.uploadUrl"
              :before-upload="beforeAvatarUpload"
              :on-success="handleUploadSuccess"
              :on-change="file"
              :multiple="fileSettings.multiple"
              :limit="fileSettings.num"
              :accept="fileSettings.accept"
              :auto-upload="fileSettings.autoUpload"
            >
              <el-button size="small" type="primary">{{ fileSettings.title }}</el-button>
              <div slot="tip" class="el-upload__tip">只能上传{{ fileSettings.num }}个格式为{{ fileSettings.accept }}的文件,且不超过{{ fileSettings.max }}kb</div>
            </el-upload>
          </el-form-item>
          <el-form-item label="导入数据:" prop="lon">
            <el-button style="margin-left: 10px;" size="small" type="success" @click="handleSubmit">开始导入</el-button>
          </el-form-item>
        </el-form>
      </el-col>
    </el-row>
  </el-dialog>
</template>
<script>
export default {
  props: {
    importSetting: {
      type: Object,
      default: () => {
        return {}
      }
    },
    dialogShow: {
      type: Boolean,
      default: false
    },
    dialogTitle: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      loading: false,
      /* 文件上传 */
      fileSettings: {
        ref: 'myFile',
        title: '点击上传',
        max: 1024, // 最大大小,单位kb
        num: 1, // 支持上传文件个数
        accept: '.csv', // 限制格式
        uploadUrl: '', // 上传路径
        type: 'text', // text/picture
        multiple: false, // 是否支持批量上传
        disabled: false, // 是否禁用
        autoUpload: false, // 是否在选取文件后立即进行上传
        onSuccess: null // 上传成功回调
      },
      isUpload:false,
      /* 模板下载*/
      templateSettings: {
        templateName: '模板下载', // 名称
        templateUrl: null // 下载地址
      }
    }
  },
  watch: {
    dialogShow(val) {
      console.log('dialogShow')
      if (val) {
        this.fileSettings = Object.assign(this.fileSettings, this.importSetting.fileSettings)
        this.templateSettings = Object.assign(this.templateSettings, this.importSetting.templateSettings)
        console.log(this.templateSettings)
        this.fileSettings.onSuccess = this.importSetting.onSuccess
      }
    }
  },
  methods: {
    /* 关闭窗口 */
    beforeClose() {
      if (this.loading) {
        this.$confirm('正在执行导入,确认关闭?').then(() => {
          this.importSetting.dialogShow = false
          this.loading=false
        }).catch()
      } else {
        this.importSetting.dialogShow = false
      }
    },
    /* 校验文件 */
    beforeAvatarUpload(file) {
      const isFormat = this.fileSettings.accept.split(',').indexOf(file.name.substr(file.name.lastIndexOf('.'), file.name.length).toLocaleString()) > -1
      if (!isFormat) {
        this.$message.error(`上传文件只能是 ${this.fileSettings.accept} 格式!`)
      }
      const isLtMaxKB = file.size / 1024 < this.fileSettings.max
      if (!isLtMaxKB) {
        this.$message.error('上传文件大小不能超过 ' + this.fileSettings.max + 'kb!')
      }
      return isFormat && isLtMaxKB
    },
    /* 开始导入 */
    handleSubmit() {
      if(!this.isUpload){
        this.$message.error(`请上传文件`)
      }else {
        this.$refs[this.fileSettings.ref].submit()
      }
    },
    file(file,list){
    if(file){
      this.isUpload=true
    }
    },
    /* 上传成功执行导入 */
    handleUploadSuccess(response, file, fileList) {
      if (this.fileSettings.onSuccess) {
        this.loading = true
        this.fileSettings.onSuccess(response, () => { this.loading = false; this.importSetting.dialogShow = false })
      }
    }
  }
}
</script>
src/views/components/myPaging.vue
New file
@@ -0,0 +1,64 @@
<!--
调用须知:
@search 为搜索方法:参数{pageSize:10,pageNumber:1}
:page 分页属性
      {
        small: false, // 是否使用小型分页
        total: 0, // 总条数
        pageNumber: 1, // 第几页
        pageSize: 10 // 每页多少条
      }
-->
<template>
  <div>
    <el-pagination
      :small="pages.small"
      :current-page="pages.pageNumber"
      :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
      :page-size="pages.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pages.total"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>
<script>
export default {
  props: {
    page: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      pages: {
        small: false, // 是否使用小型分页
        total: 0, // 总条数
        pageNumber: 1, // 第几页
        pageSize: 10 // 每页多少条
      }
    }
  },
  created() {
    // Object.assign(this.pages, this.page)
    this.pages = this.page
  },
  methods: {
    // 切换pageSize
    handleSizeChange(pageSize) {
      this.pages.pageSize = pageSize
      this.pages.pageNumber = 1
      this.$emit('search', { pageSize: this.pages.pageSize, pageNumber: this.pages.pageNumber })
    },
    // 切换pageNumber
    handleCurrentChange(pageNumber) {
      this.pages.pageNumber = pageNumber
      this.$emit('search', { pageSize: this.pages.pageSize, pageNumber: this.pages.pageNumber })
    }
  }
}
</script>
src/views/components/mySwitch.vue
New file
@@ -0,0 +1,55 @@
<template>
  <div>
    <span @click.stop="click">
      <!-- disabled: 主动禁用 permission: 权限  switchable: 操作后一定时间内禁用 -->
      <el-switch
        :disabled="disabled || permission() || switchable"
        :value="value"
        active-color="#bd1a2d"
        inactive-color="#f2f2f2"
      />
    </span>
  </div>
</template>
<script>
export default {
  props: {
    checkPermission: {
      type: String,
      default: ''
    },
    value: {
      type: Boolean,
      default: false
    },
    disabled: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      switchable: false
    }
  },
  methods: {
    click() {
      if (!(this.disabled || this.permission() || this.switchable)) {
        this.switchable = true
        this.$emit('click')
        setTimeout(() => {
          this.switchable = false
        }, 1000)// 一秒内不能重复点击
      }
    },
    // 检查按钮权限
    permission() {
      if (this.checkPermission && this.$store.getters.myButtonPermission.indexOf(this.checkPermission) < 0) {
        return true
      }
      return false
    }
  }
}
</script>
src/views/components/myTable.vue
New file
@@ -0,0 +1,434 @@
<template>
  <el-card shadow="never">
    <el-table
      :key="timeStamp"
      :ref="myTable.ref"
      v-loading="myLoading"
      :data="myTable.rows"
      :max-height="myTable.maxHeight"
      :height="myTable.height"
      :size="myTable.size"
      :cell-class-name="className"
      selection-change="handleSelectionChange"
      @select="handleSelect"
      @select-all="handleSelectAll"
      @cell-click="cellClick"
    >
      <el-table-column v-if="myTable.expand" type="expand">
        <template slot-scope="{row}">
          <el-form size="mini" label-position="left" :inline="false" class="demo-table-expand">
            <template>
              <el-form-item
                v-for="(more,index) in columnHidden"
                :key="index"
                size="mini"
                :label="more.title+':'"
              >
                <template v-if="more.tag">
                  <el-tag size="mini" :type="more.tag(row).type">
                    {{ more.tag(row).value }} {{ more }}
                  </el-tag>
                </template>
                <template v-else>
                  <span v-if="more.formatter">{{ more.formatter(row) }}</span>
                  <span v-else-if="more.formatterRate">{{ more.formatterRate(row) }}</span>
                  <span v-else-if="more.formatterHigh">{{ more.formatterHigh(row).value }}</span>
                  <span v-else-if="more.switch">{{ more.switch(row).label }}</span>
                  <span v-else>{{ row[more.field] }}</span>
                </template>
              </el-form-item>
            </template>
          </el-form>
        </template>
      </el-table-column>
      <el-table-column
        v-if="myTable.showCheckBox"
        type="selection"
        width="55"
      />
      <!--序号 有分页时-->
      <el-table-column
        v-if="myTable.showIndex && myTable.page.pageSize!=undefined"
        label="序号"
        align="center"
        width="50"
      >
        <template slot-scope="scope">
          <span>
            {{ scope.$index+(myTable.page.pageNumber - 1) * myTable.page.pageSize + 1 }}
          </span>
        </template>
      </el-table-column>
      <!--序号 无分页时-->
      <el-table-column
        v-if="myTable.showIndex && myTable.page.pageSize==undefined"
        type="index"
        label="序号"
        align="center"
        width="60"
      />
      <!--show-overflow-tooltip-->
      <template v-for="(column, index) in columnNotHidden">
        <el-table-column
          v-if="!(column.hidden||false)"
          :key="index"
          :sortable="column.sortable"
          :label="column.title"
          :type="column.type"
          :width="column.width"
          :min-width="column.minWidth"
          :align="column.align"
          :header-align="column.align"
        >
          <template slot-scope="scope">
            <template v-if="column.tag">
              <el-tag size="mini" :type="column.tag(scope.row).type">
                {{ column.tag(scope.row).value }}
              </el-tag>
            </template>
            <template v-else-if="column.switch">
              <my-switch
                :value="column.switch(scope.row).value"
                :check-permission="column.checkPermission"
                :disabled="column.switch(scope.row).disabled"
                @click="switchClick(column.switch(scope.row).click)"
              />
            </template>
            <template v-else-if="column.formatterHigh">
              <span slot="reference" class="content-text" :style="setStyle(column.formatterHigh(scope.row))" @click="handleClick(column.formatterHigh(scope.row))">{{ column.formatterHigh(scope.row).value }}</span>
            </template>
            <template v-else>
              <el-popover
                placement="top-start"
                trigger="click"
                :content="getPopoverContent(scope.row,column)"
              >
                <span v-if="column.formatter" slot="reference" class="content-text">{{ column.formatter(scope.row) }}</span>
                <span v-else-if="column.formatterRate" slot="reference" class="content-text"><el-rate :value="column.formatterRate(scope.row)" disabled /></span>
                <span v-else slot="reference" class="content-text">{{ scope.row[column.field] }}</span>
              </el-popover>
            </template>
          </template>
        </el-table-column>
      </template>
      <el-table-column
        v-if="myTable.operation.length>0"
        label="操作"
        align="center"
        :width="colWidth"
      >
        <template slot-scope="scope">
          <template>
            <div v-for="(operation, index) in myTable.operation" :key="index" style="display:inline-block">
              <my-button
                v-if="!(operation.hidden && operation.hidden(scope.row))"
                :name="operation.title"
                size="mini"
                :type="operation.type"
                :check-permission="operation.checkPermission"
                @click="operation.events(scope.row)"
              />
            </div>
            <!--<el-button-->
            <!--v-if="!(operation.hidden && operation.hidden(scope.row))"-->
            <!--:key="index"-->
            <!--type="text"-->
            <!--size="small"-->
            <!--@click="operation.events(scope.row)"-->
            <!--&gt;{{ operation.title }}</el-button>-->
          </template>
        </template>
      </el-table-column>
    </el-table>
    <div v-if="myTable.paging" style="margin-top: 10px;">
      <my-paging :page="myTable.page" @search="search" />
    </div>
  </el-card>
</template>
<script>
import myPaging from './myPaging'
import mySwitch from './mySwitch'
import myButton from '@/views/components/myButton'
export default {
  components: { myPaging, myButton, mySwitch },
  props: {
    // 加载
    loading: {
      type: Boolean,
      default: false
    },
    table: { // 列表数据
      type: Object,
      default() {
        return {}
      }
    },
    parentSelectionsObject: { // 默认选中的数据
      type: Array,
      default() {
        return []
      }
    },
    parentSelection: { // 默认选中的数据id
      type: Array,
      default() {
        return []
      }
    }
  },
  data() {
    return {
      xx: true,
      myLoading: false, // 加载
      selection: [], // 存储复选框选中的ID
      selectionObject: [], // 存储复选框选中的对象
      myTable: {
        ref: 'myTable', // table的名称
        expand: true, // 是否显示展开行
        // height: 500, // 默认高度自动单位px
        // maxHeight: 500, //默认不设置单位px
        size: 'medium', // Table 的尺寸 medium / small / mini
        showCheckBox: false, // 是否显示复选框
        showIndex: true, // 是否显示序号
        columns: [],
        rows: [],
        operation: [],
        paging: true,
        page: {}
      },
      colWidth: 172, // 操作列的默认宽度
      timeStamp: new Date().getTime()
    }
  },
  computed: {
    // 通过计算属性过滤掉列表中不需要显示的项目
    columnHidden: function() {
      return this.myTable.columns.filter(function(x) {
        return x.hidden
      })
    },
    columnNotHidden: function() {
      return this.myTable.columns.filter(function(x) {
        return !x.hidden
      })
    }
  },
  watch: {
    loading(v) {
      this.myLoading = v
    },
    parentSelectionsObject(e) {
      // 初始化默认选中的列
      this.selectionObject = e
      this.selectionObject.forEach(sel => {
        if (!this.selection.includes(sel.id)) {
          this.selection.push(sel.id)
        }
      })
    },
    table(e) {
      Object.assign(this.myTable, e)
      this.reloadCheckBox()
    }
  },
  mounted() {
    const changeTipClass = () => {
    }
    const Fun = function(e) {
      e = e || window.event
      if (e.wheelDelta) {
        // IE/Opera/Chrome
        changeTipClass()
      } else if (e.detailWin) {
        // FireFox
        changeTipClass()
      }
    }
    if (document.addEventListener) {
      document.addEventListener('DOMMouseScroll', Fun, false)
    } // FireFox
    window.onmousewheel = document.onmousewheel = Fun // IE/Opera/Chrome
  },
  created() {
    const that = this
    window.onresize = function() {
      that.timeStamp = new Date().getTime()
    }
    this.myLoading = this.loading
    this.selection = this.parentSelection
    // 初始化默认选中的列(如果selectionObject,selection同时存在则以selectionObject为主)
    this.selectionObject = this.parentSelectionsObject
    this.selectionObject.forEach(sel => {
      this.selection.push(sel.id)
    })
    this.reloadCheckBox()
    // 初始化table数据
    Object.assign(this.myTable, this.table)
    this.changeOperWidth()
  },
  methods: {
    handleHover() {
      console.log('滚')
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-06-12 18:15
       * @Description : 设置高级格式化 formatterHigh的颜色
       */
    setStyle(format) {
      let styles = ''
      if (format.click != undefined) {
        styles += 'cursor: pointer;'
      }
      if (format.type != undefined) {
        if (format.type == 'primary') {
          styles += 'color:#409EFF;'
        } else if (format.type == 'danger') {
          styles += 'color:#F56C6C;'
        } else if (format.type == 'success') {
          styles += 'color:#67C23A;'
        } else if (format.type == 'warning') {
          styles += 'color:#E6A23C;'
        } else if (format.type == 'info') {
          styles += 'color:#909399;'
        }
      }
      return styles
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-06-12 18:36
       * @Description:formatterHigh点击
       */
    handleClick(format) {
      if (format.click != undefined) {
        format.click()
      }
    },
    switchClick(click) {
      if (typeof click === 'function') {
        click()
      }
    },
    search(param) {
      this.$emit('search', param)
    },
    // 单选
    handleSelect(selection, row) {
      // 检查selection中是否包含row,如果包含则为选中,否则取消选中
      let _b = false
      selection.forEach(sel => {
        if (sel.id === row.id) {
          _b = true
          return false
        }
      })
      if (_b) { // 包含=选中
        this.selection.push(row.id)
        this.selectionObject.push(row)
      } else { // 不包含=取消选中
        this.selectionObject = this.selectionObject.filter(({ id }) => id !== row.id)
        this.selection = this.selection.filter(id => id !== row.id)
        // for (let m = 0; m < this.selection.length; m++) {
        //   if (row.id === this.selection[m]) {
        //     this.selection.splice(m, 1)
        //     this.selectionObject.splice(m, 1)
        //     break
        //   }
        // }
      }
    },
    // 全选
    handleSelectAll(selection) {
      // 如果selection.length>0遍历,存在则忽略,不存在则添加. 否则移除本页所有数据。
      if (selection.length > 0) { // 全选
        // 遍历 不存在则加入
        selection.forEach(sel => {
          if (this.selection.indexOf(sel.id) < 0) {
            this.selection.push(sel.id)
            this.selectionObject.push(sel)
          }
        })
      } else { // 全不选
        this.myTable.rows.forEach(row => {
          const index = this.selection.indexOf(row.id)
          if (index > -1) {
            this.selection.splice(index, 1)
            this.selectionObject.splice(index, 1)
          }
        })
      }
    },
    reloadCheckBox() {
      setTimeout(() => {
        // 重新勾选被选中项
        this.$refs[this.myTable.ref].clearSelection()
        this.selectionObject.length = 0
        if (this.selection.length > 0) {
          this.myTable.rows.forEach(row => {
            for (let m = 0; m < this.selection.length; m++) {
              if (row.id == this.selection[m]) {
                this.$refs[this.myTable.ref].toggleRowSelection(row, true)
                this.selectionObject.push(row)
              }
            }
          })
        }
      }, 1)
    },
    cellClick(row, column, cell, event) {
      this.$emit('rowClick', { row, column, cell, event })
    },
    getPopoverContent(row, column) {
      if (column.formatterHigh) {
        return column.formatterHigh(row).value + ''
      } else if (column.formatter) {
        return column.formatter(row) + ''
      } else {
        return row[column.field] + ''
      }
    },
    // 改变操作列的宽度
    changeOperWidth() {
      if (this.myTable.operation.length > 2) {
        this.colWidth = this.colWidth + 50 * (this.myTable.operation.length - 2)
      }
    },
    getChedkIds() {
      return this.selection
    },
    getChedkObject() {
      return this.selectionObject
    },
    className({ row, column, rowIndex, columnIndex }) {
      if (column.label == '操作') {
        return 'oper'
      } else {
        return ''
      }
    }
  }
}
</script>
<style scoped>
  .demo-table-expand .el-form-item{
    width: 100%;
  }
  .content-text{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap
  }
  .oper>.cell{
    white-space: nowrap;
    word-break:normal;
  }
</style>
src/views/components/myTableTree/myTableTree.vue
New file
@@ -0,0 +1,328 @@
<template>
  <el-card shadow="never">
    <!--工具条-->
    <div class="table-tool-bar">
      <!--自定义工具-->
      <my-button
        v-for="(custom,idx) in myTable.tools.custom"
        :key="idx"
        :check-permission="custom.checkPermission"
        :name="custom.name"
        site="tools"
        @click="custom.click"
      />
      <!--列控制-->
      <el-popover
        placement="bottom"
        style="float: right;"
        trigger="click"
        width="150"
      >
        <el-form label-width="10px" style="max-height: 500px;overflow-y: auto;">
          <el-form-item label="">
            <el-checkbox-group v-model="checkColumns" @change="changeColumns">
              <el-checkbox v-for="(column,index) in myTable.columns" :key="index" :label="index">{{ column.title }}
              </el-checkbox>
            </el-checkbox-group>
          </el-form-item>
        </el-form>
        <el-button slot="reference" icon="el-icon-setting" size="mini">设置列</el-button>
      </el-popover>
    </div>
    <!--table列表-->
    <el-table
      ref="myTable"
      v-loading="myTable.loading"
      :data="myTable.data"
      row-key="id"
      :default-expand-all="myTable.expandAll"
      :tree-props="{children: 'children'}"
      :fit="false"
      :highlight-current-row="true"
      border
      size="medium"
    >
      <!--列内容-->
      <el-table-column
        v-for="(column, index) in myTable.columns"
        v-if="!column.hidden"
        :key="index"
        :align="column.align"
        :header-align="column.align"
        :label="column.title"
        :min-width="column.width"
        :sortable="column.sortable"
        :type="column.type"
        :width="column.width"
      >
        <template slot-scope="scope">
          <!--图片展示-->
          <template v-if="column.img">
            <preview-picture img-style="width:40px;height:40px;" :imgs="column.img(scope.row).imgs" />
          </template>
          <!--开关(生成开关按钮)-->
          <template v-else-if="column.switch">
            <my-switch
              :check-permission="column.checkPermission"
              :disabled="column.switch(scope.row).disabled"
              :value="column.switch(scope.row).value"
              @click="switchClick(column.switch(scope.row).click)"
            />
          </template>
          <!--格式化(显示颜色,内容,点击事件控制)-->
          <template v-else-if="column.formatter">
            <span
              slot="reference"
              :style="setStyle(column.formatter(scope.row))"
              class="content-text"
              @click="handleClick(column.formatter(scope.row))"
            >{{ column.formatter(scope.row).value }}</span>
          </template>
          <template v-else>
            <!--点击弹出单元格内容-->
            <el-popover
              :content="getPopoverContent(scope.row,column)"
              placement="top-start"
              trigger="click"
            >
              <span slot="reference" class="content-text">{{ scope.row[column.field] }}</span>
            </el-popover>
          </template>
        </template>
      </el-table-column>
      <!--操作列-->
      <el-table-column
        v-if="myTable.operation.show"
        :width="myTable.operation.width"
        align="center"
        label="操作"
      >
        <template slot-scope="scope">
          <template v-for="(operation, index) in myTable.operation.attr">
            <my-button-v2
              v-if="!(operation.hidden && operation.hidden(scope.row))"
              :key="index"
              :check-permission="operation.checkPermission"
              :name="operation.title"
              :type="operation.type"
              site="operation"
              @click="operation.events(scope.row)"
            />
          </template>
          <template v-if="myTable.operation.more && myTable.operation.more.length>0">
            <a-dropdown :trigger="['click']" style="margin-left: 5px;">
              <a-button size="small">
                更多
                <a-icon type="down" />
              </a-button>
              <a-menu slot="overlay">
                <template v-for="(m,i) in myTable.operation.more">
                  <a-menu-item :key="i" @click="m.events(scope.row)">
                    <my-button-v2
                      v-if="!(m.hidden && m.hidden(scope.row))"
                      :check-permission="m.checkPermission"
                      :name="m.title"
                    />
                  </a-menu-item>
                </template>
              </a-menu>
            </a-dropdown>
          </template>
        </template>
      </el-table-column>
    </el-table>
  </el-card>
</template>
<script>
import myButton from '@/views/components/myButton'
import myButtonV2 from '@/views/components/myButtonV2'
import mySwitch from '@/views/components/mySwitch'
import request from '@/utils/request'
import previewPicture from '@/views/components/previewPicture'
export default {
  components: { myButton, mySwitch, previewPicture, myButtonV2 },
  props: {
    table: {
      type: Object,
      default() {
        return null
      }
    },
    filter: {
      type: Object,
      default() {
        return null
      }
    }
  },
  data() {
    return {
      /** table列表数据*/
      myTable: {
        url: '',
        params: {},
        expandAll: true, // 展开
        loading: false, // 加载效果
        size: 'small', // Table 的尺寸 medium / small / mini
        // 工具条
        tools: {
          custom: [] // 自定义工具条按钮
        },
        columns: [], // 列属性配置
        operation: { // 操作列
          show: false, // 显示操作列
          width: '250', // 宽度
          attr: [], // 操作
          more: []// 更多
        },
        data: [], // 列表数据
        paging: {
          show: true, // 显示分页
          // 分页信息
          page: {
            small: false,
            pageNumber: 1,
            pageSize: 10,
            total: 0
          }
        }
      },
      checkColumns: [] // 记录列控制中选中的列
    }
  },
  watch: {
    filter: {
      handler() {
        this.search()
      },
      deep: true
    }
  },
  created() {
    if (this.table != null) {
      Object.assign(this.myTable, this.table)
      this.myTable.columns.forEach((column, idx) => {
        if (!column.hidden) {
          this.checkColumns.push(idx)
        }
      })
    }
  },
  methods: {
    // 搜索
    search() {
      this.myTable.loading = true
      const params = Object.assign({}, this.filter)
      request({
        url: this.myTable.url,
        method: 'get',
        params: params
      }).then(res => {
        this.$set(this.myTable, 'data', res.data)
        this.myTable.loading = false
      })
    },
    // 获取设置列表弹层内容
    getPopoverContent(row, column) {
      if (column.formatterHigh) {
        return column.formatterHigh(row).value + ''
      } else if (column.formatter) {
        return column.formatter(row) + ''
      } else {
        return row[column.field] + ''
      }
    },
    // 单元格内容格式化样式
    setStyle(format) {
      let styles = ''
      if (format.click != undefined) {
        styles += 'cursor: pointer;'
      }
      if (format.type != undefined) {
        if (format.type == 'primary') {
          styles += 'color:#409EFF;'
        } else if (format.type == 'danger') {
          styles += 'color:#F56C6C;'
        } else if (format.type == 'success') {
          styles += 'color:#67C23A;'
        } else if (format.type == 'warning') {
          styles += 'color:#E6A23C;'
        } else if (format.type == 'info') {
          styles += 'color:#909399;'
        }
      }
      return styles
    },
    // formatter 点击事件
    handleClick(format) {
      if (format.click != undefined) {
        format.click()
      }
    },
    // 开关点击事件
    switchClick(click) {
      if (typeof click === 'function') {
        click()
      }
    },
    // 列控制
    changeColumns() {
      this.myTable.columns.forEach((column, idx) => {
        if (this.checkColumns.includes(idx)) {
          column.hidden = false
        } else {
          column.hidden = true
        }
        this.$set(this.myTable.columns, idx, column)
      })
    }
  }
}
</script>
<style scoped>
  /*详情表单*/
  .demo-table-expand .el-form-item{
    width: 100%;
  }
  /*列表内文字过长加省略*/
  .content-text{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap
  }
  /*分页上边距*/
  .el-pagination {
    white-space: nowrap;
    padding: 2px 5px;
    color: #303133;
    font-weight: 700;
    margin-top: 10px;
  }
  .el-radio {
    margin-right: 10px;
  }
  .el-radio__label {
    font-size: 14px;
    padding-left: 2px !important;
  }
  .a-button-cus{
    font-size: 12px;
  }
  .ant-btn-sm {
    padding: 0px 7px;
    font-size: 12px;
    border-radius: 3px;
    height: 20px;
  }
  .ant-btn > .anticon + span, .ant-btn > span + .anticon {
    margin-left: unset;
  }
</style>
src/views/components/myTableTree/tree/index.js
New file
@@ -0,0 +1,4 @@
import MSDataTransfer from './tableTreeUtil.js'
export default {
  MSDataTransfer
}
src/views/components/myTableTree/tree/tableTreeUtil.js
New file
@@ -0,0 +1,32 @@
import Vue from 'vue'
function DataTransfer(data) {
  if (!(this instanceof DataTransfer)) {
    return new DataTransfer(data, null, null)
  }
}
DataTransfer.treeToArray = function(data, parent, level, expandedAll) {
  let tmp = []
  Array.from(data).forEach(function(record) {
    if (record._expanded === undefined) {
      Vue.set(record, '_expanded', expandedAll)
    }
    if (parent) {
      Vue.set(record, '_parent', parent)
    }
    let _level = 0
    if (level !== undefined && level !== null) {
      _level = level + 1
    }
    Vue.set(record, '_level', _level)
    tmp.push(record)
    if (record.child && record.child.length > 0) {
      const child = DataTransfer.treeToArray(record.child, record, _level, expandedAll)
      // delete record['child']
      tmp = tmp.concat(child)
    }
  })
  return tmp
}
export default DataTransfer
src/views/components/myTableV2.vue
New file
@@ -0,0 +1,420 @@
<template>
  <el-card shadow="never">
    <el-table
      :ref="myTable.ref"
      v-loading="myLoading"
      :data="myTable.rows"
      :max-height="myTable.maxHeight"
      :height="myTable.height"
      :size="myTable.size"
      :cell-class-name="className"
      selection-change="handleSelectionChange"
      @select="handleSelect"
      @select-all="handleSelectAll"
      @cell-click="cellClick"
    >
      <el-table-column v-if="myTable.expand" type="expand">
        <template slot-scope="{row}">
          <el-form size="mini" label-position="left" :inline="false" class="demo-table-expand">
            <template>
              <el-form-item
                v-for="(more,index) in columnHidden"
                :key="index"
                size="mini"
                :label="more.title+':'"
              >
                <template v-if="more.tag">
                  <el-tag size="mini" :type="more.tag(row).type">
                    {{ more.tag(row).value }} {{ more }}
                  </el-tag>
                </template>
                <template v-else>
                  <span v-if="more.formatter">{{ more.formatter(row) }}</span>
                  <span v-else-if="more.formatterRate">{{ more.formatterRate(row) }}</span>
                  <span v-else-if="more.formatterHigh">{{ more.formatterHigh(row).value }}</span>
                  <span v-else-if="more.switch">{{ more.switch(row).label }}</span>
                  <span v-else>{{ row[more.field] }}</span>
                </template>
              </el-form-item>
            </template>
          </el-form>
        </template>
      </el-table-column>
      <el-table-column
        v-if="myTable.showCheckBox"
        type="selection"
        width="55"
      />
      <el-table-column
        v-if="myTable.showIndex && myTable.page.pageSize!=undefined"
        label="序号"
        width="50"
      >
        <template slot-scope="scope">
          <span>
            {{ scope.$index+(myTable.page.pageNumber - 1) * myTable.page.pageSize + 1 }}
          </span>
        </template>
      </el-table-column>
      <el-table-column
        v-if="myTable.showIndex && myTable.page.pageSize==undefined"
        type="index"
        label="序号"
        width="50"
      />
      <!--show-overflow-tooltip-->
      <template v-for="(column, index) in columnNotHidden">
        <el-table-column
          v-if="!(column.hidden||false)"
          :key="index"
          :sortable="column.sortable"
          :label="column.title"
          :type="column.type"
          :width="column.width"
          :align="column.align"
          :header-align="column.align"
        >
          <template slot-scope="scope">
            <template v-if="column.tag">
              <el-tag size="mini" :type="column.tag(scope.row).type">
                {{ column.tag(scope.row).value }}
              </el-tag>
            </template>
            <template v-else-if="column.switch">
              <my-switch
                :value="column.switch(scope.row).value"
                :check-permission="column.checkPermission"
                :disabled="column.switch(scope.row).disabled"
                @click="switchClick(column.switch(scope.row).click)"
              />
            </template>
            <template v-else-if="column.formatterHigh">
              <span slot="reference" class="content-text" :style="setStyle(column.formatterHigh(scope.row))" @click="handleClick(column.formatterHigh(scope.row))">{{ column.formatterHigh(scope.row).value }}</span>
            </template>
            <template v-else>
              <el-popover
                placement="top-start"
                trigger="click"
                :content="getPopoverContent(scope.row,column)"
              >
                <span v-if="column.formatter" slot="reference" class="content-text">{{ column.formatter(scope.row) }}</span>
                <span v-else-if="column.formatterRate" slot="reference" class="content-text"><el-rate :value="column.formatterRate(scope.row)" disabled :colors="['#99A9BF', '#F7BA2A', '#FF9900']" /></span>
                <span v-else slot="reference" class="content-text">{{ scope.row[column.field] }}</span>
              </el-popover>
            </template>
          </template>
        </el-table-column>
      </template>
      <el-table-column
        v-if="myTable.operation.length>0"
        label="操作"
        align="center"
        :width="colWidth"
      >
        <template slot-scope="scope">
          <template>
            <div v-for="(operation, index) in myTable.operation" :key="index" style="display: inline-block">
              <my-button
                v-if="!(operation.hidden && operation.hidden(scope.row))"
                :name="operation.title"
                size="mini"
                :type="operation.type"
                :check-permission="operation.checkPermission"
                @click="operation.events(scope.row)"
              />
            </div>
          </template>
        </template>
      </el-table-column>
    </el-table>
    <div v-if="myTable.paging" style="margin-top: 10px;">
      <my-paging :page="myTable.page" @search="search" />
    </div>
  </el-card>
</template>
<script>
import myPaging from './myPaging'
import mySwitch from './mySwitch'
import myButton from '@/views/components/myButton'
export default {
  components: { myPaging, myButton, mySwitch },
  props: {
    // 加载
    loading: {
      type: Boolean,
      default: false
    },
    table: { // 列表数据
      type: Object,
      default() {
        return {}
      }
    },
    parentSelectionsObject: { // 默认选中的数据
      type: Array,
      default() {
        return []
      }
    },
    parentSelection: { // 默认选中的数据id
      type: Array,
      default() {
        return []
      }
    }
  },
  data() {
    return {
      myLoading: false, // 加载
      selection: [], // 存储复选框选中的ID
      selectionObject: [], // 存储复选框选中的对象
      myTable: {
        ref: 'myTable', // table的名称
        expand: true, // 是否显示展开行
        // height: 500, // 默认高度自动单位px
        // maxHeight: 500, //默认不设置单位px
        size: 'medium', // Table 的尺寸 medium / small / mini
        showCheckBox: false, // 是否显示复选框
        showIndex: true, // 是否显示序号
        columns: [],
        rows: [],
        operation: [],
        paging: true,
        page: {}
      },
      colWidth: 172// 操作列的默认宽度
    }
  },
  computed: {
    // 通过计算属性过滤掉列表中不需要显示的项目
    columnHidden: function() {
      return this.myTable.columns.filter(function(x) {
        return x.hidden
      })
    },
    columnNotHidden: function() {
      return this.myTable.columns.filter(function(x) {
        return !x.hidden
      })
    }
  },
  watch: {
    loading(v) {
      this.myLoading = v
    },
    table(e) {
      Object.assign(this.myTable, e)
      this.reloadCheckBox()
    }
  },
  mounted() {
    const changeTipClass = () => {
    }
    const Fun = function(e) {
      e = e || window.event
      if (e.wheelDelta) {
        // IE/Opera/Chrome
        changeTipClass()
      } else if (e.detailWin) {
        // FireFox
        changeTipClass()
      }
    }
    if (document.addEventListener) {
      document.addEventListener('DOMMouseScroll', Fun, false)
    } // FireFox
    window.onmousewheel = document.onmousewheel = Fun // IE/Opera/Chrome
  },
  created() {
    this.myLoading = this.loading
    // 接受父组件传来的 选中对象 ,解析为自己可以用的数据
    const psobj = Object.assign([], this.parentSelectionsObject)
    if (psobj.length > 0) {
      psobj.forEach(pso => {
        this.selection.push(pso.id)// 存储复选框选中的ID
        this.selectionObject.push(pso)// 存储复选框选中的对象
      })
    }
    // 初始化table数据
    Object.assign(this.myTable, this.table)
    this.changeOperWidth()
    this.reloadCheckBox()
  },
  methods: {
    handleHover() {
      console.log('滚')
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-06-12 18:15
       * @Description : 设置高级格式化 formatterHigh的颜色
       */
    setStyle(format) {
      let styles = ''
      if (format.click != undefined) {
        styles += 'cursor: pointer;'
      }
      if (format.type != undefined) {
        if (format.type == 'primary') {
          styles += 'color:#409EFF;'
        } else if (format.type == 'danger') {
          styles += 'color:#F56C6C;'
        } else if (format.type == 'success') {
          styles += 'color:#67C23A;'
        } else if (format.type == 'warning') {
          styles += 'color:#E6A23C;'
        } else if (format.type == 'info') {
          styles += 'color:#909399;'
        }
      }
      return styles
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-06-12 18:36
       * @Description:formatterHigh点击
       */
    handleClick(format) {
      if (format.click != undefined) {
        format.click()
      }
    },
    switchClick(click) {
      if (typeof click === 'function') {
        click()
      }
    },
    search(param) {
      this.$emit('search', param)
    },
    // 单选
    handleSelect(selection, row) {
      // 检查selection中是否包含row,如果包含则为选中,否则取消选中
      let _b = false
      selection.forEach(sel => {
        if (sel.id === row.id) {
          _b = true
          return false
        }
      })
      if (_b) { // 包含=选中
        if (!this.selection.includes(row.id)) {
          this.selection.push(row.id)
          this.selectionObject.push(row)
        }
      } else { // 不包含=取消选中
        for (let m = 0; m < this.selection.length; m++) {
          if (row.id === this.selection[m]) {
            if (this.selection.includes(row.id)) {
              this.selection.splice(m, 1)
              this.selectionObject.splice(m, 1)
              break
            }
          }
        }
      }
    },
    // 全选
    handleSelectAll(selection) {
      // 如果selection.length>0遍历,存在则忽略,不存在则添加. 否则移除本页所有数据。
      if (selection.length > 0) { // 全选
        // 遍历 不存在则加入
        selection.forEach(sel => {
          if (!this.selection.includes(sel.id)) {
            this.selection.push(sel.id)
            this.selectionObject.push(sel)
          }
        })
      } else { // 全不选
        this.myTable.rows.forEach(row => {
          const index = this.selection.indexOf(row.id)
          if (index > -1) {
            this.selection.splice(index, 1)
            this.selectionObject.splice(index, 1)
          }
        })
      }
    },
    reloadCheckBox() {
      setTimeout(() => {
        // 重新勾选被选中项
        try {
          this.$refs[this.myTable.ref].clearSelection()
          if (this.selection.length > 0) {
            this.myTable.rows.forEach(row => {
              for (let m = 0; m < this.selection.length; m++) {
                if (row.id == this.selection[m]) {
                  this.$refs[this.myTable.ref].toggleRowSelection(row, true)
                }
              }
            })
          }
        } catch (e) { console.error(e) }
      }, 1)
    },
    cellClick(row, column, cell, event) {
      this.$emit('rowClick', { row, column, cell, event })
    },
    getPopoverContent(row, column) {
      if (column.formatterHigh) {
        return column.formatterHigh(row).value + ''
      } else if (column.formatter) {
        return column.formatter(row) + ''
      } else {
        return row[column.field] + ''
      }
    },
    // 改变操作列的宽度
    changeOperWidth() {
      if (this.myTable.operation.length > 2) {
        this.colWidth = this.colWidth + 50 * (this.myTable.operation.length - 2)
      }
    },
    className({ row, column, rowIndex, columnIndex }) {
      if (column.label == '操作') {
        return 'oper'
      } else {
        return ''
      }
    },
    /*
     * @Author : liu.q [916000612@qq.com]
     * @Date : 2019-07-13 13:46
     * @Description : 获取选中项
     */
    getCheckedRows() {
      return this.selectionObject
    },
    /*
    * @Author : liu.q [916000612@qq.com]
    * @Date : 2019-07-13 13:46
    * @Description : 获取选中项id
    */
    getCheckedIds() {
      return this.selection
    }
  }
}
</script>
<style scoped>
  .demo-table-expand .el-form-item{
    width: 100%;
  }
  .content-text{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap
  }
  .oper>.cell{
    white-space: nowrap;
    word-break:normal;
  }
</style>
src/views/components/myTableV3.vue
New file
@@ -0,0 +1,645 @@
<template>
  <el-card shadow="never">
    <!--工具条-->
    <div v-if="!myTable.isTopFrame" class="table-tool-bar" style="overflow: hidden">
      <!--自定义工具-->
      <my-button
        v-for="(custom, idx) in myTable.tools.custom"
        :key="idx"
        site="tools"
        :check-permission="custom.checkPermission"
        :name="custom.name"
        @click="custom.click"
      />
      <!--导出-->
      <el-popover v-model="visible" placement="right-start" width="250" trigger="click">
        <el-form ref="exportParams" :model="exportParams" :rules="rules" label-position="right" size="mini" label-width="65px">
          <el-form-item label="名称" prop="fileName"><el-input v-model="exportParams.fileName" /></el-form-item>
          <el-form-item label="格式" class="require">
            <el-radio-group v-model="exportParams.fileFormat" size="mini"><el-radio label=".xls">.xls</el-radio></el-radio-group>
          </el-form-item>
          <el-form-item label="数据" class="require">
            <el-radio-group v-model="exportParams.page" size="mini" @change="changePageSize">
              <el-radio label="1">本页</el-radio>
              <el-radio label="2">全部</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="页码" style="display: none;" prop="pageNumber"><el-input v-model="exportParams.pageNumber" /></el-form-item>
          <el-form-item label="步长" style="display: none;" prop="pageSize"><el-input v-model="exportParams.pageSize" /></el-form-item>
        </el-form>
        <div style="text-align: right; margin: 0">
          <el-button size="mini" type="default" @click="visible = false">取消</el-button>
          <el-button type="primary" size="mini" @click="_export_">确定</el-button>
        </div>
        <my-button v-if="myTable.tools.generalExport.show" slot="reference" site="tools" name="导出" />
      </el-popover>
      <!--列控制-->
      <el-popover v-if="myTable.tools.columnsCtrl.show" style="float: right;" trigger="click" placement="bottom" width="150">
        <el-form label-width="10px" style="max-height: 500px;overflow-y: auto;">
          <el-form-item label="">
            <el-checkbox-group v-model="checkColumns" @change="changeColumns">
              <el-checkbox v-for="(column, index) in myTable.columns" :key="index" :label="index">{{ column.title }}</el-checkbox>
            </el-checkbox-group>
          </el-form-item>
        </el-form>
        <el-button slot="reference" icon="el-icon-setting" size="mini">设置列</el-button>
      </el-popover>
    </div>
    <!--table列表-->
    <el-table
      :key="timeStamp"
      :ref="myTable.ref"
      v-loading="myTable.loading"
      :data="myTable.rows"
      :max-height="myTable.maxHeight"
      :height="myTable.height"
      :size="myTable.size"
      :fit="false"
      :highlight-current-row="true"
      border
    >
      <!--详情-->
      <el-table-column v-if="myTable.expand" width="50" type="expand">
        <template slot-scope="{ row }">
          <el-form size="mini" label-position="left" :inline="false" class="demo-table-expand">
            <el-form-item v-for="(more, index) in columnHidden" :key="index" size="mini" :label="more.title + ':'">
              <template v-if="more.tag">
                <el-tag size="mini" :type="more.tag(row).type">{{ more.tag(row).value }} {{ more }}</el-tag>
              </template>
              <template v-else>
                <span v-if="more.formatter">{{ more.formatter(row).value }}</span>
                <span v-else-if="more.switch">{{ more.switch(row).label }}</span>
                <span v-else>{{ row[more.field] }}</span>
              </template>
            </el-form-item>
          </el-form>
        </template>
      </el-table-column>
      <!--序号 有分页时-->
      <el-table-column v-if="myTable.showIndex && myTable.paging.page.pageSize != undefined" label="序号" align="center" width="60">
        <template slot-scope="scope">
          <span>{{ scope.$index + (myTable.paging.page.pageNumber - 1) * myTable.paging.page.pageSize + 1 }}</span>
        </template>
      </el-table-column>
      <!--序号 无分页时-->
      <el-table-column v-if="myTable.showIndex && myTable.paging.page.pageSize == undefined" type="index" align="center" label="序号" width="60" />
      <template v-for="(column,index) in columnNotHidden">
        <!--列内容-->
        <el-table-column
          v-if="!(column.hidden||false)"
          :key="index"
          :sortable="column.sortable"
          :label="column.title"
          :type="column.type"
          :width="column.width"
          :min-width="column.minWidth"
          :align="column.align"
          :header-align="column.align"
        >
          <template slot-scope="scope">
            <!--开关(生成开关按钮)-->
            <template v-if="column.switch">
              <my-switch
                :value="column.switch(scope.row).value"
                :check-permission="column.checkPermission"
                :disabled="column.switch(scope.row).disabled"
                @click="switchClick(column.switch(scope.row).click)"
              />
            </template>
            <template v-else-if="column.tag">
              <el-tag size="mini" :type="column.tag(scope.row).type">{{ column.tag(scope.row).value }}</el-tag>
            </template>
            <template v-else-if="column.img">
              <preview-picture img-style="width:40px;height:40px;" :imgs="column.img(scope.row).imgs" />
            </template>
            <!--格式化(显示颜色,内容,点击事件控制)-->
            <template v-else-if="column.formatter">
              <span slot="reference" class="content-text" :style="setStyle(column.formatter(scope.row))" @click="handleClick(column.formatter(scope.row))" v-html="column.formatter(scope.row).value" />
            </template>
            <template v-else>
              <!--点击弹出单元格内容-->
              <el-popover placement="top-start" trigger="click" :content="getPopoverContent(scope.row, column)">
                <span slot="reference" class="content-text">{{ scope.row[column.field] }}</span>
              </el-popover>
            </template>
          </template>
        </el-table-column>
      </template>
      <!--操作列-->
      <el-table-column
        v-if="myTable.operation.show"
        label="操作"
        align="center"
        :width="myTable.operation.width"
        fixed="right"
      >
        <template slot-scope="scope">
          <template v-for="(operation, index) in myTable.operation.attr">
            <my-button-v2
              v-if="!(operation.hidden && operation.hidden(scope.row))"
              :key="index"
              :name="operation.title"
              site="operation"
              :type="operation.type"
              :check-permission="operation.checkPermission"
              @click="operation.events(scope.row)"
            />
          </template>
          <template v-if="myTable.operation.more && myTable.operation.more.length > 0">
            <el-dropdown style="margin-left: 5px;" trigger="click">
              <el-button size="small" type="text">
                更多
                <i class="el-icon-arrow-down el-icon--right" />
              </el-button>
              <el-dropdown-menu slot="dropdown">
                <template v-for="(m, i) in myTable.operation.more">
                  <el-dropdown-item v-if="!(m.hidden && m.hidden(scope.row))" :key="i">
                    <my-button-v2
                      :name="m.title"
                      site="operation"
                      :type="m.type"
                      :check-permission="m.checkPermission"
                      @click="m.events(scope.row)"
                    />
                  </el-dropdown-item>
                </template>
              </el-dropdown-menu>
            </el-dropdown>
          </template>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
      :small="myTable.paging.page.small"
      :current-page="myTable.paging.page.pageNumber"
      :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
      :page-size="myTable.paging.page.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="myTable.paging.page.total"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </el-card>
</template>
<script>
import myButtonV2 from '@/views/components/myButtonV2'
import myButton from '@/views/components/myButton'
import mySwitch from './mySwitch'
import request from '@/utils/request'
import * as valid from '@/utils/validate'
import previewPicture from '@/views/components/previewPicture'
export default {
  components: { myButtonV2, myButton, mySwitch, previewPicture },
  props: {
    table: {
      type: Object,
      default() {
        return null
      }
    },
    // 当点击重置按钮时,filter指向改变时不需要手动调用search方法, 仅改变filter内部值时需手动调用search
    // 如: this.filter = {} 不需要调用search    this.filter.name = null 时需调用search
    filter: {
      type: Object,
      default() {
        return null
      }
    }
  },
  data() {
    const validatepageNumber = (rule, value, callback) => {
      if (!valid.isNotEmpty(this.exportParams.pageNumber)) {
        callback(new Error('请输入页码'))
      } else if (!valid.isInteger(this.exportParams.pageNumber)) {
        callback(new Error('页码为正整数'))
      } else {
        callback()
      }
    }
    const validatepageSize = (rule, value, callback) => {
      if (!valid.isNotEmpty(this.exportParams.pageSize)) {
        callback(new Error('请输入步长'))
      } else if (!valid.isInteger(this.exportParams.pageSize)) {
        callback(new Error('步长为正整数'))
      } else if (this.exportParams.pageSize > 20000 || this.exportParams.pageSize < 1) {
        callback(new Error('单次导出步长范围1~20000'))
      } else {
        callback()
      }
    }
    const validatefileName = (rule, value, callback) => {
      if (!valid.isNotEmpty(this.exportParams.fileName)) {
        callback(new Error('请输入文件名称'))
      } else if (this.exportParams.fileName.length < 1 || this.exportParams.fileName.length > 10) {
        callback(new Error('文件名称长度范围1~10'))
      } else {
        callback()
      }
    }
    return {
      /** table列表数据*/
      myTable: {
        autoLoad: true,
        url: '',
        params: {},
        showIndex: true, // 是否显示序号
        expand: true, // 是否显示详情数据
        loading: false, // 加载效果
        // height: 500, // 默认高度自动单位px
        // maxHeight: 500, //默认不设置单位px
        size: 'medium', // Table 的尺寸 medium / small / mini
        showCheckBox: false, // 是否显示复选框
        // 工具条
        tools: {
          columnsCtrl: {
            // 列控制按钮
            show: false
          },
          generalExport: {
            // 通用导出按钮
            show: false
          },
          custom: [] // 自定义工具条按钮
        },
        columns: [], // 列属性配置custom
        operation: {
          // 操作列
          show: false, // 显示操作列
          showMoreSize: 3, // 超出几个显示更多按钮
          width: '250', // 宽度
          align: 'center',
          attr: [], // 操作
          more: [] // 更多
        },
        rows: [], // 列表数据
        paging: {
          show: true, // 显示分页
          // 分页信息
          page: {
            small: false,
            pageNumber: 1,
            pageSize: 10,
            total: 0
          }
        }
      },
      checkColumns: [], // 记录列控制中选中的列
      // 导出功能所需参数
      visible: false, // 控制导出表单的隐藏
      exportParams: {
        fileName: '',
        fileFormat: '.xls',
        page: '2',
        pageNumber: 1,
        pageSize: 20000
      },
      // 导出表单校验
      rules: {
        fileName: [{ required: true, validator: validatefileName, trigger: 'blur' }],
        pageNumber: [{ required: true, validator: validatepageNumber, trigger: 'blur' }],
        pageSize: [{ required: true, validator: validatepageSize, trigger: 'blur' }]
      },
      timeStamp: new Date().getTime()
    }
  },
  computed: {
    // 通过计算属性过滤掉列表中不需要显示的项目
    columnHidden: function() {
      return this.myTable.columns.filter(function(x) {
        return x.hidden
      })
    },
    columnNotHidden: function() {
      return this.myTable.columns.filter(function(x) {
        return !x.hidden
      })
    },
    operButtons() {
      const that = this
      return function(row) {
        const arr = []
        that.myTable.operation.attr.map(item => {
          console.log(item)
          console.log(!(item.hidden && item.hidden(row)) && item.checkPermission)
          if (!(item.hidden && item.hidden(row)) && item.checkPermission) {
            arr.push(item)
          }
        })
        return arr
      }
    }
  },
  watch: {
    filter(val) {
      this.search({ pageNumber: 1 })
    }
  },
  created() {
    const that = this
    window.onresize = function() {
      that.timeStamp = new Date().getTime()
    }
    this.initTable()
  },
  methods: {
    initTable() {
      if (this.table !== null) {
        Object.assign(this.myTable, this.table)
        if (this.myTable.paging.page === undefined) {
          this.$set(this.myTable.paging, 'page', {
            small: false,
            pageNumber: 1,
            pageSize: 10,
            total: 0
          })
        }
        this.myTable.columns.forEach((column, idx) => {
          if (!column.hidden) {
            this.checkColumns.push(idx)
          }
        })
        this.$nextTick(() => {
          if (this.myTable.autoLoad) {
            this.search({ pageNumber: 1 })
          }
        })
      }
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 10:52
         * @Description : 列表搜索
         */
    search(param) {
      this.$nextTick(() => {
        this.myTable.loading = true
        const params = Object.assign({}, this.filter)
        params.pageSize = this.myTable.paging.page.pageSize
        if (param && param.pageNumber) {
          this.myTable.paging.page.pageNumber = param.pageNumber
        }
        params.pageNumber = this.myTable.paging.page.pageNumber
        request({
          url: this.myTable.url,
          method: 'get',
          params: params
        }).then(res => {
          if (res.data.rows) {
            this.$set(this.myTable, 'rows', res.data.rows)
          }
          this.$set(
            this.myTable.paging,
            'page',
            Object.assign(this.myTable.paging.page, {
              pageSize: res.data.pageSize,
              pageNumber: res.data.pageNumber,
              total: res.data.total
            })
          )
          this.myTable.loading = false
        }).catch(() => {
          this.myTable.loading = false
        })
      })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 10:48
         * @Description : 获取设置列表弹层内容
         */
    getPopoverContent(row, column) {
      if (column.formatterHigh) {
        return column.formatterHigh(row).value + ''
      } else if (column.formatter) {
        return column.formatter(row) + ''
      } else {
        return row[column.field] + ''
      }
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 11:39
         * @Description :单元格内容格式化样式
         */
    setStyle(format) {
      let styles = ''
      if (format.click != undefined) {
        styles += 'cursor: pointer;'
      }
      if (format.type != undefined) {
        if (format.type == 'primary') {
          styles += 'color:#409EFF;'
        } else if (format.type == 'danger') {
          styles += 'color:#F56C6C;'
        } else if (format.type == 'success') {
          styles += 'color:#67C23A;'
        } else if (format.type == 'warning') {
          styles += 'color:#E6A23C;'
        } else if (format.type == 'info') {
          styles += 'color:#909399;'
        }
      }
      return styles
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 12:20
         * @Description : formatter 点击事件
         */
    handleClick(format) {
      if (format.click != undefined) {
        format.click()
      }
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 12:21
         * @Description : 开关点击事件
         */
    switchClick(click) {
      if (typeof click === 'function') {
        click()
      }
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 14:22
         * @Description :切换pageSize
         */
    handleSizeChange(pageSize) {
      this.myTable.paging.page.pageSize = pageSize
      this.search({ pageNumber: 1 })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 14:22
         * @Description :切换pageNumber
         */
    handleCurrentChange(pageNumber) {
      this.myTable.paging.page.pageNumber = pageNumber
      this.search({ pageNumber: pageNumber })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 14:52
         * @Description :列控制
         */
    changeColumns() {
      this.myTable.columns.forEach((column, idx) => {
        if (this.checkColumns.includes(idx)) {
          column.hidden = false
        } else {
          column.hidden = true
        }
        this.$set(this.myTable.columns, idx, column)
      })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-23 10:44
         * @Description : 修改导出 pageSize
         */
    changePageSize() {
      if (this.exportParams.page == 1) {
        this.exportParams.pageSize = this.myTable.paging.page.pageSize
      } else if (this.exportParams.page == 2) {
        this.exportParams.pageSize = 20000
      }
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-17 16:38
         * @Description :通用导出
         */
    _export_() {
      this.$refs['exportParams'].validate(valid => {
        if (valid) {
          // 判断总条数是否大于最大支持条数
          if (this.myTable.paging.page.total > 20000) {
            this.$confirm(`当前筛选数据条数${this.myTable.paging.page.total},最大支持导出条数20000,是否继续导出?`, '提示', {
              confirmButtonText: '是',
              cancelButtonText: '否',
              type: 'warning'
            })
              .then(() => {
                this._export_m()
              })
              .catch(() => {
                return false
              })
          } else {
            this._export_m()
          }
        } else {
          return false
        }
      })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-07-23 11:22
         * @Description : 真正的导出
         */
    _export_m() {
      const loading = this.$loading({
        lock: true,
        text: '正在导出...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      })
      this.visible = false
      const params = {}
      params.url = this.myTable.url
      const columns = []
      this.myTable.columns.forEach(c => {
        if (!c.hidden || c.export) {
          columns.push({
            title: c.title,
            field: c.field
          })
        }
      })
      params.columns = encodeURI(JSON.stringify(columns))
      params.filter = encodeURI(
        JSON.stringify(
          Object.assign(
            {
              pageNumber: this.exportParams.pageNumber,
              pageSize: this.exportParams.pageSize
            },
            this.filter
          )
        )
      )
      params.fileName = encodeURI(this.exportParams.fileName)
      if (this.myTable.tools.generalExport.formatter) {
        params.formatter = encodeURI(JSON.stringify(this.myTable.tools.generalExport.formatter))
      }
      request({
        url: globalConf.baseUrl + '/v1/base/pc/export/generalExport3', // 请求地址,
        method: 'post',
        data: params
      }).then(response => {
        if (response.code == 10000) {
          const link = globalConf.baseUrl + `/v1/base/web/common/downExcel?key=${response.data}`
          window.location.href = link
        } else {
          this.$message({
            message: '哎呀,出意外了。。。',
            type: 'warning'
          })
        }
        loading.close()
      })
    }
  }
}
</script>
<style scoped>
>>> .el-table__fixed-right {
  height: 100% !important;
}
/*详情表单*/
.demo-table-expand .el-form-item{
  width: 100%;
}
/*列表内文字过长加省略*/
.content-text{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap
}
/*分页上边距*/
.el-pagination {
  white-space: nowrap;
  padding: 2px 5px;
  color: #303133;
  font-weight: 700;
  margin-top: 10px;
}
.el-radio {
  margin-right: 10px;
}
.el-radio__label {
  font-size: 14px;
  padding-left: 2px !important;
}
/deep/.el-table__empty-block {
  width: 100%;
  text-align: center;
  margin: 0 auto;
}
</style>
src/views/components/previewPicture/index.vue
New file
@@ -0,0 +1,75 @@
<template>
  <div>
    <viewer :images="images">
      <img
        v-for="(src,index) in images"
        :key="index"
        class="v-img"
        :src="src.url"
        :alt="src.name"
        :style="imgStyle"
        :onerror="defaultImg"
      >
    </viewer>
  </div>
</template>
<script>
import { getFtpUrl } from '@/utils/base'
import { str2Array } from '@/utils/tools'
export default {
  props: {
    imgs: {
      type: [Array, String],
      default: function() {
        return []
      }
    },
    imgStyle: {
      type: String,
      default: 'width:100px; height:100px;'
    }
  },
  data() {
    return {
      defaultImg: 'this.src="' + require('../../../assets/404_images/404.png') + '"',
      images: []
    }
  },
  watch: {
    imgs(val) {
      if (typeof val === 'string') {
        this.images = str2Array(val)
      } else {
        this.images = val
      }
    }
  },
  created() {
    if (typeof this.imgs === 'string') {
      this.images = str2Array(this.imgs)
    } else {
      this.images = this.imgs
    }
  },
  mounted() {
    this.images.forEach(obj => {
      if (obj.path != undefined && obj.path.length > 0) {
        obj.url = this.getUrl(obj.path)
      }
    })
  },
  methods: {
    getUrl(path) {
      return getFtpUrl() + path
    }
  }
}
</script>
<style scoped>
  /* 图片预览层级*/
  .viewer-container {
    z-index: 90709102!important;
  }
</style>
src/views/components/tinymce/components/EditorImage.vue
New file
@@ -0,0 +1,111 @@
<template>
  <div class="upload-container">
    <el-button :style="{background:color,borderColor:color}" icon="el-icon-upload" size="mini" type="primary" @click=" dialogVisible=true">
      upload
    </el-button>
    <el-dialog :visible.sync="dialogVisible">
      <el-upload
        :multiple="true"
        :file-list="fileList"
        :show-file-list="true"
        :on-remove="handleRemove"
        :on-success="handleSuccess"
        :before-upload="beforeUpload"
        class="editor-slide-upload"
        action="https://httpbin.org/post"
        list-type="picture-card"
      >
        <el-button size="small" type="primary">
          Click upload
        </el-button>
      </el-upload>
      <el-button @click="dialogVisible = false">
        Cancel
      </el-button>
      <el-button type="primary" @click="handleSubmit">
        Confirm
      </el-button>
    </el-dialog>
  </div>
</template>
<script>
// import { getToken } from 'api/qiniu'
export default {
  name: 'EditorSlideUpload',
  props: {
    color: {
      type: String,
      default: '#1890ff'
    }
  },
  data() {
    return {
      dialogVisible: false,
      listObj: {},
      fileList: []
    }
  },
  methods: {
    checkAllSuccess() {
      return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess)
    },
    handleSubmit() {
      const arr = Object.keys(this.listObj).map(v => this.listObj[v])
      if (!this.checkAllSuccess()) {
        this.$message('Please wait for all images to be uploaded successfully. If there is a network problem, please refresh the page and upload again!')
        return
      }
      this.$emit('successCBK', arr)
      this.listObj = {}
      this.fileList = []
      this.dialogVisible = false
    },
    handleSuccess(response, file) {
      const uid = file.uid
      const objKeyArr = Object.keys(this.listObj)
      for (let i = 0, len = objKeyArr.length; i < len; i++) {
        if (this.listObj[objKeyArr[i]].uid === uid) {
          this.listObj[objKeyArr[i]].url = response.files.file
          this.listObj[objKeyArr[i]].hasSuccess = true
          return
        }
      }
    },
    handleRemove(file) {
      const uid = file.uid
      const objKeyArr = Object.keys(this.listObj)
      for (let i = 0, len = objKeyArr.length; i < len; i++) {
        if (this.listObj[objKeyArr[i]].uid === uid) {
          delete this.listObj[objKeyArr[i]]
          return
        }
      }
    },
    beforeUpload(file) {
      const _self = this
      const _URL = window.URL || window.webkitURL
      const fileName = file.uid
      this.listObj[fileName] = {}
      return new Promise((resolve, reject) => {
        const img = new Image()
        img.src = _URL.createObjectURL(file)
        img.onload = function() {
          _self.listObj[fileName] = { hasSuccess: false, uid: file.uid, width: this.width, height: this.height }
        }
        resolve(true)
      })
    }
  }
}
</script>
<style lang="scss" scoped>
  .editor-slide-upload {
    margin-bottom: 20px;
    .el-upload--picture-card {
      width: 100%;
    }
  }
</style>
src/views/components/tinymce/index.vue
New file
@@ -0,0 +1,166 @@
<template>
  <div>
    <textarea :id="id" />
    <!--<div class="editor-custom-btn-container">-->
    <!--<editorImage color="#1890ff" class="editor-upload-btn" @successCBK="imageSuccessCBK" />-->
    <!--</div>-->
  </div>
</template>
<script>
// import editorImage from './components/EditorImage'
import { getFtpUrl, getUploadUrl } from '@/utils/base'
import { guid } from '@/utils/tools'
export default {
  components: {
    // editorImage
  },
  props: {
    width: {
      type: String,
      default: '100%'
    },
    height: {
      type: String,
      default: '300px'
    },
    value: {
      type: String,
      default: ''
    },
    config: {
      type: Object,
      default: function() {
        return {
          imgUploadUrl: getUploadUrl()
        }
      }
    },
    tid: {
      type: String,
      default: 'edit-' + guid()
    }
  },
  data() {
    return {
      id: this.tid + new Date().getTime()
    }
  },
  watch: {
    value(val) {
      if (val == null) { val = '' }
      window.tinymce.get(this.id).setContent(val)
    }
  },
  destroyed() {
    this.destroyTinymce()
  },
  mounted() {
    // console.log(111)
    this.init()
  },
  methods: {
    init() {
      // console.log(this.id)
      const _this = this
      window.tinymce.init({
        selector: `#${this.id}`,
        body_class: 'panel-body ',
        skin: 'oxide',
        language: 'zh_CN',
        plugins: 'paste preview fullscreen code codesample lists image table hr emoticons',
        width: this.width,
        height: this.height,
        toolbar: [
          'paste fullscreen preview | undo redo | hr bold italic underline strikethrough | alignleft aligncenter alignright | outdent indent | removeformat subscript superscript',
          'bullist numlist link image charmap anchor pagebreak insertdatetime table emoticons forecolor backcolor'
        ],
        image_advtab: true,
        images_upload_handler: (blobInfo, success, failure) => {
          const xhr = new XMLHttpRequest()
          xhr.withCredentials = false
          xhr.open('POST', _this.config.imgUploadUrl)
          const formData = new FormData()
          formData.append('file', blobInfo.blob())
          xhr.onload = function(e) {
            if (xhr.status != 200) {
              failure('HTTP Error: ' + xhr.status)
              return
            }
            const json = JSON.parse(this.responseText)
            if (!json || typeof json.data[0].path != 'string') {
              failure('Invalid JSON: ' + xhr.responseText)
              return
            }
            success(getFtpUrl() + json.data[0].path)
          }
          xhr.send(formData)
          // const img = 'data:image/jpeg;base64,' + blobInfo.base64()
          // success(img)
        },
        init_instance_callback: editor => {
          if (_this.value) {
            editor.setContent(_this.value)
          }
          _this.hasInit = true
          editor.on('NodeChange Change KeyUp SetContent', () => {
            // this.hasChange = true
            this.$emit('input', editor.getContent())
          })
        }
        // external_plugins: {
        //   'powerpaste': 'http://www.server.com/application/external_plugins/powerpaste/plugin.js'
        // }
      })
    },
    destroyTinymce() {
      const tinymce = window.tinymce.get(`#${this.id}`)
      if (this.fullscreen) {
        tinymce.execCommand('mceFullScreen')
      }
      if (tinymce) {
        tinymce.destroy()
      }
    },
    setContent(value) {
      window.tinymce.get(this.id).setContent(value)
    },
    getContent() {
      return window.tinymce.get(this.id).getContent()
    },
    imageSuccessCBK(arr) {
      const _this = this
      arr.forEach(v => {
        window.tinymce.get(_this.tinymceId).insertContent(`<img class="wscnph" src="${v.url}" >`)
      })
    }
  }
}
</script>
<style scoped>
  .tinymce-container {
    position: relative;
    line-height: normal;
  }
  .tinymce-container>>>.mce-fullscreen {
    z-index: 10000;
  }
  .tinymce-textarea {
    visibility: hidden;
    z-index: -1;
  }
  .editor-custom-btn-container {
    position: absolute;
    right: 4px;
    top: 4px;
    /*z-index: 2005;*/
  }
  .fullscreen .editor-custom-btn-container {
    z-index: 10000;
    position: fixed;
  }
  .editor-upload-btn {
    display: inline-block;
  }
</style>
src/views/components/upload/index.vue
New file
@@ -0,0 +1,251 @@
<template>
  <div>
    <el-upload
      class="upload-demo"
      :action="defaultSettings.uploadUrl"
      :multiple="defaultSettings.multiple"
      name="file"
      :accept="defaultSettings.accept"
      :file-list="showList"
      :list-type="defaultSettings.type"
      :limit="defaultSettings.num"
      :disabled="defaultSettings.disabled"
      :on-exceed="handleExceed"
      :on-preview="handlePreview"
      :on-remove="handleRemove"
      :before-upload="beforeUpload"
      :on-success="handleUploadSuccess"
      :headers="headers"
      :drag="settings.drag"
    >
      <template v-if="settings.drag">
        <i class="el-icon-upload" />
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
      </template>
      <el-button v-if="!settings.drag" size="small" type="primary">{{ defaultSettings.title }}</el-button>
      <div v-if="defaultSettings.tip" slot="tip" class="el-upload__tip">{{ defaultSettings.tip }}</div>
      <div v-else slot="tip" class="el-upload__tip">只能上传{{ defaultSettings.num }}个格式为[{{ defaultSettings.accept }}]的文件,且不超过{{ defaultSettings.max/1024 }}M
      </div>
    </el-upload>
    <div id="uploadPreviewImages" style="display:none;">
      <span
        v-for="(src,index) in fileList"
        :key="index"
      >
        <img
          v-if="checkImg(src.name)"
          class="v-img"
          :src="src.url"
          :alt="src.name"
          style="width: 100px;height: 100px;"
        >
      </span>
    </div>
  </div>
</template>
<script>
import { getToken } from '@/utils/auth'
import { sessionToken } from '@/settings'
import { getFtpUrl } from '@/utils/base'
import Viewer from 'viewerjs'
import 'viewerjs/dist/viewer.css'
let viewer = null
export default {
  props: {
    values: {
      type: Array,
      default: function() {
        return []
      }
    },
    settings: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      headers: {
      },
      showList: [], // 用于详情展示
      fileList: [],
      defaultSettings: {
        title: '点击上传',
        max: 1024 * 100, // 最大大小,单位kb
        num: 1, // 支持上传图片个数
        accept: '.jpg,.jpeg,.png,.bmp,.pdf,.doc,.docx,.xls,.xlsx,.zip,.apk', // 限制格式
        tip: '', // 提示 默认:`只能上传${this.defaultSettings.num}个${this.defaultSettings.accept}文件,且不超过${this.defaultSettings.max}kb`
        uploadUrl: '', // 上传路径
        multiple: true, // 是否支持批量上传
        disabled: false, // 是否禁用
        type: 'picture' // text/picture
      }
    }
  },
  watch: {
    values(v) {
      this.fileList = Object.assign([], v)
      this.showList = Object.assign([], v)
      this.$nextTick(() => {
        this.initPreviewImg()
      })
    }
  },
  created() {
    this.showList = Object.assign([], this.values)
    this.fileList = Object.assign([], this.values)
    this.showList.forEach(obj => {
      obj.url = this.getUrl(obj.path)
    })
    this.fileList.forEach(obj => {
      obj.url = this.getUrl(obj.path)
    })
    this.defaultSettings = Object.assign(this.defaultSettings, this.settings)
    // console.log(this.defaultSettings)
    // this.$nextTick(() => {
    //   new Viewer(document.getElementsByClassName('el-upload-list'))
    // })
  },
  mounted() {
    this.initPreviewImg()
    this.headers[sessionToken] = getToken()
  },
  methods: {
    handleRemove(file, fileList) {
      for (let i = 0; i < this.fileList.length; i++) {
        const img = this.fileList[i]
        if (file.uid == img.uid) {
          this.fileList.splice(i, 1)
          break
        }
      }
      this.$nextTick(() => {
        this.initPreviewImg()
      })
    },
    handleExceed(files, fileList) {
      this.$message.warning('最多上传' + this.defaultSettings.num + '个文件')
    },
    beforeUpload(file) {
      // console.log('upload before')
      let isRepeat = true
      for (let i = 0; i < this.fileList.length; i++) {
        const f = this.fileList[i]
        if (file.name == f.name) {
          isRepeat = false
          break
        }
      }
      if (!isRepeat) {
        this.$message.error('该文件已存在!')
      }
      const isImg = this.defaultSettings.accept.split(',').indexOf(file.name.substr(file.name.lastIndexOf('.'), file.name.length).toLocaleString()) > -1
      const isLt2M = file.size / 1024 < this.defaultSettings.max
      if (!isImg) {
        this.$message.error('上传文件格式只能是 ' + this.defaultSettings.accept + ' 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传文件大小不能超过 ' + this.defaultSettings.max / 1024 + 'M!' + '当前文件大小:' + parseInt(file.size / 1024 / 1024) + 'M')
      }
      return isImg && isLt2M && isRepeat
    },
    handleUploadSuccess(response, file, fileList) {
      // console.log('upload sucess')
      // console.log(response.data)
      response.data.forEach(f => {
        this.fileList.push({
          uid: file.uid,
          name: f.name,
          url: this.getUrl(f.path),
          path: f.path,
          attSize: f.attSize || null,
          fileTime: f.fileTime || null
        })
      })
      this.$nextTick(() => {
        this.initPreviewImg()
      })
    },
    getContent() {
      return this.fileList
    },
    handlePreview(file) {
      if (!this.checkImg(file.name)) {
        return false
      }
      let index = 0
      for (let i = 0; i < this.fileList.length; i++) {
        const f = this.fileList[i]
        if (this.checkImg(f.name)) {
          if (file.uid == f.uid) {
            break
          }
          index++
        }
      }
      // this.fileList.forEach((f, i) => {
      //   if (file.uid == f.uid) {
      //     index = i
      //   }
      // })
      // document.querySelector('#uploadPreviewImages').children[0].click()
      viewer.view(index)
    },
    /*
     * @Author : liu.q [916000612@qq.com]
     * @Date : 2019-05-26 14:48
     * @Description : 初始化
     */
    initPreviewImg() {
      if (viewer != null) {
        viewer.destroy()
      }
      const ViewerDom = document.querySelector('#uploadPreviewImages')
      viewer = new Viewer(ViewerDom, {
      })
      // console.log(this.fileList)
    },
    /*
     * @Author : liu.q [916000612@qq.com]
     * @Date : 2019-05-26 14:48
     * @Description : 校验图片
     */
    checkImg(name) {
      const suffix = name.substring(name.lastIndexOf('.'), name.length)
      const imgArray = ['.jpg', '.jpeg', '.png', '.bmp']
      if (imgArray.indexOf(suffix) < 0) {
        return false
      }
      return true
    },
    getUrl(path) {
      if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
        return path
      } else {
        return getFtpUrl() + path
      }
    }
  }
}
</script>
<style scoped>
  /* 图片预览层级*/
  .viewer-container {
    z-index: 90709102!important;
  }
</style>
src/views/components/uploadFile/index.vue
New file
@@ -0,0 +1,173 @@
<template>
  <div>
    <el-upload
      class="upload-demo"
      drag
      :action="defaultSettings.uploadUrl"
      :multiple="defaultSettings.multiple"
      name="file"
      :accept="defaultSettings.accept"
      :file-list="showList"
      :list-type="defaultSettings.type"
      :limit="defaultSettings.num"
      :disabled="defaultSettings.disabled"
      :on-exceed="handleExceed"
      :on-remove="handleRemove"
      :before-upload="beforeUpload"
      :on-success="handleUploadSuccess"
      :headers="headers"
    >
      <i class="el-icon-upload" />
      <div class="el-upload__text">将文件拖到此处,或<em>{{ defaultSettings.title }}</em></div>
      <div slot="tip" class="el-upload__tip">
        只能上传{{ defaultSettings.num }}个,且格式为[{{ defaultSettings.accept }}]的文件,
        且不超过{{ defaultSettings.max }}MB
      </div>
    </el-upload>
  </div>
</template>
<script>
import { getToken } from '@/utils/auth'
import { sessionToken } from '@/settings'
import { getFtpUrl } from '@/utils/base'
export default {
  props: {
    values: {
      type: Array,
      default: function() {
        return []
      }
    },
    settings: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      headers: {
      },
      showList: [], // 用于详情展示
      fileList: [],
      defaultSettings: {
        title: '点击上传',
        max: 100, // 最大大小,单位MB
        num: 1, // 支持上传文件个数
        accept: '.jpg,.png,.pdf,.doc,.docx,.xls,.xlsx,.zip,.txt,.rar,.ppt,.pptx,.xlt', // 限制格式
        tip: '', // 提示 默认:`只能上传${this.defaultSettings.num}个${this.defaultSettings.accept}文件,且不超过${this.defaultSettings.max}MB`
        uploadUrl: '', // 上传路径
        multiple: true, // 是否支持批量上传
        disabled: false, // 是否禁用
        type: 'text' // text/picture
      }
    }
  },
  watch: {
    values(v) {
      this.fileList = Object.assign([], v)
      this.showList = Object.assign([], v)
      this.showList.forEach(obj => {
        obj.url = this.getUrl(obj.path)
      })
      this.fileList.forEach(obj => {
        obj.url = this.getUrl(obj.path)
      })
    }
  },
  created() {
    this.showList = Object.assign([], this.values)
    this.fileList = Object.assign([], this.values)
    this.showList.forEach(obj => {
      obj.url = this.getUrl(obj.path)
    })
    this.fileList.forEach(obj => {
      obj.url = this.getUrl(obj.path)
    })
    this.defaultSettings = Object.assign(this.defaultSettings, this.settings)
  },
  mounted() {
    this.headers[sessionToken] = getToken()
  },
  methods: {
    handleRemove(file, fileList) {
      for (let i = 0; i < this.fileList.length; i++) {
        const img = this.fileList[i]
        if (file.uid == img.uid) {
          this.fileList.splice(i, 1)
          break
        }
      }
    },
    handleExceed(files, fileList) {
      this.$message.warning('最多上传' + this.defaultSettings.num + '个文件')
    },
    beforeUpload(file) {
      let isRepeat = true
      for (let i = 0; i < this.fileList.length; i++) {
        const f = this.fileList[i]
        if (file.name == f.name) {
          isRepeat = false
          break
        }
      }
      if (!isRepeat) {
        this.$message.error('该文件已存在!')
      }
      const isImg = this.defaultSettings.accept.split(',').indexOf(file.name.substr(file.name.lastIndexOf('.'), file.name.length).toLocaleString()) > -1
      const isLt2M = file.size / 1024 / 1024 < this.defaultSettings.max
      if (!isImg) {
        this.$message.error('上传文件格式只能是 ' + this.defaultSettings.accept + ' 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传文件大小不能超过 ' + this.defaultSettings.max + 'MB')
      }
      return isImg && isLt2M && isRepeat
    },
    handleUploadSuccess(response, file, fileList) {
      if (response.code == 10000) {
        response.data.forEach(f => {
          this.fileList.push({
            uid: file.uid,
            name: f.name,
            url: this.getUrl(f.path),
            path: f.path
          })
        })
      } else {
        // 上传失败,把显示的上传文件List中相应失败的文件剔除
        this.showList = this.fileList
        console.log('上传失败!')
        this.$message.warning('上传失败!')
      }
    },
    getContent() {
      return this.fileList
    },
    getUrl(path) {
      if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') {
        return path
      } else {
        return getFtpUrl() + path
      }
    }
  }
}
</script>
<style scoped>
  /* 图片预览层级*/
  .viewer-container {
    z-index: 90709102!important;
  }
</style>
src/views/components/userAuth/auth.vue
New file
@@ -0,0 +1,58 @@
<template>
  <win2 :title="title" @close="close">
    <ztree ref="ztree" :nodes="nodes" />
    <div slot="footer" align="center" class="dialog-footer">
      <my-button-v2 name="取消" site="form" @click="close" />
      <my-button-v2 name="保存" site="form" @click="save" />
    </div>
  </win2>
</template>
<script>
import win2 from '@/views/components/win2'
import myButtonV2 from '@/views/components/myButtonV2'
import ztree from '@/views/components/ztree'
import { getUserAuthZTree } from '@/api/common.js'
export default {
  components: { win2, myButtonV2, ztree },
  props: {
    setting: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      title: '选择用户',
      nodes: []
    }
  },
  created() {
    this.getInfo()
  },
  methods: {
    getInfo() {
      if (this.setting.businessType && this.setting.businessId) {
        getUserAuthZTree(this.setting).then(res => {
          this.nodes = res.data
        })
      }
    },
    close() {
      this.$emit('close')
    },
    save() {
      const checkedNodes = this.$refs.ztree.getCheckedNodes()
      // 如果是单选,需要判断选择的节点个数
      if (this.setting.isRadio != undefined && this.setting.isRadio && checkedNodes.length > 1) {
        this.$message.info('只能选择一个人员,请检查重试!')
        return
      }
      this.$emit('saveUser', checkedNodes)
      this.close()
    }
  }
}
</script>
src/views/components/userAuth/index.vue
New file
@@ -0,0 +1,100 @@
<template>
  <win2 :title="title" @close="close">
    <el-form :model="formData" label-width="120px">
      <el-form-item label="已授权用户:">
        <span v-for="(item ,idx) in formData.userNames" :key="idx">
          {{ idx == 0?'':'、' }}
          <el-tag type="success">
            {{ item }}
          </el-tag>
        </span>
      </el-form-item>
      <el-form-item label="授权用户:">
        <el-button size="mini" type="primary" @click="authShow=true">选择...</el-button>
      </el-form-item>
    </el-form>
    <div slot="footer" align="center" class="dialog-footer">
      <my-button-v2 name="取消" site="form" @click="close" />
      <my-button-v2 name="保存" site="form" @click="save" />
    </div>
    <!--用户选择弹窗-->
    <auth v-if="authShow" :setting="setting" @close="authShow=false" @saveUser="saveUser" />
  </win2>
</template>
<script>
import win2 from '@/views/components/win2'
import myButtonV2 from '@/views/components/myButtonV2'
import { getAuthUser, saveUserAuth } from '@/api/common.js'
import auth from './auth'
export default {
  components: { win2, myButtonV2, auth },
  props: {
    setting: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      title: '授权用户',
      formData: {
        userIds: [],
        userNames: []
      },
      authShow: false
    }
  },
  created() {
    this.getInfo()
  },
  methods: {
    getInfo() {
      if (this.setting.businessType && this.setting.businessId) {
        getAuthUser(this.setting).then(res => {
          const data = res.data
          data.forEach(item => {
            this.formData.userIds.push(item.userId)
            this.formData.userNames.push(item.userName)
          })
        })
      }
    },
    saveUser(checkedNodes) {
      const userIds = []
      const userNames = []
      checkedNodes.forEach(item => {
        userIds.push(item.id)
        userNames.push(item.name)
      })
      this.formData.userIds = userIds
      this.formData.userNames = userNames
    },
    close() {
      this.$emit('close')
    },
    save() {
      const params = {
        businessType: this.setting.businessType,
        businessId: this.setting.businessId,
        userIds: this.formData.userIds.join(',')
      }
      if (!params.businessType || !params.businessId) {
        this.$message.error('缺少业务ID,业务类型。')
        return false
      }
      saveUserAuth(params).then(response => {
        debugger
        if (response.code == 10000 && response.data > 0) {
          this.$message.success('保存成功!')
          this.close()
        } else {
          this.$message.error(response.description || '保存失败!')
        }
      })
    }
  }
}
</script>
src/views/components/verify/css/index.css
New file
@@ -0,0 +1,1346 @@
body, html {
  -webkit-tap-highlight-color:transparent
}
.userSelNone {
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-sprite-icon {
  background:url(data:image/png;base64,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)
}
@media(-webkit-min-device-pixel-ratio:1.5) {
  .td-sprite-icon {
    background:url(data:image/png;base64,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);
    background-size:69px 628px;
    -moz-background-size:69px 628px;
    -webkit-background-size:69px 628px;
    -o-background-size:69px 628px
  }
}
.td-pop-slide-title {
  padding:9px 0 11px 0;
  overflow:hidden
}
.td-pop-3d-title {
  text-align:left;
  padding:9px 0 11px 0;
  overflow:hidden
}
.td-pop-click-title {
  text-align:left;
  padding:13px 0 10px 0;
  overflow:hidden
}
.td-pop-title {
  float:left;
  height:20px;
  font-size:14px;
  font-family:PingFangSC-Regular;
  font-weight:400;
  color:#515151;
  line-height:20px;
  z-index:99;
  text-align:left
}
.td-pop-title-icon-test {
  position:absolute;
  -webkit-transform:scale(0.8);
  -moz-transform:scale(0.8);
  -ms-transform:scale(0.8);
  -o-transform:scale(0.8);
  transform:scale(0.8);
  top:-1px;
  left:325px;
  width:24px;
  height:24px
}
.td-pop-title-icon-test:hover>.td-icon-tooltip {
  width:50px;
  display:block;
  opacity:.9;
  top:2px;
  left:-69px;
  color:white
}
.td-pop-hint {
  display:inline-block;
  margin-left:6px;
  width:auto
}
.td-pop-status {
  display:inline-block
}
.td-pop-center-cnt {
  position:relative
}
.td-pop-center {
  width:320px;
  height:180px;
  background-size:cover;
  position:relative;
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-bg-img, .td-3d-bg-img {
  position:absolute!important;
  top:0!important;
  left:0!important
}
.td-bg-slogan {
  position:absolute;
  right:7px;
  bottom:6px;
  font-size:12px;
  color:#fff;
  display:none
}
.td-bg-slogan .td-logo-transparent-icon {
  width:12px;
  height:12px;
  line-height:12px;
  display:inline-block;
  vertical-align:middle;
  margin-right:2px
}
.td-bg-slogan .td-logo-transparent-iconfont {
  display:inline-block;
  vertical-align:middle;
  font-size:12px
}
.td-bg-slogan .td-logo-text {
  vertical-align:middle;
  -moz-user-select:none;
  -o-user-select:none;
  -khtml-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  user-select:none
}
.td-slide-wrap {
  position:relative;
  margin-top:20px
}
.td-pop-slidebar {
  background-color:#eaeaea;
  height:30px;
  border-radius:19px;
  margin-top:12px;
  overflow:hidden
}
.td-pop-slidebar .td-pop-slidebar-tip {
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none;
  opacity:1;
  -webkit-transition:opacity 2.3s;
  -moz-transition:opacity 2.3s;
  -ms-transition:opacity 2.3s;
  -o-transition:opacity 2.3s;
  transition:opacity 2.3s;
  line-height:30px;
  text-align:center;
  font-family:PingFangSC-Regular;
  font-size:12px;
  font-weight:400;
  color:rgba(141, 142, 146, 0.87);
  letter-spacing:1px
}
.td-pop-slidebar .td-pop-slidebar-tip-sub {
  font-family:'Fascinate', 'Arial Narrow', Arial, sans-serif;
  line-height:32px;
  text-align:center;
  font-size:15px;
  color:grey
}
.td-pop-slidebar .mousedown {
  filter:alpha(opacity=0);
  opacity:0;
  -webkit-transition:opacity .4s;
  -moz-transition:opacity .4s;
  -ms-transition:opacity .4s;
  -o-transition:opacity .4s;
  transition:opacity .4s
}
@keyframes highLight {
  0% {
    background-position:-84px 0
  }
  100% {
    background-position:84px 0
  }
}
.td-pop-slide-identity {
  position:absolute;
  left:0;
  top:100px;
  -webkit-transform:translate(0px, 0px);
  -moz-transform:translate(0px, 0px);
  -ms-transform:translate(0px, 0px);
  -o-transform:translate(0px, 0px);
  transform:translate(0px, 0px);
  filter:drop-shadow(0 0 4px rgba(0, 0, 0, 0.98))
}
.td-pop-slidetrigger {
  position:absolute;
  cursor:pointer;
  top:-4px;
  width:58px;
  height:40px;
  -webkit-transform:translate(0px, 0px);
  -moz-transform:translate(0px, 0px);
  -ms-transform:translate(0px, 0px);
  -o-transform:translate(0px, 0px);
  transform:translate(0px, 0px)
}
.slide .td-pop-footer {
  margin:15px 0
}
.click .td-pop-footer {
  margin:19px 0 15px 0
}
.td-pop-footer {
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-pop-footer .td-icon-set {
  border-right:1px solid transparent;
  box-sizing:content-box!important;
  height:16px
}
.td-pop-footer .icon {
  border:1px solid transparent;
  width:18px;
  height:18px;
  cursor:pointer;
  display:inline-block;
  margin-left:17px;
  position:relative;
  float:right;
  box-sizing:content-box!important
}
.td-pop-footer .icon:hover>.td-icon-tooltip {
  display:block;
  opacity:.9
}
.td-pop-footer .td-icon-refresh {
  vertical-align:top
}
.td-pop-footer .td-icon-info {
  margin:0;
  float:left;
  width:18px;
  height:18px
}
.td-pop-footer .td-home-link {
  color:#919399;
  text-decoration:none;
  vertical-align:bottom;
  line-height:16px;
  font-size:12px;
  float:right
}
.td-pop-footer .td-pop-info {
  float:right;
  font-size:12px;
  color:#919399;
  margin-top:-3px
}
.td-pop-footer .td-pop-info span {
  line-height:16px;
  vertical-align:top;
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-pop-status {
  position:absolute;
  right:15px;
  top:13px
}
.td-pop-status .td-pop-status-mark {
  position:relative;
  display:inline-block;
  margin-left:2px;
  vertical-align:top;
  width:20px;
  height:20px;
  border:2px solid #a8a8a8;
  border-radius:50%;
  background-color:#FFF;
  box-sizing:border-box;
  -webkit-transition:all .3s ease;
  -moz-transition:all .3s ease;
  -ms-transition:all .3s ease;
  -o-transition:all .3s ease;
  transition:all .3s ease
}
.td-pop-status .td-pop-status-mark.checked {
  border:2px solid #FFF;
  background-color:#249be2;
  box-shadow:0 0 5px black
}
.td-pop-status .td-pop-status-mark.checked .no {
  color:white
}
.td-pop-status .td-pop-status-mark .no {
  position:absolute;
  top:50%;
  left:0;
  margin-top:-10px;
  width:100%;
  height:20px;
  line-height:20px;
  font-size:14px;
  font-weight:bold;
  color:#a8a8a8;
  text-align:center;
  cursor:default;
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-click-mark {
  position:absolute;
  margin:-14px 0 0 -14px;
  width:28px;
  height:28px;
  border:3px solid white;
  border-radius:50%;
  background-color:#249be2;
  box-sizing:border-box;
  box-shadow:0 0 10px black;
  -webkit-transition:all .3s ease;
  -moz-transition:all .3s ease;
  -ms-transition:all .3s ease;
  -o-transition:all .3s ease;
  transition:all .3s ease;
  opacity:0
}
.td-click-mark .no {
  position:absolute;
  top:50%;
  left:0;
  margin-top:-12px;
  width:100%;
  height:24px;
  line-height:24px;
  font-size:18px;
  font-weight:bold;
  color:white;
  text-align:center;
  cursor:default;
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-click-mark-sample {
  position:absolute;
  margin:-14px 0 0 -14px;
  width:28px;
  height:28px;
  border:3px solid white;
  border-radius:50%;
  background-color:#aaa;
  box-sizing:border-box;
  box-shadow:0 0 10px black;
  -webkit-transition:all .3s ease;
  -moz-transition:all .3s ease;
  -ms-transition:all .3s ease;
  -o-transition:all .3s ease;
  transition:all .3s ease;
  opacity:0;
  pointer-events:none
}
.td-click-mark-sample .no {
  position:absolute;
  top:50%;
  left:0;
  margin-top:-12px;
  width:100%;
  height:24px;
  line-height:24px;
  font-size:18px;
  font-weight:bold;
  color:white;
  text-align:center;
  cursor:default;
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-icon-tooltip {
  position:absolute;
  top:-29px;
  left:-9px;
  border-radius:2px;
  padding:0 4px;
  height:19px;
  line-height:19px;
  background-color:#5f5f5f;
  white-space:nowrap;
  font-size:12px;
  text-align:center;
  color:white;
  display:none;
  z-index:999
}
.td-outer-wrapper {
  position:fixed;
  width:100%;
  height:100%;
  left:0;
  top:0;
  z-index:100;
  display:none
}
.td-outer-wrapper.feedback {
  z-index:102
}
.td-mask-common {
  width:100%;
  height:100%
}
.td-mask-common.grey {
  background-color:#000;
  opacity:.45;
  filter:alpha(opacity=45)
}
.td-mask-feedback-cnt {
  position:static;
  display:inline-block;
  margin:0 auto;
  text-align:center;
  z-index:103;
  background:white;
  width:180px;
  display:none
}
.td-mask-feedback-cnt .title {
  font-size:18px;
  padding:18px 0
}
.td-mask-feedback-cnt .footer {
  font-size:12px;
  line-height:30px;
  color:#919399;
  border-top:1px solid #eee
}
.td-tooltip-inner {
  max-width:250px;
  padding:6px 8px;
  color:#fff;
  text-align:left;
  text-decoration:none;
  background-color:rgba(0, 0, 0, 0.75);
  border-radius:4px;
  -webkit-box-shadow:0 2px 8px rgba(0, 0, 0, 0.15);
  box-shadow:0 2px 8px rgba(0, 0, 0, 0.15);
  min-height:32px
}
.td-pop-title-icon-test {
  background-position:-17px -1819px
}
.td-logo-transparent-icon {
  background-position:-24px 153px
}
.td-pop-slidetrigger {
  background-position:-10px -294px
}
.td-pop-slidetrigger.mousedown {
  background-position:-11px -249px
}
.td-btn-cnt .td-logo-icon {
  background-position:-18px 97px
}
.td-btn-cnt .td-success-icon {
  background-position:-18px 124px
}
.td-btn-cnt .td-fail-icon {
  background-position:-16px -74px
}
.td_validate_box .td_logo_img {
  background-position:-16px 190px
}
.td_fail_box .td_fail_img.td_validate_fail {
  background-position:-19px -178px
}
.td_fail_box .td_fail_img.td_bad_network {
  background-position:-15px -142px
}
.td_fail_box .td_fail_img.td_op2much {
  background-position:-18px -216px
}
.td_success_box .td_success_img {
  background-position:-14px -404px
}
.td-pop-footer .td-icon-close {
  background-position:-17px -374px
}
.td-pop-footer .td-icon-refresh {
  background-position:-15px -348px
}
.td-pop-footer .td-icon-info {
  background-position:-17px 616px
}
img {
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none
}
.td-btn-cnt {
  color:#444;
  -webkit-box-sizing:content-box;
  -moz-box-sizing:content-box;
  box-sizing:content-box
}
.td-btn-cnt span {
  margin:0!important;
  padding:0!important
}
.td-btn-cnt div {
  margin:0!important;
  padding:0!important;
  -webkit-box-sizing:content-box;
  -moz-box-sizing:content-box;
  box-sizing:content-box
}
.td-btn-cnt .td-logo-icon {
  margin:0 4px 1px 0!important;
  padding:0!important;
  display:inline-block;
  vertical-align:middle;
  width:24px;
  height:24px
}
.td-btn-cnt .td-success-icon {
  margin:0 4px 1px 0!important;
  padding:0!important;
  display:inline-block;
  vertical-align:middle;
  width:24px;
  height:20px
}
.td-btn-cnt .td-fail-icon {
  margin:0 4px 0 0!important;
  padding:0!important;
  display:inline-block;
  vertical-align:middle;
  width:24px;
  height:24px;
  margin:0 4px 2px 0 \9!important
}
.td-btn-cnt .td-btn-wrapper {
  margin:0!important;
  padding:0!important;
  position:relative;
  border-radius:2px;
  text-align:center
}
.td-btn-cnt .td-btn-wrapper .td-btn-content {
  line-height:40px;
  color:#444;
  font-size:14px
}
.td-btn-cnt .td-icon-container {
  margin:0!important;
  padding:0!important;
  display:inline-block
}
.td-btn-cnt .td-btn-logo {
  cursor:pointer;
  display:block;
  border:1px solid #ccc;
  background:linear-gradient(#fcfcfc, #f5f5f5)
}
.td-btn-cnt .td-btn-logo:hover {
  -webkit-transition:all .2s;
  -moz-transition:all .2s;
  -ms-transition:all .2s;
  -o-transition:all .2s;
  transition:all .2s;
  background:linear-gradient(#f5f5f5, #fcfcfc);
  color:#507fff
}
.td-btn-cnt .td-btn-loading {
  border:1px solid #ccc;
  background:linear-gradient(#fcfcfc, #f5f5f5);
  display:none
}
.td-btn-cnt .td-btn-validate {
  display:none;
  border:1px solid #ccc;
  background:linear-gradient(#fcfcfc, #f5f5f5)
}
.td-btn-cnt .td-btn-success {
  margin:0!important;
  padding:0!important;
  position:absolute;
  top:0;
  left:0;
  cursor:default;
  height:0;
  overflow:hidden;
  background-color:rgba(80, 127, 255, 0.1);
  -webkit-transition:height .33s ease-out;
  -moz-transition:height .33s ease-out;
  -ms-transition:height .33s ease-out;
  -o-transition:height .33s ease-out;
  transition:height .33s ease-out;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0)
}
.td-btn-cnt .td-btn-success span {
  opacity:0;
  -webkit-transition:opacity .36s;
  -moz-transition:opacity .36s;
  -ms-transition:opacity .36s;
  -o-transition:opacity .36s;
  transition:opacity .36s
}
.td-btn-cnt .td-btn-success .td-btn-success-content {
  margin:0!important;
  padding:0!important;
  height:100%;
  box-sizing:border-box;
  width:100%;
  -webkit-transition:height .1s .3s linear;
  -moz-transition:height .1s .3s linear;
  -ms-transition:height .1s .3s linear;
  -o-transition:height .1s .3s linear;
  transition:height .1s .3s linear;
  border:1px solid #507fff;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0)
}
.td-btn-cnt .td-btn-fail {
  display:none;
  cursor:pointer;
  border:1px solid #ccc;
  background:linear-gradient(#fcfcfc, #f5f5f5)
}
.td-btn-cnt.loading .td-btn-validate {
  display:none
}
.td-btn-cnt.loading .td-btn-fail {
  display:none
}
.td-btn-cnt.loading .td-btn-logo {
  display:none
}
.td-btn-cnt.loading .td-btn-success {
  display:none
}
.td-btn-cnt.loading .td-btn-loading {
  display:block
}
.td-btn-cnt.loading .td-btn-loading .td-logo-icon {
  animation:icon_spin .9s ease infinite both
}
.td-btn-cnt.validate .td-btn-validate {
  display:block
}
.td-btn-cnt.validate .td-btn-fail {
  display:none
}
.td-btn-cnt.validate .td-btn-logo {
  display:none
}
.td-btn-cnt.validate .td-btn-success {
  display:none
}
.td-btn-cnt.validate .td-btn-loading {
  display:none
}
.td-btn-cnt.validate .td-btn-loading .td-logo-icon {
  animation:none
}
.td-btn-cnt.success {
  pointer-events:none
}
.td-btn-cnt.success .td-btn-logo {
  display:none
}
.td-btn-cnt.success .td-btn-success {
  height:40px
}
.td-btn-cnt.success .td-btn-success .td-icon-container {
  animation:bounce .36s ease;
  animation-fill-mode:backwards
}
.td-btn-cnt.success .td-btn-success span {
  opacity:1
}
.td-btn-cnt.success .td-btn-loading {
  display:none
}
.td-btn-cnt.fail .td-btn-fail {
  display:block
}
.td-btn-cnt.fail .td-btn-fail .td-fail-icon {
  animation-fill-mode:backwards;
  animation:shrink .33s ease
}
.td-btn-cnt.fail .td-btn-validate {
  display:none
}
.td-btn-cnt.fail .td-btn-logo {
  display:none
}
.td-btn-cnt.fail .td-btn-success {
  display:none
}
.td-btn-cnt.fail .td-btn-loading {
  display:none
}
.td-btn-cnt.fail .td-btn-loading .td-logo-icon {
  animation:none
}
.td-popup-info {
  -moz-user-select:none;
  -webkit-user-select:none;
  -ms-user-select:none;
  -khtml-user-select:none;
  user-select:none;
  display:none;
  height:124px
}
.td-popup-info .td-popup-content {
  position:relative;
  height:34px;
  text-align:center
}
.td-popup-info .td-popup-content .td_validate_box {
  position:absolute;
  top:33px;
  left:50%;
  margin-left:-19px;
  width:38px;
  height:38px;
  display:none
}
.td-popup-info .td-popup-content .td_validate_box .td_logo_img {
  padding:0!important;
  margin:0!important;
  display:inline-block;
  width:25px;
  height:25px;
  -webkit-animation:icon_rotate 1.9s linear infinite both;
  -o-animation:icon_rotate 1.9s linear infinite both;
  -moz-animation:icon_rotate 1.9s linear infinite both;
  animation:icon_rotate 1.9s linear infinite both
}
.td-popup-info .td-popup-content .td_fail_box {
  position:absolute;
  top:33px;
  left:50%;
  margin-left:-14px;
  width:28px;
  height:28px;
  display:none
}
.td-popup-info .td-popup-content .td_fail_box .td_fail_img {
  padding:0!important;
  margin:0!important;
  display:inline-block;
  width:28px;
  height:28px
}
.td-popup-info .td-popup-content .td_success_box {
  position:absolute;
  top:33px;
  left:50%;
  margin-left:-14px;
  border-radius:50%;
  width:28px;
  height:28px;
  display:none
}
.td-popup-info .td-popup-content .td_success_box .td_success_img {
  padding:0!important;
  margin:0!important;
  display:inline-block;
  width:28px;
  height:28px
}
.td-popup-info .td-popup-content .td_validate_msg {
  padding-top:72px;
  text-align:center;
  font-size:12px;
  font-family:PingFangSC-Regular;
  font-weight:400
}
.td-popup-info .td-popup-footer {
  text-align:center;
  font-size:12px;
  color:#797b80;
  margin-top:30px;
  line-height:30px;
  border-top:1px solid #ddd
}
.td-outer-wrapper.pop .slide .td-pop-slide-area, .td-outer-wrapper.pop .click .td-pop-slide-area {
  padding:0 15px;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0)
}
.td-outer-wrapper.pop .slide .td-pop-click-area, .td-outer-wrapper.pop .click .td-pop-click-area {
  padding:0 15px;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0)
}
.td-outer-wrapper.pop .slide .td-pop-3d-area, .td-outer-wrapper.pop .click .td-pop-3d-area {
  padding:0 15px;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0)
}
.td-outer-wrapper.pop .slide .td-pop-center-cnt, .td-outer-wrapper.pop .click .td-pop-center-cnt {
  overflow:hidden
}
.td-outer-wrapper.pop .slide .td-pop-center-cnt .td-pop-click-msg, .td-outer-wrapper.pop .click .td-pop-center-cnt .td-pop-click-msg {
  font-family:PingFangSC-Regular;
  position:absolute;
  top:-28px;
  left:0;
  text-align:center;
  width:320px;
  line-height:28px;
  color:white;
  z-index:20;
  transform:translateZ(0)
}
.td-outer-wrapper.pop .slide .td-pop-center-cnt .td-pop-click-msg.success, .td-outer-wrapper.pop .click .td-pop-center-cnt .td-pop-click-msg.success {
  -webkit-animation:show_msg 1.5s linear;
  -o-animation:show_msg 1.5s linear;
  -moz-animation:show_msg 1.5s linear;
  animation:show_msg 1.5s linear;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards;
  background-color:#507fff
}
.td-outer-wrapper.pop .slide .td-pop-center-cnt .td-pop-click-msg.fail, .td-outer-wrapper.pop .click .td-pop-center-cnt .td-pop-click-msg.fail {
  -webkit-animation:show_msg 1.5s linear;
  -o-animation:show_msg 1.5s linear;
  -moz-animation:show_msg 1.5s linear;
  animation:show_msg 1.5s linear;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards;
  background-color:#fc825b
}
.td-outer-wrapper.pop .slide .td-pop-center-cnt .td-pop-click-msg.warn, .td-outer-wrapper.pop .click .td-pop-center-cnt .td-pop-click-msg.warn {
  -webkit-animation:show_msg 1.5s linear;
  -o-animation:show_msg 1.5s linear;
  -moz-animation:show_msg 1.5s linear;
  animation:show_msg 1.5s linear;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards;
  background-color:#ffa421
}
.td-outer-wrapper.pop .slide .td-pop-center, .td-outer-wrapper.pop .click .td-pop-center {
  overflow:hidden
}
.td-outer-wrapper.pop .slide .td-pop-center.disabled, .td-outer-wrapper.pop .click .td-pop-center.disabled {
  pointer-events:none
}
.td-outer-wrapper.pop .slide .td-pop-center .td-pop-slide-msg, .td-outer-wrapper.pop .click .td-pop-center .td-pop-slide-msg {
  font-family:PingFangSC-Regular;
  font-weight:400;
  color:rgba(255, 255, 255, 0.87);
  line-height:28px;
  position:relative;
  top:-28px;
  text-align:center;
  display:block;
  color:white;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0);
  z-index:20;
  font-size:14px
}
.td-outer-wrapper.pop .slide .td-pop-center .td-pop-slide-msg.success, .td-outer-wrapper.pop .click .td-pop-center .td-pop-slide-msg.success {
  -webkit-animation:show_msg 1.5s linear;
  -o-animation:show_msg 1.5s linear;
  -moz-animation:show_msg 1.5s linear;
  animation:show_msg 1.5s linear;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards;
  background-color:#507fff
}
.td-outer-wrapper.pop .slide .td-pop-center .td-pop-slide-msg.fail, .td-outer-wrapper.pop .click .td-pop-center .td-pop-slide-msg.fail {
  -webkit-animation:show_msg 1.5s linear;
  -o-animation:show_msg 1.5s linear;
  -moz-animation:show_msg 1.5s linear;
  animation:show_msg 1.5s linear;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards;
  background-color:#fc825b
}
.td-outer-wrapper.pop .slide .td-pop-center .td-pop-slide-msg.warn, .td-outer-wrapper.pop .click .td-pop-center .td-pop-slide-msg.warn {
  -webkit-animation:show_msg 1.5s linear;
  -o-animation:show_msg 1.5s linear;
  -moz-animation:show_msg 1.5s linear;
  animation:show_msg 1.5s linear;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards;
  background-color:#ffa421
}
.td-outer-wrapper.pop .slide .td-pop-center .refresh-bg, .td-outer-wrapper.pop .click .td-pop-center .refresh-bg {
  display:block;
  filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#E5ffffff, ff, endColorstr=#E5ffffff, ff);
background:rgba(255, 255, 255, 0.9);
position:absolute;
left:0;
top:-1px;
width:320px;
height:182px;
z-index:99;
text-align:center
}
.td-outer-wrapper.pop .slide .td-pop-center .initial, .td-outer-wrapper.pop .click .td-pop-center .initial {
  background:#e4e4e4
}
.td-outer-wrapper.pop .slide .td-pop-center .loading-icon, .td-outer-wrapper.pop .click .td-pop-center .loading-icon {
  width:40px;
  height:40px;
  margin:70px auto 0
}
.td-outer-wrapper {
  box-sizing:content-box;
  position:fixed;
  width:100%;
  height:100%;
  left:0;
  top:0;
  z-index:100;
  display:none;
  -webkit-transition:opacity 1.5s;
  -moz-transition:opacity 1.5s;
  -ms-transition:opacity .5s;
  -o-transition:opacity .5s;
  transition:opacity .5s;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  opacity:0
}
.td-pop-cnt {
  position:absolute;
  background-color:white;
  overflow:hidden;
  z-index:1001;
  border-radius:3px;
  -webkit-transition:width .5s ease, height .5s ease;
  -moz-transition:width .5s ease, height .5s ease;
  -ms-transition:width .5s ease, height .5s ease;
  -o-transition:width .5s ease, height .5s ease;
  transition:width .5s ease, height .5s ease;
  -webkit-transform:translateZ(0);
  -moz-transform:translateZ(0);
  -ms-transform:translateZ(0);
  -o-transform:translateZ(0);
  transform:translateZ(0)
}
.td-pop-cnt.click {
  width:350px;
  height:280px
}
.td-pop-cnt.slide {
  width:350px;
  height:315px
}
.td-pop-cnt.float {
  position:absolute!important;
  box-shadow:0 0 10px #ccc
}
.td-pop-cnt.center {
  -webkit-transform:translate(-50%, -50%);
  -moz-transform:translate(-50%, -50%);
  -ms-transform:translate(-50%, -50%);
  -o-transform:translate(-50%, -50%);
  transform:translate(-50%, -50%);
  top:50%;
  left:50%
}
.td-pop-cnt.center-ie8 {
  top:50%;
  left:50%
}
.td-pop-cnt.center-ie8.slide {
  margin-left:-175px;
  margin-top:-140px
}
.td-pop-cnt.center-ie8.click {
  margin-left:-175px;
  margin-top:-157.5px
}
.rollback-animation {
  -webkit-animation:rollbackAnimation .9s ease;
  -o-animation:rollbackAnimation .9s ease;
  -moz-animation:rollbackAnimation .9s ease;
  animation:rollbackAnimation .9s ease;
  -webkit-animation-fill-mode:backwards;
  -o-animation-fill-mode:backwards;
  -moz-animation-fill-mode:backwards;
  animation-fill-mode:backwards
}
@keyframes rollbackAnimation {
  100% {
    -webkit-transform:translateX(0px);
    -moz-transform:translateX(0px);
    -ms-transform:translateX(0px);
    -o-transform:translateX(0px);
    transform:translateX(0px)
  }
}
.shake {
  -webkit-animation:shake .23s linear infinite both;
  -o-animation:shake .23s linear infinite both;
  -moz-animation:shake .23s linear infinite both;
  animation:shake .23s linear infinite both
}
@keyframes shake {
  25% {
    margin-left:-6px
  }
  75% {
    margin-left:6px
  }
  100% {
    margin-left:0
  }
}
@keyframes td_success_pie {
  25% {
    -webkit-transform:rotate(25deg);
    -moz-transform:rotate(25deg);
    -ms-transform:rotate(25deg);
    -o-transform:rotate(25deg);
    transform:rotate(25deg)
  }
  100% {
    -webkit-transform:rotate(-275deg);
    -moz-transform:rotate(-275deg);
    -ms-transform:rotate(-275deg);
    -o-transform:rotate(-275deg);
    transform:rotate(-275deg)
  }
}
@keyframes td_success_filter {
  50.9% {
    opacity:0
  }
  51% {
    opacity:1
  }
  100% {
    opacity:1
  }
}
@keyframes td_success_icon {
  25% {
    -webkit-transform:translate(-25px, 21px);
    -moz-transform:translate(-25px, 21px);
    -ms-transform:translate(-25px, 21px);
    -o-transform:translate(-25px, 21px);
    transform:translate(-25px, 21px)
  }
  75% {
    -webkit-transform:translate(7px, -4px);
    -moz-transform:translate(7px, -4px);
    -ms-transform:translate(7px, -4px);
    -o-transform:translate(7px, -4px);
    transform:translate(7px, -4px)
  }
  100% {
    -webkit-transform:translate(5px, -2px);
    -moz-transform:translate(5px, -2px);
    -ms-transform:translate(5px, -2px);
    -o-transform:translate(5px, -2px);
    transform:translate(5px, -2px)
  }
}
@keyframes icon_spin {
  0% {
    -webkit-transform:rotateY(0deg);
    -moz-transform:rotateY(0deg);
    -ms-transform:rotateY(0deg);
    -o-transform:rotateY(0deg);
    transform:rotateY(0deg)
  }
  100% {
    -webkit-transform:rotateY(360deg);
    -moz-transform:rotateY(360deg);
    -ms-transform:rotateY(360deg);
    -o-transform:rotateY(360deg);
    transform:rotateY(360deg)
  }
}
@keyframes icon_rotate {
  0% {
    -webkit-transform:rotate(0deg);
    -moz-transform:rotate(0deg);
    -ms-transform:rotate(0deg);
    -o-transform:rotate(0deg);
    transform:rotate(0deg)
  }
  100% {
    -webkit-transform:rotate(360deg);
    -moz-transform:rotate(360deg);
    -ms-transform:rotate(360deg);
    -o-transform:rotate(360deg);
    transform:rotate(360deg)
  }
}
@keyframes shrink {
  0% {
    -webkit-transform:scale(0.66);
    -moz-transform:scale(0.66);
    -ms-transform:scale(0.66);
    -o-transform:scale(0.66);
    transform:scale(0.66)
  }
  90% {
    -webkit-transform:scale(0.99);
    -moz-transform:scale(0.99);
    -ms-transform:scale(0.99);
    -o-transform:scale(0.99);
    transform:scale(0.99)
  }
}
@keyframes show_msg {
  16.7% {
    top:0
  }
  83.3% {
    top:0
  }
  100% {
    top:-28px
  }
}
@keyframes bounce {
  0% {
    -webkit-transform:translateY(39px);
    -moz-transform:translateY(39px);
    -ms-transform:translateY(39px);
    -o-transform:translateY(39px);
    transform:translateY(39px);
    opacity:0
  }
  40% {
    opacity:0
  }
  77% {
    -webkit-transform:translateY(-6px);
    -moz-transform:translateY(-6px);
    -ms-transform:translateY(-6px);
    -o-transform:translateY(-6px);
    transform:translateY(-6px)
  }
  100% {
    -webkit-transform:translateY(-2px);
    -moz-transform:translateY(-2px);
    -ms-transform:translateY(-2px);
    -o-transform:translateY(-2px);
    transform:translateY(-2px);
    opacity:1
  }
}
@keyframes move {
  0% {
    -ms-transform:perspective(800px) rotateX(-20deg) rotateY(30deg);
    -moz-transform:perspective(800px) rotateX(-20deg) rotateY(30deg);
    -webkit-transform:perspective(800px) rotateX(-20deg) rotateY(30deg);
    -o-transform:perspective(800px) rotateX(-20deg) rotateY(30deg);
    transform:perspective(800px) rotateX(-20deg) rotateY(30deg)
  }
  25% {
    -ms-transform:perspective(800px) rotateX(-20deg) rotateY(90deg);
    -moz-transform:perspective(800px) rotateX(-20deg) rotateY(90deg);
    -webkit-transform:perspective(800px) rotateX(-20deg) rotateY(90deg);
    -o-transform:perspective(800px) rotateX(-20deg) rotateY(90deg);
    transform:perspective(800px) rotateX(-20deg) rotateY(90deg)
  }
  50% {
    -ms-transform:perspective(800px) rotateX(-20deg) rotateY(180deg);
    -moz-transform:perspective(800px) rotateX(-20deg) rotateY(180deg);
    -webkit-transform:perspective(800px) rotateX(-20deg) rotateY(180deg);
    -o-transform:perspective(800px) rotateX(-20deg) rotateY(180deg);
    transform:perspective(800px) rotateX(-20deg) rotateY(180deg)
  }
  75% {
    -ms-transform:perspective(800px) rotateX(-20deg) rotateY(270deg);
    -moz-transform:perspective(800px) rotateX(-20deg) rotateY(270deg);
    -webkit-transform:perspective(800px) rotateX(-20deg) rotateY(270deg);
    -o-transform:perspective(800px) rotateX(-20deg) rotateY(270deg);
    transform:perspective(800px) rotateX(-20deg) rotateY(270deg)
  }
  100% {
    -ms-transform:perspective(800px) rotateX(-20deg) rotateY(360deg);
    -moz-transform:perspective(800px) rotateX(-20deg) rotateY(360deg);
    -webkit-transform:perspective(800px) rotateX(-20deg) rotateY(360deg);
    -o-transform:perspective(800px) rotateX(-20deg) rotateY(360deg);
    transform:perspective(800px) rotateX(-20deg) rotateY(360deg)
  }
}
.td-pop-3d-area .td-pop-center-cnt {
  background:#788093
}
#td-3d-box {
  width:120px;
  height:120px;
  margin:25px auto;
  position:relative;
  cursor:pointer;
  -webkit-transform-style:preserve-3d;
  -moz-transform-style:preserve-3d;
  -ms-transform-style:preserve-3d;
  -o-transform-style:preserve-3d;
  transform-style:preserve-3d
}
#td-3d-box>div {
  width:100%;
  height:100%;
  position:absolute;
  top:0;
  left:0
}
#td-3d-box>div img {
  width:100%;
  height:100%;
  object-fit:cover
}
.td-3dface>.td-3d-point {
  position:absolute;
  width:0px;
  height:0px;
  overflow:hidden
}
.td-3dface>.td-3d-topLeftPoint {
  left:0;
  top:0;
  height:1px;
  width:100%;
  background-color:#eee;
  color:#eee
}
.td-3dface>.td-3d-topRightPoint {
  right:0;
  top:0;
  height:100%;
  width:1px;
  background-color:#eee;
  color:#eee
}
.td-3dface>.td-3d-bottomLeftPoint {
  left:0;
  bottom:0;
  height:100%;
  width:1px;
  background-color:#eee;
  color:#eee
}
.td-3dface>.td-3d-bottomRightPoint {
  right:0;
  bottom:0;
  height:1px;
  width:100%;
  background-color:#eee;
  color:#eee
}
.td-3d-face-0 {
  -ms-transform:translateZ(60px);
  -moz-transform:translateZ(60px);
  -webkit-transform:translateZ(60px);
  -o-transform:translateZ(60px);
  transform:translateZ(60px)
}
.td-3d-face-1 {
  -ms-transform:rotateY(180deg) translateZ(60px);
  -moz-transform:rotateY(180deg) translateZ(60px);
  -webkit-transform:rotateY(180deg) translateZ(60px);
  -o-transform:rotateY(180deg) translateZ(60px);
  transform:rotateY(180deg) translateZ(60px)
}
.td-3d-face-2 {
  -ms-transform:translateX(-60px) rotateY(-90deg);
  -moz-transform:translateX(-60px) rotateY(-90deg);
  -webkit-transform:translateX(-60px) rotateY(-90deg);
  -o-transform:translateX(-60px) rotateY(-90deg);
  transform:translateX(-60px) rotateY(-90deg)
}
.td-3d-face-3 {
  -ms-transform:translateX(60px) rotateY(90deg);
  -moz-transform:translateX(60px) rotateY(90deg);
  -webkit-transform:translateX(60px) rotateY(90deg);
  -o-transform:translateX(60px) rotateY(90deg);
  transform:translateX(60px) rotateY(90deg)
}
.td-3d-face-4 {
  -ms-transform:translateY(-60px) rotateX(90deg);
  -moz-transform:translateY(-60px) rotateX(90deg);
  -webkit-transform:translateY(-60px) rotateX(90deg);
  -o-transform:translateY(-60px) rotateX(90deg);
  transform:translateY(-60px) rotateX(90deg)
}
.td-3d-face-5 {
  -ms-transform:translateY(60px) rotateX(-90deg);
  -moz-transform:translateY(60px) rotateX(-90deg);
  -webkit-transform:translateY(60px) rotateX(-90deg);
  -o-transform:translateY(60px) rotateX(-90deg);
  transform:translateY(60px) rotateX(-90deg)
}
#__vconsole .vc-switch, #__vconsole .vc-mask {
  z-index:101!important
}
#__vconsole .vc-panel {
  z-index:102!important
}
src/views/components/verify/img/loading.gif
src/views/components/verify/img/vb.png
src/views/components/verify/index.vue
New file
@@ -0,0 +1,305 @@
<template>
  <div>
    <div class="td-outer-wrapper pop " style="display: block; opacity: 1;">
      <div class="td-mask-common background grey" />
      <div
        class="td-pop-cnt center slide"
        :style="'left:'+left+';top:'+top+';width: 350px; height: 315px; transform: translate(-50%, -50%) scale(1);'"
      >
        <div class="td-pop-slide-area">
          <div class="td-pop-slide-title">
            <div class="td-pop-title">请拖动下方滑块完成拼图
            </div>
          </div>
          <div class="td-pop-center">
            <transition name="el-zoom-in-top">
              <el-alert
                v-show="msg.show"
                :title="msg.text"
                :type="msg.type"
                center
                :closable="false"
                style="position: absolute;z-index: 10;border-radius: unset;"
                show-icon
              />
            </transition>
            <!--背景图-->
            <canvas class="td-bg-img" width="320" height="180" />
            <div v-show="loading" class="refresh-bg">
              <img src="./img/loading.gif" class="loading-icon">
            </div>
<!--            <div class="td-bg-slogan" style="display: block;">
              &lt;!&ndash;<div class="td-logo-transparent-icon td-sprite-icon" />&ndash;&gt;
              <span class="td-logo-transparent-iconfont">智能验证</span>
            </div>-->
            <img
              class="td-pop-slide-identity"
              src=""
              draggable="false"
              style="top: 116px; transform: translate(0px, 0px); opacity: 1;"
            >
          </div>
          <!--滑块-->
          <div class="td-slide-wrap">
            <div class="td-pop-slidebar">
              <div class="td-pop-slidebar-tip">请向右拖动滑块
              </div>
            </div>
            <div
              :class="'td-pop-slidetrigger td-sprite-icon '+mousedown"
              style="transform: translate(0px, 0px);"
              @mousedown="handleMouseDown"
            />
          </div>
          <div class="td-pop-footer">
            <div class="td-icon-set">
              <div class="td-icon-close td-sprite-icon icon" @click="hide">
                <div class="td-icon-tooltip" style="right:-8px;left:auto;">关闭
                </div>
              </div>
              <div class="td-icon-refresh td-sprite-icon icon" @click="getVerify">
                <div class="td-icon-tooltip">刷新
                </div>
              </div>
              <!--<a id="jump2feedback" style="display: block" href="http://static.tongdun.net/captcha/test/index.html?seqId=1561081035175937S365328C48488966,1561081042275149S365328C03293221,1561081058162146S365328C42730006,1561081659566994S35525D734520462,1561082259315562S35525D737834014,1561082859159316S35525D737251353,1561083458396777S365328C43056286,1561086261446326S35525D733771073&amp;partner=tongdun&amp;appName=x_tongdun2_web" target="_blank">-->
              <!--<div class="td-icon-info td-sprite-icon icon">-->
              <!--<div class="td-icon-tooltip">反馈-->
              <!--</div>-->
              <!--</div>-->
              <!--</a>-->
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { getVerify, checkVerify } from '@/api/system/verify'
export default {
  props: {
    left: {
      type: String,
      default: '70%'
    },
    top: {
      type: String,
      default: '50%'
    }
  },
  data() {
    return {
      loading: false,
      state: 0, // 0松开,1按下
      vSlideLeftpx: 0, // 滑块距离左侧的距离
      mousedown: '',
      msg: {
        show: false,
        type: '',
        text: ''
      },
      token: '',
      startTime: 0,
      endTime: 0
    }
  },
  mounted() {
    this.getVerify()
    const that = this
    document.onmousemove = this.handelMouseMove
    document.onmouseup = this.handleMouseUp
    document.querySelector('.td-pop-slidetrigger').addEventListener('touchstart', function(e) {
      that.handleMouseDown(e)
    })
    document.querySelector('.td-pop-slidetrigger').addEventListener('touchmove', function(e) {
      that.handelMouseMove(e)
      e.preventDefault() // 若阻止默认事件,则在长按元素上滑动时,页面是不滚动的,
    })
    document.querySelector('.td-pop-slidetrigger').addEventListener('touchend', function(e) {
      // 若手指离开屏幕时,时间小于我们设置的长按时间,则为点击事件,清除定时器,结束长按逻辑
      that.handleMouseUp(e)
    })
  },
  created() {
  },
  methods: {
    getVerify() {
      this.loading = true
      this.setLeft(0)
      getVerify({}).then(response => {
        // 填充画布
        const c = document.querySelector('.td-bg-img')
        const ctx = c.getContext('2d')
        const img = new Image() // 创建img元素
        img.onload = function() {
          ctx.drawImage(img, 0, 0)
        }
        img.src = response.data.bg
        document.querySelector('.td-pop-slide-identity').src = response.data.slider
        document.querySelector('.td-pop-slide-identity').style.top = response.data.y + 'px'
        this.token = response.data.uuid
        this.loading = false
      })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-06-21 14:09
         * @Description :鼠标点击
         */
    handleMouseDown() {
      this.state = 1
      this.mousedown = 'mousedown'
      // 记录滑块位置
      this.vSlideLeftpx = document.querySelector('.td-pop-slidetrigger').getBoundingClientRect().left
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-06-21 14:09
         * @Description : 鼠标松开
         */
    handleMouseUp() {
      this.state = 0
      this.endTime = new Date().getTime()
      if (this.startTime == 0) {
        return
      }
      const time = this.endTime - this.startTime
      const x = document.querySelector('.td-pop-slidetrigger').getBoundingClientRect().left - this.vSlideLeftpx
      checkVerify({ x: x, token: this.token }).then(response => {
        if (response.data.verify != '-1') {
          this.msg.show = true
          const rate = (time / 1000).toFixed(2)
          this.msg.text = '验证通过,' + rate + '秒的速度超过' + this.getRate(rate) + '的用户'
          this.msg.type = 'success'
          setTimeout(() => {
            this.msg.show = false
            this.$emit('success', { verify: response.data.verify, x: response.data.x, uuid: response.data.uuid })
            this.$emit('hide')
          }, 1200)
        } else {
          this.msg.show = true
          this.msg.text = '验证失败,请重试。'
          this.msg.type = 'error'
          setTimeout(() => {
            this.msg.show = false
          }, 1200)
          const timer = setInterval(() => {
            const left = document.querySelector('.td-pop-slidetrigger').getBoundingClientRect().left - this.vSlideLeftpx - 2
            this.setLeft(left)
            if (document.querySelector('.td-pop-slidetrigger').getBoundingClientRect().left - this.vSlideLeftpx <= 0) {
              clearInterval(timer)
              this.setLeft(0)
            }
          }, 1)
          this.getVerify()
        }
      })
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-06-21 14:06
         * @Description : 设置滑块图片左侧偏移
         */
    setLeft(left) {
      if (left == 0) {
        this.mousedown = ''
      }
      document.querySelector('.td-pop-slidetrigger').style.left = left + 'px'
      document.querySelector('.td-pop-slide-identity').style.left = left + 'px'
    },
    /*
         * @Author : liu.q [916000612@qq.com]
         * @Date : 2019-06-21 14:09
         * @Description :鼠标移动
         */
    handelMouseMove(e) {
      if (this.state !== 1) {
        this.startTime = 0
        return
      }
      if (this.startTime == 0) {
        this.startTime = new Date().getTime()
      }
      let x
      if (!e.touches) { // 兼容移动端
        x = e.clientX
      } else { // 兼容PC端
        x = e.touches[0].pageX
      }
      if ((x - this.vSlideLeftpx) < 0) {
        this.setLeft(0)
      } else if ((x - this.vSlideLeftpx) > 300) {
        this.setLeft(275)
      } else {
        this.setLeft(x - this.vSlideLeftpx - 20)
      }
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-06-25 14:50
       * @Description :关闭
       */
    hide() {
      this.$emit('hide')
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-06-25 19:41
       * @Description : 超过百分之几的用户
       */
    getRate(rate) {
      if (rate < 0.8) {
        return '99.99%'
      } else if (rate < 1) {
        return '99.96%'
      } else if (rate < 1.1) {
        return '99.38%'
      } else if (rate < 1.2) {
        return '99.24%'
      } else if (rate < 1.3) {
        return '99%'
      } else if (rate < 1.4) {
        return '98.88%'
      } else if (rate < 1.5) {
        return '98%'
      } else if (rate < 1.6) {
        return '96.33%'
      } else if (rate < 1.7) {
        return '96%'
      } else if (rate < 2) {
        return '95.55%'
      } else if (rate < 2.3) {
        return '94%'
      } else if (rate < 2.6) {
        return '91%'
      } else if (rate < 3) {
        return '80%'
      } else if (rate < 4) {
        return '40%'
      } else if (rate < 5) {
        return '1%'
      } else {
        return '0.01%'
      }
    }
  }
}
</script>
<style src="./css/index.css"></style>
<style lang="scss">
  .td-outer-wrapper.pop{min-height: 768px;
    .td-pop-cnt.center{left:70%;}
  }
</style>
src/views/components/win/index.vue
New file
@@ -0,0 +1,68 @@
<template>
  <!--动画-->
  <transition name="el-fade-in">
    <el-dialog
      :close-on-click-modal="false"
      :title="title"
      :visible.sync="visible"
      :width="width"
      top="72px"
      :append-to-body="true"
      :destroy-on-close="true"
      :lock-scroll="true"
      @close="close"
    >
      <slot />
      <span slot="footer">
        <slot name="footer" />
      </span>
    </el-dialog>
  </transition>
</template>
<script>
export default {
  props: {
    title: {
      type: String,
      default: ''
    },
    width: {
      type: String,
      default: '50%'
    }
  },
  data() {
    return {
      visible: true
    }
  },
  mounted() {
    try {
      window.onresize = function() {
        document.querySelectorAll('.cus-dialog').forEach(v => {
          v.style.width = document.querySelector('.app-main').clientWidth + 'px'
          v.style.height = '100%'
        })
      }
      window.onresize()
    } catch (e) {
      console.error(e)
    }
  },
  methods: {
    close() {
      this.visible = false
      this.$emit('close')
    }
  }
}
</script>
<style scoped>
/deep/ .el-dialog__body {
  max-height: calc(100vh - 200px);
  overflow-y: auto;
  padding-top: 20px;
}
</style>
src/views/components/win2/index.vue
New file
@@ -0,0 +1,45 @@
<template>
  <!--动画-->
  <transition name="el-fade-in">
    <el-dialog :destroy-on-close="true" :fullscreen="fullscreen" :width="width" :title="title" :visible.sync="visible" append-to-body @close="close">
      <div class="app-container">
        <slot />
        <div style="margin-top: 30px">
          <slot name="footer" />
        </div>
      </div>
    </el-dialog>
  </transition>
</template>
<script>
export default {
  props: {
    fullscreen: {
      type: Boolean,
      default: false
    },
    title: {
      type: String,
      default: ''
    },
    width: {
      type: String,
      default: '50%'
    }
  },
  data() {
    return {
      visible: true
    }
  },
  methods: {
    close() {
      this.visible = false
      this.$emit('close')
    }
  }
}
</script>
<style scoped lang="scss">
</style>
src/views/components/win3/index.vue
New file
@@ -0,0 +1,79 @@
<!--
 * @Author: your name
 * @Date: 2022-03-25 15:45:02
 * @LastEditTime: 2022-03-31 17:06:05
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: /ts-admin/src/views/components/win3/indexYear.vue
-->
<template>
  <!--动画-->
  <transition name="el-fade-in">
    <el-dialog
      center
      :title="title"
      :visible.sync="visible"
      width="800px"
      top="80px"
      :append-to-body="true"
      :destroy-on-close="true"
      @close="close"
    >
      <slot />
      <div >
        <slot name="footer" />
      </div>
    </el-dialog>
  </transition>
</template>
<script>
export default {
  props: {
    title: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      visible: true
    }
  },
  mounted() {
    try {
      window.onresize = function() {
        document.querySelectorAll('.cus-dialog').forEach(v => {
          v.style.width = document.querySelector('.app-main').clientWidth + 'px'
          v.style.height = '100%'
        })
      }
      window.onresize()
    } catch (e) {
      console.error(e)
    }
  },
  methods: {
    close() {
      this.visible = false
      this.$emit('close')
    }
  }
}
</script>
<style lang="scss" scoped>
.el-dialog__body {
  max-height: calc(100vh - 200px);
  overflow-y: auto;
  padding-top: 20px;
  border-radius: 20px;
}
.el-dialog {
  border-radius: 10px;
  .el-dialog__header{
    text-align: left;
    font-weight: 600;
  }
}
</style>
src/views/components/ztree/check.vue
New file
@@ -0,0 +1,245 @@
<template>
  <span>
    <el-button size="mini" :disabled="disabled" type="primary" @click="choose">选择...</el-button>
    <div>
      <!--closable-->
      <el-tag
        v-for="tag in tags"
        :key="tag.name"
        :type="tag.type"
        @close="handleClose(tag)"
      >
        {{ tag.name }}
      </el-tag>
    </div>
    <el-dialog
      :append-to-body="true"
      title="选择"
      :visible.sync="dialogVisible"
      width="50%"
    >
      <div style="max-height: 350px;overflow-y: auto;">
        <ul :id="id" class="ztree" />
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="_success">确 定</el-button>
      </span>
    </el-dialog>
  </span>
</template>
<script>
import $ from 'jquery'
import '@/plugins/ztree/js/jquery-1.4.4.min.js'
import '@/plugins/ztree/js/jquery.ztree.core.min.js'
import '@/plugins/ztree/js/jquery.ztree.excheck.js'
import request from '@/utils/request'
export default {
  props: {
    // 数据源
    nodes: {
      type: Array,
      default: function() {
        return []
      }
    },
    // 网络请求数据
    http: {
      type: Object,
      default: function() {
        return null
      }
    },
    // 是否全部展开
    expandAll: {
      type: Boolean,
      default: function() {
        return false
      }
    },
    // 是否禁用
    disabled: {
      type: Boolean,
      default: function() {
        return false
      }
    },
    // 已选项
    checked: {
      type: Array,
      default: function() {
        return []
      }
    }
  },
  data() {
    return {
      dialogVisible: false, // 弹窗
      id: 'treeDemo',
      setting: {
        check: {
          enable: true,
          chkboxType: { 'Y': 'ps', 'N': 's' }
        },
        data: {
          simpleData: {
            enable: true,
            idKey: 'id',
            pIdKey: 'pid',
            rootPId: 0
          }
        },
        view: {
          showIcon: false,
          showLine: true
        }
      },
      zNodes: this.nodes,
      tags: [],
      chooseFlag: false
    }
  },
  watch: {
    nodes(v) {
      this.$set(this, 'zNodes', v)
      this.init()
    },
    zNodes() {
      this.initTag()
    }
  },
  mounted() {
    this.id = 'treeDemo' + new Date().getTime()
    if (this.nodes.length <= 0 && this.http != null) {
      this.getHttpData()
    }
  },
  methods: {
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-08-08 16:45
       * @Description : 选完收工
       */
    _success() {
      this.dialogVisible = false
      const treeObj = window.$.fn.zTree.getZTreeObj(this.id)
      const nodes = treeObj.getCheckedNodes(true)
      this.zNodes.forEach(n => {
        n.checked = false
        nodes.forEach(v => {
          if (n.id == v.id) {
            n.checked = true
          }
        })
      })
      this.zNodes = Object.assign([], this.zNodes)
      this.$emit('setView', nodes)
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-08-08 16:42
       * @Description :获取网络请求数据
       */
    getHttpData() {
      request({
        url: this.http.url,
        method: 'get',
        params: this.http.params
      }).then(res => {
        this.zNodes = res.data
        if (this.checked != null && this.checked.length > 0) {
          this.zNodes.forEach(v => {
            this.checked.forEach(c => {
              if (v.id == c.id) {
                v.checked = true
              }
            })
          })
        }
      })
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-07-01 17:11
       * @Description : 初始化树
       */
    init() {
      if (this.checked.length > 0) {
        this.zNodes.forEach(v => {
          this.checked.forEach(c => {
            if (v.id == c.id) {
              v.checked = true
            }
          })
        })
      }
      this.initTag()
      if ($('#' + this.id).length == 1) {
        window.$.fn.zTree.destroy(this.id)
        window.$.fn.zTree.init($('#' + this.id), this.setting, this.zNodes)
        if (this.expandAll) {
          this.$nextTick(() => {
            const treeObj = window.$.fn.zTree.getZTreeObj(this.id)
            treeObj.expandAll(true)
          })
        }
      }
    },
    initTag() {
      this.tags = []
      this.zNodes.forEach(n => {
        if (n.checked) {
          this.tags.push({
            id: n.id,
            name: n.name,
            type: 'success'
          })
        }
      })
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-07-01 15:12
       * @Description : 获取选中节点
       */
    getCheckedNodes() {
      if (!this.chooseFlag) {
        return []
      }
      const treeObj = window.$.fn.zTree.getZTreeObj(this.id)
      const nodes = treeObj.getCheckedNodes(true)
      return nodes
    },
    // 显示ztree树
    choose() {
      this.chooseFlag = true
      this.dialogVisible = true
      this.$nextTick(() => {
        this.init()
      })
    },
    handleClose(tag) {
      this.tags.splice(this.tags.indexOf(tag), 1)
      for (let i = 0; i < this.zNodes.length; i++) {
        const node = this.zNodes[i]
        if (node.id == tag.id) {
          node.checked = false
          break
        }
      }
    }
  }
}
</script>
<style scoped>
  @import "../../../plugins/ztree/css/zTreeStyle/zTreeStyle.css";
  .el-tag {
    margin-right: 10px;
    margin-top: 2px;
  }
</style>
src/views/components/ztree/index.vue
New file
@@ -0,0 +1,97 @@
<template>
  <div>
    <ul :id="id" class="ztree" />
  </div>
</template>
<script>
import $ from 'jquery'
import '@/plugins/ztree/js/jquery-1.4.4.min.js'
import '@/plugins/ztree/js/jquery.ztree.core.min.js'
import '@/plugins/ztree/js/jquery.ztree.excheck.js'
export default {
  props: {
    // 数据源
    nodes: {
      type: Array,
      default: function() {
        return []
      }
    },
    // 是否全部展开
    expandAll: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      id: 'treeDemo',
      setting: {
        check: {
          enable: true,
          chkboxType: { 'Y': 'ps', 'N': 's' }
        },
        data: {
          simpleData: {
            enable: true,
            idKey: 'id',
            pIdKey: 'pid',
            rootPId: 0
          }
        },
        view: {
          showIcon: false,
          showLine: false
        }
      },
      zNodes: []
    }
  },
  watch: {
    nodes(v) {
      this.init(v)
    }
  },
  mounted() {
    this.id = 'treeDemo' + new Date().getTime()
    // console.log(this.id)
    this.$nextTick(() => {
      this.init(this.nodes)
    })
  },
  methods: {
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-07-01 17:11
       * @Description : 初始化树
       */
    init(v) {
      this.zNodes = v
      window.$.fn.zTree.init($('#' + this.id), this.setting, this.zNodes)
      if (this.expandAll) {
        this.$nextTick(() => {
          const treeObj = window.$.fn.zTree.getZTreeObj(this.id)
          treeObj.expandAll(true)
        })
      }
    },
    /*
       * @Author : liu.q [916000612@qq.com]
       * @Date : 2019-07-01 15:12
       * @Description : 获取选中节点
       */
    getCheckedNodes() {
      const treeObj = window.$.fn.zTree.getZTreeObj(this.id)
      const nodes = treeObj.getCheckedNodes(true)
      return nodes
    }
  }
}
</script>
<style scoped>
  @import "../../../plugins/ztree/css/zTreeStyle/zTreeStyle.css";
</style>
src/views/monitor/druid/index.vue
@@ -2,7 +2,7 @@
  <i-frame :src="url" />
</template>
<script>
import iFrame from "@/components/iFrame/index";
import iFrame from "@/components/RuoYi/iFrame/index";
export default {
  name: "Druid",
  components: { iFrame },
src/views/monitor/job/index.vue
@@ -314,7 +314,7 @@
<script>
import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job";
import Crontab from '@/components/Crontab'
import Crontab from '@/components/RuoYi/Crontab'
import { listOrgRoot } from "@/api/system/dept";
export default {
src/views/system/menu/index.vue
@@ -275,7 +275,7 @@
import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import IconSelect from "@/components/IconSelect";
import IconSelect from "@/components/RuoYi/IconSelect";
export default {
  name: "Menu",
src/views/tool/swagger/index.vue
@@ -2,7 +2,7 @@
  <i-frame :src="url" />
</template>
<script>
import iFrame from "@/components/iFrame/index";
import iFrame from "@/components/RuoYi/iFrame/index";
export default {
  name: "Swagger",
  components: { iFrame },
src/views/user/login.vue
@@ -40,6 +40,12 @@
      <el-form-item v-if="loginForm.verifyType==='slide'">
        <drag-verify @success="verifyTrue" ref="verify"/>
      </el-form-item>
      <el-form-item v-if="loginForm.verifyType==='jigsaw'">
<!--        <drag-verify @success="verifyTrue" ref="verify"/>-->
        <transition duration="1000" name="el-fade-in">
          <jigsaw-verify v-if="loginForm.verifyType==='jigsaw'" :left="left" :top="top" @hide="verifyFalse" @success="handleLogin" />
        </transition>
      </el-form-item>
      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
      <el-form-item style="width:100%;">
        <el-button
@@ -67,24 +73,28 @@
<script>
  import {getCodeImg, getCodeNone} from "@/api/login";
  import dragVerify from './dragVerify/index.vue' // 滑动验证组件
  import jigsawVerify from '@/views/components/verify'  // 拼图验证组件,2023-04-06
  import Cookies from "js-cookie";
  import {encrypt} from '@/utils/jsencrypt'
  // import {encrypt} from '@/utils/jsencrypt'
  export default {
  components: {
    'drag-verify': dragVerify
    'drag-verify': dragVerify,
    'jigsaw-verify': jigsawVerify
  },
  data() {
    return {
      verify:false,  // 滑动校验
      codeUrl: "",
      left: null,    // 拼图验证码位置
      top: null,     // 拼图验证码位置
      loginForm: {
        username: 'supervisor',
        password: '123456',
        code:'',
        uuid: '',
        loginType: 'user_pass',  // 用户名、密码方式登录
        verifyType: 'slide'//  'code': 验证码  'slide':滑块  'jigsaw':拼图
        verifyType: 'jigsaw'//  'code': 验证码  'slide':滑块  'jigsaw':拼图
        // rememberMe: false,
      },
      loginRules: {
@@ -122,6 +132,9 @@
    verifyTrue () {
      this.verify = true
    },
    verifyFalse() {
      this.verify = false
    },
    getCode() {
      if(this.loginForm.verifyType==='code'){
        getCodeImg().then(res => {
@@ -141,6 +154,8 @@
      } else if(this.loginForm.verifyType==='jigsaw'){
        // 拼图方式,看需要啥参数,暂未实现
        console.log('jigsaw...');
        this.loginForm.code = 'jigsaw'; // 填充code默认值,否则验证不通过。2023-04-06
      } else if(this.loginForm.verifyType==='slide' || this.loginForm.verifyType==='sms'){
        // 不需要验证码,但仍需要请求接口获取uuid
@@ -160,7 +175,13 @@
      this.loginForm.password = password === undefined ? this.loginForm.password : password
      this.loginForm.rememberMe = rememberMe === undefined ? this.loginForm.rememberMe : rememberMe
    },
    handleLogin() {
    handleLogin(param) {
      // console.log(param);
      if(param != null){
        // 拼图验证码时,调用方会传入code(用户验证码位置),uuid
        this.loginForm.code = param.x;
        this.loginForm.uuid = param.uuid;
      }
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          if (this.loginForm.verifyType==='slide' && !this.verify) {