From 0d659cff38f50d83e782a9f8c5c20fb54a5c0321 Mon Sep 17 00:00:00 2001
From: zm <zm@iemsoft.cn>
Date: Sun, 12 Apr 2020 17:28:28 +0800
Subject: [PATCH] 创建

---
 src/static/img/budget_card.png                          |    0 
 src/static/img/request_billing_setting_guid.jpg         |    0 
 src/static/css/templates_center.less                    |   22 
 src/static/templates/no_permission.html                 |    3 
 src/static/img/user2.png                                |    0 
 src/static/img/travel_expense_del.png                   |    0 
 src/static/js/data/travel_expense_list.json             |   89 
 src/static/sonar-project.json                           |   17 
 src/static/css/todos.less                               |   25 
 src/static/templates/templates_center.html              |  218 
 src/static/img/form_default.png                         |    0 
 src/static/img/ad.jpg                                   |    0 
 src/static/js/budget_forms/module.js                    |   66 
 src/sonar-project.properties                            |   17 
 src/static/img/cfg_center_4.png                         |    0 
 src/static/js/travel_expense/module.js                  | 4195 +++++
 src/bs-config.json                                      |    5 
 src/static/css/jquery-ui.less                           | 1311 +
 src/static/css/form.less                                |  170 
 src/static/img/ordering_2.png                           |    0 
 src/static/css/forms_center.less                        |   55 
 src/.bowerrc                                            |    3 
 src/static/img/query.png                                |    0 
 src/static/img/system_settings.jpg                      |    0 
 src/差旅部署说明.txt                                          |    5 
 src/static/img/unfold.png                               |    0 
 src/index.html                                          |  148 
 src/static/img/arrow.png                                |    0 
 src/static/css/base.less                                |    6 
 src/package-lock.json                                   | 6928 +++++++++
 src/static/templates/business.html                      |   38 
 src/static/templates/select3.html                       |   25 
 src/static/templates/travel_expense_todos_all.html      |  136 
 src/README.md                                           |   37 
 src/static/js/billing_cfg_guide/module.js               |   39 
 src/static/js/system_config/module.js                   |  577 
 src/static/css/flowstatus.less                          |   40 
 src/static/img/cfg_center_2.png                         |    0 
 src/static/templates/frm_elem_cloud_attr.html           |   97 
 src/static/css/travel_expense.less                      | 1069 +
 src/static/img/rebuise_card.png                         |    0 
 src/static/img/more_collapse.png                        |    0 
 src/static/js/utils/bootstrap-wysiwyg.min.js            |   10 
 src/static/css/system_config.less                       |  125 
 src/static/css/workflow.less                            |   93 
 src/static/img/heroico.ico                              |    0 
 src/static/img/bs5.jpg                                  |    0 
 src/static/img/form_created.png                         |    0 
 src/static/templates/budget_form_customize.html         |   55 
 src/static/css/lesshat.less                             |  886 +
 src/static/css/lesshat-prefixed.less                    |  886 +
 src/static/js/.DS_Store                                 |    0 
 src/static/img/doc.png                                  |    0 
 src/static/img/to_do.png                                |    0 
 src/static/templates/user_select.html                   |    0 
 src/static/img/createorder.png.BASE.png                 |    0 
 src/static/templates/saved_form.html                    |  911 +
 src/static/img/yes.png                                  |    0 
 src/static/img/deleteelement.png                        |    0 
 src/static/img/page.png                                 |    0 
 src/static/templates/city.html                          |   37 
 src/static/css/base_red.less                            |    6 
 src/static/img/travel_expense_export.png                |    0 
 src/.project                                            |   28 
 src/static/img/hero.png                                 |    0 
 src/static/img/reimbursement_settings_guid.jpg          |    0 
 src/static/img/business-textbook.jpg                    |    0 
 src/static/js/utils/jquery.base64.min.js                |    1 
 src/static/js/config_center/module.js                   |   21 
 src/static/js/templates_center/module.js                |  518 
 src/.DS_Store                                           |    0 
 src/static/img/loading.gif                              |    0 
 src/static/.DS_Store                                    |    0 
 src/static/img/user4.png                                |    0 
 src/static/img/close.png                                |    0 
 src/static/templates/travel_expense_detail_popup.html   |  118 
 src/static/img/calculate.png                            |    0 
 src/static/js/forms_center/module.js                    |   17 
 src/static/img/bs7.jpg                                  |    0 
 src/static/js/budget_form_customize/module.js           | 2018 ++
 src/static/img/cfg_center_6.png                         |    0 
 src/static/templates/config_center.html                 |   67 
 src/static/css/cfg_center.less                          |   34 
 src/origin_change.html                                  |   92 
 src/static/js/qxv5.json                                 |  884 +
 src/static/templates/travel_expense_todos_rebuise.html  |  182 
 src/static/js/qxv2.json                                 |  279 
 src/static/templates/budget_forms.html                  |   87 
 src/static/img/workflow_bx.png                          |    0 
 src/static/img/switch_on.png                            |    0 
 src/static/img/guide.png                                |    0 
 src/static/templates/travel_expense_todos_request.html  |  181 
 src/static/img/pic.png                                  |    0 
 src/static/js/registry/module.js                        |   72 
 src/gulpfile.js                                         |  189 
 src/static/img/cfg_center_3.png                         |    0 
 src/static/templates/frm_elem_attrs_editor.html         | 1018 +
 src/static/js/expend_standard/module.js                 | 2539 +++
 src/static/js/utils/jquery.md5.js                       |  229 
 src/static/img/user1.png                                |    0 
 src/static/img/travel_expense_view_content.png          |    0 
 src/static/img/createorder.png.LOCAL.png                |    0 
 src/static/templates/pic.html                           |   74 
 src/static/img/delete.png                               |    0 
 src/static/js/utils/des.js                              |  867 +
 src/static/img/create_form.png                          |    0 
 src/static/img/ordering_1.png                           |    0 
 src/static/img/system_entry.jpg                         |    0 
 src/static/img/update.png                               |    0 
 src/static/img/bs9.jpg                                  |    0 
 src/static/img/next_step.jpg                            |    0 
 src/static/img/user3.png                                |    0 
 src/static/img/cfg_center_1.png                         |    0 
 src/static/templates/expense_standard_table.html        |  177 
 src/static/js/utils/uuid.js                             |  109 
 src/static/img/cfg_center_5.png                         |    0 
 src/static/templates/travel_expense_todos_budget.html   |  178 
 src/static/templates/to_do_list.html                    |   46 
 src/static/img/workflow_ys.png                          |    0 
 src/static/templates/system_config.html                 |  341 
 src/static/js/messages_center/module.js                 |  164 
 src/static/templates/travel_expense_todos.html          |  108 
 src/static/css/app.less                                 |   17 
 src/static/img/business3.png                            |    0 
 src/package.json                                        |   36 
 src/static/img/reimbursement_standard_settings_guid.jpg |    0 
 src/static/templates/drop_down_selector.html            |   14 
 src/static/img/createorder.png                          |    0 
 src/static/templates/iframe_test.html                   |   39 
 src/static/templates/messages_center.html               |   98 
 src/static/img/folder.png                               |    0 
 src/static/css/city.less                                |  165 
 src/static/css/frm_elem_editor.less                     |  173 
 src/static/js/business/module.js                        |   57 
 src/static/templates/forms_center.html                  |  135 
 src/static/css/registry.less                            |   84 
 src/static/js/qxv6.json                                 |  886 +
 src/static/js/travel_expense_todos/module.js            | 1326 +
 src/bower.json                                          |   37 
 src/static/js/userPermission.json                       |  134 
 src/static/templates/travel_expense.html                |  262 
 src/static/img/search_item.png                          |    0 
 src/static/img/workflow_sq.png                          |    0 
 src/static/img/workflowing_settins_guid.png             |    0 
 src/static/js/work_flow/module.js                       |  276 
 src/static/js/qxv3.json                                 | 1010 +
 src/static/js/data/form.json                            |  113 
 src/static/templates/work_flow.html                     |   48 
 src/static/img/request_card.png                         |    0 
 src/static/js/app.js                                    |  756 +
 src/static/img/edit_saved_templates.jpg                 |    0 
 src/static/templates/guide.html                         |   21 
 src/static/css/saved_form.less                          | 1221 +
 src/static/img/calendar.png                             |    0 
 src/static/img/continue.png                             |    0 
 src/static/js/utils/form-builder.js                     |  441 
 src/static/img/travel_expense_full.png                  |    0 
 src/static/templates/apply_select.html                  |    0 
 src/static/js/qxv4.json                                 |  878 +
 src/.gitignore                                          |    6 
 src/static/img/list.png                                 |    0 
 src/static/img/switch_off.png                           |    0 
 src/static/templates/bill_create_popup.html             |   42 
 src/static/js/saved_form/module.js                      | 5364 +++++++
 src/static/js/qxv7.json                                 |   71 
 src/static/img/budget_settings_guid.jpg                 |    0 
 src/static/img/bs8.jpg                                  |    0 
 src/static/img/hero_guide.png                           |    0 
 src/static/templates/form_item.html                     |   90 
 src/static/js/utils/http.js                             |  162 
 src/static/img/no.png                                   |    0 
 src/static/templates/expend_standard.html               |   78 
 src/static/templates/registry.html                      |   21 
 src/static/img/addelement.png                           |    0 
 src/static/img/createorder.png.REMOTE.png               |    0 
 src/static/img/u6181.png                                |    0 
 src/static/js/config.json                               |   26 
 src/static/img/bs6.jpg                                  |    0 
 src/static/templates/billing_cfg_guide.html             |  168 
 src/static/img/travel_expense_import.png                |    0 
 src/static/css/index.less                               | 1168 +
 src/static/img/close2.png                               |    0 
 src/static/img/cfg_center_7.png                         |    0 
 183 files changed, 44,411 insertions(+), 0 deletions(-)

diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..5008ddf
--- /dev/null
+++ b/src/.DS_Store
Binary files differ
diff --git a/src/.bowerrc b/src/.bowerrc
new file mode 100644
index 0000000..291bae8
--- /dev/null
+++ b/src/.bowerrc
@@ -0,0 +1,3 @@
+{
+  "directory": "static/vendors/"
+}
\ No newline at end of file
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 0000000..01e0a3f
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1,6 @@
+static/vendors
+node_modules
+.history
+dist
+static/css/*.css
+dist/static/css/app.css
\ No newline at end of file
diff --git a/src/.project b/src/.project
new file mode 100644
index 0000000..f0fd2bf
--- /dev/null
+++ b/src/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>iem</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.aptana.ide.core.unifiedBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.aptana.projects.webnature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1487557518387</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-node_modules</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/src/README.md b/src/README.md
new file mode 100644
index 0000000..d42d393
--- /dev/null
+++ b/src/README.md
@@ -0,0 +1,37 @@
+# README #
+
+###工具下载
+1.安装 nodejs
+2.安装 bower  
+npm install -g bower
+3.安装 gulp	  
+npm install -g gulp
+
+
+###项目打包
+1.bower install  //需在项目目录下
+2.npm install    //本地安装gulp插件
+3.gulp less    //编译css 
+4.gulp build:prod //打包
+
+###配置文件修改
+static\js\app.js
+云尚行地址
+var register_url = "http://csza.chfcloud.com/";
+流程引擎地址
+var work_flow_url = "http://ubpyq.chfcloud.com:8087/";
+
+nginx前端反向代理配置
+location /travel-web/ {
+	proxy_connect_timeout  600s; 
+	proxy_pass http://10.4.32.149:8081/travel-web/;
+	fastcgi_connect_timeout 60;
+		fastcgi_send_timeout 180;
+		fastcgi_read_timeout 180;
+		fastcgi_buffer_size 128k;
+		fastcgi_buffers 256 16k;
+		client_body_buffer_size 1024k;		     
+}
+
+
+config.json 配置文件中 加密工具 http://202.98.157.47:8080/dec/dec.html
\ No newline at end of file
diff --git a/src/bower.json b/src/bower.json
new file mode 100644
index 0000000..6ef80e0
--- /dev/null
+++ b/src/bower.json
@@ -0,0 +1,37 @@
+{
+  "name": "iem",
+  "authors": [
+    "IEMSoft"
+  ],
+  "description": "",
+  "main": "",
+  "license": "MIT",
+  "homepage": "",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "dependencies": {
+    "jquery-ui": "^1.12.1",
+    "jquery": "^3.1.1",
+    "angular": "1.6.1",
+    "font-awesome": "fontawesome#^4.7.0",
+    "angular-route": "1.6.1",
+    "animate.css": "^3.5.2",
+    "zTree": "^3.5.28",
+    "flatpickr": "flatpickr-calendar#^2.4.2",
+    "bootstrap": "^3.3.7",
+    "traceur": "^0.0.111",
+    "lodash": "^4.17.4",
+    "sweetalert": "^1.1.3",
+    "toastr": "^2.1.3",
+    "ng-file-upload-shim": "^12.2.13",
+    "smalot-bootstrap-datetimepicker": "^2.4.4",
+    "imageviewer": "^0.5.1",
+    "ngDraggable": "^0.1.11",
+    "ztree": "^3.5.0"
+  }
+}
diff --git a/src/bs-config.json b/src/bs-config.json
new file mode 100644
index 0000000..fe25ac2
--- /dev/null
+++ b/src/bs-config.json
@@ -0,0 +1,5 @@
+{
+  "port": 8888,
+  "files": ["./static/**/*.{html,htm,css,js}"],
+  "server": { "baseDir": "./" }
+}
\ No newline at end of file
diff --git a/src/gulpfile.js b/src/gulpfile.js
new file mode 100644
index 0000000..bee8015
--- /dev/null
+++ b/src/gulpfile.js
@@ -0,0 +1,189 @@
+var gulp = require('gulp');
+var debug = require ('gulp-debug');
+var watch = require('gulp-watch');
+var uglify = require('gulp-uglify');
+var concat = require('gulp-concat');
+var rename = require('gulp-rename');
+var rimraf = require('gulp-rimraf');
+var watchLess = require('gulp-watch-less');
+var less = require('gulp-less');
+var runSequence = require('run-sequence');
+var _ = require('lodash');
+var clean = require('gulp-clean');
+var plugins = require('gulp-load-plugins')({
+    lazy: true
+});
+var proxy = require('http-proxy-middleware');
+
+var paths = {
+    // using framework version of jquery
+    scripts: [
+        'static/vendors/traceur/traceur.min.js',
+        'static/vendors/lodash/dist/lodash.min.js',
+        'static/vendors/angular/angular.min.js',
+        'static/vendors/angular-route/angular-route.min.js',
+        'static/vendors/jquery/dist/jquery.min.js',
+        'static/vendors/jquery-ui/jquery-ui.min.js',
+        'static/vendors/bootstrap/dist/js/bootstrap.min.js',
+        'static/vendors/zTree/js/jquery.ztree.core.js',
+        'static/vendors/flatpickr/dist/flatpickr.min.js',
+        'static/vendors/flatpickr/dist/l10n/zh.js',
+        'static/vendors/sweetalert/dist/sweetalert.min.js',
+        'static/vendors/ng-file-upload-shim/ng-file-upload.min.js',
+        'static/vendors/ng-file-upload-shim/ng-file-upload-shim.min.js',
+        'static/vendors/toastr/toastr.min.js',
+        'static/vendors/smalot-bootstrap-datetimepicker/js/bootstrap-datetimepicker.js',
+        'static/vendors/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js',
+        'static/vendors/imageviewer/dist/viewer.js',
+        'static/vendors/ngDraggable/ngDraggable.js',
+        'static/js/utils/form-builder.js',
+        'static/js/utils/uuid.js',
+        'static/js/utils/jquery.base64.min.js',
+        'static/js/utils/des.js',
+        'static/js/utils/jquery.md5.js',
+        'static/js/app.js',
+        'static/js/business/module.js',
+        'static/js/billing_cfg_guide/module.js',
+        'static/js/budget_form_customize/module.js',
+        'static/js/budget_forms/module.js',
+        'static/js/utils/http.js',
+        'static/js/saved_form/module.js',
+        'static/js/config_center/module.js',
+        'static/js/system_config/module.js',
+        'static/js/travel_expense/module.js',
+        'static/js/travel_expense_todos/module.js',
+        'static/js/forms_center/module.js',
+        'static/js/messages_center/module.js',
+        'static/js/templates_center/module.js',
+        'static/js/expend_standard/module.js',
+        'static/js/registry/module.js',
+        'static/js/work_flow/module.js'
+    ]
+};
+
+var path = {
+    'dev': './',
+    'build': 'static/js/build/',
+    'dist': 'dist/'
+};
+
+gulp.task('less', function(){
+    return gulp.src('static/css/**/*.less')
+        .pipe(watchLess('static/css/**/*.less'))
+        .pipe(debug())
+        .pipe(less())
+        .pipe(gulp.dest('static/css/'));
+})
+
+gulp.task('prod:clean', function(done){
+    return gulp
+        .src(path.dist, { read: false })
+        .pipe(rimraf({ force: true }, done));
+})
+
+gulp.task('prod:copyAll', function(){
+    return gulp.src(['static/**/*'])
+        .pipe(gulp.dest(path.dist + 'static/'));
+})
+
+gulp.task('prod:copyIndex', function(){
+    return gulp.src(['index.html'])
+        .pipe(gulp.dest(path.dist));
+})
+
+gulp.task('prod:minify', function(){
+   return gulp.src(_.map(paths.scripts, o=> path.dist + o))
+        .pipe(concat('all.js'))
+        .pipe(gulp.dest(path.dist+path.build))
+        .pipe(rename('all.min.js'))
+        .pipe(uglify())
+        .pipe(gulp.dest(path.dist+path.build))
+})
+
+gulp.task('prod:inject', function () {
+    var target = gulp.src('./index.html');
+    var sources = gulp.src([
+        path.dist+path.build+'all.min.js'
+    ], { read: false });
+    return target.pipe(plugins.inject(sources, { ignorePath: 'dist/', addRootSlash: true }))
+        .pipe(gulp.dest(path.dist));
+});
+
+
+gulp.task('build:prod', function(done){
+    runSequence(
+        'prod:clean',
+        'prod:copyAll',
+        'prod:minify',
+        'prod:inject',
+        'prod:clearnSrc',
+        done);
+});
+
+
+gulp.task('prod:clearnSrc', function(){
+    return gulp.src(_.map(paths.scripts, o=> path.dist + o), {read: false})
+        .pipe(clean());
+});
+
+gulp.task('dev:watch', function () {
+    gulp.watch('static/css/**/*.less', ['less']);
+});
+
+
+gulp.task('connect:dev', function() {
+    plugins.connect.server({
+        root: [path.dev],
+        port: 80,
+        livereload: false,
+        fallback: 'index.html',
+        middleware: function(connect, opt) {
+            return [
+                proxy('/travel-web', {
+//              target: 'http://192.168.31.137:8080',
+//                 target: 'http://10.4.32.37:8080',
+                  target: 'http://10.4.32.57:80/',
+//                target: 'http://192.168.31.17:8080/',
+//                 target: 'http://192.168.31.144:8080',
+//					target: 'http://192.168.31.17:8080',
+//              target: 'http://192.168.31.30:8080',
+//                        target: 'http://192.168.31.53:8090',
+//                    target: 'http://192.168.31.205',
+//					target: 'http://192.168.31.89:8090',
+//                 target: 'http://122.114.176.216:8080/',
+////               target: 'http://202.98.157.47:8081/',
+//               target: 'http://10.4.68.58',
+//               target: 'http://10.4.32.58:8080',
+//               target: 'http://localhost:8080',
+//                target: 'http://192.168.31.172:80',
+                    changeOrigin:true
+                })
+            ]
+        }
+    });
+});
+
+gulp.task('connect:prod', function() {
+    plugins.connect.server({
+        root: [path.dist],
+        port: 8082,
+        livereload: false,
+        fallback: 'index.html',
+        middleware: function(connect, opt) {
+            return [
+                proxy('/travel-web', {
+                    target: 'http://122.114.176.216:8080/',
+                    changeOrigin:true
+                })
+            ]
+        }
+    });
+});
+
+
+gulp.task('run:dev', function(done){
+    runSequence(
+        'dev:watch',
+        'connect:dev',
+        done);
+});
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000..9cee3e6
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML>
+<html ng-app="app">
+
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<style type="text/css">
+			.loading{
+			    width: 30%;
+			    position: fixed;
+			    height: 70%;
+			    left: 35%;
+			    top: 10%;
+			    background-repeat: no-repeat;
+			    background-size: contain;
+			    display: flex;
+			    justify-content: center;
+			    align-items: center;
+			    flex-direction: column;
+			}
+			.load_span{
+			        margin-top: 8px;
+			    }
+		</style>
+		<!--<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />-->
+		<!-- <link href="./static/vendors/flatpickr/dist/flatpickr.min.css" type="text/css" rel="stylesheet"/>-->
+		<link href="./static/vendors/bootstrap/dist/css/bootstrap.min.css" type="text/css" rel="stylesheet"/>
+        <link href="./static/vendors/animate.css/animate.min.css" type="text/css" rel="stylesheet"/>
+        <link href="./static/vendors/font-awesome/css/font-awesome.min.css" type="text/css" rel="stylesheet"/>
+        <link href="./static/vendors/zTree/css/zTreeStyle/zTreeStyle.css" type="text/css" rel="stylesheet"/>
+        <link rel="stylesheet" type="text/css" href="./static/vendors/smalot-bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css"/>
+        <!-- <link href="./static/vendors/flatpickr/dist/flatpickr.min.css" type="text/css" rel="stylesheet"/>-->
+        <link href="./static/vendors/flatpickr/dist/themes/material_green.css" type="text/css" rel="stylesheet"/>
+        <!--<link rel="stylesheet" type="text/css" href="./static/vendors/bootstrap/dist/css/jquery.eeyellow.Timeline.css"/>-->
+        <link href="./static/vendors/toastr/toastr.min.css"  type="text/css" rel="stylesheet"/>
+        <link rel="stylesheet" type="text/css" href="./static/vendors/sweetalert/dist/sweetalert.css"/>
+        <link rel="shortcut icon" href="./static/img/heroico.ico">
+        <link href="./static/css/app.css" type="text/css" rel="stylesheet"/>
+     </head>
+     <body  ng-controller="appCtrl" lang="zh" class="animated fadeIn" >
+         <div class="outer">
+             <header class="bs-docs-nav navbar navbar-static-top" id="top"> 
+                <div class="container">
+                    <div class="navbar-header">
+                        <img src="./static/img/hero.png"  class="hero">
+                        <a ng-href="javascript:void(0);" class="navbar-brand">费用云</a>
+                    </div>
+                    <nav class="collapse navbar-collapse" id="bs-navbar">
+                        <ul class="nav navbar-nav">
+                            <li class="dropdown" data-toggle="dropdown" ng-show="permission_check('travel_reimbursement')"> 
+                                <a ng-href="javascript:void(0);" id="travel_reimbursement">差旅费</a>
+                                <ul class="dropdown-menu" aria-labelledby="travel_reimbursement"> 
+                                    <li ng-show="permission_check('budgetorder') && $root.budget_open == 1"><a ng-href="javascript:void(0);" ng-click="redirect_to('travel_expense/1')" id="budgetorder">预算</a></li>
+                                    <li role="separator" class="divider"></li> 
+                                    <li ng-show="permission_check('applyorder') && $root.apply_open == 1" class=""><a ng-href="javascript:void(0);" ng-click="redirect_to('travel_expense/2')" id="applyorder">申请</a></li> 
+                                    <li role="separator" class="divider"></li> 
+                                    <li ng-show="permission_check('expendorder') && $root.expend_open == 1" class=""><a ng-href="javascript:void(0);" ng-click="redirect_to('travel_expense/3')" id="expendorder">报销</a></li> 
+                                </ul>
+                            </li> 
+                            <li ng-show="permission_check('termination')" class="active"><a ng-href="javascript:void(0);" ng-click="redirect_to('/travel_expense_todos/')" id="termination">待办事项</a></li>  
+                            <li ng-show="permission_check('config_center')">
+                                <a ng-href="javascript:void(0);" ng-click="redirect_to('cfg_center/')" id="config_center">配置中心</a>
+                            </li>
+                            <li ng-show="permission_check('cloud_center')" class="dropdown" data-toggle="dropdown"> 
+                                <a ng-href="javascript:void(0);" id="cloud_center">云中心</a>
+                                <ul class="dropdown-menu" aria-labelledby="cloud_center"> 
+                                    <li ng-show="permission_check('template_center')"><a ng-href="javascript:void(0);" ng-click="redirect_to('/templates_center')" id="template_center">模板中心</a></li>
+                                    <!--
+                                    <li role="separator" class="divider"></li> 
+                                    <li ><a href="/#!/user_forms_center/1">表单管理</a></li> 
+                                    -->
+									<li ng-show="permission_check('messages_center')"><a ng-href="javascript:void(0);" ng-click="redirect_to('/messages_center')" id="message_center">消息中心</a></li>
+									<!--<li ng-show="app_userinfo.userId == 83"><a ng-href="javascript:void(0);" ng-click="redirect_to('/messages_center')" id="message_center">消息中心</a></li>-->
+								</ul>
+							</li>
+						</ul>
+						<!--<button class="btn btn-action" style="float: right;" ng-click="redirect_to('registry')">登录</button>-->
+						<div style="float: right;margin-top: 10px;">
+							<span style="color: #fff;">用户:{{app_userinfo.name}}</span>
+						<button class="exitloginbtn" style="height: 30px;margin-left: 5px;" ng-click="exitLogin()">退出登录</button>
+						</div>
+					</nav>
+				</div>
+			</header>
+			<div class="loading body_show" ng-class="{body_transparent: !url_change_start, body_show: url_change_start}" >
+				<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+				<span class="load_span">Loading...</span>
+			</div>
+			<div class="view">
+				<div ng-view></div>
+			</div>
+		</div>
+	</body>
+	<!-- inject:js -->
+	<script src="./static/vendors/traceur/traceur.min.js"></script>
+	<script src="./static/vendors/lodash/dist/lodash.min.js"></script>
+	<script src="./static/vendors/angular/angular.min.js"></script>
+	<script src="./static/vendors/angular-route/angular-route.min.js"></script>
+	<script src="./static/vendors/jquery/dist/jquery.min.js"></script>
+	<script src="./static/vendors/jquery-ui/jquery-ui.min.js"></script>
+	<script src="./static/vendors/bootstrap/dist/js/bootstrap.min.js"></script>
+	<script src="./static/vendors/zTree/js/jquery.ztree.core.js"></script>
+	<script src="./static/vendors/flatpickr/dist/flatpickr.min.js"></script>
+	<script src="./static/vendors/flatpickr/dist/l10n/zh.js"></script>
+	<script src="./static/vendors/toastr/toastr.min.js"></script>
+	<script src="./static/vendors/smalot-bootstrap-datetimepicker/js/bootstrap-datetimepicker.js" type="text/javascript" charset="utf-8"></script>
+	<script src="./static/vendors/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js" type="text/javascript" charset="utf-8"></script>
+	<script src="./static/vendors/ngDraggable/ngDraggable.js" type="text/javascript" charset="utf-8"></script>
+	<script src="./static/js/utils/form-builder.js"></script>
+	<script src="./static/js/utils/uuid.js"></script>
+	<script src="./static/js/utils/jquery.base64.min.js"></script>
+	<script src="./static/js/utils/jquery.md5.js"></script>
+	<script src="./static/js/utils/des.js"></script>
+	<script src="./static/js/app.js"></script>
+	<script src="./static/js/business/module.js"></script>
+	<script src="./static/js/billing_cfg_guide/module.js"></script>
+	<script src="./static/js/budget_form_customize/module.js"></script>
+	<script src="./static/js/budget_forms/module.js"></script>
+	<script src="./static/js/utils/http.js"></script>
+	<script src="./static/js/saved_form/module.js"></script>
+	<script src="./static/js/config_center/module.js"></script>
+	<script src="./static/js/system_config/module.js"></script>
+	<script src="./static/js/travel_expense/module.js"></script>
+	<script src="./static/js/travel_expense_todos/module.js"></script>
+	<script src="./static/js/forms_center/module.js"></script>
+	<script src="./static/js/templates_center/module.js"></script>
+	<script src="./static/js/messages_center/module.js"></script>
+	<script src="./static/js/expend_standard/module.js"></script>
+	<script src="./static/js/registry/module.js"></script>
+	<script src="./static/js/work_flow/module.js"></script>
+	<!--<script src="./static/vendors/toastr/toastr.min.js"></script>-->
+	<script src="./static/vendors/sweetalert/dist/sweetalert.min.js"></script>
+	<script src="./static/vendors/ng-file-upload-shim/ng-file-upload.min.js" type="text/javascript" charset="utf-8"></script>
+	<script src="./static/vendors/ng-file-upload-shim/ng-file-upload-shim.min.js" type="text/javascript" charset="utf-8"></script>
+	<!-- endinject -->
+	<script>
+		Flatpickr.localize(Flatpickr.l10ns.zh); // 设置为中文
+		flatpickr('mySelector');
+		var basefont = window.innerWidth / 10 + 'px';
+		function fn(){
+			document.querySelector('html').fontSize = basefont;
+		}
+		fn();
+		window.resize = function(){
+			fn();
+		}
+			
+	</script>
+ </html>
\ No newline at end of file
diff --git a/src/origin_change.html b/src/origin_change.html
new file mode 100644
index 0000000..a2953ee
--- /dev/null
+++ b/src/origin_change.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML>
+<!--[if lt IE 9]>
+<p class="chromeframe" onclick="this.style.display='none'">您正在使用<strong>老版本浏览器</strong>,请<a href="http://browsehappy.com/">升级到新版本浏览器</a>或者<a href="http://www.mychrome.cn/desktop/">下载谷歌浏览器</a>,以便页面能正确显示并提升您的浏览体验!360浏览器请切换至<span>极速模式 </span><a title="关闭">&times;</a></p>
+<![endif]-->
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit" />
+    <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge">
+    <title>云尚行</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width">
+    <link rel="icon" href="/favicon.ico?v=20170711">
+    <link rel="stylesheet" href="css/all.css" />
+    <style>
+        .cover {
+            position: absolute;
+            top: 0;
+            right: 0;
+            bottom: 0;
+            left: 0;
+            background: url(./img/bg-origin.jpg) center 0 no-repeat;
+            background-size: auto 78.125%;
+        }
+        .logo {
+            position: absolute;
+            top: 0;
+            left: 0;
+            right: 0;
+            bottom: 0;
+            background: url(./img/logo-origin.jpg) 0 0 no-repeat;
+            background-size: auto 9.375%;
+        }
+        .container {
+            position: absolute;
+            top: 78.125%;
+            left: 0;
+            width: 100%;
+            text-align: center;
+            line-height: 58px;
+        }
+        .djs {
+            color: #8a9499;
+            font-size: 24px;
+        }
+        .now {
+            font-size: 24px;
+            color: #2e3133;
+        }
+        #sec {
+            color: #ea4547;
+            padding: 0 5px;
+        }
+        .now > a {
+            color: #23b8f6;
+            text-decoration: underline!important;
+        }
+    </style>
+</head>
+<body>
+<div class="cover"></div>
+<div class="logo"></div>
+<div class="container">
+    <p class="djs"><span id="sec">5</span>秒后自动跳转</p>
+    <p class="now">立刻前往:&nbsp;<a id="link_a" href="#">travel.sunscloud.com</a></p>
+</div>
+<script>
+	function getQueryString(name) { //获取url参数的值
+		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 
+		var r = window.location.search.substr(1).match(reg); 
+		if (r != null) return unescape(r[2]); return null; 
+	}
+	var token = getQueryString("token");
+	var csc_compid = getQueryString("csc_compid");
+	var csc_comp_code = getQueryString("csc_comp_code");
+	var tenantId = getQueryString("tenantId");
+	var companyRowId = getQueryString("companyRowId");
+	var newUrl = "https://travel.sunscloud.com/?token="+token+"&csc_compid="+csc_compid+"&csc_comp_code="+csc_comp_code+"&tenantId="+tenantId+"&companyRowId="+companyRowId+"&origin_change=1";
+	document.getElementById('link_a').href = newUrl;
+    var sec = 5;
+    var timer = setInterval(function () {
+      sec -= 1;
+      if (sec <= 0) {
+        location.href = newUrl;
+        clearInterval(timer);
+      }
+      document.getElementById('sec').innerHTML = sec;
+    }, 1000);
+</script>
+</body>
+</html>
diff --git a/src/package-lock.json b/src/package-lock.json
new file mode 100644
index 0000000..dde9db0
--- /dev/null
+++ b/src/package-lock.json
@@ -0,0 +1,6928 @@
+{
+  "name": "iem",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.18",
+        "negotiator": "0.6.1"
+      }
+    },
+    "accord": {
+      "version": "0.28.0",
+      "resolved": "https://registry.npmjs.org/accord/-/accord-0.28.0.tgz",
+      "integrity": "sha1-vsUWovci59UPX59C+Bt387lUSLo=",
+      "dev": true,
+      "requires": {
+        "convert-source-map": "^1.5.0",
+        "glob": "^7.0.5",
+        "indx": "^0.2.3",
+        "lodash.clone": "^4.3.2",
+        "lodash.defaults": "^4.0.1",
+        "lodash.flatten": "^4.2.0",
+        "lodash.merge": "^4.4.0",
+        "lodash.partialright": "^4.1.4",
+        "lodash.pick": "^4.2.1",
+        "lodash.uniq": "^4.3.0",
+        "resolve": "^1.5.0",
+        "semver": "^5.3.0",
+        "uglify-js": "^2.8.22",
+        "when": "^3.7.8"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "lodash.defaults": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+          "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+          "dev": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "semver": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+          "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=",
+          "dev": true
+        }
+      }
+    },
+    "ajv": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+      "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "co": "^4.6.0",
+        "json-stable-stringify": "^1.0.1"
+      }
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true,
+      "optional": true
+    },
+    "ansi-colors": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+      "integrity": "sha1-Y3S03V1HGP884npnGjscrQdxMqk=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "^0.1.0"
+      }
+    },
+    "ansi-cyan": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+      "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-gray": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-red": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+      "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+      "dev": true
+    },
+    "ansi-wrap": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+      "dev": true
+    },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+      "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=",
+      "dev": true,
+      "requires": {
+        "micromatch": "^2.1.5",
+        "normalize-path": "^2.0.0"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1"
+          }
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "1.8.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "^0.1.0"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
+          }
+        }
+      }
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+      "dev": true
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-differ": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+      "dev": true
+    },
+    "array-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true
+    },
+    "array-slice": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+      "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=",
+      "dev": true
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+      "dev": true
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+      "dev": true,
+      "optional": true
+    },
+    "asn1": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+      "dev": true,
+      "optional": true
+    },
+    "assert-plus": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+      "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+      "dev": true,
+      "optional": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async-done": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/async-done/-/async-done-0.4.0.tgz",
+      "integrity": "sha1-q4BT9fYikPi/xY83zZtzBwszB7k=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^0.1.4",
+        "next-tick": "^0.2.2",
+        "once": "^1.3.0",
+        "stream-exhaust": "^1.0.0"
+      }
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true,
+      "optional": true
+    },
+    "atob": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
+      "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
+      "dev": true
+    },
+    "aws-sign2": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+      "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+      "dev": true,
+      "optional": true
+    },
+    "aws4": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+      "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+      "dev": true,
+      "optional": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        }
+      }
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+      "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "beeper": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+      "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.14.2",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz",
+      "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=",
+      "dev": true,
+      "requires": {
+        "bytes": "2.2.0",
+        "content-type": "~1.0.1",
+        "debug": "~2.2.0",
+        "depd": "~1.1.0",
+        "http-errors": "~1.3.1",
+        "iconv-lite": "0.4.13",
+        "on-finished": "~2.3.0",
+        "qs": "5.2.0",
+        "raw-body": "~2.1.5",
+        "type-is": "~1.6.10"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+          "dev": true,
+          "requires": {
+            "ms": "0.7.1"
+          }
+        },
+        "ms": {
+          "version": "0.7.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+          "dev": true
+        },
+        "qs": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz",
+          "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=",
+          "dev": true
+        }
+      }
+    },
+    "boom": {
+      "version": "2.10.1",
+      "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+      "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+      "dev": true,
+      "requires": {
+        "hoek": "2.x.x"
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+      "integrity": "sha1-cIbJE7TloI2+N6wO5qJQDEumkbs=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "kind-of": "^6.0.2",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz",
+      "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=",
+      "dev": true
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "camelcase": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+      "dev": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      }
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true,
+      "optional": true
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "dev": true,
+      "requires": {
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
+      }
+    },
+    "chalk": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^2.2.1",
+        "escape-string-regexp": "^1.0.2",
+        "has-ansi": "^2.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^2.0.0"
+      }
+    },
+    "chokidar": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+      "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+      "dev": true,
+      "requires": {
+        "anymatch": "^1.3.0",
+        "async-each": "^1.0.0",
+        "fsevents": "^1.0.0",
+        "glob-parent": "^2.0.0",
+        "inherits": "^2.0.1",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^2.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.0.0"
+      },
+      "dependencies": {
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "cliui": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+      "dev": true,
+      "requires": {
+        "center-align": "^0.1.1",
+        "right-align": "^0.1.1",
+        "wordwrap": "0.0.2"
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-buffer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+      "dev": true
+    },
+    "clone-stats": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+      "dev": true
+    },
+    "cloneable-readable": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
+      "integrity": "sha1-1ZHe5Kj4vBXaQ86X3O66E9Q+KmU=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "process-nextick-args": "^2.0.0",
+        "readable-stream": "^2.3.5"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.3.5",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+          "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.0.3",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+          "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true,
+      "optional": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+      "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
+      "dev": true,
+      "requires": {
+        "color-name": "^1.1.1"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
+    },
+    "color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=",
+      "dev": true
+    },
+    "combined-stream": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-with-sourcemaps": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.5.tgz",
+      "integrity": "sha1-iWS8I0fQWBm2N5gQTYfW4AG+2NA=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      }
+    },
+    "connect-livereload": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz",
+      "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=",
+      "dev": true
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+      "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+      "dev": true
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "cryptiles": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+      "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "boom": "2.x.x"
+      }
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "dateformat": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+      "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+      "dev": true
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "deprecated": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+      "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+      "dev": true
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+      "dev": true
+    },
+    "detect-file": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+      "dev": true
+    },
+    "duplexer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "dev": true
+    },
+    "duplexer2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+      "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~1.1.9"
+      }
+    },
+    "ecc-jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+      "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "jsbn": "~0.1.0"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "end-of-stream": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+      "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+      "dev": true,
+      "requires": {
+        "once": "~1.3.0"
+      }
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+      "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "etag": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+      "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+      "dev": true
+    },
+    "event-stream": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+      "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+      "dev": true,
+      "requires": {
+        "duplexer": "~0.1.1",
+        "from": "~0",
+        "map-stream": "~0.1.0",
+        "pause-stream": "0.0.11",
+        "split": "0.3",
+        "stream-combiner": "~0.0.4",
+        "through": "~2.3.1"
+      }
+    },
+    "eventemitter3": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+      "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+      "dev": true
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "expand-range": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+      "dev": true,
+      "requires": {
+        "fill-range": "^2.1.0"
+      },
+      "dependencies": {
+        "fill-range": {
+          "version": "2.2.3",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+          "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+          "dev": true,
+          "requires": {
+            "is-number": "^2.1.0",
+            "isobject": "^2.0.0",
+            "randomatic": "^1.1.3",
+            "repeat-element": "^1.1.2",
+            "repeat-string": "^1.5.2"
+          }
+        },
+        "is-number": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+          "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "isobject": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+          "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+          "dev": true,
+          "requires": {
+            "isarray": "1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "expand-tilde": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+      "dev": true,
+      "requires": {
+        "homedir-polyfill": "^1.0.1"
+      }
+    },
+    "extend": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fancy-log": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+      "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+      "dev": true,
+      "requires": {
+        "ansi-gray": "^0.1.1",
+        "color-support": "^1.1.3",
+        "time-stamp": "^1.0.0"
+      }
+    },
+    "fastqueue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/fastqueue/-/fastqueue-0.1.0.tgz",
+      "integrity": "sha1-bGkQFrOAYYZHbusFpxe6u49jPBk=",
+      "dev": true
+    },
+    "faye-websocket": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "filename-regex": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+      "dev": true
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+      "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.1",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.3.1",
+        "unpipe": "~1.0.0"
+      }
+    },
+    "find-index": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+      "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+      "dev": true
+    },
+    "find-up": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+      "dev": true,
+      "requires": {
+        "path-exists": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "findup-sync": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+      "dev": true,
+      "requires": {
+        "detect-file": "^1.0.0",
+        "is-glob": "^3.1.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
+      }
+    },
+    "fined": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+      "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "is-plain-object": "^2.0.3",
+        "object.defaults": "^1.1.0",
+        "object.pick": "^1.2.0",
+        "parse-filepath": "^1.0.1"
+      }
+    },
+    "first-chunk-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+      "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+      "dev": true
+    },
+    "flagged-respawn": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+      "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+      "dev": true
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true,
+      "optional": true
+    },
+    "form-data": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+      "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.5",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+      "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+      "dev": true
+    },
+    "from": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+      "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+      "dev": true
+    },
+    "fs-exists-sync": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
+      "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
+      "dev": true
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "1.2.9",
+      "resolved": "http://r.cnpmjs.org/fsevents/download/fsevents-1.2.9.tgz",
+      "integrity": "sha1-P17WZYPM1vQAtaANtvfoYTY+OI8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "^2.12.1",
+        "node-pre-gyp": "^0.12.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.3.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "^4.1.0",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.12.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.4.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.7.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true
+        }
+      }
+    },
+    "gaze": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+      "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+      "dev": true,
+      "requires": {
+        "globule": "~0.1.0"
+      }
+    },
+    "get-own-enumerable-property-symbols": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz",
+      "integrity": "sha1-XErYfyg0xLm06EVJ3B4GUPs4wks=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "glob": {
+      "version": "4.5.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+      "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+      "dev": true,
+      "requires": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^2.0.1",
+        "once": "^1.3.0"
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "dev": true,
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "glob-parent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+      "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "glob-stream": {
+      "version": "3.1.18",
+      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+      "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+      "dev": true,
+      "requires": {
+        "glob": "^4.3.1",
+        "glob2base": "^0.0.12",
+        "minimatch": "^2.0.1",
+        "ordered-read-streams": "^0.1.0",
+        "through2": "^0.6.1",
+        "unique-stream": "^1.0.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        }
+      }
+    },
+    "glob-watcher": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+      "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+      "dev": true,
+      "requires": {
+        "gaze": "^0.5.1"
+      }
+    },
+    "glob2base": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+      "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+      "dev": true,
+      "requires": {
+        "find-index": "^0.1.1"
+      }
+    },
+    "global-modules": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+      "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=",
+      "dev": true,
+      "requires": {
+        "global-prefix": "^1.0.1",
+        "is-windows": "^1.0.1",
+        "resolve-dir": "^1.0.0"
+      }
+    },
+    "global-prefix": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
+      }
+    },
+    "globule": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+      "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+      "dev": true,
+      "requires": {
+        "glob": "~3.1.21",
+        "lodash": "~1.0.1",
+        "minimatch": "~0.2.11"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "3.1.21",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+          "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "~1.2.0",
+            "inherits": "1",
+            "minimatch": "~0.2.11"
+          }
+        },
+        "graceful-fs": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+          "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+          "dev": true
+        },
+        "inherits": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+          "dev": true
+        },
+        "lodash": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+          "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+          "dev": true
+        },
+        "minimatch": {
+          "version": "0.2.14",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "2",
+            "sigmund": "~1.0.0"
+          }
+        }
+      }
+    },
+    "glogg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+      "integrity": "sha1-3PdY5EeJzD89MsHzVio2duajSBA=",
+      "dev": true,
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "3.0.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+      "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+      "dev": true,
+      "requires": {
+        "natives": "^1.1.0"
+      }
+    },
+    "group-array": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/group-array/-/group-array-0.3.3.tgz",
+      "integrity": "sha1-u9nS9xjfS+M/D7kEMqrxtDYOSY8=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.0.1",
+        "for-own": "^0.1.4",
+        "get-value": "^2.0.6",
+        "kind-of": "^3.1.0",
+        "split-string": "^1.0.1",
+        "union-value": "^0.2.3"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "for-own": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+          "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        },
+        "split-string": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/split-string/-/split-string-1.0.1.tgz",
+          "integrity": "sha1-vLqz9BUqzuOg1qskecDSh5w9s84=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1"
+          }
+        },
+        "union-value": {
+          "version": "0.2.4",
+          "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz",
+          "integrity": "sha1-c3UVJ4ZnkFfns3qmdug0aPwCdPA=",
+          "dev": true,
+          "requires": {
+            "arr-union": "^3.1.0",
+            "get-value": "^2.0.6",
+            "is-extendable": "^0.1.1",
+            "set-value": "^0.4.3"
+          }
+        }
+      }
+    },
+    "gulp": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+      "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+      "dev": true,
+      "requires": {
+        "archy": "^1.0.0",
+        "chalk": "^1.0.0",
+        "deprecated": "^0.0.1",
+        "gulp-util": "^3.0.0",
+        "interpret": "^1.0.0",
+        "liftoff": "^2.1.0",
+        "minimist": "^1.1.0",
+        "orchestrator": "^0.3.0",
+        "pretty-hrtime": "^1.0.0",
+        "semver": "^4.1.0",
+        "tildify": "^1.0.0",
+        "v8flags": "^2.0.2",
+        "vinyl-fs": "^0.3.0"
+      }
+    },
+    "gulp-batch": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gulp-batch/-/gulp-batch-1.0.1.tgz",
+      "integrity": "sha1-2aahq7UEs6QUctnqJy1JGeEbD4Y=",
+      "dev": true,
+      "requires": {
+        "async-done": "^0.4.0",
+        "stream-array": "^0.1.3"
+      }
+    },
+    "gulp-clean": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.3.2.tgz",
+      "integrity": "sha1-o0fUc6zqQBgvk1WHpFGUFnGSgQI=",
+      "dev": true,
+      "requires": {
+        "gulp-util": "^2.2.14",
+        "rimraf": "^2.2.8",
+        "through2": "^0.4.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "gulp-util": {
+          "version": "2.2.20",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+          "dev": true,
+          "requires": {
+            "chalk": "^0.5.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.2.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.5.0",
+            "vinyl": "^0.2.1"
+          },
+          "dependencies": {
+            "through2": {
+              "version": "0.5.1",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+              "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~1.0.17",
+                "xtend": "~3.0.0"
+              }
+            }
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+          "dev": true
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "dev": true,
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "dev": true,
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "dev": true,
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimist": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
+          },
+          "dependencies": {
+            "xtend": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+              "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+              "dev": true,
+              "requires": {
+                "object-keys": "~0.4.0"
+              }
+            }
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "dev": true,
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-concat": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
+      "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
+      "dev": true,
+      "requires": {
+        "concat-with-sourcemaps": "^1.0.0",
+        "through2": "^2.0.0",
+        "vinyl": "^2.0.0"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+          "dev": true
+        },
+        "clone-stats": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+          "dev": true
+        },
+        "replace-ext": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+          "dev": true
+        },
+        "vinyl": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+          "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+          "dev": true,
+          "requires": {
+            "clone": "^2.1.1",
+            "clone-buffer": "^1.0.0",
+            "clone-stats": "^1.0.0",
+            "cloneable-readable": "^1.0.0",
+            "remove-trailing-separator": "^1.0.1",
+            "replace-ext": "^1.0.0"
+          }
+        }
+      }
+    },
+    "gulp-connect": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.5.0.tgz",
+      "integrity": "sha1-5CMU0Hrfmy/7onKXTO/5H3yHYTA=",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^1.0.1",
+        "connect": "^3.6.5",
+        "connect-livereload": "^0.5.4",
+        "event-stream": "^3.3.2",
+        "fancy-log": "^1.3.2",
+        "send": "^0.13.2",
+        "serve-index": "^1.9.1",
+        "serve-static": "^1.13.1",
+        "tiny-lr": "^0.2.1"
+      }
+    },
+    "gulp-debug": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/gulp-debug/-/gulp-debug-3.2.0.tgz",
+      "integrity": "sha1-RaukQ5+nn+B4j2pBHuB3j0SS36U=",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.0",
+        "fancy-log": "^1.3.2",
+        "plur": "^2.0.0",
+        "stringify-object": "^3.0.0",
+        "through2": "^2.0.0",
+        "tildify": "^1.1.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "dev": true,
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "chalk": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+          "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "supports-color": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+          "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "gulp-inject": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/gulp-inject/-/gulp-inject-4.3.1.tgz",
+      "integrity": "sha1-cWr42Ubg9AgJzpfhvu2cxoZ9cNc=",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^1.0.1",
+        "arrify": "^1.0.1",
+        "escape-string-regexp": "^1.0.5",
+        "event-stream": "^3.1.0",
+        "fancy-log": "^1.3.2",
+        "group-array": "^0.3.0",
+        "plugin-error": "^0.1.2",
+        "stream-to-array": "^2.3.0",
+        "through2": "^2.0.1"
+      }
+    },
+    "gulp-less": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-3.5.0.tgz",
+      "integrity": "sha1-gBT0ad38ZUTX3aUAmN7wNxu7T3g=",
+      "dev": true,
+      "requires": {
+        "accord": "^0.28.0",
+        "less": "2.6.x || ^2.7.1",
+        "object-assign": "^4.0.1",
+        "plugin-error": "^0.1.2",
+        "replace-ext": "^1.0.0",
+        "through2": "^2.0.0",
+        "vinyl-sourcemaps-apply": "^0.2.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+          "dev": true
+        },
+        "replace-ext": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-load-plugins": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/gulp-load-plugins/-/gulp-load-plugins-1.5.0.tgz",
+      "integrity": "sha1-TEGffldk2aDjMGG6uWGPgbc9QXE=",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.2.1",
+        "fancy-log": "^1.2.0",
+        "findup-sync": "^0.4.0",
+        "gulplog": "^1.0.0",
+        "has-gulplog": "^0.1.0",
+        "micromatch": "^2.3.8",
+        "resolve": "^1.1.7"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1"
+          }
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "1.8.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
+          }
+        },
+        "detect-file": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz",
+          "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=",
+          "dev": true,
+          "requires": {
+            "fs-exists-sync": "^0.1.0"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "^0.1.0"
+          }
+        },
+        "expand-tilde": {
+          "version": "1.2.2",
+          "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
+          "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
+          "dev": true,
+          "requires": {
+            "os-homedir": "^1.0.1"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "findup-sync": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz",
+          "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=",
+          "dev": true,
+          "requires": {
+            "detect-file": "^0.1.0",
+            "is-glob": "^2.0.1",
+            "micromatch": "^2.3.7",
+            "resolve-dir": "^0.1.0"
+          }
+        },
+        "global-modules": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
+          "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
+          "dev": true,
+          "requires": {
+            "global-prefix": "^0.1.4",
+            "is-windows": "^0.2.0"
+          }
+        },
+        "global-prefix": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
+          "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
+          "dev": true,
+          "requires": {
+            "homedir-polyfill": "^1.0.0",
+            "ini": "^1.3.4",
+            "is-windows": "^0.2.0",
+            "which": "^1.2.12"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "is-windows": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
+          "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
+          }
+        },
+        "resolve-dir": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
+          "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
+          "dev": true,
+          "requires": {
+            "expand-tilde": "^1.2.2",
+            "global-modules": "^0.2.3"
+          }
+        }
+      }
+    },
+    "gulp-minify": {
+      "version": "0.0.14",
+      "resolved": "https://registry.npmjs.org/gulp-minify/-/gulp-minify-0.0.14.tgz",
+      "integrity": "sha1-sPeYd0L8tRezcTCNr3kcr7Bm0aw=",
+      "dev": true,
+      "requires": {
+        "gulp-util": "^2.2.14",
+        "minimatch": "^3.0.2",
+        "through2": "^0.4.0",
+        "uglify-js": "^2.6.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "gulp-util": {
+          "version": "2.2.20",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+          "dev": true,
+          "requires": {
+            "chalk": "^0.5.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.2.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.5.0",
+            "vinyl": "^0.2.1"
+          },
+          "dependencies": {
+            "through2": {
+              "version": "0.5.1",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+              "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~1.0.17",
+                "xtend": "~3.0.0"
+              }
+            }
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+          "dev": true
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "dev": true,
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "dev": true,
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "dev": true,
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
+          },
+          "dependencies": {
+            "xtend": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+              "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+              "dev": true,
+              "requires": {
+                "object-keys": "~0.4.0"
+              }
+            }
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "dev": true,
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-rename": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
+      "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
+      "dev": true
+    },
+    "gulp-rimraf": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/gulp-rimraf/-/gulp-rimraf-0.2.2.tgz",
+      "integrity": "sha1-ln8wmrGcIH4THgCCGKXwHh8T4c4=",
+      "dev": true,
+      "requires": {
+        "rimraf": "^2.6.2",
+        "through2": "^2.0.3"
+      }
+    },
+    "gulp-uglify": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-2.1.2.tgz",
+      "integrity": "sha1-bbhbHQ7mPRgFhZK2WGSdZcLsRUE=",
+      "dev": true,
+      "requires": {
+        "gulplog": "^1.0.0",
+        "has-gulplog": "^0.1.0",
+        "lodash": "^4.13.1",
+        "make-error-cause": "^1.1.1",
+        "through2": "^2.0.0",
+        "uglify-js": "~2.8.10",
+        "uglify-save-license": "^0.4.1",
+        "vinyl-sourcemaps-apply": "^0.2.0"
+      }
+    },
+    "gulp-util": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+      "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+      "dev": true,
+      "requires": {
+        "array-differ": "^1.0.0",
+        "array-uniq": "^1.0.2",
+        "beeper": "^1.0.0",
+        "chalk": "^1.0.0",
+        "dateformat": "^2.0.0",
+        "fancy-log": "^1.1.0",
+        "gulplog": "^1.0.0",
+        "has-gulplog": "^0.1.0",
+        "lodash._reescape": "^3.0.0",
+        "lodash._reevaluate": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.template": "^3.0.0",
+        "minimist": "^1.1.0",
+        "multipipe": "^0.1.2",
+        "object-assign": "^3.0.0",
+        "replace-ext": "0.0.1",
+        "through2": "^2.0.0",
+        "vinyl": "^0.5.0"
+      }
+    },
+    "gulp-watch": {
+      "version": "4.3.11",
+      "resolved": "https://registry.npmjs.org/gulp-watch/-/gulp-watch-4.3.11.tgz",
+      "integrity": "sha1-Fi/FY96fx3DpH5p845VVE6mhGMA=",
+      "dev": true,
+      "requires": {
+        "anymatch": "^1.3.0",
+        "chokidar": "^1.6.1",
+        "glob-parent": "^3.0.1",
+        "gulp-util": "^3.0.7",
+        "object-assign": "^4.1.0",
+        "path-is-absolute": "^1.0.1",
+        "readable-stream": "^2.2.2",
+        "slash": "^1.0.0",
+        "vinyl": "^1.2.0",
+        "vinyl-file": "^2.0.0"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.3.5",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+          "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.0.3",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+          "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        }
+      }
+    },
+    "gulp-watch-less": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gulp-watch-less/-/gulp-watch-less-1.0.1.tgz",
+      "integrity": "sha1-E5rjejiipZZCHuyXsr0L1Q4sscQ=",
+      "dev": true,
+      "requires": {
+        "gulp-util": "^3.0.0",
+        "gulp-watch": "^1.1.0",
+        "less": "~2.3.1",
+        "lodash.defaults": "^2.4.1",
+        "through2": "^0.6.1"
+      },
+      "dependencies": {
+        "asap": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
+          "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=",
+          "dev": true,
+          "optional": true
+        },
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "gulp-watch": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/gulp-watch/-/gulp-watch-1.2.1.tgz",
+          "integrity": "sha1-QwNedgRs2P7TAzZcsJ4ECi4qoJs=",
+          "dev": true,
+          "requires": {
+            "gaze": "0.5.x",
+            "glob2base": "~0.0.11",
+            "gulp-batch": "1.0.1",
+            "gulp-util": "~3.0.0",
+            "path2glob": "0.0.2",
+            "readable-stream": "^1.0.31",
+            "vinyl": "^0.4.3",
+            "vinyl-file": "~1.1.0"
+          }
+        },
+        "image-size": {
+          "version": "0.3.5",
+          "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz",
+          "integrity": "sha1-gyQOqy+1sAsEqrjHSwRx6cunrYw=",
+          "dev": true,
+          "optional": true
+        },
+        "less": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/less/-/less-2.3.1.tgz",
+          "integrity": "sha1-wQ7AgrLylQ9uHHUOTaFLzFQ+2EU=",
+          "dev": true,
+          "requires": {
+            "errno": "^0.1.1",
+            "graceful-fs": "^3.0.5",
+            "image-size": "~0.3.5",
+            "mime": "^1.2.11",
+            "mkdirp": "^0.5.0",
+            "promise": "^6.0.1",
+            "request": "^2.51.0",
+            "source-map": "^0.2.0"
+          }
+        },
+        "promise": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
+          "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "asap": "~1.0.0"
+          }
+        },
+        "source-map": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+          "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          },
+          "dependencies": {
+            "readable-stream": {
+              "version": "1.0.34",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+              "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+              "dev": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
+                "isarray": "0.0.1",
+                "string_decoder": "~0.10.x"
+              }
+            }
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        },
+        "vinyl-file": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-1.1.1.tgz",
+          "integrity": "sha1-gbZV8m5li9Logp8o1j+EfWhD1tA=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^3.0.2",
+            "strip-bom": "^1.0.0",
+            "vinyl": "^0.4.3"
+          }
+        }
+      }
+    },
+    "gulplog": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+      "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+      "dev": true,
+      "requires": {
+        "glogg": "^1.0.0"
+      }
+    },
+    "har-schema": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+      "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+      "dev": true,
+      "optional": true
+    },
+    "har-validator": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+      "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "ajv": "^4.9.1",
+        "har-schema": "^1.0.5"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-gulplog": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+      "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+      "dev": true,
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hawk": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+      "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "boom": "2.x.x",
+        "cryptiles": "2.x.x",
+        "hoek": "2.x.x",
+        "sntp": "1.x.x"
+      }
+    },
+    "hoek": {
+      "version": "2.16.3",
+      "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+      "dev": true
+    },
+    "homedir-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+      "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+      "dev": true,
+      "requires": {
+        "parse-passwd": "^1.0.0"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+      "integrity": "sha1-IyNbKasjDFdqqw1PE/wEawsDgiI=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
+      "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.1",
+        "statuses": "1"
+      }
+    },
+    "http-parser-js": {
+      "version": "0.4.11",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz",
+      "integrity": "sha1-W3IIScZQkDwn5SFjPZRpbulfNSk=",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.16.2",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+      "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "1.x.x",
+        "requires-port": "1.x.x"
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "0.17.4",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+      "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+      "dev": true,
+      "requires": {
+        "http-proxy": "^1.16.2",
+        "is-glob": "^3.1.0",
+        "lodash": "^4.17.2",
+        "micromatch": "^2.3.11"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1"
+          }
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "1.8.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "^0.1.0"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+              "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^1.0.0"
+              }
+            }
+          }
+        }
+      }
+    },
+    "http-signature": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+      "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "assert-plus": "^0.2.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.13",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
+      "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
+      "dev": true
+    },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "dev": true,
+      "optional": true
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indx": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/indx/-/indx-0.2.3.tgz",
+      "integrity": "sha1-Fdz1bunPZcAjTFE8J/vVgOcPvFA=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=",
+      "dev": true
+    },
+    "interpret": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+      "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+      "dev": true
+    },
+    "irregular-plurals": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+      "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
+      "dev": true
+    },
+    "is-absolute": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+      "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=",
+      "dev": true,
+      "requires": {
+        "is-relative": "^1.0.0",
+        "is-windows": "^1.0.1"
+      }
+    },
+    "is-accessor-descriptor": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+      "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.0"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+      "dev": true
+    },
+    "is-builtin-module": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+      "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+      "dev": true,
+      "requires": {
+        "builtin-modules": "^1.0.0"
+      }
+    },
+    "is-data-descriptor": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+      "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.0"
+      }
+    },
+    "is-descriptor": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+      "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^1.0.0",
+        "is-data-descriptor": "^1.0.0",
+        "kind-of": "^6.0.2"
+      }
+    },
+    "is-dotfile": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+      "dev": true
+    },
+    "is-equal-shallow": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+      "dev": true,
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.0"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
+    "is-odd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+      "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=",
+      "dev": true,
+      "requires": {
+        "is-number": "^4.0.0"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=",
+          "dev": true
+        }
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-posix-bracket": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+      "dev": true
+    },
+    "is-primitive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+      "dev": true
+    },
+    "is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+      "dev": true
+    },
+    "is-relative": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+      "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=",
+      "dev": true,
+      "requires": {
+        "is-unc-path": "^1.0.0"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true,
+      "optional": true
+    },
+    "is-unc-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+      "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=",
+      "dev": true,
+      "requires": {
+        "unc-path-regex": "^0.1.2"
+      }
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true,
+      "optional": true
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true,
+      "optional": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true,
+      "optional": true
+    },
+    "json-stable-stringify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+      "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "jsonify": "~0.0.0"
+      }
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true,
+      "optional": true
+    },
+    "jsonify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+      "dev": true,
+      "optional": true
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "kind-of": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+      "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
+      "dev": true
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+      "dev": true
+    },
+    "less": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
+      "integrity": "sha1-zBJg9RyQCp7A2R+2mYE54CUHtjs=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "mime": "^1.2.11",
+        "mkdirp": "^0.5.0",
+        "promise": "^7.1.1",
+        "request": "2.81.0",
+        "source-map": "^0.5.3"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "liftoff": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+      "dev": true,
+      "requires": {
+        "extend": "^3.0.0",
+        "findup-sync": "^2.0.0",
+        "fined": "^1.0.1",
+        "flagged-respawn": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "object.map": "^1.0.0",
+        "rechoir": "^0.6.2",
+        "resolve": "^1.1.7"
+      }
+    },
+    "livereload-js": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz",
+      "integrity": "sha1-w6si6Kr1vzUF2A0JjLrWdyZUjJo=",
+      "dev": true
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+          "dev": true
+        },
+        "strip-bom": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "dev": true,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        }
+      }
+    },
+    "lodash": {
+      "version": "4.17.5",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+      "integrity": "sha1-maktZcAnLevoyWtgV7yPv6O+1RE=",
+      "dev": true
+    },
+    "lodash._basecopy": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+      "dev": true
+    },
+    "lodash._basetostring": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+      "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+      "dev": true
+    },
+    "lodash._basevalues": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+      "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+      "dev": true
+    },
+    "lodash._escapehtmlchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
+      "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
+      "dev": true,
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1"
+      }
+    },
+    "lodash._escapestringchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
+      "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
+      "dev": true
+    },
+    "lodash._getnative": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+      "dev": true
+    },
+    "lodash._htmlescapes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
+      "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
+      "dev": true
+    },
+    "lodash._isiterateecall": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+      "dev": true
+    },
+    "lodash._isnative": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+      "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
+      "dev": true
+    },
+    "lodash._objecttypes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+      "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+      "dev": true
+    },
+    "lodash._reescape": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+      "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+      "dev": true
+    },
+    "lodash._reevaluate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+      "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+      "dev": true
+    },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+      "dev": true
+    },
+    "lodash._reunescapedhtml": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
+      "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
+      "dev": true,
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash._root": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+      "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+      "dev": true
+    },
+    "lodash._shimkeys": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+      "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.clone": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+      "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
+      "dev": true
+    },
+    "lodash.defaults": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
+      "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash.escape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+      "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+      "dev": true,
+      "requires": {
+        "lodash._root": "^3.0.0"
+      }
+    },
+    "lodash.flatten": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+      "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+      "dev": true
+    },
+    "lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+      "dev": true
+    },
+    "lodash.isarray": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+      "dev": true
+    },
+    "lodash.isobject": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+      "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.keys": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+      "dev": true,
+      "requires": {
+        "lodash._getnative": "^3.0.0",
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
+      }
+    },
+    "lodash.merge": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+      "integrity": "sha1-rcJdnLmbk5HFliTzefu6YNcRHVQ=",
+      "dev": true
+    },
+    "lodash.partialright": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz",
+      "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=",
+      "dev": true
+    },
+    "lodash.pick": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+      "dev": true
+    },
+    "lodash.restparam": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+      "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+      "dev": true
+    },
+    "lodash.template": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+      "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+      "dev": true,
+      "requires": {
+        "lodash._basecopy": "^3.0.0",
+        "lodash._basetostring": "^3.0.0",
+        "lodash._basevalues": "^3.0.0",
+        "lodash._isiterateecall": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0",
+        "lodash.keys": "^3.0.0",
+        "lodash.restparam": "^3.0.0",
+        "lodash.templatesettings": "^3.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+      "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+      "dev": true,
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0"
+      }
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "dev": true
+    },
+    "lodash.values": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
+      "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
+      "dev": true,
+      "requires": {
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+      "dev": true
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lru-cache": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+      "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+      "dev": true
+    },
+    "make-error": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
+      "integrity": "sha1-GZeO1XX56VRdL/jBPjO10Ypn1TU=",
+      "dev": true
+    },
+    "make-error-cause": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
+      "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
+      "dev": true,
+      "requires": {
+        "make-error": "^1.2.0"
+      }
+    },
+    "make-iterator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz",
+      "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.1.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true
+    },
+    "map-stream": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+      "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "dev": true
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+          "dev": true
+        }
+      }
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      }
+    },
+    "mime": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+      "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+      "dev": true
+    },
+    "mime-db": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+      "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.18",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+      "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=",
+      "dev": true,
+      "requires": {
+        "mime-db": "~1.33.0"
+      }
+    },
+    "minimatch": {
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+      "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.0.0"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "dev": true
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "multipipe": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+      "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+      "dev": true,
+      "requires": {
+        "duplexer2": "0.0.2"
+      }
+    },
+    "nan": {
+      "version": "2.14.0",
+      "resolved": "http://r.cnpmjs.org/nan/download/nan-2.14.0.tgz",
+      "integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=",
+      "dev": true,
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+      "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-odd": "^2.0.0",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      }
+    },
+    "natives": {
+      "version": "1.1.6",
+      "resolved": "http://r.cnpmjs.org/natives/download/natives-1.1.6.tgz",
+      "integrity": "sha1-pgO0pJirdxc2ErnqGs3sTZgPALs="
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+      "dev": true
+    },
+    "next-tick": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz",
+      "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=",
+      "dev": true
+    },
+    "normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "is-builtin-module": "^1.0.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "dev": true,
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+      "dev": true,
+      "optional": true
+    },
+    "object-assign": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+      "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+              "dev": true
+            }
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-keys": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+      "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.defaults": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+      "dev": true,
+      "requires": {
+        "array-each": "^1.0.1",
+        "array-slice": "^1.0.0",
+        "for-own": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+      "dev": true,
+      "requires": {
+        "for-own": "^1.0.0",
+        "make-iterator": "^1.0.0"
+      }
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "dev": true,
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      },
+      "dependencies": {
+        "for-own": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+          "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        }
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "once": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+      "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "orchestrator": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+      "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "~0.1.5",
+        "sequencify": "~0.0.7",
+        "stream-consume": "~0.1.0"
+      }
+    },
+    "ordered-read-streams": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+      "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "parse-filepath": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+      "dev": true,
+      "requires": {
+        "is-absolute": "^1.0.0",
+        "map-cache": "^0.2.0",
+        "path-root": "^0.1.1"
+      }
+    },
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "dev": true,
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "parse-passwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+      "dev": true
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+      "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+      "dev": true
+    },
+    "path-root": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+      "dev": true,
+      "requires": {
+        "path-root-regex": "^0.1.0"
+      }
+    },
+    "path-root-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+      "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+          "dev": true
+        }
+      }
+    },
+    "path2glob": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/path2glob/-/path2glob-0.0.2.tgz",
+      "integrity": "sha1-KejODRVAfCpQtjPvgFCy8pfARwI=",
+      "dev": true,
+      "requires": {
+        "glob": "^4.0.5"
+      }
+    },
+    "pause-stream": {
+      "version": "0.0.11",
+      "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+      "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+      "dev": true,
+      "requires": {
+        "through": "~2.3"
+      }
+    },
+    "performance-now": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+      "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+      "dev": true,
+      "optional": true
+    },
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "plugin-error": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+      "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+      "dev": true,
+      "requires": {
+        "ansi-cyan": "^0.1.1",
+        "ansi-red": "^0.1.1",
+        "arr-diff": "^1.0.1",
+        "arr-union": "^2.0.1",
+        "extend-shallow": "^1.1.2"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+          "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1",
+            "array-slice": "^0.2.3"
+          }
+        },
+        "arr-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+          "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+          "dev": true
+        },
+        "array-slice": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+          "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+          "dev": true
+        },
+        "extend-shallow": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+          "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^1.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+          "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+          "dev": true
+        }
+      }
+    },
+    "plur": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+      "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+      "dev": true,
+      "requires": {
+        "irregular-plurals": "^1.0.0"
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+      "dev": true
+    },
+    "pretty-hrtime": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=",
+      "dev": true
+    },
+    "promise": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+      "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "asap": "~2.0.3"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+      "dev": true,
+      "optional": true
+    },
+    "punycode": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+      "dev": true,
+      "optional": true
+    },
+    "qs": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz",
+      "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=",
+      "dev": true
+    },
+    "randomatic": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+      "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "range-parser": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+      "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.1.7",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz",
+      "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
+      "dev": true,
+      "requires": {
+        "bytes": "2.4.0",
+        "iconv-lite": "0.4.13",
+        "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+          "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=",
+          "dev": true
+        }
+      }
+    },
+    "read-pkg": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^1.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^1.0.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+      "dev": true,
+      "requires": {
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      }
+    },
+    "readable-stream": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+      "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "0.0.1",
+        "string_decoder": "~0.10.x"
+      }
+    },
+    "readdirp": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+      "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "minimatch": "^3.0.2",
+        "readable-stream": "^2.0.2",
+        "set-immediate-shim": "^1.0.1"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.5",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+          "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.0.3",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+          "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "dev": true,
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "dev": true,
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      }
+    },
+    "regex-cache": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+      "dev": true,
+      "requires": {
+        "is-equal-shallow": "^0.1.3"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "repeat-element": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+      "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "replace-ext": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+      "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+      "dev": true
+    },
+    "request": {
+      "version": "2.81.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+      "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "aws-sign2": "~0.6.0",
+        "aws4": "^1.2.1",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.5",
+        "extend": "~3.0.0",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.1.1",
+        "har-validator": "~4.2.1",
+        "hawk": "~3.1.3",
+        "http-signature": "~1.1.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.7",
+        "oauth-sign": "~0.8.1",
+        "performance-now": "^0.2.0",
+        "qs": "~6.4.0",
+        "safe-buffer": "^5.0.1",
+        "stringstream": "~0.0.4",
+        "tough-cookie": "~2.3.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.0.0"
+      },
+      "dependencies": {
+        "qs": {
+          "version": "6.4.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+          "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "dev": true
+    },
+    "resolve": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz",
+      "integrity": "sha1-D70hJ4sntABEgcOVNJ56umCp/1w=",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-dir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      }
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=",
+      "dev": true
+    },
+    "right-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+      "dev": true,
+      "requires": {
+        "align-text": "^0.1.1"
+      }
+    },
+    "rimraf": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+      "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.5"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        }
+      }
+    },
+    "run-sequence": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz",
+      "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=",
+      "dev": true,
+      "requires": {
+        "chalk": "*",
+        "gulp-util": "*"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+      "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=",
+      "dev": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "semver": {
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+      "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+      "dev": true
+    },
+    "send": {
+      "version": "0.13.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz",
+      "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
+      "dev": true,
+      "requires": {
+        "debug": "~2.2.0",
+        "depd": "~1.1.0",
+        "destroy": "~1.0.4",
+        "escape-html": "~1.0.3",
+        "etag": "~1.7.0",
+        "fresh": "0.3.0",
+        "http-errors": "~1.3.1",
+        "mime": "1.3.4",
+        "ms": "0.7.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.0.3",
+        "statuses": "~1.2.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+          "dev": true,
+          "requires": {
+            "ms": "0.7.1"
+          }
+        },
+        "ms": {
+          "version": "0.7.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+          "dev": true
+        },
+        "statuses": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
+          "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=",
+          "dev": true
+        }
+      }
+    },
+    "sequencify": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+      "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+      "dev": true
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "dependencies": {
+        "depd": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+          "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+          "dev": true
+        },
+        "http-errors": {
+          "version": "1.6.2",
+          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+          "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+          "dev": true,
+          "requires": {
+            "depd": "1.1.1",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.0.3",
+            "statuses": ">= 1.3.1 < 2"
+          }
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
+        "send": "0.16.2"
+      },
+      "dependencies": {
+        "etag": {
+          "version": "1.8.1",
+          "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+          "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+          "dev": true
+        },
+        "fresh": {
+          "version": "0.5.2",
+          "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+          "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+          "dev": true
+        },
+        "http-errors": {
+          "version": "1.6.2",
+          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+          "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+          "dev": true,
+          "requires": {
+            "depd": "1.1.1",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.0.3",
+            "statuses": ">= 1.3.1 < 2"
+          },
+          "dependencies": {
+            "depd": {
+              "version": "1.1.1",
+              "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+              "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+              "dev": true
+            }
+          }
+        },
+        "mime": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+          "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=",
+          "dev": true
+        },
+        "range-parser": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+          "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+          "dev": true
+        },
+        "send": {
+          "version": "0.16.2",
+          "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+          "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
+          "dev": true,
+          "requires": {
+            "debug": "2.6.9",
+            "depd": "~1.1.2",
+            "destroy": "~1.0.4",
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "etag": "~1.8.1",
+            "fresh": "0.5.2",
+            "http-errors": "~1.6.2",
+            "mime": "1.4.1",
+            "ms": "2.0.0",
+            "on-finished": "~2.3.0",
+            "range-parser": "~1.2.0",
+            "statuses": "~1.4.0"
+          }
+        },
+        "statuses": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+          "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=",
+          "dev": true
+        }
+      }
+    },
+    "set-immediate-shim": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setprototypeof": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+      "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+      "dev": true
+    },
+    "sigmund": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+      "dev": true
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "slash": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+      "dev": true,
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+      "dev": true,
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "sntp": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+      "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "hoek": "2.x.x"
+      }
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "source-map-resolve": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+      "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=",
+      "dev": true,
+      "requires": {
+        "atob": "^2.0.0",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "sparkles": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+      "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+      "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+      "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+      "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=",
+      "dev": true
+    },
+    "split": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+      "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+      "dev": true,
+      "requires": {
+        "through": "2"
+      }
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sshpk": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
+      "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "tweetnacl": "~0.14.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+      "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+      "dev": true
+    },
+    "stream-array": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/stream-array/-/stream-array-0.1.3.tgz",
+      "integrity": "sha1-bjdOicmqoapImVHAcBHyRWEfyYs=",
+      "dev": true,
+      "requires": {
+        "fastqueue": "~0.1.0",
+        "readable-stream": "~1.1.0"
+      }
+    },
+    "stream-combiner": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+      "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+      "dev": true,
+      "requires": {
+        "duplexer": "~0.1.1"
+      }
+    },
+    "stream-consume": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+      "integrity": "sha1-0721mMK9CugrjKx6xQsRB6eZbEg=",
+      "dev": true
+    },
+    "stream-exhaust": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
+      "integrity": "sha1-rNrI2lnvK8HheiwMz2wyDRIOVV0=",
+      "dev": true
+    },
+    "stream-to-array": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+      "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.1.0"
+      }
+    },
+    "string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+      "dev": true
+    },
+    "stringify-object": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.2.tgz",
+      "integrity": "sha1-mFMFLlqI+2BaRM0nRFqiV61/+80=",
+      "dev": true,
+      "requires": {
+        "get-own-enumerable-property-symbols": "^2.0.1",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      }
+    },
+    "stringstream": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+      "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+      "dev": true,
+      "optional": true
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-bom": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+      "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+      "dev": true,
+      "requires": {
+        "first-chunk-stream": "^1.0.0",
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-bom-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz",
+      "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=",
+      "dev": true,
+      "requires": {
+        "first-chunk-stream": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "first-chunk-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz",
+          "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "^2.0.2"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.3.5",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+          "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.0.3",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+          "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-bom": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "dev": true,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        }
+      }
+    },
+    "strip-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^4.0.1"
+      }
+    },
+    "supports-color": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+      "dev": true
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+      "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.3.5",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+          "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.0.3",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+          "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "tildify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "time-stamp": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+      "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+      "dev": true
+    },
+    "tiny-lr": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz",
+      "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=",
+      "dev": true,
+      "requires": {
+        "body-parser": "~1.14.0",
+        "debug": "~2.2.0",
+        "faye-websocket": "~0.10.0",
+        "livereload-js": "^2.2.0",
+        "parseurl": "~1.3.0",
+        "qs": "~5.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+          "dev": true,
+          "requires": {
+            "ms": "0.7.1"
+          }
+        },
+        "ms": {
+          "version": "0.7.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+          "dev": true
+        }
+      }
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+      "dev": true,
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "tough-cookie": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+      "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "punycode": "^1.4.1"
+      }
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true,
+      "optional": true
+    },
+    "type-is": {
+      "version": "1.6.16",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+      "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=",
+      "dev": true,
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.18"
+      }
+    },
+    "uglify-js": {
+      "version": "2.8.29",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
+      }
+    },
+    "uglify-save-license": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
+      "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=",
+      "dev": true
+    },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+      "dev": true,
+      "optional": true
+    },
+    "unc-path-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+      "dev": true
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^0.4.3"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        }
+      }
+    },
+    "unique-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+      "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+      "dev": true
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "dev": true,
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        }
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "use": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+      "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      }
+    },
+    "user-home": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+      "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+      "dev": true
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+      "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=",
+      "dev": true,
+      "optional": true
+    },
+    "v8flags": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+      "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+      "dev": true,
+      "requires": {
+        "user-home": "^1.1.1"
+      }
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+      "integrity": "sha1-gWQ7y+8b3+zUYjeT3EZIlIupgzg=",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "vinyl": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+      "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.0",
+        "clone-stats": "^0.0.1",
+        "replace-ext": "0.0.1"
+      }
+    },
+    "vinyl-file": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz",
+      "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "pify": "^2.3.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0",
+        "strip-bom-stream": "^2.0.0",
+        "vinyl": "^1.1.0"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+          "dev": true
+        },
+        "strip-bom": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "dev": true,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        },
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        }
+      }
+    },
+    "vinyl-fs": {
+      "version": "0.3.14",
+      "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+      "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.0",
+        "glob-stream": "^3.1.5",
+        "glob-watcher": "^0.0.6",
+        "graceful-fs": "^3.0.0",
+        "mkdirp": "^0.5.0",
+        "strip-bom": "^1.0.0",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.0"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "vinyl-sourcemaps-apply": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+      "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.5.1"
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+      "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+      "dev": true,
+      "requires": {
+        "http-parser-js": ">=0.4.0",
+        "websocket-extensions": ">=0.1.1"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+      "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=",
+      "dev": true
+    },
+    "when": {
+      "version": "3.7.8",
+      "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
+      "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=",
+      "dev": true
+    },
+    "which": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+      "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "window-size": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+      "dev": true
+    },
+    "wordwrap": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+      "dev": true
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "yargs": {
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^1.0.2",
+        "cliui": "^2.1.0",
+        "decamelize": "^1.0.0",
+        "window-size": "0.1.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+          "dev": true
+        }
+      }
+    }
+  }
+}
diff --git a/src/package.json b/src/package.json
new file mode 100644
index 0000000..ddcb6b5
--- /dev/null
+++ b/src/package.json
@@ -0,0 +1,36 @@
+{
+  "name": "iem",
+  "version": "1.0.0",
+  "description": "### UI MOCKUP",
+  "main": "index.js",
+  "scripts": {
+    "start": "gulp run:dev"
+  },
+  "repository": {
+    "type": "git"
+  },
+  "author": "",
+  "license": "ISC",
+  "devDependencies": {
+    "gulp": "^3.9.1",
+    "gulp-clean": "^0.3.2",
+    "gulp-concat": "^2.6.1",
+    "gulp-connect": "^5.0.0",
+    "gulp-debug": "^3.0.0",
+    "gulp-inject": "^4.2.0",
+    "gulp-less": "^3.3.0",
+    "gulp-load-plugins": "^1.4.0",
+    "gulp-minify": "0.0.14",
+    "gulp-rename": "^1.2.2",
+    "gulp-rimraf": "^0.2.1",
+    "gulp-uglify": "^2.0.0",
+    "gulp-watch": "^4.3.11",
+    "gulp-watch-less": "^1.0.1",
+    "http-proxy-middleware": "^0.17.3",
+    "lodash": "^4.17.4",
+    "run-sequence": "^1.2.2"
+  },
+  "dependencies": {
+    "natives": "^1.1.6"
+  }
+}
diff --git a/src/sonar-project.properties b/src/sonar-project.properties
new file mode 100644
index 0000000..d12d6fb
--- /dev/null
+++ b/src/sonar-project.properties
@@ -0,0 +1,17 @@
+
+# must be unique in a given SonarQube instance
+sonar.projectKey=my:travel-html
+# this is the name displayed in the SonarQube UI
+sonar.projectName=travel-html
+sonar.projectVersion=1.0
+ 
+# Path is relative to the sonar-project.properties file. Replace "/" by "/" on Windows.
+# Since SonarQube 4.2, this property is optional if sonar.modules is set. 
+# If not set, SonarQube starts looking for source code from the directory containing 
+# the sonar-project.properties file.
+sonar.sources=F:/JSChangHong/item-iem
+
+sonar.language=html
+ 
+# Encoding of the source code. Default is default system encoding
+sonar.sourceEncoding=UTF-8
\ No newline at end of file
diff --git a/src/static/.DS_Store b/src/static/.DS_Store
new file mode 100644
index 0000000..1df428d
--- /dev/null
+++ b/src/static/.DS_Store
Binary files differ
diff --git a/src/static/css/app.less b/src/static/css/app.less
new file mode 100644
index 0000000..2f71835
--- /dev/null
+++ b/src/static/css/app.less
@@ -0,0 +1,17 @@
+@import "./base";
+@import "./index"; 
+@import "./jquery-ui";
+@import "./lesshat";
+@import "./frm_elem_editor"; 
+@import "./cfg_center"; 
+@import "./form";
+@import "./travel_expense";
+@import "./system_config";
+@import "./templates_center";
+@import "./forms_center";
+@import "./saved_form";
+@import "./todos";
+@import "./city";
+@import "./registry";
+@import "./workflow";
+@import "./flowstatus";
diff --git a/src/static/css/base.less b/src/static/css/base.less
new file mode 100644
index 0000000..ff8b87f
--- /dev/null
+++ b/src/static/css/base.less
@@ -0,0 +1,6 @@
+@import "./lesshat";
+@default-color:#09b4ab;  
+@font-color: #09B4AB;
+@label-color:#666666;
+@hover-color: darken(@default-color, 5%);
+@raidus-length: 8px;  
\ No newline at end of file
diff --git a/src/static/css/base_red.less b/src/static/css/base_red.less
new file mode 100644
index 0000000..c3ca8a5
--- /dev/null
+++ b/src/static/css/base_red.less
@@ -0,0 +1,6 @@
+@import "./lesshat";
+@default-color:#e74c3c;
+@font-color: #09B4AB;
+@label-color:#666666;
+@hover-color: darken(@default-color, 5%);
+@raidus-length: 8px; 
\ No newline at end of file
diff --git a/src/static/css/cfg_center.less b/src/static/css/cfg_center.less
new file mode 100644
index 0000000..d978cad
--- /dev/null
+++ b/src/static/css/cfg_center.less
@@ -0,0 +1,34 @@
+@import "./base.less";
+ul.cfg_items {
+    margin-top:35px;
+    text-align: center !important;
+    >li{
+        width: 240px !important;
+        height: 207px !important;
+        float: none !important;
+        display: inline-block !important;
+        > div {
+            width:100%;
+            height:100% !important;
+            text-align: center !important;
+            vertical-align: middle !important;
+            overflow:hidden;
+            position:relative;
+            label {
+                font-size:16px;
+                position: relative;
+                top:60px;
+                padding:0px 18px;
+                transition: opacity 1s ease-out;
+                cursor: pointer;
+            }
+            > img {
+                transition: opacity 1s ease-out;
+                margin: auto !important;
+                display:block;
+                width: 146px !important;
+                height: 193px !important;
+            }
+        }
+    }
+}
diff --git a/src/static/css/city.less b/src/static/css/city.less
new file mode 100644
index 0000000..80876b8
--- /dev/null
+++ b/src/static/css/city.less
@@ -0,0 +1,165 @@
+// Color variables (appears count calculates by raw css)
+@color10: #dddddd; // Appears 7 times
+@color11: #ffffff; // Appears 2 times
+
+// Width variables (appears count calculates by raw css)
+@width11: 150px; // Appears 3 times
+@width12: 170px; // Appears 2 times
+
+// Height variables (appears count calculates by raw css)
+@height10: 500px; // Appears 2 times
+@height11: 30px; // Appears 2 times
+@height12: 20px; // Appears 3 times
+@height13: 50px; // Appears 2 times
+
+.leftsection {
+    display: inline-block;
+    height:@height10;
+    overflow:auto!important;
+    text-align: center;
+    vertical-align: top;
+    overflow: hidden;
+    width:@width11;
+    li {
+        border-bottom:1px solid @color10;
+        height: @height13;
+        line-height: @height13;
+        list-style: none;
+        padding-left: 5px;
+    }
+}
+.classcity {
+    border-bottom:1px solid @color10;
+    padding-left:10px;
+    
+    a {
+        border-bottom: none;
+        border:1px solid @color10;
+        color:#333333;
+        display: inline-block;
+        height: @height13;
+        line-height: @height13;
+        text-align: center;
+        text-decoration: none;
+        width:100px;
+        &:active {
+            border-bottom: none;
+            border:1px solid rgba(137, 228, 210, 1);
+        }
+    }
+}
+#citycontent {
+    border: 1px solid @color10;
+    height: auto;
+    margin:0 auto;
+    width:688px;
+}
+
+#searchdiv {
+    display: inline-block;
+    height: @height12;
+    margin-right: 100px;
+    position:relative;
+    width: @width12;
+
+    .search {
+    color: #999999;
+    font-size: 16px;
+    position: absolute;
+    right:-160px;
+    top:17px;
+    }
+    
+    #search {
+    border-radius:20px;
+    border:1px solid @color10;
+    height:@height12;
+    outline: none;
+    padding-left:10px;
+    width:@width12*2;
+}
+}
+
+   
+.hot {
+    color:rgba(137, 228, 210, 1);
+}
+.rightsection {
+    display: inline-block;
+    height:@height10;
+    margin-left: 10px;
+    overflow: auto;
+    width:500px;
+}
+.selectedcity {
+    border-bottom: 1px solid @color10;
+    line-height: @height13;
+    margin-bottom: 10px;
+    p {
+        display: inline-block;
+        font-size: 16px;
+        margin-right: 40px;
+        text-align: center;
+        width:@width11;
+    }
+}
+.topsection {
+    border-bottom: 1px solid @color10;
+    line-height: @height13;
+    
+    p {
+        display: inline-block;
+        font-size: 16px;
+        margin-right: 40px;
+        text-align: center;
+        width:@width11;
+    }
+    
+    img{
+        width:15px;
+        height:15px;
+        margin-left: 10px;
+        opacity: 0.3;
+    }
+}
+.selectedcity>span {
+    background:rgba(137, 228, 210, 1);
+    color:@color11;
+    display: inline-block;
+    height:@height11;
+    line-height: @height11;
+    margin-left: 20px;
+    padding-left: 20px;
+    padding-right: 20px;
+    text-align: center;
+}
+.deletecity {
+    display: inline-block;
+    margin-left: 5px;
+}
+.button {
+    background:rgba(137, 228, 210, 1);
+    border-radius:10px;
+    border:none;
+    color: @color11;
+    height:@height11;
+    line-height: @height11;
+    width:80px;
+    margin-left: 85px;
+}
+.citycontent {
+    display: inline-block;
+    width: 50%;
+    input[type='checkbox'] {
+        height:@height12;
+        margin-top:10px;
+        vertical-align: middle;
+        width:20px;
+    }
+    span {
+        vertical-align: middle;
+    }
+    label {
+        vertical-align: middle;
+    }
+}
\ No newline at end of file
diff --git a/src/static/css/flowstatus.less b/src/static/css/flowstatus.less
new file mode 100644
index 0000000..d91aea0
--- /dev/null
+++ b/src/static/css/flowstatus.less
@@ -0,0 +1,40 @@
+@fswidth:20px;
+
+*{
+    margin:0;
+    padding:0;
+}
+.flowstatus li{
+    list-style: none;
+    padding-top:30px;
+    color: #999;
+    font-size: 12px;
+    
+    div{
+        float: left;
+        width:200px;
+        height:80px;
+        text-align: left;
+        padding-bottom:-5px;
+        padding-left: 20px;
+        
+        span{
+            padding:2px;
+            padding-left: 5px;
+            padding-right: 5px;
+            font-size: 10px;
+            color:#fff;
+        }
+        
+        img{
+            width:10px;
+            height:10px;
+            position: absolute;
+            right:-5px;
+            top:-1px;
+        }
+    }
+    
+}
+
+
diff --git a/src/static/css/form.less b/src/static/css/form.less
new file mode 100644
index 0000000..a5ea9d2
--- /dev/null
+++ b/src/static/css/form.less
@@ -0,0 +1,170 @@
+@import "./base.less";
+.datetimepicker.dropdown-menu{
+    margin-left: 0px !important;
+ }
+div.form_container {
+    padding-top:41px;
+    //overflow:auto;
+    //overflow: hidden;
+    height:auto;
+    margin:0px;
+    
+    
+    div.container{
+        margin: 0;
+        padding: 0;
+        position: relative;
+        
+        .input-group-addon{
+            width: 8px !important;
+            padding: 5px 5px;
+            background:#fff;
+            border:1px solid #ddd;
+        }
+        
+    }
+    
+    
+    div.container.timeinfo label{
+        position: absolute;
+        top: 10px !important;
+        left: 0px;
+    }
+    
+    
+    > div {
+        height: 100%;
+//      width:300px;
+        margin:0px;
+        div.title {
+            border-bottom:1px solid #ddd;
+            margin-top:-42px;
+            height:42px;
+            text-align:left;
+            padding:0px 4px;
+            width:700px;
+            
+            h8{
+                line-height:41px;
+                text-align:left;
+                margin-left:5px;
+            }
+            .text_label {
+                font-weight: 400;
+                font-size:12px;
+            }
+        }
+
+        div.row {
+            margin:0px;
+            .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-xs-1, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9{
+                min-height: 0;
+            }
+            
+            
+            div.text,div.select, div.radio {
+                position:relative;
+                display:block;
+                .is_red{
+                    color: red;
+                }
+                >span {
+                    margin-top:32px; 
+                    left:0px;
+                    display:block;
+                    text-align: left;
+                    min-height: 20px;
+                }
+
+                label{
+                    position:absolute;
+                    top: -24px;
+                    left:0px;
+                    padding:0px !important;
+                    overflow: hidden;
+                    height: 20px;
+                }
+
+                
+            }
+
+            div.textarea {
+                padding: 0;
+                position: relative;
+                top:0;
+                left: 0;
+                display:block;
+                
+                > span {
+                    margin-top:32px; 
+                    left:0px;
+                    display:block;
+                    text-align: left;
+                }
+                
+                textarea {
+                    min-height:125px !important;
+                    min-width:215px !important;
+//                  width:565px;
+                    max-width: 100%;
+                    margin-bottom: 25px;
+                    border: 1px solid #dfdfdf;
+                }
+                
+                label{
+                    position:absolute;
+                    top:10px;
+                    left:0px;
+                    padding:0px !important;
+                }
+            }
+
+
+            div.radio {
+               > div {
+                   position:relative;
+                   height:auto;
+                   > label {
+                       position:absolute;
+                       top:-35px;
+                       left:0px;
+                   }
+                   margin-top:36px;
+                   > div {  
+                        display:block;
+                        overflow:auto;
+                        min-height:32px;
+                        width:100%;
+                        position:relative;
+                        label {
+                            display:block;
+                            margin-left:36px;
+                        }
+                        input {
+                            position:absolute;
+                            left:1px;
+                            float:left;
+                            margin:0px;
+                        }
+                    }
+                    
+                }
+            }
+
+            div.sub_form {
+                float:left;
+                overflow: visible;
+                div.sub_form_container {
+                    float:left;
+                }
+                margin:15px 0px 0px 0px;
+                > div {
+                    min-height:125px;
+
+                }
+            }
+
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/static/css/forms_center.less b/src/static/css/forms_center.less
new file mode 100644
index 0000000..4274d30
--- /dev/null
+++ b/src/static/css/forms_center.less
@@ -0,0 +1,55 @@
+@import "./base.less";
+.ul-tree {
+    li.search {
+        padding:6px 12px !important;
+        vertical-align: middle;
+        text-align: center;
+        position:relative;
+        input {
+            display:block;
+            margin:0px auto;
+            width:100%;
+            .border-radius(12px);
+            .box-shadow(0 2px 2px #d8f5f5);
+            border: 1px solid #ddd;
+            outline: none !important;
+            background: #f3f3f3;
+            padding:0px 12px;
+        }
+
+        span.query_icon {
+            position:absolute;
+            right:20px !important;
+            top:9px;
+            color: #a7a7a7;
+
+        }
+    }
+
+    li.forms_list {
+        display:block;
+        overflow:auto;
+        height:auto !important;
+        border: none;
+        ul {
+            margin-left:-45px;
+            li {
+                margin-top:8px;
+                margin-bottom:0px;
+                border-top:1px solid #ddd !important;
+                border-bottom:0px !important;
+                font-size:12px;
+                padding-left:65px;
+                img {
+                    height: 25px;
+                    width: 25px;
+                    position: absolute;
+                    float: left;
+                    left: 32px;
+                    top: 6px;
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/static/css/frm_elem_editor.less b/src/static/css/frm_elem_editor.less
new file mode 100644
index 0000000..e05c02e
--- /dev/null
+++ b/src/static/css/frm_elem_editor.less
@@ -0,0 +1,173 @@
+@import "./base.less";
+.frm_el_attr_editor {
+    text-align: left;
+    padding: 5px 10px;
+    .length_err{
+        color: red;
+    }
+    .btn-el-attr-bind {
+        margin:2px 0px;
+        min-width: 285px !important;
+        width: 285px; 
+    }
+    textarea {
+        min-height:85px !important;
+
+    }
+    hr {
+        margin:10px !important;
+        margin-left:0px !important;
+    }
+
+    > div > div {
+        div.el_container {
+            position:relative;
+            text-align:left;
+            overflow:hidden;
+            display:block;
+            label.label {
+                display:block !important;
+                position:absolute;
+                color: #444444 !important;
+                font-size:12px !important;
+                text-align:left;
+                top: 9px;
+                left: 12px;
+            }
+            span.element {
+                display:block;
+                overflow: hidden;
+                input {
+                    float:left;
+                    text-align: left;
+                    display:block;
+                    width:auto !important;
+                }
+            }
+            div.third_column {
+                margin:0px;
+                padding:0px;
+                width:33%;
+                float:left;
+                position: relative;
+                >label {
+
+                }
+
+                >span {
+                    width:100%;
+                    input, select {
+                        min-width: 0px !important;
+                        width:80%;
+                    }
+                }
+                
+            }
+
+            div.third_column_full{
+                >span {
+                    width:100%;
+                    input, select {
+                        min-width: 0px !important;
+                        width:100%;
+                    }
+                }
+            }
+
+            div.one_column {
+                width: 10% !important;
+            }
+            div.two_column {
+                width: 20% !important;
+                min-height:25px;
+                overflow:hidden;
+                div.frm_item_icons {
+                    display:block;
+                    bottom:0px;
+                    left:2px;
+                }
+            }
+            div.five_column {
+                width: 50% !important;
+                > span {
+                    input {
+                        width: 60%;
+                    }
+                }
+            }
+        }
+        > label{ 
+            margin: 12px 0px 0px 0px;   
+        }
+    }
+}
+
+.manadatory_ifd {
+    color: red;
+}
+.process_ifd {
+    color: red;
+}
+
+
+table.table_cloud_attr{
+    height:100%;
+    margin-bottom:29px;
+    top:0px !important;
+    .table_search_input{
+           width:200px;
+           margin-right: 20px;
+        }
+    .table_search_btn{
+//      background-color: #d0d1d1;
+        height: 26px;
+        border-radius: 8px;
+        text-align: center;
+        line-height: 13px;
+        width: 57px;
+    }
+    th, td{
+        font-size:12px !important;
+        input {
+            margin:0px;
+            height:12px !important;
+        }
+    }
+}
+
+div.cloud_attr {
+    font-size:10px !important;
+    position: relative;
+    div.cv_title {
+        overflow:hidden;
+        text-align: center;
+        font-size: 14px;
+        padding:4px 0px 0px 0px;
+    }
+    div.table-content {
+        margin-bottom:28px;
+        max-height:500px;
+        overflow: auto;
+        min-height: 376px;
+    }
+    div.condition_search_footer{
+        position: absolute;
+        bottom:0px;
+        select, input{
+            line-height:20px;
+            min-height:20px !important;
+        }
+        a{
+            text-decoration: none;
+        }
+        width:100%;
+        padding:0px 2px;
+        label.second{
+            float:right;
+            input{
+                width: 25px;
+                height: 20px;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/static/css/index.less b/src/static/css/index.less
new file mode 100644
index 0000000..7abc1e2
--- /dev/null
+++ b/src/static/css/index.less
@@ -0,0 +1,1168 @@
+@import "./base.less";
+
+body {
+    min-width:1024px !important;
+    min-height:680px;
+    overflow:auto;
+}
+
+.body_transparent{
+    display:none;
+    .opacity(.0);
+}
+
+.body_show{
+//  display: block;
+    .opacity(1);
+}
+
+
+.container.form{
+    margin:0px;
+    width: 100%;
+    padding: 15px 25px; 
+}
+
+
+.navbar {
+    background-color: @default-color;
+    margin-bottom:0px;
+}
+
+.navbar-header {
+    margin-right:25px !important;
+    a.navbar-brand {
+        font-size:1.4em;
+    }
+}
+
+.nav .open>a, .nav .open>a:focus, .nav .open>a:hover{
+    background-color:@default-color !important;
+}
+.exitloginbtn{
+    color: #fff !important;
+    background: #09B4AB !important;
+    line-height: 23px;
+    padding: 0px 3px;
+    font-size: 12px;
+    border: none;
+    border-radius: 5px;
+}
+.exitloginbtn:hover{
+    background: #089c94 !important;
+}
+img.hero {
+    display:block;
+    height:70px;
+    float:left;
+    margin: -12px 12px -15px 12px;
+    position:relative;
+}
+
+.navbar a{
+    color:#fff;
+    font-size:1.2em;
+}
+
+.nav>li > a {
+    &:focus, &:hover, &:after {
+        background:@hover-color !important;
+    }
+}
+
+ul.dropdown-menu {
+    .divider {
+        margin:0px;
+    }
+}
+
+div.outer {
+    padding-top:50px;
+    header{
+        margin-top:-50px;
+    }
+}
+
+button.btn-favourite,a.btn-favourite {
+    color: @font-color;
+    background: #fff;
+    &:hover, &:active, &:hover, &:focus {
+        color: #fff;
+        background: @font-color;
+    }
+}
+
+div.steps {
+    margin-top:75px;
+}
+
+h1 {
+    color: @font-color;
+    font-size:28px;
+    font-weight: 400;
+}
+h6 {
+    &:extend(div.desc);
+    font-size:16px;
+    color: @label-color;
+}
+
+.text_label{
+    &:extend(h6);
+    font-size: .9em;
+    color: #A1A1A1;
+}
+
+div.welcome_guide {
+    position:fixed;
+    top:0px;
+    left:0px;
+    width:100%;
+    height:100%;
+    z-index:10000000;
+    background:#fff;
+    text-align:center;
+    div.desc {
+        margin-top:28px;
+        overflow: hidden;
+        margin-bottom: -1px;
+    }
+
+    .hero_content {
+        display: block;
+        overflow:hidden;
+        img {
+            margin:-35px auto 25px auto;
+            display:block;
+
+        }
+    }
+}
+
+div.content {
+    text-align: center;
+}
+
+ul.business_items, ul.wizard_content {
+    padding:0px 185px;
+}
+
+ul.wizard_content {
+    padding: 55px 55px;
+    overflow:hidden;
+    img {
+        width: auto;
+        height: 120px;
+    }
+}
+
+ul.business_items {
+    position: relative;
+    display:block;
+    width:100%;
+    overflow:hidden;
+   
+    label.bottom_label {
+        position: relative;
+        display: block;
+        width:100%;
+        bottom:32px;
+        text-align: center;
+        background-color: #fff;
+        color: @label-color;
+    }
+    li {
+        display: block;
+        float:left;
+        width:25%;
+        padding:0px;
+        margin:0px;
+        height:160px;
+        padding: 5px 35px;
+         a {
+            text-decoration: none !important;
+        }
+        > img{
+            margin-top:12px;
+            width:60px !important;
+            height:auto;
+        }
+        div {
+            cursor:pointer;
+            height:140px;
+            img {
+                width:80px;
+                height:auto;
+                display:block;
+                margin:20px 0px 0px 18px;
+            }
+            &:hover {
+                border:1px solid @default-color;
+                .border-radius(12);
+            }
+            label, ul{
+                display:none;
+            }
+            label {
+                color:@font-color;
+            }
+
+            span {
+                font-size:10px;
+            }
+            
+        };
+        div.hover_active{
+            img, span {
+                display:none;
+            }
+
+            
+
+            label, ul{
+                display:block;
+                overflow:auto;
+                padding-left:0px !important;
+                li {
+                    display: block;
+                    float:left;
+                    width:100%;
+                    text-align: left !important;
+                    padding-left:5px;
+                    z-index:-1;
+                }
+            }
+        };
+    }
+}
+
+ ul.business_items.forms_center {
+     margin-top:85px;
+ }
+
+input {
+    min-height:20px !important;
+    width:285px;
+    border: 1px solid #dfdfdf;
+    text-align: left;
+    height: 28px;
+}
+
+input[type='radio'],input[type='checkbox']{
+    width:15px;
+    height:15px;
+}
+
+.form_el_row, .frm_el_attr_editor {
+    input[type="text"], select{
+        min-width:150px ;
+        min-height:26px ;
+        height: 26px;
+    }
+    textarea {
+        min-width: 285px ;
+        min-height:26px ;
+        height: 126px;
+    }
+}
+
+
+
+
+
+
+div.split_form {
+
+    div.main, div.left, div.right {
+        //border: 1px solid #ddd;
+        height:100%;
+        hr {
+            margin:0px 0px 12px 0px;
+        }
+        //注释掉,子元素可以超出父级范围定位
+        //overflow:auto;
+    }
+    .main {
+        width: 100%;
+        float:left;
+        padding-left:350px;
+        padding-right:350px;
+        .el_form {
+            //min-height:100%;
+            height:100%;
+            overflow:auto;
+            min-height: 680px;
+            border-left: 1px solid #ddd;
+            border-right: 1px solid #ddd;
+        }
+        .row{
+            //border: 1px solid #ddd;
+            border-bottom: 0;
+            border-top: navajowhite;
+            margin: 0;
+            .bill_name{
+                font-size: 16px;
+                color: #666666;
+            }
+        }
+        .btn-zone{
+//          border-bottom: 1px solid #ddd;
+        }
+    }
+
+    .left {
+        //min-height: 680px;
+        width: 350px;
+        float:left;
+        margin-left: -100%;
+        position: relative;
+    }
+
+    .right {
+        min-height: 680px;
+        float:left;
+        width: 350px;
+        margin-left:-350px;
+        z-index: 0;
+    }
+}
+
+div.form_el_row {
+    display: block;
+    float:left;
+    width:100%;
+    text-align: left;
+    padding: 4px;
+    cursor:pointer;
+    position:relative;
+    &:hover {
+        padding: 4px;
+        background: #DEF1FF;
+        > div.frm_item_icons{
+            display:block!important;
+        }
+    }
+    > div {
+        padding:5px;
+        
+    }
+    
+    .dateclass{
+        width:200px;
+        position:relative;
+        
+        input{
+           background:#fff!important; 
+        }
+        
+       img.ifd_time_picker {
+           width:22px;
+           height:22px;
+           position: absolute;
+           right:-80px;
+           top:2px;
+           border-left:1px solid #ccc;
+           padding-left:2px;
+       }
+    
+    }
+    
+    
+    
+    select.addr_select {
+        width:100px;
+        min-width:100px !important;
+        color: #999999;
+    }
+
+    select.addr_select:nth-child(1) {
+        width:189px !important;
+    }
+
+    div.addr_txt {
+        border: 1px solid #ddd;
+        min-height:85px;
+        min-width:150px;
+        margin-top:12px;
+    }
+}
+
+div.form_el_row.active {
+    background: #ecf0f1;
+}
+
+.btn.active.focus, .btn.active:focus,
+.btn.focus, .btn:active.focus, 
+.btn:active:focus, .btn:focus {
+      outline: none;
+}
+
+button.btn-elb {
+    &:extend(button.btn-favourite);
+    margin: 6px 6px;
+    border:1px dashed @default-color;
+    float:left;
+    width: 160px;
+    color: @default-color;
+    outline: none !important;
+    &:active, &:hover{
+        background:@font-color !important;
+        color: #fff !important;
+        box-shadow: none !important;
+        outline: none;
+    }
+    &:focus, &:visited {
+        background:#fff !important;
+        color: @default-color !important;
+        box-shadow: none !important;
+        outline: none;
+    }
+}
+
+.place_holder_after {
+    border: 1px dashed @default-color;
+    padding-bottom: 25px !important;
+    &:after {
+        content: "";
+        display: block;
+        height: 1px;
+        width: 100%;
+        margin: 10px 0px;
+        border: 1px dashed @default-color;
+        border-top:none;
+    }
+}
+
+
+
+.ul-tree {
+    text-align: none;
+    list-style: none;
+    display: block;
+    margin:0px;
+    padding: 0px;
+    li {
+        min-height: 41px;
+        width:100%;
+        border-bottom:1px solid #cccccc !important;
+        display:block;
+        padding:12px 0px 0px 0px;
+        padding-left:45px;
+        text-align: left;
+        position:relative;
+        a {
+            color: #333333;
+        }
+
+        a.active {
+            color: @font-color;
+        }
+
+    }
+
+    ul {
+        list-style: none;
+        margin:0px;
+        padding:0px;
+    }
+
+    img, img.small {
+        height: 25px;
+        width: 25px;
+        position:absolute;
+        float:left;
+        left:12px;
+        top: 6px;
+
+    }
+
+    img.small {
+        height: 32px !important;
+        width: 32px !important;
+        left: 8px;
+    }
+}
+
+.sub_form {
+    border: 1px solid #ddd;
+    min-height:108px;
+    height:auto;
+    overflow:auto;
+    padding:15px;
+    margin: 22px 15px;
+}
+
+.frm_item_icons {
+    position:absolute;
+    right:0px;
+    bottom:-3px;
+    display:none;
+    &:hover {
+        border: none !important;
+    }
+    .frm_item_icon {
+        float:left;
+        padding: 0px 2px;
+        margin:2px;
+        color: #fff;
+
+    }
+
+//  .remove {
+//      background: #e74c3c;
+//  }
+//
+//  .duplicate {
+//      background: #2ecc71;
+//  }
+
+}
+
+div.bread_crumb {
+    border: 1px solid rgba(204, 204, 204, 1);
+    background: rgba(255, 255, 255, 1);
+    height: 42px;
+    font-size: 24px;
+    padding: 0px 16px;
+    margin-bottom: 25px;
+    label {
+        font-size: 16px;
+    }
+}
+
+.btn-action {
+    height:25px;
+//  width:50px;
+    padding:10px;
+    line-height:23px;
+    padding:0px 8px;
+    font-size:12px;
+    color: #fff !important ;
+    background: @font-color !important;
+    &:hover, &:active, &:hover, &:focus {
+        color: @font-color !important;
+        background:#fff !important;
+    }
+}
+
+.dropdown-menu {
+    -webkit-border-radius: 0px;
+    -moz-border-radius: 0px;
+    border-radius: 0px;
+    padding:0px;
+    margin-left:-38px;
+    li {
+        font-size: 12px;
+        a {
+            text-align: center;
+            &:hover {
+                background:rgba(9, 180, 171, 1) !important;
+                color:#fff;
+            }
+        }
+    }
+}
+
+div.multi_level_select {
+    border: 8px solid #d7eaf3;
+    margin:0px 35px;
+    div {
+        text-align: center; 
+        border: 1px dashed #dde3e6;
+        padding:25px;
+        width:100%;
+        height:100%;
+    }
+}
+
+div.custom_validate {
+    margin:0px;
+    .relate_select{
+        width: 100%;
+        height: 25px;
+    }
+    .relate_title{
+        height: 25px;
+        span{
+            text-align: center;
+        }
+        
+    }
+    .cv_title {
+        height:35px;
+        background: @default-color; 
+        line-height:35px;
+        text-align: center;
+        color: #fff;
+    }
+    .cv_fields, .cv_label, .cv_msg_field, .cv_btns {
+        margin: 15px 10px;
+        overflow:auto;
+        div {
+            padding-right:0px;
+            margin:5px 0px;
+            select, input {
+                width:100%;
+                height:26px;
+            }
+        }
+
+        .field_name {
+            background:@default-color; 
+            text-align: center;
+            .border-radius(15px);
+            margin:0px;
+            color: #fff;
+        }
+    }
+
+    .cv_msg_field {
+        overflow: hidden;
+        input {
+            width:100%;
+        }
+    }
+
+    .cv_btns {
+        div {
+            float:right;
+            margin-left: 15px;
+        }
+    }
+}
+div.custom_validate_formula {
+    margin:0px;
+    height: 100%;
+//  display: flex;
+//  justify-content: space-between;
+    .formula_btn{
+        width: 100%;
+        height: 15%;
+        display: flex;
+        justify-content: space-around;
+        align-items: center;
+        button{
+            width: 5%;
+            height: 50%;
+        }
+    }
+    .formula_right{
+        height: 75%;
+        overflow: auto;
+        .sys_formula_choose{
+            
+            display: flex;
+            justify-content:space-around;
+            margin:0;
+            margin-top: 3px;
+             .sys_formula_choose_active{
+                border-bottom: 2px solid @font-color;
+            }
+        }
+        .sys_formula_choose > span{
+            display: inline-block;
+//          padding: 2px 2px;
+            height: 25px;
+            line-height: 25px;
+            width: 48%;
+            text-align: center;
+            border: 1px solid @font-color;
+            border-radius: 3px;
+            cursor: pointer;
+        }
+        p{
+            height: 10%;
+        }
+        ul{
+            width: 100%;
+        }
+        .btn{
+                display: flex;
+                align-items: center;
+                justify-content: center;
+            }
+        li{
+            list-style-type: none;
+            margin: 5px 0;
+            height: 20px;
+            color: @default-color;
+            text-align: center;
+            background-color: white;
+            border-radius: 5px;
+            border: 1px dashed @default-color;
+        }
+    }
+    .formula_left{
+        height: 75%;
+        overflow: auto;
+        p{
+            height: 10%;
+        }
+        ul{
+            width: 100%;
+        }
+        li{
+            width: 100%;
+            list-style-type: none;
+            margin: 5px 0;
+            height: 20px;
+            display: flex;
+            justify-content: flex-start;
+            .btn{
+                display: flex;
+                align-items: center;
+                justify-content: center;
+            }
+            .choose_item{
+                width: 35%;
+                height: 100%;
+                color: @default-color;
+                text-align: center;
+                background-color: white;
+                border-radius: 5px;
+                margin-right: 2.5%;
+                border: 1px dashed @default-color;
+            }
+            .choose_edl{
+                width: 30%;
+                height: 100%;
+                text-align: center;
+                border-radius: 5px;
+                margin-right: 2.5%;
+                color: @default-color;
+                border: 1px dashed @default-color;
+                background-color: white;
+            }
+            .edl{
+                width: 25%;
+                margin-left: 2.5%;
+                height: 100%;
+                 color: @default-color;
+                text-align: center;
+                background-color: white;
+                border-radius: 5px;
+                border: 1px dashed @default-color;
+            }
+            .fromula_edl{
+                width: 30%;
+//              height: 100%;
+                position: absolute;
+                border: 1px solid #ddd;
+                border-radius: 6px;
+                background-color: white;
+                z-index: 200;
+                li{
+                    width: 100%;
+                    margin: 0;
+                    justify-content: center;
+                    border-bottom: 1px solid #ddd;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                }
+                li:hover{
+                    background-color: #f5f5f5;
+                }
+            }
+        }
+    }
+    .formula_right{
+        height: 75%;
+    }
+        .cv_title_formula {
+            height: 10%;
+            background: #09b4ab;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            text-align: center;
+            color: #fff;
+            font-size: 20px;
+            .close{
+                position: absolute;
+                right: 0;
+                top: 0;
+                line-height: 1;
+                color: #000;
+                text-shadow: 0 1px 0 #fff;
+                filter: alpha(opacity=20);
+                opacity: .2;
+            }
+        }
+        .cv_fields_formula{
+            overflow:auto;
+            height: 75%;
+            div {
+                select, input {
+                    width:100%;
+                    height:26px;
+                }
+            }
+        .field_name_father{
+             height: 10%;
+             display: flex;
+             justify-content: space-between;
+             align-items: center;
+             .formula_type{
+                 display: flex;
+                 justify-content: space-between;
+                 align-items: center;
+                 width: 40%;
+                 select{
+                     width: 60%;
+                 }
+             }
+            .field_name {
+                min-width: 20%;
+                height: 80%;
+                background:white; 
+                display: flex;
+                border: 1px dashed @default-color;
+                justify-content: center;
+                align-items: center;
+                .border-radius(15px);
+                margin:0px;
+                color: @default-color;
+            }
+        }
+            
+            
+            textarea{
+                width: 100%;
+                height: 88%;
+            }
+        }
+}
+div.custom_validate_relate_formula {
+    margin:0px;
+    height: 100%;
+//  display: flex;
+//  justify-content: space-between;
+    .formula_btn{
+        width: 100%;
+        height: 15%;
+        display: flex;
+        justify-content: space-around;
+        align-items: center;
+        button{
+            width: 5%;
+            height: 50%;
+        }
+    }
+    .formula_right{
+        height: 75%;
+        overflow: auto;
+        p{
+            height: 10%;
+        }
+        ul{
+            width: 100%;
+        }
+        .btn{
+                display: flex;
+                align-items: center;
+                justify-content: center;
+            }
+        li{
+            list-style-type: none;
+            margin: 5px 0;
+            height: 20px;
+            color: @default-color;
+            text-align: center;
+            background-color: white;
+            border-radius: 5px;
+            border: 1px dashed @default-color;
+        }
+    }
+    .formula_left{
+        height: 75%;
+        overflow: auto;
+        p{
+            height: 10%;
+        }
+        ul{
+            width: 100%;
+        }
+        li{
+            width: 100%;
+            list-style-type: none;
+            margin: 5px 0;
+            height: 20px;
+            display: flex;
+            justify-content: center;
+            .btn{
+                display: flex;
+                align-items: center;
+                justify-content: center;
+            }
+            .choose_item{
+                width: 100%;
+                height: 100%;
+                color: @default-color;
+                text-align: center;
+                background-color: white;
+                border-radius: 5px;
+                margin-right: 2.5%;
+                border: 1px dashed @default-color;
+            }
+        }
+    }
+    .formula_right{
+        height: 75%;
+    }
+    .cv_title_relate_formula {
+        height: 10%;
+        background: #09b4ab;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        text-align: center;
+        color: #fff;
+        font-size: 20px;
+        .close {
+            position: absolute;
+            right: 0;
+            top: 0;
+            line-height: 1;
+            color: #000;
+            text-shadow: 0 1px 0 #fff;
+            filter: alpha(opacity=20);
+            opacity: .2;
+        }
+    }
+    .cv_fields_formula {
+        overflow: auto;
+        height: 75%;
+        div {
+            select,
+            input {
+                width: 100%;
+                height: 26px;
+            }
+        }
+        .hide_content{
+            min-height: 30px;
+            width: 90%;
+            display: flex;
+            justify-content: space-around;
+            margin-top: 10px;
+            align-items: center;
+            .hide_item{
+                width: 70%;
+                min-height: 30px;
+                border: 2px solid #7D93B2;
+                border-radius: 6px;
+                ul{
+                    display: flex;
+                    min-height: 30px;
+                    justify-content: flex-start;
+                    align-items: center;
+                    flex-wrap: wrap;
+                    padding-top: 4px;
+                    margin: 0;
+                    li{
+                        padding: 0 5px;
+                        height: 17px;
+                        margin-left: 5px;
+                        list-style-type: none;
+                        text-align: center;
+                        background-color: @font-color;
+                        margin-bottom: 4px;
+                        color: white;
+                    }
+                }
+            }
+        }
+        .relate_talble{
+            span{
+                padding: 0 5px;
+                background-color: @font-color;
+                color: white;
+                margin-left: 5px;
+            }
+            i{
+                float: right;
+                cursor: pointer;
+            }
+        }
+        .field_name_father {
+            height: 10%;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            .formula_type {
+                display: flex;
+                justify-content: flex-start;
+                align-items: center;
+                width: 40%;
+                select {
+                    width: 60%;
+                }
+            }
+            .field_name {
+                min-width: 20%;
+                height: 80%;
+                background: white;
+                display: flex;
+                border: 1px dashed @default-color;
+                justify-content: center;
+                align-items: center;
+                .border-radius(15px);
+                margin: 0px;
+                color: @default-color;
+            }
+        }
+    }
+}
+
+.float_right {
+    float: right;
+}
+
+.flatpickr-calendar {
+    z-index: 99999999999;
+}
+
+
+//模版中心样式开始
+.templates_list span{
+    color: white;
+    text-align: center;
+    font-size: 12px;
+    width: 16px;
+    height: 16px;
+    border-radius: 8px;
+    float: right;
+    background-color: #00b3ee;
+    opacity: 0;
+    cursor: pointer;
+}
+
+.left ul.ul-tree.templates_list li{
+    overflow: visible;
+}
+
+.templates_list li .template_list_top:hover span{
+    opacity: 1;
+}
+
+.templates_list li span:hover{
+    opacity: 0.8;
+}
+
+.templates_list{
+    position: relative;
+    li{
+        position: relative;
+        overflow: visible;
+    }
+}
+
+.list-operation{
+    position: absolute;
+    left: 156px;
+    top: 30px;
+    width: 150px;
+    text-align: center;
+    overflow: hidden;
+    z-index: 99999;
+    .list-operation-centent{
+        position: relative;
+        z-index:5;
+        .list-group-item:hover{
+            background-color: #E6F6F4;
+        }
+    }
+}
+
+.list-change{
+    position: absolute;
+    left: 156px;
+    top: 30px;
+    z-index: 20;
+    .list-change-centent{
+        position: relative;
+        padding: 10px;
+        background-color: #FFFFFF;
+        border: 1px solid #ddd;
+        text-align:left;
+        div{
+            overflow: hidden;
+        }
+        input{
+            width: 200px;
+        }
+        p{
+            width: 200px;
+            text-align: center;
+            font-size: 24px;
+        }
+        img{
+            width: 100px;
+            height: 100px;
+            padding: 5px;
+            margin: 5px;
+            display: block;
+            position: static;
+        }
+        .list-button{
+            text-align: center;
+            button{
+                margin-left: 20px;
+                margin-right: 20px;
+            }
+        }
+    }
+}
+
+.list-triangle-top{
+    position: relative;
+    left: 4px;
+    top: 0;
+    z-index: 10;
+    width: 50px;
+    height: 10px;
+    .list-triangle-top-out{
+        position: absolute;
+        left: 0;
+        top: 1px;
+        width: 0;
+        height: 0;
+        border-left: 10px solid transparent;
+        border-right: 10px solid transparent;
+        border-bottom: 10px solid white;
+    }
+    .list-triangle-top-in{
+        position: absolute;
+        left: 0;
+        top: 0;
+        width: 0;
+        height: 0;
+        border-left: 10px solid transparent;
+        border-right: 10px solid transparent;
+        border-bottom: 10px solid #ddd;
+    }
+}
+.template_list_second:hover span{
+        opacity: 1;
+}
+.ul-tree .list_detail_li img{
+    height: 25px;
+    width: 25px;
+    position: absolute;
+    float: left;
+    left: -8px;
+    top: 6px;
+}
+.templates_list .list_detail_ul .list_detail_li{
+    padding-left: 20px;    
+}
+.list_detail_ul .list_detail_li .list_detail{
+    padding-left: 0;
+    text-align: left;
+    padding-top: 20px;
+}
+.list_detail:hover span{
+    opacity: 1;
+    margin-left: 5px;
+}
+//模版中心样式结束
\ No newline at end of file
diff --git a/src/static/css/jquery-ui.less b/src/static/css/jquery-ui.less
new file mode 100644
index 0000000..ffb94cd
--- /dev/null
+++ b/src/static/css/jquery-ui.less
@@ -0,0 +1,1311 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+	pointer-events: none;
+}
+
+
+/* Icons
+----------------------------------*/
+.ui-icon {
+	display: inline-block;
+	vertical-align: middle;
+	margin-top: -.25em;
+	position: relative;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+.ui-widget-icon-block {
+	left: 50%;
+	margin-left: -8px;
+	display: block;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin: 2px 0 0 0;
+	padding: .5em .5em .5em .7em;
+	font-size: 100%;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-menu {
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	display: block;
+	outline: 0;
+}
+.ui-menu .ui-menu {
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	margin: 0;
+	cursor: pointer;
+	/* support: IE10, see #8844 */
+	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-item-wrapper {
+	position: relative;
+	padding: 3px 1em 3px .4em;
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px 0;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+	margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item-wrapper {
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: .2em;
+	margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	left: auto;
+	right: 0;
+}
+.ui-button {
+	padding: .4em 1em;
+	display: inline-block;
+	position: relative;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+
+	/* Support: IE <= 11 */
+	overflow: visible;
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2em;
+	box-sizing: border-box;
+	text-indent: -9999px;
+	white-space: nowrap;
+}
+
+/* no icon support for input elements */
+input.ui-button.ui-button-icon-only {
+	text-indent: 0;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	margin-top: -8px;
+	margin-left: -8px;
+}
+
+.ui-button.ui-icon-notext .ui-icon {
+	padding: 0;
+	width: 2.1em;
+	height: 2.1em;
+	text-indent: -9999px;
+	white-space: nowrap;
+
+}
+
+input.ui-button.ui-icon-notext .ui-icon {
+	width: auto;
+	height: auto;
+	text-indent: 0;
+	white-space: normal;
+	padding: .4em 1em;
+}
+
+/* workarounds */
+/* Support: Firefox 5 - 40 */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-controlgroup {
+	vertical-align: middle;
+	display: inline-block;
+}
+.ui-controlgroup > .ui-controlgroup-item {
+	float: left;
+	margin-left: 0;
+	margin-right: 0;
+}
+.ui-controlgroup > .ui-controlgroup-item:focus,
+.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
+	z-index: 9999;
+}
+.ui-controlgroup-vertical > .ui-controlgroup-item {
+	display: block;
+	float: none;
+	width: 100%;
+	margin-top: 0;
+	margin-bottom: 0;
+	text-align: left;
+}
+.ui-controlgroup-vertical .ui-controlgroup-item {
+	box-sizing: border-box;
+}
+.ui-controlgroup .ui-controlgroup-label {
+	padding: .4em 1em;
+}
+.ui-controlgroup .ui-controlgroup-label span {
+	font-size: 80%;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
+	border-left: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
+	border-top: none;
+}
+.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
+	border-right: none;
+}
+.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
+	border-bottom: none;
+}
+
+/* Spinner specific style fixes */
+.ui-controlgroup-vertical .ui-spinner-input {
+
+	/* Support: IE8 only, Android < 4.4 only */
+	width: 75%;
+	width: calc( 100% - 2.4em );
+}
+.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
+	border-top-style: solid;
+}
+
+.ui-checkboxradio-label .ui-icon-background {
+	box-shadow: inset 1px 1px 1px #ccc;
+	border-radius: .12em;
+	border: none;
+}
+.ui-checkboxradio-radio-label .ui-icon-background {
+	width: 16px;
+	height: 16px;
+	border-radius: 1em;
+	overflow: visible;
+	border: none;
+}
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
+	background-image: none;
+	width: 8px;
+	height: 8px;
+	border-width: 4px;
+	border-style: solid;
+}
+.ui-checkboxradio-disabled {
+	pointer-events: none;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+
+/* Icons */
+.ui-datepicker .ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+	left: .5em;
+	top: .3em;
+}
+.ui-dialog {
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 20px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-n {
+	height: 2px;
+	top: 0;
+}
+.ui-dialog .ui-resizable-e {
+	width: 2px;
+	right: 0;
+}
+.ui-dialog .ui-resizable-s {
+	height: 2px;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-w {
+	width: 2px;
+	left: 0;
+}
+.ui-dialog .ui-resizable-se,
+.ui-dialog .ui-resizable-sw,
+.ui-dialog .ui-resizable-ne,
+.ui-dialog .ui-resizable-nw {
+	width: 7px;
+	height: 7px;
+}
+.ui-dialog .ui-resizable-se {
+	right: 0;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-sw {
+	left: 0;
+	bottom: 0;
+}
+.ui-dialog .ui-resizable-ne {
+	right: 0;
+	top: 0;
+}
+.ui-dialog .ui-resizable-nw {
+	left: 0;
+	top: 0;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-draggable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+	height: 100%;
+	filter: alpha(opacity=25); /* support: IE8 */
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-selectable {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-selectmenu-menu {
+	padding: 0;
+	margin: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+	overflow: auto;
+	overflow-x: hidden;
+	padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 1.5;
+	padding: 2px 0.4em;
+	margin: 0.5em 0 0 0;
+	height: auto;
+	border: 0;
+}
+.ui-selectmenu-open {
+	display: block;
+}
+.ui-selectmenu-text {
+	display: block;
+	margin-right: 20px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-selectmenu-button.ui-button {
+	text-align: left;
+	white-space: nowrap;
+	width: 14em;
+}
+.ui-selectmenu-icon.ui-icon {
+	float: right;
+	margin-top: 0;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-sortable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: .222em 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 2em;
+}
+.ui-spinner-button {
+	width: 1.6em;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top-style: none;
+	border-bottom-style: none;
+	border-right-style: none;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 1px .2em 0 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	float: left;
+	padding: .5em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Arial,Helvetica,sans-serif;
+	font-size: 1em;
+}
+.ui-widget.ui-widget-content {
+	border: 1px solid #c5c5c5;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #ffffff;
+	color: #333333;
+}
+.ui-widget-content a {
+	color: #333333;
+}
+.ui-widget-header {
+	border: 1px solid #dddddd;
+	background: #e9e9e9;
+	color: #333333;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #333333;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default,
+.ui-button,
+
+/* We use html here because we need a greater specificity to make sure disabled
+works properly when clicked or hovered */
+html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+	border: 1px solid #c5c5c5;
+	background: #f6f6f6;
+	font-weight: normal;
+	color: #454545;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited,
+a.ui-button,
+a:link.ui-button,
+a:visited.ui-button,
+.ui-button {
+	color: #454545;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus,
+.ui-button:hover,
+.ui-button:focus {
+	border: 1px solid #cccccc;
+	background: #ededed;
+	font-weight: normal;
+	color: #2b2b2b;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited,
+a.ui-button:hover,
+a.ui-button:focus {
+	color: #2b2b2b;
+	text-decoration: none;
+}
+
+.ui-visual-focus {
+	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+	border: 1px solid #003eff;
+	background: #007fff;
+	font-weight: normal;
+	color: #ffffff;
+}
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+	border: #003eff;
+	background-color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+	color: #777620;
+}
+.ui-state-checked {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #777620;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #f1a899;
+	background: #fddfdf;
+	color: #5f3f3f;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #5f3f3f;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #5f3f3f;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70); /* support: IE8 */
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35); /* support: IE8 */
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("images/ui-icons_444444_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("images/ui-icons_444444_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon {
+	background-image: url("images/ui-icons_555555_256x240.png");
+}
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+	background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+	background-image: url("images/ui-icons_777620_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url("images/ui-icons_cc0000_256x240.png");
+}
+.ui-button .ui-icon {
+	background-image: url("images/ui-icons_777777_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-caret-1-n { background-position: 0 0; }
+.ui-icon-caret-1-ne { background-position: -16px 0; }
+.ui-icon-caret-1-e { background-position: -32px 0; }
+.ui-icon-caret-1-se { background-position: -48px 0; }
+.ui-icon-caret-1-s { background-position: -65px 0; }
+.ui-icon-caret-1-sw { background-position: -80px 0; }
+.ui-icon-caret-1-w { background-position: -96px 0; }
+.ui-icon-caret-1-nw { background-position: -112px 0; }
+.ui-icon-caret-2-n-s { background-position: -128px 0; }
+.ui-icon-caret-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -65px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -65px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaaaaa;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+	-webkit-box-shadow: 0px 0px 5px #666666;
+	box-shadow: 0px 0px 5px #666666;
+}
\ No newline at end of file
diff --git a/src/static/css/lesshat-prefixed.less b/src/static/css/lesshat-prefixed.less
new file mode 100644
index 0000000..e557b2f
--- /dev/null
+++ b/src/static/css/lesshat-prefixed.less
@@ -0,0 +1,886 @@
+//  lesshat - The best mixin library in the world
+//
+// version: v4.1.0 (2016-07-19)
+
+// TABLE OF MIXINS:
+	// align-content
+	// align-items
+	// align-self
+	// animation
+	// animation-delay
+	// animation-direction
+	// animation-duration
+	// animation-fill-mode
+	// animation-iteration-count
+	// animation-name
+	// animation-play-state
+	// animation-timing-function
+	// appearance
+	// backface-visibility
+	// background-clip
+	// background-image
+	// background-origin
+	// background-size
+	// blur
+	// border-bottom-left-radius
+	// border-bottom-right-radius
+	// border-image
+	// border-radius
+	// border-top-left-radius
+	// border-top-right-radius
+	// box-shadow
+	// box-sizing
+	// brightness
+	// calc
+	// column-count
+	// column-gap
+	// column-rule
+	// column-width
+	// columns
+	// contrast
+	// display
+	// drop-shadow
+	// filter
+	// flex
+	// flex-basis
+	// flex-direction
+	// flex-grow
+	// flex-shrink
+	// flex-wrap
+	// font-face
+	// grayscale
+	// hue-rotate
+	// hyphens
+	// invert
+	// justify-content
+	// keyframes
+	// opacity
+	// order
+	// perspective
+	// perspective-origin
+	// placeholder
+	// rotate
+	// rotate3d
+	// rotateX
+	// rotateY
+	// rotateZ
+	// saturate
+	// scale
+	// scale3d
+	// scaleX
+	// scaleY
+	// scaleZ
+	// selection
+	// sepia
+	// size
+	// skew
+	// skewX
+	// skewY
+	// transform
+	// transform-origin
+	// transform-style
+	// transition
+	// transition-delay
+	// transition-duration
+	// transition-property
+	// transition-timing-function
+	// translate
+	// translate3d
+	// translateX
+	// translateY
+	// translateZ
+	// user-select
+
+.lh-align-content(...) {
+  @process: ~`(function(t){return t=t||"stretch"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(e){return e=e||"stretch","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"==e?e="justify":"space-around"==e&&(e="distribute"),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-align-content: @process;
+  -ms-flex-line-pack: @process_ms;
+  align-content: @process;
+}
+
+.lh-align-items(...) {
+  @process_olderwebkit: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"stretch"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-align: @process_olderwebkit;
+  -moz-box-align: @process_moz;
+  -webkit-align-items: @process;
+  -ms-flex-align: @process_ms;
+  align-items: @process;
+}
+
+.lh-align-self(...) {
+  @process: ~`(function(n){return n=n||"auto"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"auto","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-align-self: @process;
+  -ms-flex-item-align: @process_ms;
+  align-self: @process;
+}
+
+.lh-animation(...) {
+  @process: ~`(function(e){return e=e||"none",/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation: @process;
+  -moz-animation: @process;
+  -o-animation: @process;
+  animation: @process;
+}
+
+.lh-animation-delay(...) {
+  @process: ~`(function(r){r=r||"0";var s=/(?:\d)(?:ms|s)/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-delay: @process;
+  -moz-animation-delay: @process;
+  -o-animation-delay: @process;
+  animation-delay: @process;
+}
+
+.lh-animation-direction(...) {
+  @process: ~`(function(n){return n||"normal"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-direction: @process;
+  -moz-animation-direction: @process;
+  -o-animation-direction: @process;
+  animation-direction: @process;
+}
+
+.lh-animation-duration(...) {
+  @process: ~`(function(r){r=r||"0";var s=/ms|s/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-duration: @process;
+  -moz-animation-duration: @process;
+  -o-animation-duration: @process;
+  animation-duration: @process;
+}
+
+.lh-animation-fill-mode(...) {
+  @process: ~`(function(n){return n||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-fill-mode: @process;
+  -moz-animation-fill-mode: @process;
+  -o-animation-fill-mode: @process;
+  animation-fill-mode: @process;
+}
+
+.lh-animation-iteration-count(...) {
+  @process: ~`(function(n){return n||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-iteration-count: @process;
+  -moz-animation-iteration-count: @process;
+  -o-animation-iteration-count: @process;
+  animation-iteration-count: @process;
+}
+
+.lh-animation-name(...) {
+  @process: ~`(function(n){return n||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-name: @process;
+  -moz-animation-name: @process;
+  -o-animation-name: @process;
+  animation-name: @process;
+}
+
+.lh-animation-play-state(...) {
+  @process: ~`(function(n){return n||"running"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-play-state: @process;
+  -moz-animation-play-state: @process;
+  -o-animation-play-state: @process;
+  animation-play-state: @process;
+}
+
+.lh-animation-timing-function(...) {
+  @process: ~`(function(e){return e||"ease"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-timing-function: @process;
+  -moz-animation-timing-function: @process;
+  -o-animation-timing-function: @process;
+  animation-timing-function: @process;
+}
+
+.lh-appearance(...) {
+  @process: ~`(function(n){return n||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-appearance: @process;
+  -moz-appearance: @process;
+  appearance: @process;
+}
+
+.lh-backface-visibility(...) {
+  @process: ~`(function(i){return i||"visible"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-backface-visibility: @process;
+  -moz-backface-visibility: @process;
+  -ms-backface-visibility: @process;
+  -o-backface-visibility: @process;
+  backface-visibility: @process;
+}
+
+.lh-background-clip(...) {
+  @process: ~`(function(r){return r||"border-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-clip: @process;
+  -moz-background-clip: @process;
+  background-clip: @process;
+}
+
+.lh-background-image(...) {
+  @process_ms: ~`(function(t){function e(t){var e,r,s,a,n,i,o,c,g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",d=0,l=0,f="",h=[];if(!t)return t;do e=t.charCodeAt(d++),r=t.charCodeAt(d++),s=t.charCodeAt(d++),c=e<<16|r<<8|s,a=c>>18&63,n=c>>12&63,i=c>>6&63,o=63&c,h[l++]=g.charAt(a)+g.charAt(n)+g.charAt(i)+g.charAt(o);while(d<t.length);f=h.join("");var u=t.length%3;return(u?f.slice(0,u-3):f)+"===".slice(u||3)}if(t=t||8121991,8121991==t)return t;var r=/linear|radial/g.test(t)&&t.split(/,(?=\s*(?:linear|radial|url))/g),s=[],a={"to bottom":'x1="0%" y1="0%" x2="0%" y2="100%"',"to left":'x1="100%" y1="0%" x2="0%" y2="0%"',"to top":'x1="0%" y1="100%" x2="0%" y2="0%"',"to right":'x1="0%" y1="0%" x2="100%" y2="0%"',get"top"(){return this["to bottom"]},get"180deg"(){return this["to bottom"]},get"right"(){return this["to left"]},get"270deg"(){return this["to left"]},get"bottom"(){return this["to top"]},get"90deg"(){return this["to right"]},get"0deg"(){return this["to top"]},get"left"(){return this["to right"]},"-45deg":'x1="0%" y1="0%" x2="100%" y2="100%"',"45deg":'x1="0%" y1="100%" x2="100%" y2="0%"',"ellipse at center":'cx="50%" cy="50%" r="75%"',get"135deg"(){return this["-45deg"]}},n={uri_data:"url(data:image/svg+xml;base64,",xml:'<?xml version="1.0" ?>',svg_start:'<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">',linear_gradient_start:'<linearGradient id="lesshat-generated" gradientUnits="userSpaceOnUse"',radial_gradient_start:'<radialGradient id="lesshat-generated" gradientUnits="userSpaceOnUse"',linear_gradient_end:"</linearGradient>",radial_gradient_end:"</radialGradient>",rect_linear:'<rect x="0" y="0" width="1" height="1" fill="url(#lesshat-generated)" />',rect_radial:'<rect x="-50" y="-50" width="101" height="101" fill="url(#lesshat-generated)" />',svg_end:"</svg>"};if(r.length){r.forEach(function(t,e){var r={};if(Object.keys(a).some(function(e){return t.indexOf(e)>=0?(r.svg_direction=a[e],!0):void(r.svg_direction=!1)}),/linear/.test(t))r.svg_type="linear";else if(/radial/.test(t))r.svg_type="radial";else if(!/linear/.test(t)&&!/radial/.test(t))return r.url=t.trim(),r.svg_type="url",r.svg_direction=!0,s.push(r),!1;var n=t.match(/rgb|#[a-zA-Z0-9]|hsl/g).length;r.svg_stops=[],t=t.replace(/transparent/g,"rgba(0,0,0,0)"),t.match(/#[a-zA-Z0-9]/g)&&t.match(/(#[a-zA-Z0-9]+)\s*(\d+%)?/g).forEach(function(t){t=t.split(" "),r.svg_stops.push('<stop offset="'+(t[1]||!1)+'" stop-color="'+t[0]+'" stop-opacity="1"/>')}),t.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g)&&t.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s*(\d+%)?/g,function(t,e,s,a){r.svg_stops.push('<stop offset="'+(a||!1)+'" stop-color="rgb('+e+')" stop-opacity="'+(s||1)+'"/>')}),t.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g)&&t.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)?/g,function(t,e,s,a){r.svg_stops.push('<stop offset="'+(a||!1)+'" stop-color="hsl('+e+')" stop-opacity="'+(s||1)+'"/>')});var i=Math.floor(100/(n-1));r.svg_stops.forEach(function(t,e){/offset="false"/.test(t)&&(r.svg_stops[e]=t.replace(/offset="false"/,'offset="'+i*e+'%"'))}),r.svg_stops.sort(function(t,e){if(t=t.match(/offset="(\d+)%"/),e=e.match(/offset="(\d+)%"/),2==t.length&&2==e.length)return t[1]-e[1]}),s.push(r)});var i=[],o=s.every(function(t){for(var e in t)if(0==t[e]||0==t[e].length)return!1;return!0});if(!o)return 8121991;s.forEach(function(t,e){"linear"!=t.svg_type&&"radial"!=t.svg_type||(i[e]=n.xml+n.svg_start),"linear"==t.svg_type?(i[e]+=n.linear_gradient_start+" "+t.svg_direction+">",t.svg_stops.forEach(function(t){i[e]+=t}),i[e]+=n.linear_gradient_end,i[e]+=n.rect_linear,i[e]+=n.svg_end):"radial"==t.svg_type?(i[e]+=n.radial_gradient_start+" "+t.svg_direction+">",t.svg_stops.forEach(function(t){i[e]+=t}),i[e]+=n.radial_gradient_end,i[e]+=n.rect_radial,i[e]+=n.svg_end):"url"==t.svg_type&&(i[e]=t.url)}),i.forEach(function(t,r){/<\?xml version="1.0" \?>/g.test(t)&&(i[r]=n.uri_data+e(t)+")")}),t=i.join(",")}return t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_webkit: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},t=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,c=Object.keys(r);return c.some(function(c){return e.indexOf(c)>=0?(e=e.replace(new RegExp(c+"(?![ a-z0-9])","g"),r[c]),!0):void(t.test(e)&&(e=e.replace(t,function(e,r,t,c,i){return r.trim()+c.trim()+" "+i.trim()+","+t.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})))}),e=e.replace(/(\d+)\s*deg/g,function(e,r){return 90-r+"deg"}).replace(/(linear|radial)-gradient/g,"-webkit-$1-gradient")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},t=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,c=Object.keys(r);return c.some(function(c){return e.indexOf(c)>=0?(e=e.replace(new RegExp(c+"(?![ a-z0-9])","g"),r[c]),!0):void(t.test(e)&&(e=e.replace(t,function(e,r,t,c,n){return r.trim()+c.trim()+" "+n.trim()+","+t.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})))}),e=e.replace(/(\d+)\s*deg/g,function(e,r){return 90-r+"deg"}).replace(/(linear|radial)-gradient/g,"-moz-$1-gradient")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},t=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,c=Object.keys(r);return c.some(function(c){return e.indexOf(c)>=0?(e=e.replace(new RegExp(c+"(?![ a-z0-9])","g"),r[c]),!0):void(t.test(e)&&(e=e.replace(t,function(e,r,t,c,n){return r.trim()+c.trim()+" "+n.trim()+","+t.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})))}),e=e.replace(/(\d+)\s*deg/g,function(e,r){return 90-r+"deg"}).replace(/(linear|radial)-gradient/g,"-o-$1-gradient")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){if(t=t||8121991,8121991==t)return t;var e={top:"to bottom",right:"to left",bottom:"to top",left:"to right"},o=Object.keys(e);return o.some(function(o){if(t.indexOf(o)>=0&&!new RegExp("to\\s+"+o+"|at\\s+"+o,"g").test(t))return t=t.replace(new RegExp(o),e[o]),!0}),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  background-image: @process_ms;
+  background-image: @process_webkit;
+  background-image: @process_moz;
+  background-image: @process_opera;
+  background-image: @process;
+}
+
+.lh-background-origin(...) {
+  @process: ~`(function(n){return n||"padding-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-origin: @process;
+  -moz-background-origin: @process;
+  background-origin: @process;
+}
+
+.lh-background-size(...) {
+  @process: ~`(function(t){t=t||"auto auto";var e=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,"")),e.test(t)&&(t=t.replace(r,function(t){return 0==t&&t||t+"px"})),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-size: @process;
+  -moz-background-size: @process;
+  background-size: @process;
+}
+
+.lh-blur(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: blur(@process);
+  -moz-filter: blur(@process);
+  -ms-filter: blur(@process);
+  filter: blur(@process);
+}
+
+.lh-border-bottom-left-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-bottom-left-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-bottomleft: @process; -moz-background-clip: padding; 
+  border-bottom-left-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-bottom-right-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-bottom-right-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-bottomright: @process; -moz-background-clip: padding; 
+  border-bottom-right-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-image(...) {
+  @process: ~`(function(e){return e=e||8121991,/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-image: @process;
+  -moz-border-image: @process;
+  -o-border-image: @process;
+  border-image: @process;
+}
+
+.lh-border-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius: @process; -moz-background-clip: padding; 
+  border-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-top-left-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-top-left-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-topleft: @process; -moz-background-clip: padding; 
+  border-top-left-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-top-right-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-top-right-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-topright: @process; -moz-background-clip: padding; 
+  border-top-right-radius: @process; background-clip: padding-box; 
+}
+
+.lh-box-shadow(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-shadow: @process;
+  -moz-box-shadow: @process;
+  box-shadow: @process;
+}
+
+.lh-box-sizing(...) {
+  @process: ~`(function(n){return n=n||"content-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-sizing: @process;
+  -moz-box-sizing: @process;
+  box-sizing: @process;
+}
+
+.lh-brightness(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: brightness(@process);
+  -moz-filter: brightness(@process);
+  -ms-filter: brightness(@process);
+  filter: brightness(@process);
+}
+
+.lh-calc(...) {
+  @process: ~`(function(a){function c(c,t){var r=");\n",s=e.split(","),l=s[0]+":"+c+"("+(s[1].trim()||0)+r;"start"==t?a="0;\n"+l:a+=l}a=a||8121991;var t="@{state}",e=a;if(8121991==a)return a;switch(t){case"1":c("-webkit-calc","start"),c("-moz-calc"),c("calc");break;case"2":c("-webkit-calc","start"),c("-moz-calc");break;case"3":c("-webkit-calc","start"),c("calc");break;case"4":c("-webkit-calc","start");break;case"5":c("-moz-calc","start"),c("calc");break;case"6":c("-moz-calc","start");break;case"7":c("calc","start")}return a=a.replace(/;$/g,"")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; -lh-property: @process;
+
+}
+
+.lh-column-count(...) {
+  @process: ~`(function(n){return n=n||"auto"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-count: @process;
+  -moz-column-count: @process;
+  column-count: @process;
+}
+
+.lh-column-gap(...) {
+  @process: ~`(function(n){n=n||"normal";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-gap: @process;
+  -moz-column-gap: @process;
+  column-gap: @process;
+}
+
+.lh-column-rule(...) {
+  @process: ~`(function(e){e=e||"medium none black";var n=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),n.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-rule: @process;
+  -moz-column-rule: @process;
+  column-rule: @process;
+}
+
+.lh-column-width(...) {
+  @process: ~`(function(t){t=t||"auto";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(t)&&(t=t.replace(r,function(t){return 0==t&&t||t+"px"})),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-width: @process;
+  -moz-column-width: @process;
+  column-width: @process;
+}
+
+.lh-columns(...) {
+  @process: ~`(function(t){t=t||"auto auto";var e=/^\d+$/;return/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,""),t=t.split(" ")),e.test(t[0])&&(t[0]=t[0]+"px"),t.join(" ")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-columns: @process;
+  -moz-columns: @process;
+  columns: @process;
+}
+
+.lh-contrast(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: ~"contrast(@{process})";
+  -moz-filter: ~"contrast(@{process})";
+  -ms-filter: ~"contrast(@{process})";
+  filter: ~"contrast(@{process})";
+}
+
+.lh-display(...) {
+  @process_oldwebkit: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-webkit-box":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(n){return n="flex"==n||"inline-flex"==n?"-moz-box":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_webkit: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-webkit-"+e:8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(e){return e="flex"==e?"-ms-flexbox":"inline-flex"==e?"-ms-inline-flexbox":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){return"flex"!=n&&"inline-flex"!=n&&(n=8121991),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  display: @process_oldwebkit;
+  display: @process_moz;
+  display: @process_webkit;
+  display: @process_ms;
+  display: @process;
+}
+
+.lh-drop-shadow(...) {
+  @process: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: drop-shadow(@process);
+  -moz-filter: drop-shadow(@process);
+  -ms-filter: drop-shadow(@process);
+  filter: drop-shadow(@process);
+}
+
+.lh-filter(...) {
+  @process: ~`(function(e){return e=e||"none",/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: @process;
+  -moz-filter: @process;
+  -ms-filter: @process;
+  filter: @process;
+}
+
+.lh-flex(...) {
+  @process_olderwebkit: ~`(function(t){return/^\d+/.test(t)?t=t.match(/^\d+/)[0]:""==t&&(t="0"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(t){return/^\d+/.test(t)?t=t.match(/^\d+/)[0]:""==t&&(t="0"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"0 1 auto",/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,"")),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-flex: @process_olderwebkit;
+  -moz-box-flex: @process_moz;
+  -webkit-flex: @process;
+  -ms-flex: @process;
+  flex: @process;
+}
+
+.lh-flex-basis(...) {
+  @process: ~`(function(t){t=t||"auto";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(t)&&(t=t.replace(r,function(t){return 0==t&&t||t+"px"})),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-basis: @process;
+  flex-basis: @process;
+}
+
+.lh-flex-direction(...) {
+  @process_oldestwebkit: ~`(function(r){return r="row"==r||"column"==r?"normal":"row-reverse"==r||"column-reverse"==r?"reverse":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_oldermoz: ~`(function(r){return r="row"==r||"column"==r?"normal":"row-reverse"==r||"column-reverse"==r?"reverse":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_olderwebkit: ~`(function(r){return r="row"==r||"row-reverse"==r?"horizontal":"column"==r||"column-reverse"==r?"vertical":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(r){return r="row"==r||"row-reverse"==r?"horizontal":"column"==r||"column-reverse"==r?"vertical":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){return n=n||"row"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-direction: @process_oldestwebkit;
+  -moz-box-direction: @process_oldermoz;
+  -webkit-box-orient: @process_olderwebkit;
+  -moz-box-orient: @process_moz;
+  -webkit-flex-direction: @process;
+  -ms-flex-direction: @process;
+  flex-direction: @process;
+}
+
+.lh-flex-grow(...) {
+  @process: ~`(function(n){return n=n||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-grow: @process;
+  flex-grow: @process;
+}
+
+.lh-flex-shrink(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-shrink: @process;
+  flex-shrink: @process;
+}
+
+.lh-flex-wrap(...) {
+  @process: ~`(function(n){return n=n||"nowrap"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-wrap: @process;
+  -ms-flex-wrap: @process;
+  flex-wrap: @process;
+}
+
+.lh-font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal) {
+  font-family: "@{fontname}";
+  src: url("@{fontfile}.eot");
+  src: url("@{fontfile}.eot?#iefix") format("embedded-opentype"),
+       url("@{fontfile}.woff") format("woff"),
+       url("@{fontfile}.ttf") format("truetype"),
+       url("@{fontfile}.svg#@{fontname}") format("svg");
+  font-weight: @fontweight;
+  font-style: @fontstyle;
+}
+
+.lh-grayscale(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: grayscale(@process);
+  -moz-filter: grayscale(@process);
+  -ms-filter: grayscale(@process);
+  filter: grayscale(@process);
+}
+
+.lh-hue-rotate(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: hue-rotate(@process);
+  -moz-filter: hue-rotate(@process);
+  -ms-filter: hue-rotate(@process);
+  filter: hue-rotate(@process);
+}
+
+.lh-hyphens(...) {
+  @process: ~`(function(n){return n=n||"manual"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-hyphens: @process;
+  -moz-hyphens: @process;
+  -ms-hyphens: @process;
+  hyphens: @process;
+}
+
+.lh-invert(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: invert(@process);
+  -moz-filter: invert(@process);
+  -ms-filter: invert(@process);
+  filter: invert(@process);
+}
+
+.lh-justify-content(...) {
+  @process_oldestWebkit: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"!=e&&"space-around"!=e||(e="justify"),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"!=e&&"space-around"!=e||(e="justify"),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"start","flex-start"==t?t="start":"flex-end"==t?t="end":"space-between"==t?t="justify":"space-around"==t&&(t="distribute"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"flex-start"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-pack: @process_oldestWebkit;
+  -moz-box-pack: @process_moz;
+  -ms-flex-pack: @process_ms;
+  -webkit-justify-content: @process;
+  justify-content: @process;
+}
+
+.lh-keyframes(...) {
+  @process: ~`(function(e){function a(a,r,k){var n="}\n",m=t.split(/(^[a-zA-Z0-9-]+),/g),o=r+" "+m[1]+"{",f=["-webkit-","-moz-","-ms-",""];k?s.forEach(function(a,r){e.indexOf(a)!==-1&&(m[2]=m[2].replace(new RegExp(a,"g"),function(e){return k+e}))}):m[2]=m[2].replace(/{([^}]+)}/g,function(e,a){var r=a.split(";");r.forEach(function(e,a){s.forEach(function(t){e.indexOf(t)!==-1&&(r[a]="",f.forEach(function(s){r[a]+=e.trim().replace(new RegExp(t,"g"),function(e){return s+e})+";"}))})});var t=r.join(";").replace(/;;/g,";");return e.replace(a,t)}),o+=m[2]+n,"start"==a?e="0; } \n"+o:"startend"==a?e="0; } \n"+o.replace(n,""):e+="end"==a?o.replace(n,""):o}e=e||8121991;var r="@{state}",t=e;if(8121991==e)return e;var s=["animation","transform","filter"];switch(r){case"1":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-moz-keyframes","-moz-"),a(null,"@-o-keyframes","-o-"),a("end","@keyframes");break;case"2":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-moz-keyframes","-moz-"),a("end","@keyframes");break;case"3":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-moz-keyframes","-moz-"),a("end","@-o-keyframes","-o-");break;case"4":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-o-keyframes","-o-"),a("end","@keyframes");break;case"5":a("start","@-webkit-keyframes","-webkit-"),a("end","@-moz-keyframes","-moz-");break;case"6":a("start","@-webkit-keyframes","-webkit-"),a("end","@-o-keyframes","-o-");break;case"7":a("start","@-webkit-keyframes","-webkit-"),a("end","@keyframes");break;case"8":a("startend","@-webkit-keyframes","-webkit-");break;case"9":a("start","@-moz-keyframes","-moz-"),a(null,"@-o-keyframes","-o-"),a("end","@keyframes");break;case"10":a("start","@-moz-keyframes","-moz-"),a("end","@-o-keyframes","-o-");break;case"11":a("start","@-moz-keyframes","-moz-"),a("end","@keyframes");break;case"12":a("startend","@-moz-keyframes","-moz-");break;case"13":a("start","@-o-keyframes","-o-"),a("end","@keyframes");break;case"14":a("startend","@-o-keyframes","-o-");break;case"15":a("startend","@keyframes")}return e+"}\n[not-existing] {\n  zoom: 1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; lesshat-selector { -lh-property: @process; }
+
+
+
+}
+
+.lh-opacity(...) {
+  @process_ms: ~`(function(a){return a=a||"filter: alpha(opacity=100)","alpha(opacity="+Math.floor(100*a)+")"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+   zoom: 1; filter: @process_ms;
+  -webkit-opacity: @process;
+  -moz-opacity: @process;
+  opacity: @process;
+}
+
+.lh-order(...) {
+  @process: ~`(function(n){return n=n||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-ordinal-group: @process;
+  -moz-box-ordinal-group: @process;
+  -ms-flex-order: @process;
+  -webkit-order: @process;
+  order: @process;
+}
+
+.lh-perspective(...) {
+  @process: ~`(function(n){n=n||"none";var e=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return e.test(n)&&(n=n.replace(r,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-perspective: @process;
+  -moz-perspective: @process;
+  perspective: @process;
+}
+
+.lh-perspective-origin(...) {
+  @process: ~`(function(e){e=e||"50% 50%";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"%"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-perspective-origin: @process;
+  -moz-perspective-origin: @process;
+  perspective-origin: @process;
+}
+
+.lh-placeholder(@color:#aaa, @element: 08121991) {
+  .inception (@arguments) when not (@element = 08121991) {
+    @{element}::-webkit-input-placeholder {
+       color: @color;
+    }
+    @{element}:-moz-placeholder {
+       color: @color;
+    }
+    @{element}::-moz-placeholder {
+       color: @color;
+    }
+    @{element}:-ms-input-placeholder {
+       color: @color;
+    }
+  }
+  .inception (@arguments) when (@element = 08121991) {
+    &::-webkit-input-placeholder {
+       color: @color;
+    }
+    &:-moz-placeholder {
+       color: @color;
+    }
+    &::-moz-placeholder {
+       color: @color;
+    }
+    &:-ms-input-placeholder {
+       color: @color;
+    }
+  }
+  .inception(@arguments);
+}
+
+.lh-rotate(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotate(@process);
+  -moz-transform: rotate(@process);
+  -ms-transform: rotate(@process);
+  -o-transform: rotate(@process);
+  transform: rotate(@process);
+}
+
+.lh-rotate3d(...) {
+  @process: ~`(function(n){return n=n||"0, 0, 0, 0",n=n.replace(/,\s*\d+$/,function(n){return n+"deg"})})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotate3d(@process);
+  -moz-transform: rotate3d(@process);
+  -ms-transform: rotate3d(@process);
+  -o-transform: rotate3d(@process);
+  transform: rotate3d(@process);
+}
+
+.lh-rotateX(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateX(@process);
+  -moz-transform: rotateX(@process);
+  -ms-transform: rotateX(@process);
+  -o-transform: rotateX(@process);
+  transform: rotateX(@process);
+}
+
+.lh-rotateY(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateY(@process);
+  -moz-transform: rotateY(@process);
+  -ms-transform: rotateY(@process);
+  -o-transform: rotateY(@process);
+  transform: rotateY(@process);
+}
+
+.lh-rotateZ(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateZ(@process);
+  -moz-transform: rotateZ(@process);
+  -ms-transform: rotateZ(@process);
+  -o-transform: rotateZ(@process);
+  transform: rotateZ(@process);
+}
+
+.lh-saturate(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: ~"saturate(@{process})";
+  -moz-filter: ~"saturate(@{process})";
+  -ms-filter: ~"saturate(@{process})";
+  filter: ~"saturate(@{process})";
+}
+
+.lh-scale(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scale(@process);
+  -moz-transform: scale(@process);
+  -ms-transform: scale(@process);
+  -o-transform: scale(@process);
+  transform: scale(@process);
+}
+
+.lh-scale3d(...) {
+  @process: ~`(function(n){return n=n||"1, 1, 1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scale3d(@process);
+  -moz-transform: scale3d(@process);
+  -ms-transform: scale3d(@process);
+  -o-transform: scale3d(@process);
+  transform: scale3d(@process);
+}
+
+.lh-scaleX(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleX(@process);
+  -moz-transform: scaleX(@process);
+  -ms-transform: scaleX(@process);
+  -o-transform: scaleX(@process);
+  transform: scaleX(@process);
+}
+
+.lh-scaleY(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleY(@process);
+  -moz-transform: scaleY(@process);
+  -ms-transform: scaleY(@process);
+  -o-transform: scaleY(@process);
+  transform: scaleY(@process);
+}
+
+.lh-scaleZ(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleZ(@process);
+  -moz-transform: scaleZ(@process);
+  -ms-transform: scaleZ(@process);
+  -o-transform: scaleZ(@process);
+  transform: scaleZ(@process);
+}
+
+.lh-selection(...) {
+  @process: ~`(function(e){function t(t,n){var r="}\n",s=a.split(","),c=(s[1]||"")+n+"{"+s[0]+r;"start"==t?e="0; } \n"+c:"startend"==t?e="0; } \n"+c.replace(r,""):e+="end"==t?c.replace(r,""):c}e=e||8121991;var n="@{state}",a=e;if(8121991==e)return e;switch(n){case"1":t("start","::selection"),t("end","::-moz-selection");break;case"2":t("startend","::selection");break;case"3":t("startend","::-moz-selection")}return e=e.replace(/;$/g,"")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; lesshat-selector { -lh-property: @process; }
+
+}
+
+.lh-sepia(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: sepia(@process);
+  -moz-filter: sepia(@process);
+  -ms-filter: sepia(@process);
+  filter: sepia(@process);
+}
+
+.lh-size(@square) {
+  @unit: 'px';
+  .process(@square) when (ispixel(@square)), (isem(@square)), (ispercentage(@square)), (iskeyword(@square)) {
+    width: @square;
+    height: @square;
+  }
+
+  .process(@square) when not (ispixel(@square)) and not (isem(@square)) and not (ispercentage(@square)) and not (isstring(@square)) and not (iskeyword(@square)) {
+    width: ~`@{square} + @{unit}`;
+    height: ~`@{square} + @{unit}`;
+  }
+
+  .process(@square);
+
+}
+
+.lh-size(@width, @height) {
+  @unit: 'px';
+  .process(@width, @height) when (ispixel(@width)), (isem(@width)), (ispercentage(@width)), (iskeyword(@width)) {
+    .kittens(@height) when (ispixel(@height)), (isem(@height)), (ispercentage(@height)), (iskeyword(@height)) {
+      width: @width;
+      height: @height;
+    }
+    .kittens(@height) when not (ispixel(@height)) and not (isem(@height)) and not (ispercentage(@height)) and not (iskeyword(@height)) {
+      width: @width;
+      height: ~`@{height} + @{unit}`;
+    }
+    .kittens(@height);
+  }
+
+  .process(@width, @height) when (ispixel(@height)), (isem(@height)), (ispercentage(@height)), (iskeyword(@height)) {
+    .kittens(@width) when (ispixel(@width)), (isem(@width)), (ispercentage(@width)), (iskeyword(@width)) {}
+    .kittens(@width) when not (ispixel(@width)) and not (isem(@width)) and not (ispercentage(@width)) and not (iskeyword(@width)) {
+      width: ~`@{width} + @{unit}`;
+      height: @height;
+    }
+    .kittens(@width);
+  }
+
+  .process(@width, @height) when not (ispixel(@width)) and not (isem(@width)) and not (ispercentage(@width)) and not (iskeyword(@width)) and not (ispixel(@height)) and not (isem(@height)) and not (ispercentage(@height)) and not (iskeyword(@height))  {
+    width: ~`@{width} + @{unit}`;
+    height: ~`@{height} + @{unit}`;
+  }
+
+  .process(@width, @height);
+
+}
+
+.lh-skew(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skew(@process);
+  -moz-transform: skew(@process);
+  -ms-transform: skew(@process);
+  -o-transform: skew(@process);
+  transform: skew(@process);
+}
+
+.lh-skewX(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skewX(@process);
+  -moz-transform: skewX(@process);
+  -ms-transform: skewX(@process);
+  -o-transform: skewX(@process);
+  transform: skewX(@process);
+}
+
+.lh-skewY(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skewY(@process);
+  -moz-transform: skewY(@process);
+  -ms-transform: skewY(@process);
+  -o-transform: skewY(@process);
+  transform: skewY(@process);
+}
+
+.lh-transform(...) {
+  @process: ~`(function(e){e=e||"none";var r={translate:"px",rotate:"deg",rotate3d:"deg",skew:"deg"};/^\w*\(?[a-z0-9.]*\)?/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,""));for(var t in r)e.indexOf(t)>=0&&(e=e.replace(new RegExp(t+"[\\w]?\\([a-z0-9, %]*\\)"),function(e){var n=/(\d+\.?\d*)(?!\w|%)/g;return"rotate3d"==t&&(n=/,\s*\d+$/),e.replace(n,function(e){return e+r[t]})}));return e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: @process;
+  -moz-transform: @process;
+  -ms-transform: @process;
+  -o-transform: @process;
+  transform: @process;
+}
+
+.lh-transform-origin(...) {
+  @process: ~`(function(e){e=e||"50% 50% 0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"%"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform-origin: @process;
+  -moz-transform-origin: @process;
+  -ms-transform-origin: @process;
+  -o-transform-origin: @process;
+  transform-origin: @process;
+}
+
+.lh-transform-style(...) {
+  @process: ~`(function(n){return n=n||"flat"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform-style: @process;
+  -moz-transform-style: @process;
+  -ms-transform-style: @process;
+  -o-transform-style: @process;
+  transform-style: @process;
+}
+
+.lh-transition(...) {
+  @process_webkit: ~`(function(r){r=r||"all 0 ease 0";var e=["background-size","border-radius","border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","box-shadow","column","transform","filter"],t="-webkit-",o=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(r)&&(r=r.replace(/(?:,)(?![^(]*\))/g,"")),e.forEach(function(e,o){r.indexOf(e)!==-1&&(r=r.replace(new RegExp(e,"g"),function(r){return t+r}))}),o.test(r)||"0"===r||(r=r.replace(a,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){e=e||"all 0 ease 0";var n=["background-size","box-shadow","column","transform","filter"],r="-moz-",t=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),n.forEach(function(n,t){e.indexOf(n)!==-1&&(e=e.replace(new RegExp(n,"g"),function(e){return r+e}))}),t.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){e=e||"all 0 ease 0";var n=["transform"],r="-o-",t=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),n.forEach(function(n,t){e.indexOf(n)!==-1&&(e=e.replace(new RegExp(n,"g"),function(e){return r+e}))}),t.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){n=n||"all 0 ease 0";var e=["-webkit-","-moz-","-o-",""],t=["column","transform","filter"],r=/(?:\d)(?:ms|s)/gi,o=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;/^[^, ]*,/.test(n)&&(n=n.replace(/(?:,)(?![^(]*\))/g,""));var i=n.split(/(?:,)(?![^(]*\))/g);return i.forEach(function(n,r){t.forEach(function(t){n.indexOf(t)!==-1&&(i[r]="",e.forEach(function(o,a){i[r]+=n.trim().replace(new RegExp(t,"g"),function(n){return o+n}),a<e.length-1&&(i[r]+=",")}))})}),n=i.join(","),r.test(n)||"0"===n||(n=n.replace(o,function(n){return n+=parseFloat(n,10)>10?"ms":"s"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition: @process_webkit;
+  -moz-transition: @process_moz;
+  -o-transition: @process_opera;
+  transition: @process;
+}
+
+.lh-transition-delay(...) {
+  @process: ~`(function(r){r=r||"0";var s=/(?:\d)(?:ms|s)/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-delay: @process;
+  -moz-transition-delay: @process;
+  -o-transition-delay: @process;
+  transition-delay: @process;
+}
+
+.lh-transition-duration(...) {
+  @process: ~`(function(r){r=r||"0";var s=/ms|s/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-duration: @process;
+  -moz-transition-duration: @process;
+  -o-transition-duration: @process;
+  transition-duration: @process;
+}
+
+.lh-transition-property(...) {
+  @process_webkit: ~`(function(r){r=r||"all";var o=["background-size","border-radius","border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","box-shadow","column","transform","filter"],t="-webkit-";return o.forEach(function(o,e){r.indexOf(o)!==-1&&(r=r.replace(new RegExp(o,"g"),function(r){return t+r}))}),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(n){n=n||"all";var r=["background-size","box-shadow","column","transform","filter"],o="-moz-";return r.forEach(function(r,e){n.indexOf(r)!==-1&&(n=n.replace(new RegExp(r,"g"),function(n){return o+n}))}),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(n){n=n||"all";var r=["transform"],e="-o-";return r.forEach(function(r,f){n.indexOf(r)!==-1&&(n=n.replace(new RegExp(r,"g"),function(n){return e+n}))}),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){n=n||"all";var o=["-webkit-","-moz-","-o-",""],r=["column","transform","filter"],t=n.split(/(?:,)(?![^(]*\))/g);return t.forEach(function(n,f){r.forEach(function(r){n.indexOf(r)!==-1&&(t[f]="",o.forEach(function(i,c){t[f]+=n.trim().replace(new RegExp(r,"g"),function(n){return i+n}),c<o.length-1&&(t[f]+=",")}))})}),n=t.join(",")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-property: @process_webkit;
+  -moz-transition-property: @process_moz;
+  -o-transition-property: @process_opera;
+  transition-property: @process;
+}
+
+.lh-transition-timing-function(...) {
+  @process: ~`(function(e){return e=e||"ease"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-timing-function: @process;
+  -moz-transition-timing-function: @process;
+  -o-transition-timing-function: @process;
+  transition-timing-function: @process;
+}
+
+.lh-translate(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translate(@process);
+  -moz-transform: translate(@process);
+  -ms-transform: translate(@process);
+  -o-transform: translate(@process);
+  transform: translate(@process);
+}
+
+.lh-translate3d(...) {
+  @process: ~`(function(n){n=n||"0, 0, 0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translate3d(@process);
+  -moz-transform: translate3d(@process);
+  -ms-transform: translate3d(@process);
+  -o-transform: translate3d(@process);
+  transform: translate3d(@process);
+}
+
+.lh-translateX(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateX(@process);
+  -moz-transform: translateX(@process);
+  -ms-transform: translateX(@process);
+  -o-transform: translateX(@process);
+  transform: translateX(@process);
+}
+
+.lh-translateY(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateY(@process);
+  -moz-transform: translateY(@process);
+  -ms-transform: translateY(@process);
+  -o-transform: translateY(@process);
+  transform: translateY(@process);
+}
+
+.lh-translateZ(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateZ(@process);
+  -moz-transform: translateZ(@process);
+  -ms-transform: translateZ(@process);
+  -o-transform: translateZ(@process);
+  transform: translateZ(@process);
+}
+
+.lh-user-select(...) {
+  @process: ~`(function(n){return n=n||"auto"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-user-select: @process;
+  -moz-user-select: @process;
+  -ms-user-select: @process;
+  user-select: @process;
+}
+
+
diff --git a/src/static/css/lesshat.less b/src/static/css/lesshat.less
new file mode 100644
index 0000000..fcfd5a7
--- /dev/null
+++ b/src/static/css/lesshat.less
@@ -0,0 +1,886 @@
+//  lesshat - The best mixin library in the world
+//
+// version: v4.1.0 (2016-07-19)
+
+// TABLE OF MIXINS:
+	// align-content
+	// align-items
+	// align-self
+	// animation
+	// animation-delay
+	// animation-direction
+	// animation-duration
+	// animation-fill-mode
+	// animation-iteration-count
+	// animation-name
+	// animation-play-state
+	// animation-timing-function
+	// appearance
+	// backface-visibility
+	// background-clip
+	// background-image
+	// background-origin
+	// background-size
+	// blur
+	// border-bottom-left-radius
+	// border-bottom-right-radius
+	// border-image
+	// border-radius
+	// border-top-left-radius
+	// border-top-right-radius
+	// box-shadow
+	// box-sizing
+	// brightness
+	// calc
+	// column-count
+	// column-gap
+	// column-rule
+	// column-width
+	// columns
+	// contrast
+	// display
+	// drop-shadow
+	// filter
+	// flex
+	// flex-basis
+	// flex-direction
+	// flex-grow
+	// flex-shrink
+	// flex-wrap
+	// font-face
+	// grayscale
+	// hue-rotate
+	// hyphens
+	// invert
+	// justify-content
+	// keyframes
+	// opacity
+	// order
+	// perspective
+	// perspective-origin
+	// placeholder
+	// rotate
+	// rotate3d
+	// rotateX
+	// rotateY
+	// rotateZ
+	// saturate
+	// scale
+	// scale3d
+	// scaleX
+	// scaleY
+	// scaleZ
+	// selection
+	// sepia
+	// size
+	// skew
+	// skewX
+	// skewY
+	// transform
+	// transform-origin
+	// transform-style
+	// transition
+	// transition-delay
+	// transition-duration
+	// transition-property
+	// transition-timing-function
+	// translate
+	// translate3d
+	// translateX
+	// translateY
+	// translateZ
+	// user-select
+
+.align-content(...) {
+  @process: ~`(function(t){return t=t||"stretch"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(e){return e=e||"stretch","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"==e?e="justify":"space-around"==e&&(e="distribute"),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-align-content: @process;
+  -ms-flex-line-pack: @process_ms;
+  align-content: @process;
+}
+
+.align-items(...) {
+  @process_olderwebkit: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"stretch"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-align: @process_olderwebkit;
+  -moz-box-align: @process_moz;
+  -webkit-align-items: @process;
+  -ms-flex-align: @process_ms;
+  align-items: @process;
+}
+
+.align-self(...) {
+  @process: ~`(function(n){return n=n||"auto"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"auto","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-align-self: @process;
+  -ms-flex-item-align: @process_ms;
+  align-self: @process;
+}
+
+.animation(...) {
+  @process: ~`(function(e){return e=e||"none",/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation: @process;
+  -moz-animation: @process;
+  -o-animation: @process;
+  animation: @process;
+}
+
+.animation-delay(...) {
+  @process: ~`(function(r){r=r||"0";var s=/(?:\d)(?:ms|s)/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-delay: @process;
+  -moz-animation-delay: @process;
+  -o-animation-delay: @process;
+  animation-delay: @process;
+}
+
+.animation-direction(...) {
+  @process: ~`(function(n){return n||"normal"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-direction: @process;
+  -moz-animation-direction: @process;
+  -o-animation-direction: @process;
+  animation-direction: @process;
+}
+
+.animation-duration(...) {
+  @process: ~`(function(r){r=r||"0";var s=/ms|s/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-duration: @process;
+  -moz-animation-duration: @process;
+  -o-animation-duration: @process;
+  animation-duration: @process;
+}
+
+.animation-fill-mode(...) {
+  @process: ~`(function(n){return n||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-fill-mode: @process;
+  -moz-animation-fill-mode: @process;
+  -o-animation-fill-mode: @process;
+  animation-fill-mode: @process;
+}
+
+.animation-iteration-count(...) {
+  @process: ~`(function(n){return n||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-iteration-count: @process;
+  -moz-animation-iteration-count: @process;
+  -o-animation-iteration-count: @process;
+  animation-iteration-count: @process;
+}
+
+.animation-name(...) {
+  @process: ~`(function(n){return n||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-name: @process;
+  -moz-animation-name: @process;
+  -o-animation-name: @process;
+  animation-name: @process;
+}
+
+.animation-play-state(...) {
+  @process: ~`(function(n){return n||"running"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-play-state: @process;
+  -moz-animation-play-state: @process;
+  -o-animation-play-state: @process;
+  animation-play-state: @process;
+}
+
+.animation-timing-function(...) {
+  @process: ~`(function(e){return e||"ease"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-timing-function: @process;
+  -moz-animation-timing-function: @process;
+  -o-animation-timing-function: @process;
+  animation-timing-function: @process;
+}
+
+.appearance(...) {
+  @process: ~`(function(n){return n||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-appearance: @process;
+  -moz-appearance: @process;
+  appearance: @process;
+}
+
+.backface-visibility(...) {
+  @process: ~`(function(i){return i||"visible"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-backface-visibility: @process;
+  -moz-backface-visibility: @process;
+  -ms-backface-visibility: @process;
+  -o-backface-visibility: @process;
+  backface-visibility: @process;
+}
+
+.background-clip(...) {
+  @process: ~`(function(r){return r||"border-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-clip: @process;
+  -moz-background-clip: @process;
+  background-clip: @process;
+}
+
+.background-image(...) {
+  @process_ms: ~`(function(t){function e(t){var e,r,s,a,n,i,o,c,g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",d=0,l=0,f="",h=[];if(!t)return t;do e=t.charCodeAt(d++),r=t.charCodeAt(d++),s=t.charCodeAt(d++),c=e<<16|r<<8|s,a=c>>18&63,n=c>>12&63,i=c>>6&63,o=63&c,h[l++]=g.charAt(a)+g.charAt(n)+g.charAt(i)+g.charAt(o);while(d<t.length);f=h.join("");var u=t.length%3;return(u?f.slice(0,u-3):f)+"===".slice(u||3)}if(t=t||8121991,8121991==t)return t;var r=/linear|radial/g.test(t)&&t.split(/,(?=\s*(?:linear|radial|url))/g),s=[],a={"to bottom":'x1="0%" y1="0%" x2="0%" y2="100%"',"to left":'x1="100%" y1="0%" x2="0%" y2="0%"',"to top":'x1="0%" y1="100%" x2="0%" y2="0%"',"to right":'x1="0%" y1="0%" x2="100%" y2="0%"',get"top"(){return this["to bottom"]},get"180deg"(){return this["to bottom"]},get"right"(){return this["to left"]},get"270deg"(){return this["to left"]},get"bottom"(){return this["to top"]},get"90deg"(){return this["to right"]},get"0deg"(){return this["to top"]},get"left"(){return this["to right"]},"-45deg":'x1="0%" y1="0%" x2="100%" y2="100%"',"45deg":'x1="0%" y1="100%" x2="100%" y2="0%"',"ellipse at center":'cx="50%" cy="50%" r="75%"',get"135deg"(){return this["-45deg"]}},n={uri_data:"url(data:image/svg+xml;base64,",xml:'<?xml version="1.0" ?>',svg_start:'<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">',linear_gradient_start:'<linearGradient id="lesshat-generated" gradientUnits="userSpaceOnUse"',radial_gradient_start:'<radialGradient id="lesshat-generated" gradientUnits="userSpaceOnUse"',linear_gradient_end:"</linearGradient>",radial_gradient_end:"</radialGradient>",rect_linear:'<rect x="0" y="0" width="1" height="1" fill="url(#lesshat-generated)" />',rect_radial:'<rect x="-50" y="-50" width="101" height="101" fill="url(#lesshat-generated)" />',svg_end:"</svg>"};if(r.length){r.forEach(function(t,e){var r={};if(Object.keys(a).some(function(e){return t.indexOf(e)>=0?(r.svg_direction=a[e],!0):void(r.svg_direction=!1)}),/linear/.test(t))r.svg_type="linear";else if(/radial/.test(t))r.svg_type="radial";else if(!/linear/.test(t)&&!/radial/.test(t))return r.url=t.trim(),r.svg_type="url",r.svg_direction=!0,s.push(r),!1;var n=t.match(/rgb|#[a-zA-Z0-9]|hsl/g).length;r.svg_stops=[],t=t.replace(/transparent/g,"rgba(0,0,0,0)"),t.match(/#[a-zA-Z0-9]/g)&&t.match(/(#[a-zA-Z0-9]+)\s*(\d+%)?/g).forEach(function(t){t=t.split(" "),r.svg_stops.push('<stop offset="'+(t[1]||!1)+'" stop-color="'+t[0]+'" stop-opacity="1"/>')}),t.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g)&&t.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s*(\d+%)?/g,function(t,e,s,a){r.svg_stops.push('<stop offset="'+(a||!1)+'" stop-color="rgb('+e+')" stop-opacity="'+(s||1)+'"/>')}),t.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g)&&t.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)?/g,function(t,e,s,a){r.svg_stops.push('<stop offset="'+(a||!1)+'" stop-color="hsl('+e+')" stop-opacity="'+(s||1)+'"/>')});var i=Math.floor(100/(n-1));r.svg_stops.forEach(function(t,e){/offset="false"/.test(t)&&(r.svg_stops[e]=t.replace(/offset="false"/,'offset="'+i*e+'%"'))}),r.svg_stops.sort(function(t,e){if(t=t.match(/offset="(\d+)%"/),e=e.match(/offset="(\d+)%"/),2==t.length&&2==e.length)return t[1]-e[1]}),s.push(r)});var i=[],o=s.every(function(t){for(var e in t)if(0==t[e]||0==t[e].length)return!1;return!0});if(!o)return 8121991;s.forEach(function(t,e){"linear"!=t.svg_type&&"radial"!=t.svg_type||(i[e]=n.xml+n.svg_start),"linear"==t.svg_type?(i[e]+=n.linear_gradient_start+" "+t.svg_direction+">",t.svg_stops.forEach(function(t){i[e]+=t}),i[e]+=n.linear_gradient_end,i[e]+=n.rect_linear,i[e]+=n.svg_end):"radial"==t.svg_type?(i[e]+=n.radial_gradient_start+" "+t.svg_direction+">",t.svg_stops.forEach(function(t){i[e]+=t}),i[e]+=n.radial_gradient_end,i[e]+=n.rect_radial,i[e]+=n.svg_end):"url"==t.svg_type&&(i[e]=t.url)}),i.forEach(function(t,r){/<\?xml version="1.0" \?>/g.test(t)&&(i[r]=n.uri_data+e(t)+")")}),t=i.join(",")}return t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_webkit: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},t=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,c=Object.keys(r);return c.some(function(c){return e.indexOf(c)>=0?(e=e.replace(new RegExp(c+"(?![ a-z0-9])","g"),r[c]),!0):void(t.test(e)&&(e=e.replace(t,function(e,r,t,c,i){return r.trim()+c.trim()+" "+i.trim()+","+t.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})))}),e=e.replace(/(\d+)\s*deg/g,function(e,r){return 90-r+"deg"}).replace(/(linear|radial)-gradient/g,"-webkit-$1-gradient")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},t=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,c=Object.keys(r);return c.some(function(c){return e.indexOf(c)>=0?(e=e.replace(new RegExp(c+"(?![ a-z0-9])","g"),r[c]),!0):void(t.test(e)&&(e=e.replace(t,function(e,r,t,c,n){return r.trim()+c.trim()+" "+n.trim()+","+t.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})))}),e=e.replace(/(\d+)\s*deg/g,function(e,r){return 90-r+"deg"}).replace(/(linear|radial)-gradient/g,"-moz-$1-gradient")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},t=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,c=Object.keys(r);return c.some(function(c){return e.indexOf(c)>=0?(e=e.replace(new RegExp(c+"(?![ a-z0-9])","g"),r[c]),!0):void(t.test(e)&&(e=e.replace(t,function(e,r,t,c,n){return r.trim()+c.trim()+" "+n.trim()+","+t.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})))}),e=e.replace(/(\d+)\s*deg/g,function(e,r){return 90-r+"deg"}).replace(/(linear|radial)-gradient/g,"-o-$1-gradient")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){if(t=t||8121991,8121991==t)return t;var e={top:"to bottom",right:"to left",bottom:"to top",left:"to right"},o=Object.keys(e);return o.some(function(o){if(t.indexOf(o)>=0&&!new RegExp("to\\s+"+o+"|at\\s+"+o,"g").test(t))return t=t.replace(new RegExp(o),e[o]),!0}),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  background-image: @process_ms;
+  background-image: @process_webkit;
+  background-image: @process_moz;
+  background-image: @process_opera;
+  background-image: @process;
+}
+
+.background-origin(...) {
+  @process: ~`(function(n){return n||"padding-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-origin: @process;
+  -moz-background-origin: @process;
+  background-origin: @process;
+}
+
+.background-size(...) {
+  @process: ~`(function(t){t=t||"auto auto";var e=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,"")),e.test(t)&&(t=t.replace(r,function(t){return 0==t&&t||t+"px"})),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-size: @process;
+  -moz-background-size: @process;
+  background-size: @process;
+}
+
+.blur(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: blur(@process);
+  -moz-filter: blur(@process);
+  -ms-filter: blur(@process);
+  filter: blur(@process);
+}
+
+.border-bottom-left-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-bottom-left-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-bottomleft: @process; -moz-background-clip: padding; 
+  border-bottom-left-radius: @process; background-clip: padding-box; 
+}
+
+.border-bottom-right-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-bottom-right-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-bottomright: @process; -moz-background-clip: padding; 
+  border-bottom-right-radius: @process; background-clip: padding-box; 
+}
+
+.border-image(...) {
+  @process: ~`(function(e){return e=e||8121991,/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-image: @process;
+  -moz-border-image: @process;
+  -o-border-image: @process;
+  border-image: @process;
+}
+
+.border-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius: @process; -moz-background-clip: padding; 
+  border-radius: @process; background-clip: padding-box; 
+}
+
+.border-top-left-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-top-left-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-topleft: @process; -moz-background-clip: padding; 
+  border-top-left-radius: @process; background-clip: padding-box; 
+}
+
+.border-top-right-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-top-right-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-topright: @process; -moz-background-clip: padding; 
+  border-top-right-radius: @process; background-clip: padding-box; 
+}
+
+.box-shadow(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-shadow: @process;
+  -moz-box-shadow: @process;
+  box-shadow: @process;
+}
+
+.box-sizing(...) {
+  @process: ~`(function(n){return n=n||"content-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-sizing: @process;
+  -moz-box-sizing: @process;
+  box-sizing: @process;
+}
+
+.brightness(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: brightness(@process);
+  -moz-filter: brightness(@process);
+  -ms-filter: brightness(@process);
+  filter: brightness(@process);
+}
+
+.calc(...) {
+  @process: ~`(function(a){function c(c,t){var r=");\n",s=e.split(","),l=s[0]+":"+c+"("+(s[1].trim()||0)+r;"start"==t?a="0;\n"+l:a+=l}a=a||8121991;var t="@{state}",e=a;if(8121991==a)return a;switch(t){case"1":c("-webkit-calc","start"),c("-moz-calc"),c("calc");break;case"2":c("-webkit-calc","start"),c("-moz-calc");break;case"3":c("-webkit-calc","start"),c("calc");break;case"4":c("-webkit-calc","start");break;case"5":c("-moz-calc","start"),c("calc");break;case"6":c("-moz-calc","start");break;case"7":c("calc","start")}return a=a.replace(/;$/g,"")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; -lh-property: @process;
+
+}
+
+.column-count(...) {
+  @process: ~`(function(n){return n=n||"auto"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-count: @process;
+  -moz-column-count: @process;
+  column-count: @process;
+}
+
+.column-gap(...) {
+  @process: ~`(function(n){n=n||"normal";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-gap: @process;
+  -moz-column-gap: @process;
+  column-gap: @process;
+}
+
+.column-rule(...) {
+  @process: ~`(function(e){e=e||"medium none black";var n=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),n.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-rule: @process;
+  -moz-column-rule: @process;
+  column-rule: @process;
+}
+
+.column-width(...) {
+  @process: ~`(function(t){t=t||"auto";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(t)&&(t=t.replace(r,function(t){return 0==t&&t||t+"px"})),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-width: @process;
+  -moz-column-width: @process;
+  column-width: @process;
+}
+
+.columns(...) {
+  @process: ~`(function(t){t=t||"auto auto";var e=/^\d+$/;return/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,""),t=t.split(" ")),e.test(t[0])&&(t[0]=t[0]+"px"),t.join(" ")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-columns: @process;
+  -moz-columns: @process;
+  columns: @process;
+}
+
+.contrast(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: ~"contrast(@{process})";
+  -moz-filter: ~"contrast(@{process})";
+  -ms-filter: ~"contrast(@{process})";
+  filter: ~"contrast(@{process})";
+}
+
+.display(...) {
+  @process_oldwebkit: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-webkit-box":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(n){return n="flex"==n||"inline-flex"==n?"-moz-box":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_webkit: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-webkit-"+e:8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(e){return e="flex"==e?"-ms-flexbox":"inline-flex"==e?"-ms-inline-flexbox":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){return"flex"!=n&&"inline-flex"!=n&&(n=8121991),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  display: @process_oldwebkit;
+  display: @process_moz;
+  display: @process_webkit;
+  display: @process_ms;
+  display: @process;
+}
+
+.drop-shadow(...) {
+  @process: ~`(function(e){if(e=e||8121991,8121991==e)return e;var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: drop-shadow(@process);
+  -moz-filter: drop-shadow(@process);
+  -ms-filter: drop-shadow(@process);
+  filter: drop-shadow(@process);
+}
+
+.filter(...) {
+  @process: ~`(function(e){return e=e||"none",/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: @process;
+  -moz-filter: @process;
+  -ms-filter: @process;
+  filter: @process;
+}
+
+.flex(...) {
+  @process_olderwebkit: ~`(function(t){return/^\d+/.test(t)?t=t.match(/^\d+/)[0]:""==t&&(t="0"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(t){return/^\d+/.test(t)?t=t.match(/^\d+/)[0]:""==t&&(t="0"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"0 1 auto",/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,"")),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-flex: @process_olderwebkit;
+  -moz-box-flex: @process_moz;
+  -webkit-flex: @process;
+  -ms-flex: @process;
+  flex: @process;
+}
+
+.flex-basis(...) {
+  @process: ~`(function(t){t=t||"auto";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(t)&&(t=t.replace(r,function(t){return 0==t&&t||t+"px"})),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-basis: @process;
+  flex-basis: @process;
+}
+
+.flex-direction(...) {
+  @process_oldestwebkit: ~`(function(r){return r="row"==r||"column"==r?"normal":"row-reverse"==r||"column-reverse"==r?"reverse":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_oldermoz: ~`(function(r){return r="row"==r||"column"==r?"normal":"row-reverse"==r||"column-reverse"==r?"reverse":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_olderwebkit: ~`(function(r){return r="row"==r||"row-reverse"==r?"horizontal":"column"==r||"column-reverse"==r?"vertical":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(r){return r="row"==r||"row-reverse"==r?"horizontal":"column"==r||"column-reverse"==r?"vertical":8121991})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){return n=n||"row"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-direction: @process_oldestwebkit;
+  -moz-box-direction: @process_oldermoz;
+  -webkit-box-orient: @process_olderwebkit;
+  -moz-box-orient: @process_moz;
+  -webkit-flex-direction: @process;
+  -ms-flex-direction: @process;
+  flex-direction: @process;
+}
+
+.flex-grow(...) {
+  @process: ~`(function(n){return n=n||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-grow: @process;
+  flex-grow: @process;
+}
+
+.flex-shrink(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-shrink: @process;
+  flex-shrink: @process;
+}
+
+.flex-wrap(...) {
+  @process: ~`(function(n){return n=n||"nowrap"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-wrap: @process;
+  -ms-flex-wrap: @process;
+  flex-wrap: @process;
+}
+
+.font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal) {
+  font-family: "@{fontname}";
+  src: url("@{fontfile}.eot");
+  src: url("@{fontfile}.eot?#iefix") format("embedded-opentype"),
+       url("@{fontfile}.woff") format("woff"),
+       url("@{fontfile}.ttf") format("truetype"),
+       url("@{fontfile}.svg#@{fontname}") format("svg");
+  font-weight: @fontweight;
+  font-style: @fontstyle;
+}
+
+.grayscale(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: grayscale(@process);
+  -moz-filter: grayscale(@process);
+  -ms-filter: grayscale(@process);
+  filter: grayscale(@process);
+}
+
+.hue-rotate(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: hue-rotate(@process);
+  -moz-filter: hue-rotate(@process);
+  -ms-filter: hue-rotate(@process);
+  filter: hue-rotate(@process);
+}
+
+.hyphens(...) {
+  @process: ~`(function(n){return n=n||"manual"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-hyphens: @process;
+  -moz-hyphens: @process;
+  -ms-hyphens: @process;
+  hyphens: @process;
+}
+
+.invert(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: invert(@process);
+  -moz-filter: invert(@process);
+  -ms-filter: invert(@process);
+  filter: invert(@process);
+}
+
+.justify-content(...) {
+  @process_oldestWebkit: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"!=e&&"space-around"!=e||(e="justify"),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"!=e&&"space-around"!=e||(e="justify"),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"start","flex-start"==t?t="start":"flex-end"==t?t="end":"space-between"==t?t="justify":"space-around"==t&&(t="distribute"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"flex-start"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-pack: @process_oldestWebkit;
+  -moz-box-pack: @process_moz;
+  -ms-flex-pack: @process_ms;
+  -webkit-justify-content: @process;
+  justify-content: @process;
+}
+
+.keyframes(...) {
+  @process: ~`(function(e){function a(a,r,k){var n="}\n",m=t.split(/(^[a-zA-Z0-9-]+),/g),o=r+" "+m[1]+"{",f=["-webkit-","-moz-","-ms-",""];k?s.forEach(function(a,r){e.indexOf(a)!==-1&&(m[2]=m[2].replace(new RegExp(a,"g"),function(e){return k+e}))}):m[2]=m[2].replace(/{([^}]+)}/g,function(e,a){var r=a.split(";");r.forEach(function(e,a){s.forEach(function(t){e.indexOf(t)!==-1&&(r[a]="",f.forEach(function(s){r[a]+=e.trim().replace(new RegExp(t,"g"),function(e){return s+e})+";"}))})});var t=r.join(";").replace(/;;/g,";");return e.replace(a,t)}),o+=m[2]+n,"start"==a?e="0; } \n"+o:"startend"==a?e="0; } \n"+o.replace(n,""):e+="end"==a?o.replace(n,""):o}e=e||8121991;var r="@{state}",t=e;if(8121991==e)return e;var s=["animation","transform","filter"];switch(r){case"1":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-moz-keyframes","-moz-"),a(null,"@-o-keyframes","-o-"),a("end","@keyframes");break;case"2":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-moz-keyframes","-moz-"),a("end","@keyframes");break;case"3":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-moz-keyframes","-moz-"),a("end","@-o-keyframes","-o-");break;case"4":a("start","@-webkit-keyframes","-webkit-"),a(null,"@-o-keyframes","-o-"),a("end","@keyframes");break;case"5":a("start","@-webkit-keyframes","-webkit-"),a("end","@-moz-keyframes","-moz-");break;case"6":a("start","@-webkit-keyframes","-webkit-"),a("end","@-o-keyframes","-o-");break;case"7":a("start","@-webkit-keyframes","-webkit-"),a("end","@keyframes");break;case"8":a("startend","@-webkit-keyframes","-webkit-");break;case"9":a("start","@-moz-keyframes","-moz-"),a(null,"@-o-keyframes","-o-"),a("end","@keyframes");break;case"10":a("start","@-moz-keyframes","-moz-"),a("end","@-o-keyframes","-o-");break;case"11":a("start","@-moz-keyframes","-moz-"),a("end","@keyframes");break;case"12":a("startend","@-moz-keyframes","-moz-");break;case"13":a("start","@-o-keyframes","-o-"),a("end","@keyframes");break;case"14":a("startend","@-o-keyframes","-o-");break;case"15":a("startend","@keyframes")}return e+"}\n[not-existing] {\n  zoom: 1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; lesshat-selector { -lh-property: @process; }
+
+
+
+}
+
+.opacity(...) {
+  @process_ms: ~`(function(a){return a=a||"filter: alpha(opacity=100)","alpha(opacity="+Math.floor(100*a)+")"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+   zoom: 1; filter: @process_ms;
+  -webkit-opacity: @process;
+  -moz-opacity: @process;
+  opacity: @process;
+}
+
+.order(...) {
+  @process: ~`(function(n){return n=n||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-ordinal-group: @process;
+  -moz-box-ordinal-group: @process;
+  -ms-flex-order: @process;
+  -webkit-order: @process;
+  order: @process;
+}
+
+.perspective(...) {
+  @process: ~`(function(n){n=n||"none";var e=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return e.test(n)&&(n=n.replace(r,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-perspective: @process;
+  -moz-perspective: @process;
+  perspective: @process;
+}
+
+.perspective-origin(...) {
+  @process: ~`(function(e){e=e||"50% 50%";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"%"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-perspective-origin: @process;
+  -moz-perspective-origin: @process;
+  perspective-origin: @process;
+}
+
+.placeholder(@color:#aaa, @element: 08121991) {
+  .inception (@arguments) when not (@element = 08121991) {
+    @{element}::-webkit-input-placeholder {
+       color: @color;
+    }
+    @{element}:-moz-placeholder {
+       color: @color;
+    }
+    @{element}::-moz-placeholder {
+       color: @color;
+    }
+    @{element}:-ms-input-placeholder {
+       color: @color;
+    }
+  }
+  .inception (@arguments) when (@element = 08121991) {
+    &::-webkit-input-placeholder {
+       color: @color;
+    }
+    &:-moz-placeholder {
+       color: @color;
+    }
+    &::-moz-placeholder {
+       color: @color;
+    }
+    &:-ms-input-placeholder {
+       color: @color;
+    }
+  }
+  .inception(@arguments);
+}
+
+.rotate(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotate(@process);
+  -moz-transform: rotate(@process);
+  -ms-transform: rotate(@process);
+  -o-transform: rotate(@process);
+  transform: rotate(@process);
+}
+
+.rotate3d(...) {
+  @process: ~`(function(n){return n=n||"0, 0, 0, 0",n=n.replace(/,\s*\d+$/,function(n){return n+"deg"})})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotate3d(@process);
+  -moz-transform: rotate3d(@process);
+  -ms-transform: rotate3d(@process);
+  -o-transform: rotate3d(@process);
+  transform: rotate3d(@process);
+}
+
+.rotateX(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateX(@process);
+  -moz-transform: rotateX(@process);
+  -ms-transform: rotateX(@process);
+  -o-transform: rotateX(@process);
+  transform: rotateX(@process);
+}
+
+.rotateY(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateY(@process);
+  -moz-transform: rotateY(@process);
+  -ms-transform: rotateY(@process);
+  -o-transform: rotateY(@process);
+  transform: rotateY(@process);
+}
+
+.rotateZ(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateZ(@process);
+  -moz-transform: rotateZ(@process);
+  -ms-transform: rotateZ(@process);
+  -o-transform: rotateZ(@process);
+  transform: rotateZ(@process);
+}
+
+.saturate(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: ~"saturate(@{process})";
+  -moz-filter: ~"saturate(@{process})";
+  -ms-filter: ~"saturate(@{process})";
+  filter: ~"saturate(@{process})";
+}
+
+.scale(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scale(@process);
+  -moz-transform: scale(@process);
+  -ms-transform: scale(@process);
+  -o-transform: scale(@process);
+  transform: scale(@process);
+}
+
+.scale3d(...) {
+  @process: ~`(function(n){return n=n||"1, 1, 1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scale3d(@process);
+  -moz-transform: scale3d(@process);
+  -ms-transform: scale3d(@process);
+  -o-transform: scale3d(@process);
+  transform: scale3d(@process);
+}
+
+.scaleX(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleX(@process);
+  -moz-transform: scaleX(@process);
+  -ms-transform: scaleX(@process);
+  -o-transform: scaleX(@process);
+  transform: scaleX(@process);
+}
+
+.scaleY(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleY(@process);
+  -moz-transform: scaleY(@process);
+  -ms-transform: scaleY(@process);
+  -o-transform: scaleY(@process);
+  transform: scaleY(@process);
+}
+
+.scaleZ(...) {
+  @process: ~`(function(n){return n=n||"1"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleZ(@process);
+  -moz-transform: scaleZ(@process);
+  -ms-transform: scaleZ(@process);
+  -o-transform: scaleZ(@process);
+  transform: scaleZ(@process);
+}
+
+.selection(...) {
+  @process: ~`(function(e){function t(t,n){var r="}\n",s=a.split(","),c=(s[1]||"")+n+"{"+s[0]+r;"start"==t?e="0; } \n"+c:"startend"==t?e="0; } \n"+c.replace(r,""):e+="end"==t?c.replace(r,""):c}e=e||8121991;var n="@{state}",a=e;if(8121991==e)return e;switch(n){case"1":t("start","::selection"),t("end","::-moz-selection");break;case"2":t("startend","::selection");break;case"3":t("startend","::-moz-selection")}return e=e.replace(/;$/g,"")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; lesshat-selector { -lh-property: @process; }
+
+}
+
+.sepia(...) {
+  @process: ~`(function(n){n=n||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"%"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: sepia(@process);
+  -moz-filter: sepia(@process);
+  -ms-filter: sepia(@process);
+  filter: sepia(@process);
+}
+
+.size(@square) {
+  @unit: 'px';
+  .process(@square) when (ispixel(@square)), (isem(@square)), (ispercentage(@square)), (iskeyword(@square)) {
+    width: @square;
+    height: @square;
+  }
+
+  .process(@square) when not (ispixel(@square)) and not (isem(@square)) and not (ispercentage(@square)) and not (isstring(@square)) and not (iskeyword(@square)) {
+    width: ~`@{square} + @{unit}`;
+    height: ~`@{square} + @{unit}`;
+  }
+
+  .process(@square);
+
+}
+
+.size(@width, @height) {
+  @unit: 'px';
+  .process(@width, @height) when (ispixel(@width)), (isem(@width)), (ispercentage(@width)), (iskeyword(@width)) {
+    .kittens(@height) when (ispixel(@height)), (isem(@height)), (ispercentage(@height)), (iskeyword(@height)) {
+      width: @width;
+      height: @height;
+    }
+    .kittens(@height) when not (ispixel(@height)) and not (isem(@height)) and not (ispercentage(@height)) and not (iskeyword(@height)) {
+      width: @width;
+      height: ~`@{height} + @{unit}`;
+    }
+    .kittens(@height);
+  }
+
+  .process(@width, @height) when (ispixel(@height)), (isem(@height)), (ispercentage(@height)), (iskeyword(@height)) {
+    .kittens(@width) when (ispixel(@width)), (isem(@width)), (ispercentage(@width)), (iskeyword(@width)) {}
+    .kittens(@width) when not (ispixel(@width)) and not (isem(@width)) and not (ispercentage(@width)) and not (iskeyword(@width)) {
+      width: ~`@{width} + @{unit}`;
+      height: @height;
+    }
+    .kittens(@width);
+  }
+
+  .process(@width, @height) when not (ispixel(@width)) and not (isem(@width)) and not (ispercentage(@width)) and not (iskeyword(@width)) and not (ispixel(@height)) and not (isem(@height)) and not (ispercentage(@height)) and not (iskeyword(@height))  {
+    width: ~`@{width} + @{unit}`;
+    height: ~`@{height} + @{unit}`;
+  }
+
+  .process(@width, @height);
+
+}
+
+.skew(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skew(@process);
+  -moz-transform: skew(@process);
+  -ms-transform: skew(@process);
+  -o-transform: skew(@process);
+  transform: skew(@process);
+}
+
+.skewX(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skewX(@process);
+  -moz-transform: skewX(@process);
+  -ms-transform: skewX(@process);
+  -o-transform: skewX(@process);
+  transform: skewX(@process);
+}
+
+.skewY(...) {
+  @process: ~`(function(e){e=e||"0";var n=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return n.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"deg"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skewY(@process);
+  -moz-transform: skewY(@process);
+  -ms-transform: skewY(@process);
+  -o-transform: skewY(@process);
+  transform: skewY(@process);
+}
+
+.transform(...) {
+  @process: ~`(function(e){e=e||"none";var r={translate:"px",rotate:"deg",rotate3d:"deg",skew:"deg"};/^\w*\(?[a-z0-9.]*\)?/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,""));for(var t in r)e.indexOf(t)>=0&&(e=e.replace(new RegExp(t+"[\\w]?\\([a-z0-9, %]*\\)"),function(e){var n=/(\d+\.?\d*)(?!\w|%)/g;return"rotate3d"==t&&(n=/,\s*\d+$/),e.replace(n,function(e){return e+r[t]})}));return e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: @process;
+  -moz-transform: @process;
+  -ms-transform: @process;
+  -o-transform: @process;
+  transform: @process;
+}
+
+.transform-origin(...) {
+  @process: ~`(function(e){e=e||"50% 50% 0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"%"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform-origin: @process;
+  -moz-transform-origin: @process;
+  -ms-transform-origin: @process;
+  -o-transform-origin: @process;
+  transform-origin: @process;
+}
+
+.transform-style(...) {
+  @process: ~`(function(n){return n=n||"flat"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform-style: @process;
+  -moz-transform-style: @process;
+  -ms-transform-style: @process;
+  -o-transform-style: @process;
+  transform-style: @process;
+}
+
+.transition(...) {
+  @process_webkit: ~`(function(r){r=r||"all 0 ease 0";var e=["background-size","border-radius","border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","box-shadow","column","transform","filter"],t="-webkit-",o=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(r)&&(r=r.replace(/(?:,)(?![^(]*\))/g,"")),e.forEach(function(e,o){r.indexOf(e)!==-1&&(r=r.replace(new RegExp(e,"g"),function(r){return t+r}))}),o.test(r)||"0"===r||(r=r.replace(a,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){e=e||"all 0 ease 0";var n=["background-size","box-shadow","column","transform","filter"],r="-moz-",t=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),n.forEach(function(n,t){e.indexOf(n)!==-1&&(e=e.replace(new RegExp(n,"g"),function(e){return r+e}))}),t.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){e=e||"all 0 ease 0";var n=["transform"],r="-o-",t=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),n.forEach(function(n,t){e.indexOf(n)!==-1&&(e=e.replace(new RegExp(n,"g"),function(e){return r+e}))}),t.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){n=n||"all 0 ease 0";var e=["-webkit-","-moz-","-o-",""],t=["column","transform","filter"],r=/(?:\d)(?:ms|s)/gi,o=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;/^[^, ]*,/.test(n)&&(n=n.replace(/(?:,)(?![^(]*\))/g,""));var i=n.split(/(?:,)(?![^(]*\))/g);return i.forEach(function(n,r){t.forEach(function(t){n.indexOf(t)!==-1&&(i[r]="",e.forEach(function(o,a){i[r]+=n.trim().replace(new RegExp(t,"g"),function(n){return o+n}),a<e.length-1&&(i[r]+=",")}))})}),n=i.join(","),r.test(n)||"0"===n||(n=n.replace(o,function(n){return n+=parseFloat(n,10)>10?"ms":"s"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition: @process_webkit;
+  -moz-transition: @process_moz;
+  -o-transition: @process_opera;
+  transition: @process;
+}
+
+.transition-delay(...) {
+  @process: ~`(function(r){r=r||"0";var s=/(?:\d)(?:ms|s)/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-delay: @process;
+  -moz-transition-delay: @process;
+  -o-transition-delay: @process;
+  transition-delay: @process;
+}
+
+.transition-duration(...) {
+  @process: ~`(function(r){r=r||"0";var s=/ms|s/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return s.test(r)||"0"===r||(r=r.replace(t,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-duration: @process;
+  -moz-transition-duration: @process;
+  -o-transition-duration: @process;
+  transition-duration: @process;
+}
+
+.transition-property(...) {
+  @process_webkit: ~`(function(r){r=r||"all";var o=["background-size","border-radius","border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","box-shadow","column","transform","filter"],t="-webkit-";return o.forEach(function(o,e){r.indexOf(o)!==-1&&(r=r.replace(new RegExp(o,"g"),function(r){return t+r}))}),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(n){n=n||"all";var r=["background-size","box-shadow","column","transform","filter"],o="-moz-";return r.forEach(function(r,e){n.indexOf(r)!==-1&&(n=n.replace(new RegExp(r,"g"),function(n){return o+n}))}),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(n){n=n||"all";var r=["transform"],e="-o-";return r.forEach(function(r,f){n.indexOf(r)!==-1&&(n=n.replace(new RegExp(r,"g"),function(n){return e+n}))}),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(n){n=n||"all";var o=["-webkit-","-moz-","-o-",""],r=["column","transform","filter"],t=n.split(/(?:,)(?![^(]*\))/g);return t.forEach(function(n,f){r.forEach(function(r){n.indexOf(r)!==-1&&(t[f]="",o.forEach(function(i,c){t[f]+=n.trim().replace(new RegExp(r,"g"),function(n){return i+n}),c<o.length-1&&(t[f]+=",")}))})}),n=t.join(",")})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-property: @process_webkit;
+  -moz-transition-property: @process_moz;
+  -o-transition-property: @process_opera;
+  transition-property: @process;
+}
+
+.transition-timing-function(...) {
+  @process: ~`(function(e){return e=e||"ease"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-timing-function: @process;
+  -moz-transition-timing-function: @process;
+  -o-transition-timing-function: @process;
+  transition-timing-function: @process;
+}
+
+.translate(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translate(@process);
+  -moz-transform: translate(@process);
+  -ms-transform: translate(@process);
+  -o-transform: translate(@process);
+  transform: translate(@process);
+}
+
+.translate3d(...) {
+  @process: ~`(function(n){n=n||"0, 0, 0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translate3d(@process);
+  -moz-transform: translate3d(@process);
+  -ms-transform: translate3d(@process);
+  -o-transform: translate3d(@process);
+  transform: translate3d(@process);
+}
+
+.translateX(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateX(@process);
+  -moz-transform: translateX(@process);
+  -ms-transform: translateX(@process);
+  -o-transform: translateX(@process);
+  transform: translateX(@process);
+}
+
+.translateY(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateY(@process);
+  -moz-transform: translateY(@process);
+  -ms-transform: translateY(@process);
+  -o-transform: translateY(@process);
+  transform: translateY(@process);
+}
+
+.translateZ(...) {
+  @process: ~`(function(n){n=n||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(n)&&(n=n.replace(t,function(n){return 0==n&&n||n+"px"})),n})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateZ(@process);
+  -moz-transform: translateZ(@process);
+  -ms-transform: translateZ(@process);
+  -o-transform: translateZ(@process);
+  transform: translateZ(@process);
+}
+
+.user-select(...) {
+  @process: ~`(function(n){return n=n||"auto"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-user-select: @process;
+  -moz-user-select: @process;
+  -ms-user-select: @process;
+  user-select: @process;
+}
+
+
diff --git a/src/static/css/registry.less b/src/static/css/registry.less
new file mode 100644
index 0000000..61c20a6
--- /dev/null
+++ b/src/static/css/registry.less
@@ -0,0 +1,84 @@
+@import "./base.less";
+@reswidth0:1000px;
+@reswidth1:20px;
+*{
+    margin:0;
+    padding:0;
+}
+#registrySection{
+    margin:0 auto;
+    width:@reswidth0;
+    height:600px;
+    border-radius:5px;
+
+    >h3{
+        color: red;
+        opacity: 0.4;
+        line-height:100px;
+        padding-left: @reswidth1;
+        display: inline-block;
+        width:@reswidth0/2;
+        text-align: center;
+        vertical-align: middle;
+        
+        input{
+        vertical-align: middle;
+        width:@reswidth1;
+        height: @reswidth1;
+        margin-left: 5px;
+        }
+    }
+    
+    >h1{
+        color: @default-color;
+        opacity: 0.6;
+        text-align: center;
+        font-size: 28px;
+        font-weight: 400;
+    }
+   
+    .registrybtn{
+        color: @default-color;
+        opacity: 0.7;
+        text-align: center;
+        font-size: 28px;
+        display: block;
+        margin: 0 auto;        
+    }
+}
+
+#tenant{
+    margin:0 auto;
+    width:@reswidth0;
+    height:600px;
+    border-radius:5px;
+
+    >h3{
+        color: red;
+        opacity: 0.4;
+        line-height:100px;
+        padding-left: @reswidth1;
+        display: inline-block;
+        width:@reswidth0/2;
+        text-align: center;
+        vertical-align: middle;
+        
+        input{
+        vertical-align: middle;
+        width:@reswidth1;
+        height: @reswidth1;
+        margin-left: 5px;
+        }
+    }
+    
+    >h1{
+        color: @default-color;
+        opacity: 0.6;
+        text-align: center;
+        font-size: 28px;
+        font-weight: 400;
+        margin-bottom: 100px;
+        margin-top: 20px;
+    }
+   
+}
diff --git a/src/static/css/saved_form.less b/src/static/css/saved_form.less
new file mode 100644
index 0000000..98345e5
--- /dev/null
+++ b/src/static/css/saved_form.less
@@ -0,0 +1,1221 @@
+@import "./base.less";
+
+#flowcontent{
+    padding-top: 5px;
+    position: relative;
+}
+.cost_btn{
+    margin-left: 14px;
+    margin-top: 14px;
+}
+    
+.btn-zone-center {
+    margin: 9px 0px !important;
+    width:100%;
+    padding-top:15px;
+    text-align: center;
+    
+    button {
+        margin-right: 65px;
+    }
+}
+
+.form-control[readonly]{
+    background:#fff;
+    padding: 0;
+    height: 28px;
+    border-radius: 0;
+}
+
+.inputunderline{
+  padding-top: 0px;
+    padding-right: 2px;
+    padding-bottom: 0px;
+    padding-left: 2px;
+    height: 30px;
+    outline-width: 0px;
+    border-top-style: none;
+    border-right-style: none;
+    border-bottom-color: rgb(186, 186, 186);
+    border-bottom-style: dashed;
+    border-bottom-width: 1px;
+    border-left-style: none;
+    background-position-x: 0px;
+    background-position-y: 0px;
+    border-bottom: dashed 1px #bababa;
+    border-bottom-width: 1px;
+    border-bottom-style: dashed;
+    border-bottom-color: rgb(186, 186, 186);
+    -webkit-border-radius: 0;
+    -moz-border-radius: 0;
+    border-radius: 0;
+    border-top-left-radius: 0px;
+    border-top-right-radius: 0px;
+    border-bottom-right-radius: 0px;
+    border-bottom-left-radius: 0px;
+}
+.showDetail{
+  position: absolute;
+    background: #fff;
+    border: 1px solid #0DB3A6;
+    padding: 6px;
+    font-size: 12px;
+    -webkit-border-radius: 2px;
+    border-radius: -2px;
+    z-index: 8029;
+    max-width: 100%;
+    min-width: 7%;
+    left: 25px;
+    top: 34px;
+}
+
+
+div.form_content {
+    width:100%;
+    span{
+        
+        word-wrap:break-word;
+    }
+    .trans{
+        width: 100%;
+        height: 80%;
+        position: absolute;
+        top: 0;
+        background: transparent;
+        z-index: 1;
+    }
+    
+    .apply_control{
+        width: 100%;
+//      height: 50px;
+        padding-top: 10px;
+        display: flex;
+        align-items: center;
+        flex-direction: column;
+        font-size: 13px !important;
+        font-weight: normal !important;
+        font-family: 'Arial Normal', 'Arial' !important;
+        color: #999;
+        .apply_control_number_input{
+            position: absolute;
+        }
+    }
+    .apply_control > label{
+        width: 100%;
+        span{
+            color: #337ab7;
+        }
+    }
+    .apply_control > .apply_control_input{
+        width: 80% !important;
+        word-wrap:break-word;
+        word-break:break-all;
+        border:1px solid #E0E0E0;
+    }
+    .apply_select{
+        background-color: white;
+        box-shadow: 0 1px 10px rgba(20, 20, 20, 0.5);
+        border: 1px solid #ddd;
+        position: absolute;
+        z-index: 9999999999;
+        width: 90%;
+        height: auto;
+        left:2%;
+        top:65%;
+        padding:0 10px;
+        overflow: auto;
+    }
+    .apply_select > .apply_select_close > p{
+        width: 90%;
+        text-align: center;
+        color: #333;
+        margin-top: auto;
+        font-size: 18px;
+    }
+    .apply_select_close{
+        width: 100%;
+        border-bottom: 1px dashed #ddd;
+        height: 40px;
+        line-height: 30px;
+        display: flex;
+        justify-content: space-between;
+    }
+    .apply_close{
+        color: #337ab7;
+        text-align: right;
+        line-height: 30px;
+        width: 10%;
+        height: 30px;
+    }
+    .apply_close:hover{
+        color: #333;
+    }
+    .apply_select_table{
+        border-spacing: 0;
+        width: 100%;
+        border-collapse: collapse;
+        table-layout: auto;
+        border: 1px solid #ddd;
+//      margin-top: 10px;
+        td,th{
+            border: 1px solid #ddd;
+            text-align: center;
+            height: 30px;
+            line-height: 30px;
+            color: #000000;
+            font-weight: 300;
+        }
+        th{
+            color: #758aa5;
+        }
+    }
+    .apply_select_search{
+        display: flex;
+        justify-content: flex-end;
+        height: 40px;
+        line-height: 40px;
+        align-items: center;
+        input{
+            border: 1px solid #ddd;
+        }
+        .apply_search_btn{
+            margin-left: -30px !important;
+        }
+        .expend_search_style{
+            width: 220px;
+        }
+    }
+    .condition_search_footer{
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 5px 0;
+        label{
+            text-align: center;
+            height: 20px;
+            line-height: 20px;
+        }
+        .second .pagenumber {
+            width: 20px !important;
+            min-width: 20px !important;
+            height: 20px;
+        }
+    }
+    label  {
+        font-weight: normal !important;
+    }
+    .nobill_red{
+            color: red;
+        }
+    .cost_div{
+//      display: flex;
+        justify-content: space-around;
+        flex-wrap: wrap;
+    }
+    .cost_div > div{
+        width: 50%;
+    }
+
+    .errinfo{
+        color: red;
+        font-style: normal;
+        font-size: 10px;
+        display: inline-block;
+        min-width: 200px;
+    }
+    .errinfo_point{
+        color: red;
+        font-style: normal;
+        font-size: 10px;
+        display: inline-block;
+        min-width: 200px;
+    }
+    div.text > label,
+    div.textarea > label,
+    div.checkbox > label,
+    div.radio > label,
+    div.select > label
+    {
+        font-size: 13px !important;
+        font-weight: normal !important;
+        font-family: 'Arial Normal', 'Arial' !important;
+        color: #999;
+    }
+    div.total > label{
+        font-size: 13px !important;
+        font-weight: normal !important;
+        font-family: 'Arial Normal', 'Arial' !important;
+        color: #999;
+    }
+    .row{
+//      width:718px;
+//      min-height: 400px;
+        margin-bottom: 20px !important;
+        position: relative;
+//      overflow-x: hidden;
+//      overflow-y: visible;
+        input{
+            display: block;
+        }
+        .tabstrip{
+            display: flex;
+            width: 600px;
+            flex-wrap: nowrap;
+            margin-top: -3px;
+            position: relative;
+            z-index: 999;
+            ul{
+                display: flex;
+                justify-content: flex-start;
+            }
+            li{
+//              width: 130px;
+                height: 30px;
+                overflow: hidden;
+                text-align: center;
+                border: 1px solid #ddd;
+                border-top: 1px solid white;
+                border-radius: 3px;
+                background-color: #f9f9f9;
+                color: #39beb5;
+                margin-bottom: 4px;
+                margin-right: 5px;
+                cursor: pointer;
+                span{
+                    display: inline-block;
+                    padding: 5px 10px;
+                    overflow: hidden;
+                }
+            }
+            .tabstrip_active{
+                background-color: white;
+            }
+        }
+        .tabstrip_temp{
+                left:14.5%;
+                z-index: 999 !important;
+            }
+        
+        
+        .null_form{
+            min-height: 0 !important;
+        }
+        .disabled_time{
+            background-color: rgb(235, 235, 228);
+        }
+        .abled_time{
+            background-color: white;
+        }
+        .add_jour{
+            min-height: 20px !important;
+            margin-top: 5px;
+            i{
+                color: @default-color;
+                cursor: pointer;
+            }
+        }
+        .row_unedit{
+            position: absolute;
+            width: 100%;
+            height: 100%;
+            z-index: 100;
+            background-color: rgba(255,255,255,0);
+        }
+        i{
+            font-style: normal;
+        }
+        p{
+            font-size: 12px;
+            color:#bbb;
+            line-height: 12px;
+            padding-top: 5px;
+        }
+        
+        h5{
+            color: :#bbb;
+        }
+        
+        > div{
+            padding:0;
+            min-height: 83px!important;
+        }
+        .cost_err{
+            color: red; 
+        }
+        .activeops{
+             color: red; 
+        }
+        .inactiveops{
+             color: #fe8d00;
+         }
+
+        .cost_count{
+            margin-top: 12px;
+            display: flex;
+            justify-content:flex-end ;
+            height: 20px;
+            min-height: 20px !important;
+            a{
+                height: 20px;
+            }
+        }
+        .search_column{
+            color:#333;
+            margin-bottom: 10px;
+            
+            label{
+                color: #999;
+                font-weight: normal;
+    }
+      
+            > input{
+                width:215px;
+            }
+           
+            button{
+                height: 28px;  
+                margin-left: 5px;  
+            }   
+            
+            .completedorder{
+                background-color: #fff;
+                box-shadow: 0 1px 10px rgba(20, 20, 20, 0.5);
+                border: 1px solid #ddd;
+                position: absolute;
+                z-index: 9999999999;
+                min-height: 100px;
+            }
+             
+            .selectul{
+                    position: relative;
+                    
+                    .select-container{
+                        line-height: 25px;
+                    }
+                    
+                    .showul{
+                       width:214px;
+//                     height:60px;
+                       max-height: 150px;
+                       background:#fff; 
+                       border:1px solid #ccc;
+                       position: absolute;
+                       z-index: 999999999;
+                       overflow: auto;
+                       color:#333;
+                       padding-left:10px;
+                        
+                       li{
+                           height:30px;
+                           line-height: 30px;
+                           
+                           input{
+                               width:15px;
+                               height:15px;
+                           }
+                       } 
+                    }
+                    
+                    .suffix{
+                        top:0;
+                    }
+                }
+        }
+        
+    }
+      
+           
+    div
+      input[type="text"], div.select select{
+            display: inline-block;
+        width:80% !important;
+        max-width: 214px !important;
+//      min-width: 214px !important;
+        height:28px;
+        line-height:25px;
+        border: 1px solid #dfdfdf;
+    }
+    .total_label{
+        padding-left: 0;
+    }
+    div.total{
+        margin-top: 10px;
+        display: flex;
+        flex-direction: column;
+    }
+    
+    div.total  input[type="text"]{
+        width:214px !important;
+        min-width: 214px !important;
+        height:28px;
+        line-height:25px;
+        border: 1px solid #dfdfdf;
+    }
+    
+    .checkbox {
+        overflow:auto;
+        input[type="checkbox"] {
+            display:block;
+            position:relative;
+            margin:0px;
+        }
+        div {
+            text-align: left;
+        }
+    }
+
+    .radio {
+        overflow:auto;
+        input[type="radio"] {
+            display:block;
+            position:relative;
+            margin:0px;
+            //width:214px;
+        }
+        div {
+            text-align: left;
+        }
+    }
+
+    .checkbox_container {
+        width:100px;
+        height:100px;
+        
+        .cb_label {
+            position: absolute;
+            margin-top:-23px;
+            margin-left:15px;
+            padding-left:0px;
+        }
+    }
+
+    .radio{
+        > div {
+            margin-top:0px !important;
+        }
+        .rd_container {
+            position:relative;
+            margin-top:0px !important;
+            input {
+                margin-left:1px;
+                margin-top:2px;
+            }
+            .rd_label {
+                position:absolute;
+                margin-left:18px;
+                padding-left:0px;
+                bottom:0px;
+                top:4px;
+            }
+        }
+    }
+
+    div.user_element {
+        text-align: left;
+        > span {
+            margin-left: 6px;
+            width: 100%;
+        }
+        span.user_name {
+            border: 1px solid #ddd;
+            padding: 2px 5px;
+            width: auto;
+            background:@default-color;
+            color: #fff;
+        }
+
+        label {
+        }
+
+        a.btn_user_el_add_user {
+            font-size:12px;
+        }
+        
+    }
+
+}  
+ 
+.btn-zone {
+    padding: 5px;
+    text-align: center;
+    display: block;
+    width:718px;
+    height: 30px;
+    margin-bottom: 10px;
+    position: absolute;
+    z-index: 101;
+    button {
+        margin-right: 15px;
+    }
+
+}
+
+
+.bill_create_pop {
+    z-index: 9999;
+    .audit_commit{
+        position: absolute;
+        width: 30%;
+        height: 300px;
+        margin-left: 35%;
+        border-radius: 2%;
+        background-color: #f3f7f7;
+        overflow: hidden;
+        box-shadow: 0 1px 10px rgba(20, 20, 20, 0.5);
+        z-index: 99999;
+        .audit_commit_header{
+            width: 100%;
+            height: 10%;
+            display: flex;
+            justify-content: center;
+            color: white;
+            align-items: center;
+            background-color: #09b4ab;
+        }
+        .audit_commit_content{
+            width: 100%;
+            height: 70%;
+//          p{
+//              height: 20%;
+//              line-height: 100%;
+//              margin: 0;
+//          }
+            textarea{
+                width: 100%;
+                height: 100%;
+            }
+        }
+        .audit_commit_btn{
+            display: flex;
+            height: 20%;
+            justify-content: space-around;
+            align-items: center;
+            button{
+                width: 16%;
+                height: 60%;
+                font-size: 15px
+            }
+        }
+    }
+    .paper_upload{
+        position: absolute;
+        right: 120px;
+        top: 37px;
+        z-index: 200;
+    }
+    .paper_iframe{
+        position: fixed;
+        width: 80%;
+        min-height: 100%;
+        background-color: #f3f7f7;
+        top:0;
+        left: 10%;
+        overflow: auto;
+        z-index: 99999;
+        box-shadow:  0 1px 10px rgba(20, 20, 20, 0.5);
+        .paper_iframe_nav{
+            padding: 1% 5%;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            i{
+                font-size: 20px;
+            }
+            span{
+                display: inline-block;
+                color: #39beb5;
+                height: 100%;
+                line-height: 100%;
+            }
+            .close {
+                right:12px;
+                top:12px;
+                font-size:20px;
+            }
+        }
+    }
+    .pop_panel {
+        margin-top:0px;
+//      overflow: hidden;
+        
+        .search_column{
+            color:#333;
+            margin-bottom: 10px;
+            
+            label{
+                color: #999;
+                font-weight: normal;
+            }
+            
+            > input{
+                width:215px;
+            }
+             
+            button{
+                height: 28px;  
+                margin-left: 5px;  
+            }   
+              
+            .selectul{
+                    position: relative;
+                    
+                    .select-container{
+                        line-height: 25px;
+                    }
+                    
+                    .showul{
+                       width:214px;
+//                     height:60px;
+                       max-height: 150px;
+                       background:#fff; 
+                       border:1px solid #ccc;
+                       position: absolute;
+                       z-index: 999999999;
+                       overflow: auto;
+                       color:#333;
+                       padding-left: 10px;
+                        
+                       li{
+                           height:30px;
+                           line-height: 30px;
+                           
+                           input{
+                               width:15px;
+                               height:15px;
+                           }
+                       } 
+                    }
+                    
+                    .suffix{
+                        top:0px;
+                    }
+                }
+        }
+    }
+}
+.people{
+    margin-top:20px;
+}
+       
+div.user_select_popup{
+    .box-shadow(0 1px 10px rgba(20, 20, 20, 0.5));
+    width:80%;
+    height:400px;
+    background:#fff;
+      position:absolute;
+      left: 15%;
+    z-index:9999999999999999999999 !important;
+    border:1px solid #ddd;
+    padding-top:22px;
+    div.btn_cls {
+        border-bottom: 1px dashed #ddd;
+        padding-left:4px;
+        margin-top:-22px !important;
+    }
+    div.user_sel_form{
+        width:100%;
+        height:90% !important;
+        .main_close{
+            margin-left: 550px;
+        }
+        .user_sel_form_close{
+            height: 30px;
+            line-height: 30px;
+            a{
+                float: right;
+            }
+        }
+        div.main{
+            width:100%;
+            min-height:100%;
+            height:100%;
+            float:left;
+            padding-left:30%;
+            padding-right:20%;
+            div.center_area {
+                width:100%; 
+//              min-height:100%;
+                height:90%;
+                overflow:auto;
+                padding-top: 26px;
+                .area_title {
+                    height: 25px;
+                    margin: 0px 4px;
+                    border-bottom:1px solid #ddd;
+                    margin-top:-26px;
+                    label {
+                        font-size:12px;
+                        padding:0px 2px;
+                        color:#758aa5;
+                        border-left: 2px solid #2f796e;
+                    }
+                    
+                    span {
+                        input {
+                            margin-top:1px;
+                            height:22px;
+                            line-height: 22px;
+                            min-height: 22px !important;
+                            float:right;
+                        }
+                    }
+                }
+
+                .area_body { 
+                    overflow:auto;
+                    height:100%;
+                    width:100%;
+                    label.label_letter_group {
+                        font-size:10px;
+                        color: #2f796e;
+                        margin-left:6px;
+                    }
+                    ul {
+                        a.hr_gp_title, a.hr_name{
+                            font-size:12px;
+                            display: inline-block;
+                            height: 20px;
+                            text-align: center;
+                            line-height: 20px;
+                            border: 1px solid #eceff4;
+                            background-color: #faf8fb;
+                        }
+                        a.hr_name_selected{
+                            font-size:12px;
+                            display: inline-block;
+                            color: #81817f;
+                            width: 45px;
+                            height: 20px;
+                            text-align: center;
+                            line-height: 20px;
+                            border: 1px solid #eceff4;
+                            background-color:#f3f3f3;
+                        }
+                        .hr_name_addbtn{
+                            width: 18px;
+                            height: 20px;
+                            border: none;
+                            text-align: center;
+                            border:1px solid #eceff4;
+                            padding: 0;
+                            background-color: #faf8fb;
+                            color: #6a8eb0;
+                        }
+                        .hr_name_addbtn_selected{
+                            width: 18px;
+                            height: 20px;
+                            border: none;
+                            text-align: center;
+                            border:1px solid #eceff4;
+                            padding: 0;
+                            background-color: #f3f3f3;
+                            color: #81817f;
+                        }
+                        div{
+                            height: 20px;
+                            display: flex;
+                            justify-content: flex-start;
+                        }
+                        list-style: none;
+                        padding-left:15px;
+                        li {
+                            padding-left:15px;
+                            display: flex;
+                            justify-content: flex-start;
+                        }
+                    }
+                }
+            }
+        }
+
+        div.right{
+            width:100%;
+            min-height:100%;
+            height:100%;
+           div.right_area{
+                width:100%; 
+                min-height:100%;
+                height:100%;
+                overflow:auto;
+                padding-top: 26px !important;
+                .selected_personnel{
+                        background-color:@default-color;
+                    }
+                .clear_selected_users{
+                    margin-right: 5px;
+                }
+               .area_title {
+                    height: 25px;
+                    margin: 0px 4px;
+                    line-height: 25px;
+                    border-bottom:1px solid #ddd;
+                    margin-top:-26px;
+                    label {
+                        font-size:12px;
+                        padding:0px 2px;
+                        color:white;
+                        border-left: 2px solid #2f796e;
+                    }
+                    i{
+                        color:white;
+                    }
+                    span {
+                        input {
+                            margin-top:1px;
+                            height:22px;
+                            line-height: 22px;
+                            min-height: 22px !important;
+                            float:right;
+                        }
+                    }
+                }
+
+                .area_body { 
+                    overflow:auto;
+                    height:100%;
+                    width:100%;
+                    label.label_letter_group {
+                        font-size:10px;
+                        color: #2f796e;
+                        margin-left:6px;
+                    }
+                    .department_close{
+//                      margin-left: 42px;
+                        color: #637179;
+                    }
+                    ul {
+                        width: 100%;
+                        .gp_title{
+                            width: 100%;
+                            display: flex;
+                            align-items: center;
+                        }
+                        a.hr_gp_title{
+                            font-size:12px;
+                            font-weight: bold;
+                            color: #3e3f3f;
+                            margin-left: 2%;
+                            overflow: hidden;
+                            text-overflow: ellipsis;
+                            width: 86%;
+                            display: inline-block;
+                            white-space: nowrap;
+                        }
+                        a.hr_name{
+                            font-size:12px;
+                            display: inline-block;
+                            width: 45px;
+                            height: 20px;
+                            text-align: center;
+                            line-height: 20px;
+                            border: 1px solid #20b4aa;
+                            background-color: #c1e4e7;
+                            color: #666969;
+                        }
+                        .hr_name_addbtn{
+                            width: 18px;
+                            height: 20px;
+                            border: none;
+                            color: white;
+                            text-align: center;
+                            border:1px solid #20b4aa;
+                            padding: 0;
+                            background-color: #20b4aa;
+                        }
+                        .gp_title:hover{
+                            background-color: #a7eff5;
+                        }
+                        list-style: none;
+                        padding-left:0px;
+                        li {
+                            padding-left:15px;
+                            margin-bottom: 5px;
+                            div{
+                                height: 20px;
+                                display: flex;
+                                justify-content: flex-start;
+                            }
+                        }
+                    }
+                }
+           }
+        }
+
+
+
+        div.hr_tree {
+            overflow:auto;
+            height:100%;
+        }
+        div.left{
+            margin-left:-100%;
+            float:left;
+            min-height:100%;
+            width:30%;
+            border-right:1px solid #ddd;
+        }
+        div.right{
+            min-height:100%;
+            width:20%;
+            float:left;
+            margin-left:-20%;
+            border-left:1px solid #ddd;
+        }
+    }
+}
+//组织机构
+div.org_select_popup{
+    .box-shadow(0 1px 10px rgba(20, 20, 20, 0.5));
+    width:300px;
+//  height:320px;
+    background:#fff;
+      position:absolute;
+      left: 15%;
+    z-index:9999999999999999999999 !important;
+    border:1px solid #ddd;
+    padding-top:22px;
+    padding-bottom: 25px;
+    div.btn_cls {
+        border-bottom: 1px dashed #ddd;
+        padding-left:4px;
+        margin-top:-22px !important;
+    }
+    div.org_sel_form{
+        width:100%;
+        height:90% !important;
+        .main_close{
+            margin-left: 250px;
+        }
+        .org_sel_form_close{
+            height: 30px;
+            line-height: 30px;
+        }
+
+        div.right{
+            width:100%;
+            min-height:100%;
+            height:100%;
+           div.right_area{
+                width:100%; 
+                min-height:100%;
+                height:100%;
+                overflow:auto;
+                padding-top: 26px !important;
+                .selected_personnel{
+                        background-color:@default-color;
+                    }
+                .clear_selected_users{
+                    margin-right: 5px;
+                }
+               .area_title {
+                    height: 25px;
+                    margin: 0px 4px;
+                    line-height: 25px;
+                    border-bottom:1px solid #ddd;
+                    margin-top:-26px;
+                    label {
+                        font-size:12px;
+                        padding:0px 2px;
+                        color:white;
+                        border-left: 2px solid #2f796e;
+                    }
+                    i{
+                        color:white;
+                    }
+                    span {
+                        input {
+                            margin-top:1px;
+                            height:22px;
+                            line-height: 22px;
+                            min-height: 22px !important;
+                            float:right;
+                        }
+                    }
+                }
+
+                .area_body { 
+                    overflow:hidden;
+                    height:100%;
+                    width:100%;
+                    div.area_content{
+                        display: flex;
+                        justify-content: center;
+                        margin-top: 10px;
+                    }
+                    ul {
+                        a.hr_name{
+                            font-size:12px;
+                            display: inline-block;
+                            width: 45px;
+                            height: 20px;
+                            text-align: center;
+                            line-height: 20px;
+                            border: 1px solid #20b4aa;
+                            background-color: #c1e4e7;
+                            color: #666969;
+                        }
+                        .hr_name_addbtn{
+                            width: 18px;
+                            height: 20px;
+                            border: none;
+                            color: white;
+                            text-align: center;
+                            border:1px solid #20b4aa;
+                            padding: 0;
+                            background-color: #20b4aa;
+                        }
+                        list-style: none;
+                        padding-left:0px;
+                         li {
+                            padding-left:15px;
+                            margin-bottom: 5px;
+                            div{
+                                height: 20px;
+                                display: flex;
+                                justify-content: flex-start;
+                            }
+                        }
+                    }
+                }
+           }
+        }
+
+
+
+        div.hr_tree {
+            overflow:auto;
+            height:100%;
+        }
+        div.left{
+//          margin-left:-100%;
+            float:left;
+            min-height:100%;
+            width:160px;
+            border-right:1px solid #ddd;
+        }
+        div.right{
+            min-height:100%;
+            width:105px;
+            float:left;
+//          margin-left:20px;
+//          border-left:1px solid #ddd;
+        }
+    }
+}
+
+div.sub_form_s > div{
+    height: 62px;
+        margin-bottom: 8px;
+}
+div.sub_form_container {
+    position:relative;
+    width:100%;
+    .jp_normal{
+        color: black;
+    }
+    .jp_active{
+        color:red;
+    }
+    i{
+        font-style: normal;
+    }
+    div.sub_frm_tlbar{
+        position:absolute;
+        top:2px;
+        right:-5px;
+        z-index: 9999 !important;
+
+        div.sfm_plus {
+            float:left;
+            padding:4px 4px;
+        }
+
+        div.sfm_plus i{
+            color: #22bbb3 ;
+        }
+        
+
+        div.sfm_minus {
+            float:left;
+            padding: 4px 4px;
+        }   
+
+        div.sfm_minus i{
+            color: #f7d1cc;
+        }
+        
+        div.sfm_cou{
+            float:left;
+            padding:4px 4px;
+        }
+    }
+    
+}
+
+div.select3-element {
+    position: relative;
+    div.select-container {
+//      width:80%;
+        max-width: 214px !important;
+//      min-width: 180px;
+        min-height:28px;
+        max-height: 30px;
+        border: 1px solid #dfdfdf;
+        padding-right:26px;
+        overflow: hidden;
+        
+//      overflow-x: hidden;
+        position:relative;
+        div.suffix {
+            float:left;
+            min-height:26px;
+            height:100%;
+            width:26px;
+//          min-width: 15px;
+//          max-width: 26px;
+            border-left: 1px solid #dfdfdf;
+            text-align: center;
+            color: @default-color;
+            position:absolute;
+            right:0px;
+            top:0px;
+            line-height:27px;
+        }
+        div.val-card {
+            padding: 1px 5px;
+             white-space:nowrap;
+             text-overflow:ellipsis;
+             -o-text-overflow:ellipsis;
+             overflow: hidden;
+            width: 100%;
+            //颜色更改
+            color: @default-color;
+//          border:1px dashed #09B4AB;
+            float:left;
+            i {
+                font-size:10px;
+            }
+        }
+    }
+
+    div.drop_down_sel {
+        position: absolute !important;
+        float: left !important; 
+        z-index: 99999999 !important; 
+        .box-shadow(0 2px 2px #d8f5f5);
+        li.sel_query {
+            margin-left:2px;
+            position:relative;
+            input {
+                width:100%;
+                padding-right: 24px;
+                border: 1px solid #ddd !important;
+            }
+            i {
+                position: absolute;
+                top:10px;
+                right:22px;
+            }
+        }
+    }
+}
diff --git a/src/static/css/system_config.less b/src/static/css/system_config.less
new file mode 100644
index 0000000..2c045c1
--- /dev/null
+++ b/src/static/css/system_config.less
@@ -0,0 +1,125 @@
+@import "./base.less";
+
+.system_cfg {
+    color: #666666 !important;
+    .panel-default {
+        margin:0px;
+        border-radius: 0px;
+        border-top: none;
+     
+    }
+
+    div.form {
+        padding-left:25px;
+        padding-top:0px;
+        margin-top:-25px;
+    }
+    
+    div.panel-heading.collapse_heading {
+        border-bottom: 0px;
+    }
+
+    div.panel-heading {
+        background-color: rgba(241, 246, 246, 1);
+        height:36px;
+        border-radius:0px;
+        padding:7px 5px;
+
+        label {
+            position: relative;
+            color: #999999;
+            font-size: 12px;
+            min-width: 170px;
+        }
+
+        label:nth-child(1) {
+            font-size:13px;
+            font-weight: 400;
+            
+        }
+        label:nth-child(3) {
+            margin-left:75px !important;
+        }
+        img {
+            margin-left:125px;
+            height: 23px;
+            width: auto;
+            cursor:pointer;
+        }
+    }
+
+    .save_btn {
+        margin-top: 25px;
+    }
+    
+    .add_btn{
+        float: right;
+        
+    }
+
+
+
+
+    table.system_cfg_frm {
+        > tbody > tr > td > div {
+            display:block;
+            float:left;
+            margin-right: 25px;
+            position: relative;
+            span {
+                display:block;
+                float:left;
+                margin-left:45px;
+                margin-top:6px;
+            }
+            span.second_level {
+                margin-left:2px !important;
+            }
+            label {
+                display:block;
+                float:left;
+                height: 100%;
+                margin:8px 5px;
+                font-size: 12px;
+                min-width: 108px;
+                margin-top:14px;
+                input {
+                    width:111px !important;
+                    min-width:0px !important;
+                    font-size:12px;
+                    height:15px;
+                }
+                input:disabled {
+                    color: #dddddd;
+                    font-weight:400;
+                }
+            }
+            label.error {
+                color: red;
+            }
+            img {
+                height: 23px;
+                width: auto;
+                cursor:pointer;
+            }
+        }
+
+        > tbody > tr {
+            height: 35px;  
+            > td{
+                font-size: 13px;
+                height: 35px;  
+                padding: 0px 8px;
+                color: #999999;
+                vertical-align: inherit;
+            }
+            
+        }
+
+        > tbody > tr > td:nth-child(1) {
+            width: 240px !important;
+            line-height: 38px;
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/static/css/templates_center.less b/src/static/css/templates_center.less
new file mode 100644
index 0000000..9b440d2
--- /dev/null
+++ b/src/static/css/templates_center.less
@@ -0,0 +1,22 @@
+@import "./base.less";
+
+ul.ul-tree.templates_list {
+    margin: 15px 25px;
+    li {
+        border: none !important;
+        padding-left:38px;
+        img {
+            margin-top:0px;
+        }
+        font-size: 12px;
+        overflow:auto;
+        height:auto !important;
+    }
+}
+
+div.containr_header {
+    background: #f1f6f6;
+    padding:6px 0px;
+    color: #39c2ba;
+    border-bottom: 1px solid #dddddd;
+}
diff --git a/src/static/css/todos.less b/src/static/css/todos.less
new file mode 100644
index 0000000..ebc4f1e
--- /dev/null
+++ b/src/static/css/todos.less
@@ -0,0 +1,25 @@
+@import "./base.less";
+
+.todos_total {
+    position:relative;
+    i {
+        position: absolute;
+        left: 26px;
+    }
+}
+
+div.pop_panel div.heading.creat_bill_heading {
+    background: #20b4aa;
+    height: 52px !important;
+    color: #fff;
+    line-height: 52px;
+    text-align: center;
+    font-size: 18px;   
+}
+
+div.pop_panel div.body {
+    padding-top:25px;
+    height:90%;
+    overflow-y:auto !important;
+    overflow-x: hidden;
+}
\ No newline at end of file
diff --git a/src/static/css/travel_expense.less b/src/static/css/travel_expense.less
new file mode 100644
index 0000000..0a4814c
--- /dev/null
+++ b/src/static/css/travel_expense.less
@@ -0,0 +1,1069 @@
+@import "./base.less";
+*{
+    margin: 0;
+    padding: 0;
+}
+
+div.travel_expense {
+    position:relative;
+     div.page-title {
+        float:left;
+        position:absolute;
+        top:12px;
+        margin-left:10px;
+        padding:3px 5px;
+        border-bottom:2px solid rgba(9, 180, 171, 1);
+    }
+    .main_choose{
+        display: flex;
+        justify-content: flex-start;
+        margin: 0;
+        margin-top: 4px;
+        height: 30px;
+        li{
+            list-style-type: none;
+            padding-left: 15px;
+            padding-right: 15px;
+            margin-right: 10px;
+            text-align: center;
+            line-height: 30px;
+            cursor: pointer;
+            border-bottom: 1px solid @font-color;
+        }
+        .main_active{
+            border-bottom-width: 2px;
+        }
+    }
+}
+
+.fxinput{
+    position: relative;
+    width: 80% !important;
+    float: left;
+}
+
+.fxtitle{
+    text-align: center;
+    height:40px;
+    line-height: 40px;
+    padding-left: 25px;
+    padding-right: 20px;
+}
+
+.selectul{
+    position: relative;
+    width:100px;
+}
+
+.showfx{
+    width: 100%;
+    height: 67px;
+    line-height: 20px;
+    padding-left: 10px;
+    list-style: none;
+    position: absolute;
+    top:28px;
+    overflow: auto;
+    background: #fff;
+    border:1px solid #E0E0E0;
+    z-index: 1;
+}
+
+
+.fxclass{
+    position: absolute;
+    right: 0px;
+    top: 4px;
+    font-size: 14px;
+    text-align: center;
+    display: inline-block;
+    width: 20%;
+}
+
+.fxspan{
+    border: 1px dashed @default-color;
+    height:28px;
+    line-height: 28px;
+    margin-bottom:40px;
+    margin-left: 10px;
+    text-align: center;
+    padding: 0;
+    border-radius: 5px;
+}
+.sys_fxspan{
+    border: 1px dashed @default-color;
+    height:28px;
+    line-height: 28px;
+    margin-bottom:10px;
+    margin-top: 10px;
+    margin-left: 10px;
+    text-align: center;
+    padding: 5px;
+    border-radius: 5px;
+}
+.sys_text{
+    width: 100%;
+}
+.fxresult{
+    border: 2px solid #e0e0e0;
+    height:50px;
+    line-height: 50px;
+    margin: 5px;
+    text-align: center;
+    margin-left: 10px;
+}
+.overhidden{
+    width:180px; 
+    white-space:nowrap;
+    text-overflow:ellipsis;
+    -o-text-overflow:ellipsis;
+    overflow: hidden;
+}
+
+.savefx{
+    text-align: center;
+    margin-top: 10px;
+}
+.sys_savefx{
+    text-align: center;
+    margin-top: 10px;
+    margin-bottom: 10px;
+}
+.savebtn{
+    border: 1px solid @default-color;
+}
+/* 去掉默认样式,设置新的样式 */
+.myselect{
+//  display:block;
+    width:110px;
+    height:28px;
+    line-height: 28px;
+    box-sizing:border-box;
+    background: url(../img/arrow.png) no-repeat scroll right center transparent;
+    border:1px solid #dfdfdf;
+    outline:none;
+    padding:0 5px;
+    font-size:14px;
+    position:relative;
+    appearance:none;
+    -moz-appearance:none; /* Firefox */
+    -webkit-appearance:none; /* Safari 和 Chrome */
+}
+.myselect option{
+    color:#222;
+     appearance:none;
+    -moz-appearance:none; /* Firefox */
+    -webkit-appearance:none; /* Safari 和 Chrome */
+}
+.myselect option:hover{
+//  color:#fff;
+    background:#fff
+}
+.myselect option:checked{
+    background:#fff;
+//  color:#fff; 
+}
+
+.wait{
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0,0,0,0.1);
+    text-align: center;
+    padding-top: 23%;
+//  top: 49%;
+//  left: 49%;
+}
+
+.deleteelment{
+    width:12px;
+    height:12px;
+}
+
+.unfoldelment{
+    width:10px;
+    height:10px;
+    margin: 3px;
+    margin-right: 10px;
+}
+
+.addbtn{
+    border: none;
+}
+
+.expense_titles{
+    height: 600px;
+    overflow: auto;
+    button{
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+}
+
+.system_titles{
+    height: 600px;
+    overflow: auto;
+    button{
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+}
+
+div.condition_search {
+    border: 1px solid rgba(228, 228, 228, 1);
+    margin-top:4px;
+    position:relative;
+    
+    .table-heading {
+        float:left;
+        width:100%;
+//      position:relative;
+        span {
+            position: absolute;
+            left:12px;
+            top:14px;
+            padding:0px 8px;
+            border-bottom:2px solid @default-color;
+            font-size:12px;
+        }
+        
+    }
+
+    div.width-heading {
+        margin-top:38px;
+    }
+    
+   
+    div.condition_search_header, div.condition_search_footer {
+        height: 29px;
+        background: #f1f6f6;
+        label {
+            font-size:12px;
+            line-height:29px;
+        }
+        div.first, label.first{
+            float:left;
+            padding-left:4px;
+            margin-bottom:0;
+            button.btn-action {
+                margin-bottom:2px;
+            }
+
+            > span {
+                cursor:pointer;
+                margin:0px 5px;
+                font-size:12px;
+                img {
+                    width:20px;
+                }
+            }
+            
+        }
+        label.second{
+            font-weight:400;
+            > span {
+                cursor:pointer;
+                margin:0px 5px;
+                font-size:12px;
+                img {
+                    width:16px;
+                }
+                input {
+                    width:25px;
+                    min-width:25px;
+                    min-height:22px!important;
+                    height:22px !important;
+                    
+                }
+                a{
+                    text-decoration: none;
+                }
+            }
+            float:right;
+            padding-right:4px;
+        }
+    }
+
+    div.condition_search_footer {
+        background: #fff;
+        border-top: 1px solid #ddd;
+        padding-top:2px;
+        select {
+            height:22px;
+        }
+        label.first {
+            font-weight:400;
+            span {
+                input {
+                    width:50px;
+                    min-width:50px;
+                }
+            }
+        }
+    }
+
+    div.search_item {
+        width:100%;
+        div.search_column_button{
+            position:relative;
+            display:inline-block;
+            padding-top:25px;
+            margin:5px;
+            vertical-align: middle;
+        }
+        div.search_column {
+            position:relative;
+            display:inline-block;
+            padding-top:25px;
+            margin:5px;
+            vertical-align: middle;
+            min-width:214px;
+            select{
+                width:200px;    
+            }
+            
+            span {
+                select{
+                    width:130px !important;
+                    min-width:0px !important;
+                    height:25px;
+                }
+                >input.text_input{
+                    width: 215px;
+                }
+                >input.search_ifd {
+                     width:130px !important;
+                     min-width:0px !important;
+                     height:25px;
+                 }
+
+                > input{
+                    width:135px;
+                }
+
+            }
+
+            label {
+                position:absolute;
+                left:0px;
+                top:0px;
+                font-size:10px;
+            }
+                        
+            .selectul{
+                position: relative;
+                
+                .select-container{
+                    line-height: 25px;
+                }
+                
+                .showul{
+                   width:214px;
+                   height:100px;
+                   background:#fff; 
+                   border:1px solid #ccc;
+                   position: absolute;
+                   z-index: 999999999;
+                   overflow: auto;
+                }
+                
+                .suffix{
+                    top:0;
+                }
+            }
+        }
+    }
+
+    div.task_statics {
+        overflow: hidden;
+        height:120px;
+        div.center {
+            float:left;
+            position:absolute;
+            left:-25%;
+        }
+        div.task_card {
+            width:50%;
+            margin:0px auto;
+            > div.budget_card{
+                cursor: pointer;
+                * {
+                    cursor: pointer;
+                }
+                
+//              background: rgba(156, 156, 210, 1);
+            }
+            > div.request_card{
+                cursor: pointer;
+                * {
+                    cursor: pointer;
+                }
+//              background: #e7ca6b;
+            }
+            > div.rebuise_card{
+                cursor: pointer;
+                * {
+                    cursor: pointer;
+                }
+//              background: #7ca6d6;
+                img {
+                    width:45px;
+                    margin-top:2px;
+                }
+            }
+            img {
+                width:35px;
+                margin-top:5px;
+            }
+            > div {
+                max-width:210px;
+                padding:10px 20px;
+                margin:25px;
+//              border:1px solid #ddd;
+                height: 75px;
+                > div.col-md-6 {
+                    height:100%;
+                    label {
+                        display:block;
+                        height:50%;
+                        text-align: right;
+                        margin:0px;
+                        line-height:20px;
+                        font-size:12px;
+                        color:#124601;
+                    }
+                    img{
+                            margin-left: 28px;
+                    }
+                }
+                
+            }
+        }
+    }
+    
+}
+
+div.table-content {
+    padding:1px;
+    table.table_travel_expense {
+        position: relative;
+        top: 2px;
+        table-layout: fixed;
+        border: 1px solid #ddd;
+        margin:0px;
+        thead th {
+            color: #758aa5;
+            font-size:12px;
+            text-align: center;
+            border: 1px solid #ddd;
+            font-weight: normal;
+//          overflow: hidden;
+            text-overflow:ellipsis ;            
+        }
+        thead .mdcode_search{
+            padding-left: 42%;
+            height: 36px;
+        }
+        tr td {
+            border: 1px solid #ddd;
+            font-size:12px;
+            padding: 0;
+            vertical-align: middle;
+            text-align: center;
+        }
+        .ellipsis_td{
+            overflow: hidden;
+            text-overflow:ellipsis ;
+        }
+        tr.odd {
+            background: #ffffff;
+            height:30px;
+        }
+
+        tr.even{
+            background: #f1f6f6;
+            height:30px;
+        }
+    }
+}
+
+div.drop_down_sel {
+    display:block;
+    overflow:auto;
+    overflow-x: hidden;
+    position:absolute;
+    max-height:225px;
+    min-height: 110px;
+    background: #fff;
+    border: 1px solid #ddd;
+    
+    
+    ul {
+        list-style-type: none;
+        margin:0px;
+        padding:0px;
+        width:240px;
+        background: #fff;
+        li{
+            margin:0px;
+            padding:0px;
+            display:block;
+            width:auto;
+            width: 230px;
+            line-height:33px;
+            height:34px;
+            position: relative;
+            text-align:left;
+            background:#fff;
+            z-index: 99999999999999;
+            
+            div{
+                float:left;
+                input {
+                    margin: 4px 6px;
+                } 
+            }
+            >div {
+                position: absolute;
+                left:0px;
+            }
+        }
+    }
+}
+
+div.bg-modal {
+    top:0px;
+    left:0px;
+    position:fixed;
+    width:100%;
+    height:100%;
+    background: rgba(255, 255, 255, 0.8);
+    z-index:9999;
+}
+div.pop_panel_formula{
+    width:70%;
+    height:60%;
+    margin:12px auto;
+    margin-top:85px;
+    border: 1px solid #ddd;
+    z-index:9999999;
+    position: relative;
+    background:#fff;
+    overflow:hidden;
+    .box-shadow(0 1px 10px rgba(20,20,20,0.5));
+}
+div.pop_panel {
+    width:85%;
+    height:90%;
+    margin:12px auto;
+    margin-top:85px;
+    border: 1px solid #ddd;
+    z-index:9999999;
+    position: relative;
+    background:#fff;
+    overflow:hidden;
+    .box-shadow(0 1px 10px rgba(20,20,20,0.5));
+    div.heading {
+        background:#f3f7f7;
+        height:69px !important; 
+        position:relative;
+        ul {
+            margin: 0px;
+            padding:0px;
+            list-style: none;
+            float:left; 
+            bottom:0px;
+            position: absolute;
+            padding: 0px 10px;
+            cursor: pointer;
+            li {
+                float:left;  
+                display:block;
+                padding:18px 5px;
+                font-size:14px;
+                color: #39beb5;
+                margin: 0px 15px;
+                font-weight:400;
+            }
+            li.active {
+                border-bottom:2px solid #39beb5;
+            }
+        }
+
+        .close {
+            position:absolute;
+            right:12px;
+            top:12px;
+            font-size:20px;
+        }
+        .close_create{
+            position:absolute;
+            right:12px;
+            top:7px;
+            font-size:20px;
+        }
+    }
+
+    div.body {
+        padding:25px;
+        padding-top: 70px;
+        position:relative;
+        
+        //去掉下划线后,调整样式
+        .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-xs-1, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9{
+            min-height: 0;
+        }
+        div.label {
+            display:block;
+            font-size:14px;
+            text-align: left;
+            color: #797979;
+            padding:0px;
+            margin-bottom: 12px;
+        }
+
+        div.value {
+            display:block;
+            font-size:14px;
+            text-align: left;
+            padding:0px;
+            margin-bottom: 12px;
+            border-bottom:1px solid #dddddd;
+        }
+
+        div.tool_icon {
+            position: absolute;
+            top:5px;
+            right:5px;
+            width: 100%;
+            .order_number{
+                float: left;
+                margin-left: 2%;
+            }
+            .allow_commit{
+             color: #337ab7;   
+            }
+            .forbidden_commit{
+                color: #999;
+            }
+            div {
+                float:right;
+                padding:12px;
+                i {
+                    color: rgb(57, 190, 181);
+                }
+            }
+        }
+    }
+    
+}
+
+
+
+
+div.bill_detail_edit{
+    div.pop_panel{
+        padding-top:69px;
+        
+        div.heading{
+            margin-top:-69px;
+        }
+
+        div.btn-zone-center {
+           padding-bottom: 40px;
+        }
+    }
+}
+
+
+div.bill_detail_pop{
+    select, input[type="text"], textarea{
+        border: none !important;
+        background:#fff !important;
+        -webkit-appearance: none;
+        -moz-appearance: none;
+        text-indent: 1px;
+        text-overflow: '';
+        border: 1px solid #dfdfdf;
+    }
+    div.pop_panel{
+        padding-top:69px;
+        padding-bottom:0px;
+        div.heading{
+            margin-top:-69px;
+        }
+
+        div.btn-zone-center {
+            display:none;
+        }
+    }
+    div.body{
+        div.form_container{
+            div.sub_form{
+                div.sub_frm_tlbar{
+                    display: none;
+                }
+            }
+            .radio{
+                overflow: visible;
+            }
+        }
+        div.form_content{
+            div.user_element{
+                a.btn_user_el_add_user{
+                    display: none;
+                }
+            }
+            .checkbox_container{
+                .cb_label{
+                    position: static;
+                }
+            }
+            .checkbox{
+                .checkbox_container{
+                    display: block;
+                }
+            }
+        }
+        .fa-remove:before, .fa-close:before, .fa-times:before {
+            content: "";
+        }
+    }
+}
+
+
+
+div.expense_strd_content{
+    height:auto;
+    padding-top:20px;
+    div.user_element {
+        text-align: left;
+        > span {
+            margin-left: 6px;
+            width: 100%;
+        }
+        span.user_name {
+            border: 1px solid #ddd;
+            padding: 2px 5px;
+            width: auto;
+            background:@default-color;
+            color: #fff;
+        }
+
+        label {
+        }
+
+        a.btn_user_el_add_user {
+            font-size:12px;
+        }
+        
+    }
+    //组织机构
+    div.org_select_popup_standard{
+        .box-shadow(0 1px 10px rgba(20, 20, 20, 0.5));
+        width:300px;
+    //  height:320px;
+        background:#fff;
+          position:absolute;
+          left: 15%;
+        z-index:9999999999999999999999 !important;
+        border:1px solid #ddd;
+        padding-top:22px;
+        padding-bottom: 25px;
+        div.btn_cls {
+            border-bottom: 1px dashed #ddd;
+            padding-left:4px;
+            margin-top:-22px !important;
+        }
+        div.org_sel_form{
+            width:100%;
+            height:90% !important;
+            .main_close{
+                margin-left: 250px;
+            }
+            .org_sel_form_close{
+                height: 30px;
+                line-height: 30px;
+            }
+    
+            div.right{
+                width:100%;
+                min-height:100%;
+                height:100%;
+               div.right_area{
+                    width:100%; 
+                    min-height:100%;
+                    height:100%;
+                    overflow:auto;
+                    padding-top: 26px !important;
+                    .selected_personnel{
+                            background-color:@default-color;
+                        }
+                    .clear_selected_users{
+                        margin-right: 5px;
+                    }
+                   .area_title {
+                        height: 25px;
+                        margin: 0px 4px;
+                        line-height: 25px;
+                        border-bottom:1px solid #ddd;
+                        margin-top:-26px;
+                        label {
+                            font-size:12px;
+                            padding:0px 2px;
+                            color:white;
+//                          border-left: 2px solid #2f796e;
+                        }
+                        i{
+                            color:white;
+                        }
+                        span {
+                            input {
+                                margin-top:1px;
+                                height:22px;
+                                line-height: 22px;
+                                min-height: 22px !important;
+                                float:right;
+                            }
+                        }
+                    }
+    
+                    .area_body { 
+                        overflow:hidden;
+                        height:100%;
+                        width:100%;
+                        div.area_content{
+                            display: flex;
+                            justify-content: center;
+                            margin-top: 10px;
+                        }
+                        ul {
+                            a.hr_name{
+                                font-size:12px;
+                                display: inline-block;
+                                width: 45px;
+                                height: 20px;
+                                text-align: center;
+                                line-height: 20px;
+                                border: 1px solid #20b4aa;
+                                background-color: #c1e4e7;
+                                color: #666969;
+                            }
+                            .hr_name_addbtn{
+                                width: 18px;
+                                height: 20px;
+                                border: none;
+                                color: white;
+                                text-align: center;
+                                border:1px solid #20b4aa;
+                                padding: 0;
+                                background-color: #20b4aa;
+                            }
+                            list-style: none;
+                            padding-left:0px;
+                             li {
+                                padding-left:15px;
+                                margin-bottom: 5px;
+                                div{
+                                    height: 20px;
+                                    display: flex;
+                                    justify-content: flex-start;
+                                }
+                            }
+                        }
+                    }
+               }
+            }
+    
+    
+    
+            div.hr_tree {
+                overflow:auto;
+                height:100%;
+            }
+            div.left{
+    //          margin-left:-100%;
+                float:left;
+                min-height:100%;
+                width:160px;
+                border-right:1px solid #ddd;
+                margin-left: 0;
+            }
+            div.right{
+                min-height:100%;
+                width:105px;
+                float:left;
+                 margin-left: 0;
+    //          margin-left:20px;
+    //          border-left:1px solid #ddd;
+            }
+        }
+    }
+    div.expense_standard {
+        background: #fafafa;
+        padding: 0px;
+        div.row {
+            border:none !important;
+            background: #fff;
+        }
+        div.row.first{
+            margin-top: 10px;
+        }
+        div.second{
+            height:40px;
+            margin-top: 10px;
+            line-height: 40px;
+        }
+        div.row.third{
+            padding-bottom: 10px;
+            .box-shadow(0px 2px 1px #999);
+        }
+        img.expense_standard_filter {
+            width:16.22px;
+            height:16.22px;
+            text-align: right;
+        }
+        .expense_standard_radio{
+            vertical-align: middle;
+            margin: 0;
+        }
+        div.table-content {
+            margin:20px 45px;
+            
+            .showtype{
+                list-style: none;
+                line-height:28px;
+                background:#fff;
+                max-height: 200px;
+                overflow: auto;
+                width:150px;
+                position: absolute;
+                z-index: 999999;
+                top:28px;
+                border:1px solid #e0e0e0;
+                vertical-align: middle;
+            }
+            
+            .typeclass{
+                line-height: 28px;
+                padding-left:5px;
+                width:150px;
+                display: inline-block;
+            }
+            
+            .selectclass{
+                position: relative;
+                margin-left:10px;
+                top:1px;
+//              top:-34px;
+            }
+            
+            
+            table.table_travel_expense {
+                top:0px;
+                background: #fff;
+                margin-bottom:10px;
+                .Inverse_icon{
+                    width: 10%;
+                    position: absolute;
+                    right: 0;
+                    top: 7px;
+                    color: #09b4ab;
+                    cursor: pointer;
+                }
+                td {
+                    height:24px;
+                    position: relative;
+                    .rm-title {
+//                      position:absolute;
+                    }
+                    .relation-title{
+                        text-decoration: none;
+                        color: #66757E;
+                        i{
+                            color: #337ab7;
+                        }
+                    }
+                    vertical-align: middle;
+                    input {
+                        min-width:0px !important;
+                        width:100%;
+                    }
+                    select {
+                        min-width:0px !important;
+                        width:100% !important;
+                    }
+                    textarea {
+                        min-width:0px !important;
+                        width:100% !important;
+                    }
+                    a.foldBtn {
+                        position: absolute;
+                        top: 5px;
+                        left: -2px;
+                        background: rgba(255,255,255, 0.2);
+                        z-index: 999;
+                    }
+                }
+
+                td.budget {
+                    padding:0px !important;
+                }
+
+                td.expenseTitle {
+                    background:#f1f6f6;
+                    vertical-align: middle;
+                    text-align: center;
+                }
+            }
+        }
+        .filter{
+            text-align: left;
+            label {
+                padding-left:15px;
+                font-weight:normal;
+
+            }
+            .btnbtn{
+                padding:3px 7px;
+            }
+        }
+    }
+    .btn-action {
+        height: 28px;
+        padding: 0px 15px;
+        line-height: 28px;
+    }
+    select {
+        min-width:100px;
+    }
+}
+
+div.left-expense-title {
+    padding-top:34px;
+    position: fixed;
+    width: 280px;
+    height:90%;
+    div.containr_header {
+        margin-top:-33px;
+        padding: 0;
+        height: 23px;
+        span{
+            width: 49%;
+            text-align: center;
+            display: inline-block;
+            height: 100%;
+            border-bottom:1px solid @font-color;
+            cursor: pointer;
+        }
+         .type_strand{
+        border-bottom:2px solid @font-color;
+    }
+    }
+    button.btn-elb {
+        width:100% !important;
+    }
+}
+
+
+
diff --git a/src/static/css/workflow.less b/src/static/css/workflow.less
new file mode 100644
index 0000000..6993705
--- /dev/null
+++ b/src/static/css/workflow.less
@@ -0,0 +1,93 @@
+@import "./base.less";
+@flowheight1:120px;
+@flowheight2:400px;
+.flowtitle{
+    text-align: center;
+}
+#workflowcontent{
+//  padding-left:260px;
+//  padding-right: 260PX;
+    display: flex;
+    justify-content: space-around;
+    flex-wrap: nowrap;
+    i{
+        color:rgba(255,0,0,0.4);
+        font-size: 28px;
+    }
+    .back_btn{
+        width: 1200px;
+        margin-top: 200px;
+        padding: 0;
+        display: flex;
+        justify-content: center;
+    }
+    .workflow_part{
+        display: flex;
+        justify-content: flex-start;
+        flex-wrap: nowrap;
+        opacity: 0.8;
+        vertical-align: middle;
+        width:@flowheight2;
+//      height:@flowheight1;
+        line-height:28px;
+//      border:2px solid @default-color;
+        border-radius: 10px;
+        margin: 20px;
+        position: relative;
+//      background:rgba(240,240,240,0.5);
+        .workflow_btn img{
+            width: 250px;
+        }
+        .part{
+            width: 150px;
+            padding-top: 93px;
+            display: flex;
+            align-items: flex-start;
+            flex-direction: column;
+            justify-content:flex-start;
+            .btn_class{
+                float: left;
+            }
+            p{
+                margin: 0;
+                margin-left:10px ;
+            }
+            .kongbai{
+                width: 100%;
+                height: 20px;
+            }
+        }
+        .workflow_type{
+            margin-top: 10px;
+            padding-left: 50px;
+            color: @default-color;
+            font-size: 20px;
+        }
+//      .part{
+//          width:1196px;
+//          height:116px;
+//          position: absolute;
+//          top:0;
+//          left:0;
+//          background:#fff;
+//          border-radius: 10px;
+//          text-align: left;
+//          
+//          p{
+//              width:800px;
+//              height:118px;
+//              padding-left:100px;
+//              line-height: 118px;
+//              font-size: 20px;
+//              display: inline-block;
+//              color:@default-color;
+//              
+//              span{
+//                  color:rgba(255,0,0,0.8);
+//              }
+//          }
+//      }        
+    }
+    
+}
+
diff --git a/src/static/img/ad.jpg b/src/static/img/ad.jpg
new file mode 100644
index 0000000..896bcd2
--- /dev/null
+++ b/src/static/img/ad.jpg
Binary files differ
diff --git a/src/static/img/addelement.png b/src/static/img/addelement.png
new file mode 100644
index 0000000..271b66f
--- /dev/null
+++ b/src/static/img/addelement.png
Binary files differ
diff --git a/src/static/img/arrow.png b/src/static/img/arrow.png
new file mode 100644
index 0000000..7421a34
--- /dev/null
+++ b/src/static/img/arrow.png
Binary files differ
diff --git a/src/static/img/bs5.jpg b/src/static/img/bs5.jpg
new file mode 100644
index 0000000..90df642
--- /dev/null
+++ b/src/static/img/bs5.jpg
Binary files differ
diff --git a/src/static/img/bs6.jpg b/src/static/img/bs6.jpg
new file mode 100644
index 0000000..dd8bb15
--- /dev/null
+++ b/src/static/img/bs6.jpg
Binary files differ
diff --git a/src/static/img/bs7.jpg b/src/static/img/bs7.jpg
new file mode 100644
index 0000000..4c5b0eb
--- /dev/null
+++ b/src/static/img/bs7.jpg
Binary files differ
diff --git a/src/static/img/bs8.jpg b/src/static/img/bs8.jpg
new file mode 100644
index 0000000..af3c900
--- /dev/null
+++ b/src/static/img/bs8.jpg
Binary files differ
diff --git a/src/static/img/bs9.jpg b/src/static/img/bs9.jpg
new file mode 100644
index 0000000..f15d8f1
--- /dev/null
+++ b/src/static/img/bs9.jpg
Binary files differ
diff --git a/src/static/img/budget_card.png b/src/static/img/budget_card.png
new file mode 100644
index 0000000..d1488b1
--- /dev/null
+++ b/src/static/img/budget_card.png
Binary files differ
diff --git a/src/static/img/budget_settings_guid.jpg b/src/static/img/budget_settings_guid.jpg
new file mode 100644
index 0000000..9cc0b76
--- /dev/null
+++ b/src/static/img/budget_settings_guid.jpg
Binary files differ
diff --git a/src/static/img/business-textbook.jpg b/src/static/img/business-textbook.jpg
new file mode 100644
index 0000000..ecad7b5
--- /dev/null
+++ b/src/static/img/business-textbook.jpg
Binary files differ
diff --git a/src/static/img/business3.png b/src/static/img/business3.png
new file mode 100644
index 0000000..cca7d0a
--- /dev/null
+++ b/src/static/img/business3.png
Binary files differ
diff --git a/src/static/img/calculate.png b/src/static/img/calculate.png
new file mode 100644
index 0000000..9ecd9a6
--- /dev/null
+++ b/src/static/img/calculate.png
Binary files differ
diff --git a/src/static/img/calendar.png b/src/static/img/calendar.png
new file mode 100644
index 0000000..cb0e76a
--- /dev/null
+++ b/src/static/img/calendar.png
Binary files differ
diff --git a/src/static/img/cfg_center_1.png b/src/static/img/cfg_center_1.png
new file mode 100644
index 0000000..2b975f2
--- /dev/null
+++ b/src/static/img/cfg_center_1.png
Binary files differ
diff --git a/src/static/img/cfg_center_2.png b/src/static/img/cfg_center_2.png
new file mode 100644
index 0000000..ed0817d
--- /dev/null
+++ b/src/static/img/cfg_center_2.png
Binary files differ
diff --git a/src/static/img/cfg_center_3.png b/src/static/img/cfg_center_3.png
new file mode 100644
index 0000000..3684c1c
--- /dev/null
+++ b/src/static/img/cfg_center_3.png
Binary files differ
diff --git a/src/static/img/cfg_center_4.png b/src/static/img/cfg_center_4.png
new file mode 100644
index 0000000..3bf4571
--- /dev/null
+++ b/src/static/img/cfg_center_4.png
Binary files differ
diff --git a/src/static/img/cfg_center_5.png b/src/static/img/cfg_center_5.png
new file mode 100644
index 0000000..681cc9d
--- /dev/null
+++ b/src/static/img/cfg_center_5.png
Binary files differ
diff --git a/src/static/img/cfg_center_6.png b/src/static/img/cfg_center_6.png
new file mode 100644
index 0000000..19e9b9b
--- /dev/null
+++ b/src/static/img/cfg_center_6.png
Binary files differ
diff --git a/src/static/img/cfg_center_7.png b/src/static/img/cfg_center_7.png
new file mode 100644
index 0000000..b1f89e7
--- /dev/null
+++ b/src/static/img/cfg_center_7.png
Binary files differ
diff --git a/src/static/img/close.png b/src/static/img/close.png
new file mode 100644
index 0000000..c0bd7af
--- /dev/null
+++ b/src/static/img/close.png
Binary files differ
diff --git a/src/static/img/close2.png b/src/static/img/close2.png
new file mode 100644
index 0000000..a2e71c1
--- /dev/null
+++ b/src/static/img/close2.png
Binary files differ
diff --git a/src/static/img/continue.png b/src/static/img/continue.png
new file mode 100644
index 0000000..887dc1e
--- /dev/null
+++ b/src/static/img/continue.png
Binary files differ
diff --git a/src/static/img/create_form.png b/src/static/img/create_form.png
new file mode 100644
index 0000000..10ae495
--- /dev/null
+++ b/src/static/img/create_form.png
Binary files differ
diff --git a/src/static/img/createorder.png b/src/static/img/createorder.png
new file mode 100644
index 0000000..3c0e40a
--- /dev/null
+++ b/src/static/img/createorder.png
Binary files differ
diff --git a/src/static/img/createorder.png.BASE.png b/src/static/img/createorder.png.BASE.png
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/static/img/createorder.png.BASE.png
diff --git a/src/static/img/createorder.png.LOCAL.png b/src/static/img/createorder.png.LOCAL.png
new file mode 100644
index 0000000..bc5bb6e
--- /dev/null
+++ b/src/static/img/createorder.png.LOCAL.png
Binary files differ
diff --git a/src/static/img/createorder.png.REMOTE.png b/src/static/img/createorder.png.REMOTE.png
new file mode 100644
index 0000000..3c0e40a
--- /dev/null
+++ b/src/static/img/createorder.png.REMOTE.png
Binary files differ
diff --git a/src/static/img/delete.png b/src/static/img/delete.png
new file mode 100644
index 0000000..9f25f3d
--- /dev/null
+++ b/src/static/img/delete.png
Binary files differ
diff --git a/src/static/img/deleteelement.png b/src/static/img/deleteelement.png
new file mode 100644
index 0000000..8926b8a
--- /dev/null
+++ b/src/static/img/deleteelement.png
Binary files differ
diff --git a/src/static/img/doc.png b/src/static/img/doc.png
new file mode 100644
index 0000000..9cfb231
--- /dev/null
+++ b/src/static/img/doc.png
Binary files differ
diff --git a/src/static/img/edit_saved_templates.jpg b/src/static/img/edit_saved_templates.jpg
new file mode 100644
index 0000000..f9885b0
--- /dev/null
+++ b/src/static/img/edit_saved_templates.jpg
Binary files differ
diff --git a/src/static/img/folder.png b/src/static/img/folder.png
new file mode 100644
index 0000000..c6a149f
--- /dev/null
+++ b/src/static/img/folder.png
Binary files differ
diff --git a/src/static/img/form_created.png b/src/static/img/form_created.png
new file mode 100644
index 0000000..3d1b78a
--- /dev/null
+++ b/src/static/img/form_created.png
Binary files differ
diff --git a/src/static/img/form_default.png b/src/static/img/form_default.png
new file mode 100644
index 0000000..521ed50
--- /dev/null
+++ b/src/static/img/form_default.png
Binary files differ
diff --git a/src/static/img/guide.png b/src/static/img/guide.png
new file mode 100644
index 0000000..00b2108
--- /dev/null
+++ b/src/static/img/guide.png
Binary files differ
diff --git a/src/static/img/hero.png b/src/static/img/hero.png
new file mode 100644
index 0000000..bf978ad
--- /dev/null
+++ b/src/static/img/hero.png
Binary files differ
diff --git a/src/static/img/hero_guide.png b/src/static/img/hero_guide.png
new file mode 100644
index 0000000..8539ad1
--- /dev/null
+++ b/src/static/img/hero_guide.png
Binary files differ
diff --git a/src/static/img/heroico.ico b/src/static/img/heroico.ico
new file mode 100644
index 0000000..cf9f8c1
--- /dev/null
+++ b/src/static/img/heroico.ico
Binary files differ
diff --git a/src/static/img/list.png b/src/static/img/list.png
new file mode 100644
index 0000000..a0fbfc4
--- /dev/null
+++ b/src/static/img/list.png
Binary files differ
diff --git a/src/static/img/loading.gif b/src/static/img/loading.gif
new file mode 100644
index 0000000..a17371e
--- /dev/null
+++ b/src/static/img/loading.gif
Binary files differ
diff --git a/src/static/img/more_collapse.png b/src/static/img/more_collapse.png
new file mode 100644
index 0000000..57ae876
--- /dev/null
+++ b/src/static/img/more_collapse.png
Binary files differ
diff --git a/src/static/img/next_step.jpg b/src/static/img/next_step.jpg
new file mode 100644
index 0000000..39cf3e0
--- /dev/null
+++ b/src/static/img/next_step.jpg
Binary files differ
diff --git a/src/static/img/no.png b/src/static/img/no.png
new file mode 100644
index 0000000..e8a9157
--- /dev/null
+++ b/src/static/img/no.png
Binary files differ
diff --git a/src/static/img/ordering_1.png b/src/static/img/ordering_1.png
new file mode 100644
index 0000000..252c960
--- /dev/null
+++ b/src/static/img/ordering_1.png
Binary files differ
diff --git a/src/static/img/ordering_2.png b/src/static/img/ordering_2.png
new file mode 100644
index 0000000..ed59a7e
--- /dev/null
+++ b/src/static/img/ordering_2.png
Binary files differ
diff --git a/src/static/img/page.png b/src/static/img/page.png
new file mode 100644
index 0000000..3c13f43
--- /dev/null
+++ b/src/static/img/page.png
Binary files differ
diff --git a/src/static/img/pic.png b/src/static/img/pic.png
new file mode 100644
index 0000000..c00ac16
--- /dev/null
+++ b/src/static/img/pic.png
Binary files differ
diff --git a/src/static/img/query.png b/src/static/img/query.png
new file mode 100644
index 0000000..79a8026
--- /dev/null
+++ b/src/static/img/query.png
Binary files differ
diff --git a/src/static/img/rebuise_card.png b/src/static/img/rebuise_card.png
new file mode 100644
index 0000000..c5da74b
--- /dev/null
+++ b/src/static/img/rebuise_card.png
Binary files differ
diff --git a/src/static/img/reimbursement_settings_guid.jpg b/src/static/img/reimbursement_settings_guid.jpg
new file mode 100644
index 0000000..01aaa20
--- /dev/null
+++ b/src/static/img/reimbursement_settings_guid.jpg
Binary files differ
diff --git a/src/static/img/reimbursement_standard_settings_guid.jpg b/src/static/img/reimbursement_standard_settings_guid.jpg
new file mode 100644
index 0000000..9abbf9d
--- /dev/null
+++ b/src/static/img/reimbursement_standard_settings_guid.jpg
Binary files differ
diff --git a/src/static/img/request_billing_setting_guid.jpg b/src/static/img/request_billing_setting_guid.jpg
new file mode 100644
index 0000000..c548ad0
--- /dev/null
+++ b/src/static/img/request_billing_setting_guid.jpg
Binary files differ
diff --git a/src/static/img/request_card.png b/src/static/img/request_card.png
new file mode 100644
index 0000000..e2215d4
--- /dev/null
+++ b/src/static/img/request_card.png
Binary files differ
diff --git a/src/static/img/search_item.png b/src/static/img/search_item.png
new file mode 100644
index 0000000..f4bcea0
--- /dev/null
+++ b/src/static/img/search_item.png
Binary files differ
diff --git a/src/static/img/switch_off.png b/src/static/img/switch_off.png
new file mode 100644
index 0000000..7523591
--- /dev/null
+++ b/src/static/img/switch_off.png
Binary files differ
diff --git a/src/static/img/switch_on.png b/src/static/img/switch_on.png
new file mode 100644
index 0000000..dcbf856
--- /dev/null
+++ b/src/static/img/switch_on.png
Binary files differ
diff --git a/src/static/img/system_entry.jpg b/src/static/img/system_entry.jpg
new file mode 100644
index 0000000..63f4cdf
--- /dev/null
+++ b/src/static/img/system_entry.jpg
Binary files differ
diff --git a/src/static/img/system_settings.jpg b/src/static/img/system_settings.jpg
new file mode 100644
index 0000000..cdde15d
--- /dev/null
+++ b/src/static/img/system_settings.jpg
Binary files differ
diff --git a/src/static/img/to_do.png b/src/static/img/to_do.png
new file mode 100644
index 0000000..fcb2020
--- /dev/null
+++ b/src/static/img/to_do.png
Binary files differ
diff --git a/src/static/img/travel_expense_del.png b/src/static/img/travel_expense_del.png
new file mode 100644
index 0000000..46a1e35
--- /dev/null
+++ b/src/static/img/travel_expense_del.png
Binary files differ
diff --git a/src/static/img/travel_expense_export.png b/src/static/img/travel_expense_export.png
new file mode 100644
index 0000000..8a2a2de
--- /dev/null
+++ b/src/static/img/travel_expense_export.png
Binary files differ
diff --git a/src/static/img/travel_expense_full.png b/src/static/img/travel_expense_full.png
new file mode 100644
index 0000000..6aa9ae3
--- /dev/null
+++ b/src/static/img/travel_expense_full.png
Binary files differ
diff --git a/src/static/img/travel_expense_import.png b/src/static/img/travel_expense_import.png
new file mode 100644
index 0000000..a25904e
--- /dev/null
+++ b/src/static/img/travel_expense_import.png
Binary files differ
diff --git a/src/static/img/travel_expense_view_content.png b/src/static/img/travel_expense_view_content.png
new file mode 100644
index 0000000..14131b7
--- /dev/null
+++ b/src/static/img/travel_expense_view_content.png
Binary files differ
diff --git a/src/static/img/u6181.png b/src/static/img/u6181.png
new file mode 100644
index 0000000..d845596
--- /dev/null
+++ b/src/static/img/u6181.png
Binary files differ
diff --git a/src/static/img/unfold.png b/src/static/img/unfold.png
new file mode 100644
index 0000000..357f89c
--- /dev/null
+++ b/src/static/img/unfold.png
Binary files differ
diff --git a/src/static/img/update.png b/src/static/img/update.png
new file mode 100644
index 0000000..89122cc
--- /dev/null
+++ b/src/static/img/update.png
Binary files differ
diff --git a/src/static/img/user1.png b/src/static/img/user1.png
new file mode 100644
index 0000000..bd3bd08
--- /dev/null
+++ b/src/static/img/user1.png
Binary files differ
diff --git a/src/static/img/user2.png b/src/static/img/user2.png
new file mode 100644
index 0000000..654553f
--- /dev/null
+++ b/src/static/img/user2.png
Binary files differ
diff --git a/src/static/img/user3.png b/src/static/img/user3.png
new file mode 100644
index 0000000..ecba99a
--- /dev/null
+++ b/src/static/img/user3.png
Binary files differ
diff --git a/src/static/img/user4.png b/src/static/img/user4.png
new file mode 100644
index 0000000..6401285
--- /dev/null
+++ b/src/static/img/user4.png
Binary files differ
diff --git a/src/static/img/workflow_bx.png b/src/static/img/workflow_bx.png
new file mode 100644
index 0000000..6cb6572
--- /dev/null
+++ b/src/static/img/workflow_bx.png
Binary files differ
diff --git a/src/static/img/workflow_sq.png b/src/static/img/workflow_sq.png
new file mode 100644
index 0000000..89b2e85
--- /dev/null
+++ b/src/static/img/workflow_sq.png
Binary files differ
diff --git a/src/static/img/workflow_ys.png b/src/static/img/workflow_ys.png
new file mode 100644
index 0000000..a63cf6f
--- /dev/null
+++ b/src/static/img/workflow_ys.png
Binary files differ
diff --git a/src/static/img/workflowing_settins_guid.png b/src/static/img/workflowing_settins_guid.png
new file mode 100644
index 0000000..7d12a9a
--- /dev/null
+++ b/src/static/img/workflowing_settins_guid.png
Binary files differ
diff --git a/src/static/img/yes.png b/src/static/img/yes.png
new file mode 100644
index 0000000..bfc0161
--- /dev/null
+++ b/src/static/img/yes.png
Binary files differ
diff --git a/src/static/js/.DS_Store b/src/static/js/.DS_Store
new file mode 100644
index 0000000..288b8c3
--- /dev/null
+++ b/src/static/js/.DS_Store
Binary files differ
diff --git a/src/static/js/app.js b/src/static/js/app.js
new file mode 100644
index 0000000..e586b5c
--- /dev/null
+++ b/src/static/js/app.js
@@ -0,0 +1,756 @@
+var filed = "";
+var appId = '';//租户公司下业务系统的Id
+var permissionlist = "";
+var guide_info = "";
+var cddata = "";
+var app_userinfo = "";
+var all_formula = "";
+var register_url = "";//"http://csza.chfcloud.com/";
+var work_flow_url = "";//"http://ubpyq.chfcloud.com:8087/";
+var userPermission_url = "";
+var userPermission_method = "";
+
+// var iframe_url = register_url;
+var iframe_url = register_url;
+var key = "dec";
+
+
+// usr/local/nginx 前端部署目录
+// $.ajax({
+// 	type:"get",
+// 	url:"./static/js/qxv2.json",
+// 	async:false,
+// 	success:function(res){
+// 	}
+// });
+
+
+var app = angular.module('app', [
+		'ngRoute',
+		'business',
+		'billing_cfg_guide',
+		'budget_form_customize',
+		'budget_froms',
+		'http_module',
+		'saved_form_directive',
+		'cfg_center',
+		'system_cfg',
+		'travel_expense',
+		'travel_expense_todos',
+		'templates_center',
+		'messages_center',
+		'user_forms_center',
+		'expend_standard',
+		'registry_module',
+		'work_flow_module'
+	])
+	.service('global_service', function() {
+		this.set_indus = function(indus) {
+			window.localStorage.indus = indus;
+		}
+		this.get_indus = function() {
+			return window.localStorage.indus;
+		}
+	})
+	.controller('appCtrl', [
+		'$scope',
+		'$location',
+		'global_service',
+		'$http',
+		'http_service',
+		'$rootScope',
+		function($scope, $location, global_service,$http,http_service,$rootScope) {
+			$scope.theme = "theme1";
+			$scope.indus = '';
+			$scope.$on('$locationChangeStart', function(event) {
+				$scope.url_change_start = true;
+			});
+			$scope.$on('$routeChangeSuccess', function() {
+				$scope.url_change_start = false;
+				var path = $location.path();
+				$scope.indus = global_service.get_indus();
+				if(!$scope.indus && path === '/cfg_center') {
+					sweetAlert("请选择行业信息", "", "error");
+					//alert('请先选择行业信息。');
+					$location.path('/business');
+				}
+			});
+			
+			$scope.btncolor = function() {
+				var rgb = $('#top').css('background-color');
+				rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+
+				function hex(x) {
+					return("0" + parseInt(x).toString(16)).slice(-2);
+				}
+				rgb = "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
+				return rgb;
+			};
+			$rootScope.swalWhether = function(obj, fun) {
+				swal({
+					title: obj.title || "确定删除?",
+					text: obj.text,
+					type: obj.type || "warning",
+					showCancelButton: true,
+					confirmButtonText: "确定",
+					cancelButtonText: "取消",
+					closeOnConfirm: false,
+					confirmButtonColor: $scope.btncolor(),
+					html:true
+				}, fun);
+			}
+			$rootScope.swalsuccess = function(obj, fun) {
+				$scope.superSWal({
+					title: "完成",
+					text: obj.text || "",
+					type: "success",
+					confirmButtonColor: $scope.btncolor(),
+					html:true
+				}, fun);
+			}
+			$rootScope.swalerror = function(obj) {
+				$scope.superSWal({
+					title: "错误",
+					text: obj.text || "",
+					type: "error",
+					confirmButtonColor: $scope.btncolor(),
+					html:true
+				})
+			}
+			$scope.swalwarning = function(obj) {
+				$scope.superSWal({
+					title: "警告",
+					text: obj.text || "",
+					type: "warning",
+					confirmButtonColor: $scope.btncolor(),
+					html:true
+				})
+			}
+			$scope.superSWal = function(obj) {
+				swal({
+					title: obj.title,
+					text: obj.text,
+					type: obj.type,
+					confirmButtonColor: $scope.btncolor(),
+					confirmButtonText: "确定",
+					html:true
+				})
+			}
+			$scope.toastrapi=function(){
+				toastr.options = {
+					"closeButton": false, //是否显示关闭按钮
+					"debug": false, //是否使用debug模式
+					"positionClass": "toast-top-center", //弹出窗的位置
+					"preventDuplicates":true,//控制弹出是否可以重复弹出
+					"showDuration": "300", //显示的动画时间
+					"hideDuration": "1000", //消失的动画时间
+					"timeOut": "3000", //展现时间
+					"extendedTimeOut": "500", //加长展示时间
+					"showEasing": "swing", //显示时的动画缓冲方式
+					"hideEasing": "linear", //消失时的动画缓冲方式
+					"showMethod": "fadeIn", //显示时的动画方式
+					"hideMethod": "fadeOut" //消失时的动画方式
+				};
+			}
+			$rootScope.tsuccess = function(obj){
+				$scope.tsuccess(obj);
+			}
+			$scope.tsuccess = function(obj) {
+				$scope.toastrapi();
+				toastr.success(obj||"","操作成功");
+			}
+			$scope.tinfo = function(obj,type) {
+				$scope.toastrapi();
+				if(type){
+					toastr.info(obj||"","提示");//提示
+				}else{
+					toastr.info(obj||"","提醒");//提示
+				}
+				
+			}
+			$scope.twarning = function(obj) {
+				$scope.toastrapi();
+				toastr.warning(obj||"","警告");//警告
+			}
+			$rootScope.twarning = function(obj){
+				$scope.twarning(obj);
+			}
+			$rootScope.terro = function(obj,type){
+				$scope.terro(obj,type);
+			}
+			$scope.terro = function(obj,type) {
+				$scope.toastrapi();
+				if(type == true){
+					toastr.error(obj||"","提示");//提示
+				}else{
+					toastr.error(obj||"","错误");//错误
+				}
+				
+			}
+			//查询结果为空提示
+			$rootScope.search_hint = function(value,type,str){
+					switch(type){
+						case "string":
+							if(value == ""){
+								if(str != undefined){
+									$scope.tinfo(str,true);
+								}else{
+									$scope.twarning("没有返回数据");
+								}
+							}
+						break;
+						case "object":
+							if($.isEmptyObject(value)){
+								if(str != undefined){
+									$scope.tinfo(str,true);
+								}else{
+									$scope.twarning("没有返回数据");
+								}
+							}
+						break;
+						case "arrary":
+							if(value.length == 0){
+								if(str != undefined){
+									$scope.tinfo(str,true);
+								}else{
+									$scope.twarning("没有返回数据");
+								}
+							}
+						break;
+					}
+			}
+			$scope.redirect_to = function(path) {
+				if(path.indexOf(path,'travel_expense') != -1){
+					$rootScope.my_form_type = 1;
+				}
+				$location.path(path);
+			};
+			$scope.redirect_to_args = function() {
+				$location.path([].slice.call(arguments).join('/'));
+			};
+			$rootScope.getNewDate = function(str){
+				if(str != undefined && _.isString(str) && str.indexOf("-") != -1){
+					return new Date(str.replace(/-/g,"/"));
+				}else if(str != undefined){
+					return new Date(str);
+				}else{
+					return new Date();
+				}
+				 
+			}
+			angular.element(document).ready(function() {
+				$http({
+					url:"./static/js/config.json",//请求配置文件
+					method:"GET",
+					data:token
+				}).then(function(res){
+					var config = res.data.config;
+					appId = strDec(config.appId,key);
+					userPermission_url = strDec(config.userPermission_url,key);
+					userPermission_method = strDec(config.userPermission_method,key);
+					register_url = strDec(config.register_url,key);
+					work_flow_url = strDec(config.work_flow_url,key);
+					iframe_url = register_url; 
+				})
+
+
+				function setCookie(cname,cvalue,exdays){
+				  var d = $rootScope.getNewDate();
+				  d.setTime(d.getTime()+(exdays*24*60*60*1000));
+				  var expires = "expires="+d.toGMTString();
+				  document.cookie = cname + "=" + cvalue + "; " + expires;
+				}
+				function getCookie(cname){
+					var name = cname + "=";
+					var ca = document.cookie.split(';');
+					for(var i=0; i<ca.length; i++) {
+						var c = ca[i].trim();
+						if (c.indexOf(name)==0) return c.substring(name.length,c.length);
+					}
+					return "";
+				}
+				
+				function getQueryString(name) { //获取url参数的值
+					var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 
+					var r = window.location.search.substr(1).match(reg); 
+					if (r != null) return unescape(r[2]); return null; 
+				}
+				if (sessionStorage.getItem("referrer") == "" || sessionStorage.getItem("referrer") == null) {
+					sessionStorage.setItem("referrer",document.referrer);
+				}
+				
+// 				if (sessionStorage.getItem("referrer").indexOf("sunscloud") < 0 && getQueryString("origin_change") != 1) {//新旧域名转换页跳转可以进入系统
+// //					$rootScope.terro("登录异常!");
+// 	    			window.location.href = register_url;
+// 				}
+				if(window.location.href.indexOf("=") != -1){
+					setCookie("token",getQueryString("token"),3000);
+					var csc_compid = getQueryString("csc_compid");
+					var csc_comp_code = getQueryString("csc_comp_code");
+					var tenantId = getQueryString("tenantId");
+					var companyRowId = getQueryString("companyRowId");
+					setCookie("csc_compid",csc_compid,30000);
+					setCookie("csc_comp_code",csc_comp_code,30000);
+					setCookie("tenantId",tenantId,30000);
+					setCookie("companyRowId",companyRowId,30000);
+					if(window.location.href.indexOf("epc.changhong") != -1){// 新旧域名装换  0113
+						window.location.href = "https://travel.sunscloud.com/origin_change.html?token="+getQueryString("token")+"&csc_compid="+csc_compid+"&csc_comp_code="+
+						csc_comp_code+"&tenantId="+tenantId+"&companyRowId="+companyRowId;
+					}
+				}
+				
+				// 获取用户信息
+				http_service.post('permission/search/userInfo',{},function(response){
+					if(response.data.opState == false){
+						var href_str = register_url + "index.html"
+						window.location.href = href_str;
+						return false;
+					}
+					app_userinfo = response.data.data;
+					$scope.app_userinfo  = app_userinfo;
+					//采集布码
+					window["_BFD"] = window["_BFD"] || {};
+				    _BFD.BFD_INFO = {
+				        "user_id": app_userinfo.openId?app_userinfo.openId:0, //当前用户 openid,如果未登录就为0
+				        "page_type": "homepage" //当前页面标识,请勿修改
+				    };
+				    _BFD.script = document.createElement("script");
+				    _BFD.script.type = "text/javascript";
+				    _BFD.script.async = true;
+				    _BFD.script.charset = "utf-8";
+				    _BFD.script.src = "https://dcjscdn.chiq-cloud.com/ds/ysx/ysxcl.cdn.min-1.0.0.js";//这里是各系统分配的JS代码
+				    document.getElementsByTagName("head")[0].appendChild(_BFD.script);
+				    //采集布码
+				});
+				var token = {"token":getCookie("token")};
+
+				//向导判断
+				function guide_check(){
+					if($location.path() == ""){
+						if(guide_info == undefined){
+							$location.path("/travel_expense_todos/");//暂时跳转到此页
+							return false;
+						}
+						var guide = guide_info;
+							if(guide == "" ){
+								$location.path("/guide");
+							}else if(guide[0].gcPcsStep == 0){
+								$location.path("/travel_expense_todos/");
+							}else{
+								$location.path("/billing_cfg_guide/"+guide[0].gcInCode+"/"+(parseInt(guide[0].gcPcsCode)-10)/10);
+							}
+					}
+				}
+				//系统配置  启用预算、申请、报销
+				http_service.post('syscfg/list', {}, function(res) {
+					var data = res.data.data;
+					_.each(data, function(obj) {
+//						var val_txt = obj['scValue'];
+						switch(obj.scName){
+							case "budget_open":
+								$rootScope.budget_open = obj.scValue;
+							break;
+							case "apply_open":
+								$rootScope.apply_open = obj.scValue;
+							break;
+							case "expend_open":
+								$rootScope.expend_open = obj.scValue;
+							break;
+						}
+					});
+				});
+				
+				//获取向导信息
+				$http({
+							url:"./travel-web/guiCfg/search",
+							method:"POST",
+							data:token
+						}).then(function(res){
+							guide_info = res.data.data;
+							if(guide_info != undefined) {
+								if(guide_info && guide_info.length != 0){
+								global_service.set_indus(guide_info[0].gcInCode);
+								}
+							}
+							//				获取权限列表
+							$http({
+								// url:"./travel-web/permission/search/userPermission", //正式
+								// method:"POST",   // 正式
+								// url:"./static/js/userPermission.json",//假数据1
+								url:userPermission_url,//测试
+								method:userPermission_method,//测试
+								data:token
+							}).then(function(res){
+//								permissionlist = res.data.data;//假数据1
+								// permissionlist = res.data.value.functionPermissionSet;/// 
+								permissionlist = res.data.data.value.functionPermissionSet; // 正式 
+								// if(res.data.data){
+								// 	permissionlist = res.data.data.resources;
+								// }
+								var guide_flag = false;
+								//权限递归 判断
+								function permission_judge(list){
+									_.each(list,function(_list){
+										if(_list.name == '/guide'){
+											guide_flag = true;
+											return guide_flag;
+										}else if(!_.isNull(_list.children)){
+											return permission_judge(_list.children);
+										}
+									})
+								}
+								permission_judge(permissionlist)
+//								_.each(permissionlist,function(_list){
+//									if(_list.url == "/guide"){
+//										guide_flag =true;
+//									}
+//								})
+								if(guide_flag){
+									guide_check();
+								}else{
+									$location.path("/travel_expense_todos/");
+								}
+							},function(err){
+								//弹窗
+							});
+						},function(err){
+							//弹窗
+						})
+				//获取主数据信息
+				http_service.post('supp/search/elField', {}, function(res) {
+					filed = res.data.data.field;
+					cddata = res.data.data.data;
+					appId = res.data.data.appId;
+				})
+				$('ul.navbar-nav li.dropdown').on('mouseenter', function(event) {
+					$(this).closest('li.dropdown').addClass('open');
+				}).on('mouseleave', function() {
+					$('li.dropdown').removeClass('open');
+				});
+			});
+			
+			//权限判断方法  (修改)
+			$scope.permission_check = function(code,urls){
+				//权限递归 找parent
+//				function permission_find(list,judge){
+//					_.each(list,function(_list){
+//						if(judge.indexOf(_list.name) != -1){
+//							code += _list.name;
+//							list_data = list;
+//							return list;
+//						}else if(!_.isNull(_list.children)){
+//							return permission_find(_list.children,judge);
+//						}
+//					})
+//				}
+				//权限递归 判断
+//				function permission_judge(list,judge){
+//					_.each(list,function(_list){
+//						if(judge == _list.name){
+//							flag = true;
+//						}else if(!_.isNull(_list.children)){
+//							return permission_judge(_list.children,judge);
+//						}
+//					})
+//				}
+				var flag = false;
+				var parentId;
+				if(urls == 1){
+					if(code == "editbtn" || code == "backbtn"){
+						if($location.path() == "/travel_expense_todos/"){
+							return true;
+						}
+					}
+					if(code == "edit_template" && $location.path() == "/templates_center"){
+						code = "edit_template_center";
+					}
+
+					var path;
+					if($location.path().indexOf("/budget_froms/") != -1){
+						path = $location.path();
+						path = path.slice(-3);
+						path = path.replace("/","");
+						path = "/budget_froms/"+path+"/";
+					}else{
+						path = $location.path();
+					}
+					var list_data = undefined;
+					
+//					permission_find(permissionlist,path);
+//					if(list_data != undefined){
+//						permission_judge(list_data,code);
+//					}
+					_.each(permissionlist,function(_perlist){
+						if(path.indexOf(_perlist.name) != -1){
+							code += _perlist.name;
+						}
+					});
+					_.each(permissionlist,function(_list){
+						if(_list.name == code){
+							flag = true;
+						}
+					})
+				}else if(urls == 2){
+					if($location.path() == "/travel_expense_todos/"){
+							return true;
+						}
+					if(code == "提交"){
+						code = "commitbtn";
+					}else{
+						code = "auditbtn";
+					}
+//					var list_data = undefined;
+//					permission_find(permissionlist,path);
+//					if(list_data != undefined){
+//						permission_judge(list_data,code);
+//					}
+					_.each(permissionlist,function(_perlist){
+						if($location.path().indexOf(_perlist.name) != -1){
+							code += _perlist.name;
+						}
+					});
+					_.each(permissionlist,function(_list){
+						if(_list.name == code){
+							flag = true;
+						}
+					})
+				}else if(urls == 3){
+					switch(code){
+						case 10:
+							code = "termination_budget";
+						break;
+						case 20:
+							code = "termination_apply";
+						break;
+						case 30:
+							code = "termination_expend";
+						break;
+					}
+					_.each(permissionlist,function(_list){
+						if(_list.name == code){
+							flag = true;
+						}
+					})
+				}else if(urls == 4){
+					switch(code){
+						case 10:
+							code = "search_budget";
+						break;
+						case 20:
+							code = "search_apply";
+						break;
+						case 30:
+							code = "search_expend";
+						break;
+					}
+					
+					_.each(permissionlist,function(_list){
+						if(_list.name == code){
+							flag = true;
+						}
+					})
+				}else{
+					_.each(permissionlist,function(_list){
+						if(_list.name == code){
+							flag = true;
+						}
+					})
+				}
+				return flag;
+			}
+			$rootScope.permission_check = function(code,urls){
+				return $scope.permission_check(code,urls);
+				
+			}
+		}
+	])
+
+	.controller('guideCtrl', ['$scope', '$location','http_service', function($scope, $location,http_service) {
+		$scope.business_select_phase = function() {
+			http_service.post('guiCfg/create',{},function(res){
+				if(res.data.opState){
+					$location.path('/business');
+				}
+			})
+		}
+		$scope.registry_model = function() {
+			$location.path('/registry');
+		}
+	}])
+	.config(['$sceDelegateProvider',function($sceDelegateProvider) {
+//		var self_str = register_url + "**";
+		var self_str = iframe_url + "**";
+    $sceDelegateProvider.resourceUrlWhitelist([
+        'self',self_str]);
+   	}])
+	.config(['$routeProvider', '$locationProvider', '$compileProvider', function($routeProvider, $locationProvider, $compileProvider) {
+		$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|javascript):/);
+		$routeProvider
+			.when('/guide', {
+				templateUrl: './static/templates/guide.html',
+				controller: 'guideCtrl'
+			})
+			.when('/business', {
+				templateUrl: './static/templates/business.html',
+				controller: 'businessCtrl'
+			})
+			.when('/registry', {
+				templateUrl: './static/templates/registry.html',
+				controller: 'registryCtrl'
+			})
+			.when('/billing_cfg_guide/:business/:step', {
+				templateUrl: './static/templates/billing_cfg_guide.html',
+				controller: 'billingCfgGuideCtrl'
+			})
+			.when('/budget_froms/:business/:type/', {
+				templateUrl: './static/templates/budget_forms.html',
+				controller: 'budgetFormsCtrl'
+			})
+			.when('/budget_froms/:type/', {
+				templateUrl: './static/templates/budget_forms.html',
+				controller: 'budgetFormsCtrl'
+			})
+			.when('/budget_form_customize/:type/:business/:id?/:action?', {
+				templateUrl: './static/templates/budget_form_customize.html',
+				controller: 'budgetFormCustomizeCtrl'
+			})
+			.when('/cfg_center/', {
+				templateUrl: './static/templates/config_center.html',
+				controller: 'cfgCenterCtrl'
+			})
+			.when('/system_config', {
+				templateUrl: './static/templates/system_config.html',
+				controller: 'systemCfgCtrl'
+			})
+			.when('/travel_expense/:type?', {
+				templateUrl: './static/templates/travel_expense.html',
+				controller: 'travelExpenseCtrl'
+			})
+			.when('/travel_expense_todos/', {
+				templateUrl: './static/templates/travel_expense_todos.html',
+				controller: 'travelExpenseTodosCtrl'
+			})
+			.when('/user_forms_center/:type', {
+				templateUrl: './static/templates/forms_center.html',
+				controller: 'userFormsCenterCtrl'
+			})
+			.when('/templates_center', {
+				templateUrl: './static/templates/templates_center.html',
+				controller: 'templatesCenterCtrl'
+			})
+			.when('/messages_center',{
+				templateUrl: './static/templates/messages_center.html',
+				controller: 'messageCenterCtrl'
+			})
+			.when('/expend_standard', {
+				templateUrl: './static/templates/expend_standard.html',
+				controller: 'expendStandardCtrl'
+			})
+			.when('/work_flow', {
+				templateUrl: './static/templates/work_flow.html',
+				controller: 'workflowCtrl'
+			})
+			.when('/no_permission', {
+				templateUrl: './static/templates/no_permission.html'
+			})
+			.when('**', {
+				templateUrl: './static/templates/404.html'
+			})
+	}])
+	
+	.run(['$rootScope','$location',"$routeParams",function($rootScope,$location,$routeParams){
+		$rootScope.$on('$routeChangeStart', function(evt, next, current){
+			//权限递归 判断
+//				function permission_judge(list,judge){
+//					_.each(list,function(_list){
+//						if(judge.indexOf(_list.name) != -1){
+//							permission_flag = true;
+//						}else if(!_.isNull(_list.children)){
+//							return permission_judge(_list.children,judge);
+//						}
+//					})
+//				}
+			function setCookie(cname,cvalue,exdays){
+				  var d = $rootScope.getNewDate();
+				  d.setTime(d.getTime()+(exdays*24*60*60*1000));
+				  var expires = "expires="+d.toGMTString();
+				  document.cookie = cname + "=" + cvalue + "; " + expires;
+				}
+			function getQueryString(name) { //获取url参数的值
+				var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 
+				var r = window.location.search.substr(1).match(reg); 
+				if (r != null) return unescape(r[2]); return null; 
+			}
+			if(window.location.href.indexOf("?") != -1){
+				var token = getQueryString("token");
+				var csc_compid = getQueryString("csc_compid");
+				var csc_comp_code = getQueryString("csc_comp_code");
+				var tenantId = getQueryString("tenantId");
+				
+				setCookie("token",token,30000);
+				setCookie("csc_compid",csc_compid,30000);
+				setCookie("csc_comp_code",csc_comp_code,30000);
+				setCookie("tenantId",tenantId,30000);
+//				$location.path('/no_permission');
+			}
+				$rootScope.exitLogin=function(){
+				var keys=document.cookie.match(/[^ =;]+(?=\=)/g);
+    			if (keys) {
+       			 for (var i =  keys.length; i--;)
+          		  document.cookie=keys[i]+'=0;expires=' + $rootScope.getNewDate( 0).toUTCString()
+   				 }
+    			var href_str = register_url + "index.html";
+   				 window.location.href=register_url;
+				}
+		     var permission_flag = false;
+		     var path;
+					if($location.path().indexOf("/budget_froms/") != -1){
+						path = $location.path();
+						if(path.length > 17){//行业精选
+							path = path.slice(-3);
+							path = path.replace("/","");
+							path = "/budget_froms/*/"+path+"/";
+						}else{
+							path = path.slice(-3);
+							path = path.replace("/","");
+							path = "/budget_froms/"+path+"/";
+						}
+					}else{
+						path = $location.path();
+					}
+		     _.each(permissionlist,function(_list){
+		     	if(path.indexOf(_list.name) != -1){
+		     		permission_flag = true;
+		     	}
+		    });
+//			permission_judge(permissionlist,path)
+		    if(permissionlist == ""){
+		    	permission_flag = true;
+		    }
+		    
+//		    if($location.path().indexOf("messages_center") != -1){// 韩蓉消息中心 权限
+//		    	permission_flag = true;
+//		    }
+	     	if(!permission_flag){
+	     		$location.path('/no_permission');
+	     	}
+	     	
+	    }); 
+	    $rootScope.$on("$routeChangeSuccess",function(){
+	    	if($location.path() == "/expend_standard"){
+	     		
+	     		var reloadnum = sessionStorage.getItem("reloadnum");
+	     		if(reloadnum == undefined){
+	     			sessionStorage.setItem("reloadnum",0);
+	     			reloadnum = sessionStorage.getItem("reloadnum");
+	     		}else if(reloadnum == 0){
+	     			sessionStorage.setItem("reloadnum",1);
+	     		}else{
+	     			sessionStorage.setItem("reloadnum",0);
+	     		}
+	     		if(reloadnum == 0){
+	     			 location.reload(true);
+	     		}
+	     	}
+	    })
+	}]);
\ No newline at end of file
diff --git a/src/static/js/billing_cfg_guide/module.js b/src/static/js/billing_cfg_guide/module.js
new file mode 100644
index 0000000..2a25aaa
--- /dev/null
+++ b/src/static/js/billing_cfg_guide/module.js
@@ -0,0 +1,39 @@
+angular.module('billing_cfg_guide', [])
+	.controller('billingCfgGuideCtrl', ['$scope', '$routeParams', '$location','http_service', function($scope, $routeParams, $location,http_service) {
+		$scope.business = $routeParams.business;
+		$scope.step = $routeParams.step;
+		$scope.redirect_to_billing_cfg_guide = function(path, inCode, step) {
+			if(step != 8) {
+				var guide = {
+					"child": [{
+						"gcPcsCode": step*10,
+						"gcPcsStep": 99,
+						"gcInCode":inCode
+					}]
+				}
+			}else{
+				var guide = {
+					"child": [{
+						"gcPcsCode": step*10,
+						"gcPcsStep": 0,
+						"gcInCode":inCode
+					}]
+				}
+			}
+			http_service.post("guiCfg/update",guide,function(res){//更新向导信息
+					if(res.data.opState){
+						if(step == 8){
+							$location.path("/travel_expense_todos/");
+						}else{
+							$location.path(path + inCode + "/" + step);
+						}
+					}else{
+						//弹窗  
+					}
+				});
+
+		}
+		$scope.redirect_to_budget_forms = function(path, inCode, type) {
+			$location.path(path + inCode + "/" + type);
+		}
+	}]);
\ No newline at end of file
diff --git a/src/static/js/budget_form_customize/module.js b/src/static/js/budget_form_customize/module.js
new file mode 100644
index 0000000..212c4ac
--- /dev/null
+++ b/src/static/js/budget_form_customize/module.js
@@ -0,0 +1,2018 @@
+angular.module('budget_form_customize', [])
+
+	.directive('select3', ['$rootScope', 'http_service', '$timeout', '$interval', '$compile',
+		function($rootScope, http_service, $timeout, $interval, $compile) {
+			return {
+				restrict: 'ACEM',
+				templateUrl: './static/templates/select3.html',
+				transclude: true,
+				scope: {
+					item: "=",
+					edit: "=",
+					form_items: "=",
+					childitem: "=",
+					editFlag: "=",
+					billCheck: "&"
+				},
+				compile: function() {
+					return {
+						pre: function(scope, iElement, iAttrs, controller) {
+
+							//							});
+
+							var $scope = scope;
+							$scope.type = scope.$parent.type;
+							$scope.billid = scope.$parent.billid;
+							scope.sel_val_lst = [];
+							var $el = $(iElement);
+							//关联公式显示控件
+							function show_item(form,item){
+								var show_flag = true;
+								_.each(form.has_hide,function(hide){
+									_.each(item,function(_item){
+										if(hide.gcMeCode == _item.gcMeCode){
+											if(_item.render_value && _item.render_value.indexOf(",") != -1){
+												var item_value = _item.render_value.split(",");
+											}else{
+												var item_value = [_item.render_value];
+											}
+											_.each(item_value,function(val){
+												if(val == hide.hide_value){
+														show_flag = false;
+												}
+											})
+										}
+									})
+								})
+								return show_flag;
+							}
+							//关联公式隐藏控件
+							function hide_item() {
+								var ischild = true;
+								var check_form;
+								_.each(scope.$parent.form_items,function(form){
+									if(show_item(form,scope.$parent.form_items) && form.has_hide != undefined){
+										form.gcShowFlag = 1;
+									}
+									if(form.gcMeCode == scope.item.gcMeCode) {
+										ischild = false;
+										check_form = scope.$parent.form_items;
+									}
+								})
+								if(ischild){
+									_.each(scope.$parent.form_items,function(form){
+										if(form.gcCpnType == 10 || form.gcCpnType == 17){
+											_.each(form.child,function(cd){
+												if(show_item(cd,form.child) && cd.has_hide != undefined){
+													cd.gcShowFlag = 1;
+												}
+//												if(cd.render_value != "" && cd.render_value != undefined &&  cd.gcMeCode == scope.item.gcMeCode) {
+													check_form = scope.childitem.child;
+//												}
+											})
+										}
+									})
+								}
+//								
+								_.each(check_form,function(form){
+									if(scope.item.cpnHide){
+										_.each(scope.item.cpnHide,function(formula){
+											if(scope.item.render_value != "" && scope.item.render_value != undefined){
+												if(scope.item.render_value.indexOf(",") != -1){
+													var i_value = scope.item.render_value.split(",");
+												}else{
+													var i_value = [scope.item.render_value];
+												}
+												_.each(i_value,function(val){
+													if(val == formula.cVal){
+														_.each(formula.cHideItem,function(hide){
+															if(form.gcMeCode == hide){
+																
+																
+																form.gcShowFlag = 0;
+																if(form.has_hide == undefined){
+																	form['has_hide'] = [{
+																		'gcMeCode':scope.item.gcMeCode,
+																		'hide_value':formula.cVal
+																	}];
+																}else{
+																	form['has_hide'].push({
+																		'gcMeCode':scope.item.gcMeCode,
+																		'hide_value':formula.cVal
+																	})
+																}
+															}
+														})
+													}
+												})
+												
+											}
+										})
+									}
+									
+								})
+							}
+							//预算部门为总公司时隐藏并不判断占用预算控件的必填
+							function Corporation_choose(val) {
+								var superBudget_code;
+								_.each(filed, function(_filed) {
+									if(_filed.busCode == 'superBudget') {
+										superBudget_code = _filed.mdCode;
+									}
+								});
+								_.each(scope.$parent.form_items, function(form) {
+									if(form.gcMeCode == superBudget_code) {
+										if(val == 'F172004') {
+											form.gcInputMust = 0;
+											form.gcShowFlag = 0;
+										} else {
+											form.gcInputMust = 1;
+											form.gcShowFlag = 1;
+										}
+									}
+
+								})
+
+							}
+							//部门变更则清空占用预算或社申请选择
+							function clear_budget() {
+								if($rootScope.budget_back == false) {
+									_.each(scope.$parent.form_items, function(form) {
+										if(form.gcCpnType == 0) { //占用预算
+											form.render_value = "";
+											$rootScope.startTime = undefined;
+											$rootScope.endTime = undefined;
+											$rootScope.sumMoney_budget = undefined;
+											$rootScope.budget_selected = null;
+
+											scope.$parent.$parent.$parent.heads = [];
+											scope.$parent.$parent.$parent.selectinfo = [];
+										}
+									})
+								}
+							}
+							//公式计算
+																$scope.formula_conut = function(formula, val) {
+								//判断公式应用于哪个表单
+								//									var travelType = formula.travelType;//获取公式对应的表单
+								//									var account_flag =false;//控制是否计算
+								//									if(travelType == $scope.type){
+								//										account_flag = true;
+								//									}else if(travelType == 0){
+								//										account_flag = true;
+								//									}
+								//									if(account_flag == false){
+								//										return false;
+								//									}
+								var target_code = formula.child[0];
+								var orgin_code = formula.child[1];
+								var target_value;
+								_.each($scope.sreach_data, function(data) {
+									if(data.code == val) {
+										target_value = data[orgin_code.pMeCode];
+									}
+								})
+								var is_inchild = false;
+								_.each($scope.$parent.form_items, function(_form) {
+									if(_form.gcMeCode == target_code.pMdCode) {
+										if(_form.gcCpnType == 6) {
+											$rootScope.formula_num_id.push(formula.id)//前端公式计数
+											$rootScope.formula_num++;
+											_form.render_value = target_value;
+										} else {
+											if(target_code.mathMdType == "code") {
+												formula_setdata(orgin_code, target_value, function(res) {
+													$rootScope.formula_num_id.push(formula.id)//前端公式计数
+													$rootScope.formula_num++;
+													_form.render_value = res.data.data;
+												})
+											} else {
+												$rootScope.formula_num_id.push(formula.id)//前端公式计数
+												$rootScope.formula_num++;
+												_form.render_value = target_value;
+											}
+										}
+									} else {
+										is_inchild = true;
+									}
+								});
+								if(is_inchild) {
+									_.each($scope.$parent.form_items, function(_form) {
+										if(_form == scope.childitem) {
+											_.each(_form.child, function(cd) {
+												if(cd.gcMeCode == target_code.pMdCode) {
+													if(cd.gcCpnType == 6) {
+														$rootScope.formula_num_id.push(formula.id)//前端公式计数
+														$rootScope.formula_num++;
+														cd.render_value = target_value;
+													} else {
+														if(target_code.mathMdType == "code") {
+															formula_setdata(orgin_code, target_value, function(res) {
+																$rootScope.formula_num_id.push(formula.id)//前端公式计数
+																$rootScope.formula_num++;
+																cd.render_value = res.data.data;
+															})
+														} else {
+															$rootScope.formula_num_id.push(formula.id)//前端公式计数
+															$rootScope.formula_num++;
+															cd.render_value = target_value;
+														}
+													}
+												}
+											})
+										}
+									})
+								}
+							}
+							function getItem() {
+								http_service.post('base/data/search', { "code": scope.item.gcMeCode, "cache_id": scope.item.gcMeCode }, function(res) {
+									if(res.data.opState) {
+										var data = res.data.data.child;
+										$scope.sreach_data = res.data.data.child;
+										$timeout(function() {
+											var $sel = $el.find('select');
+											_.each(data, function(item) {
+												$sel.append('<option value=' + item.code + '>' + item.value + '</option>');
+											});
+											var budget_back;
+											_.each(filed, function(_filed) {
+												if(_filed.busCode == "orgName") {
+													budget_back = _filed.mdCode;
+												}
+											});
+											$scope.$watch(function() {
+												return scope.item.render_value;
+											}, function() {
+												if($rootScope.stepCode != undefined && ($rootScope.stepCode == 30 || $rootScope.stepCode == 10)){// 已完成/审核中 表单显示 特殊处理
+													return false;	
+												}
+												//下拉框 根据公式联动
+										_.each($scope.$parent.formula, function(formula) {
+											//										if(formula.mathFormat == "select"){
+											if(scope.item.gcMeCode == formula.child[1].pMdCode) {
+												$scope.formula_conut(formula, scope.item.render_value);
+											}
+											//										}
+										})
+										
+												if($rootScope.sort_bytime){
+													$rootScope.sort_bytime(scope.item);//子表单排序
+												}
+//												
+												var arr = scope.item.render_value;
+//												arr = arr.split(",");
+//												if(arr != undefined && arr.indexOf("[") != -1){
+//													arr = JSON.parse(arr);
+//													scope.item.render_value = JSON.parse(scope.item.render_value);
+//												}else if(_.isArray(arr) == false){
+//													arr = [arr];
+//													scope.item.render_value = [scope.item.render_value];
+//												}
+												scope.sel_val_lst = [];
+												if(scope.item.gcMeCode == budget_back) {
+													clear_budget();
+													Corporation_choose(arr);
+													if($rootScope.budget_back != false) {
+														$rootScope.budget_back = false;
+													}
+												}
+												if(arr) {
+													if(arr.length>1){
+														arr = arr.split(",");
+//														arr.pop();
+//														
+														_.each(arr, function(_arr) {
+															_.each(data, function(_data) {
+																if(_data.code == _arr) {
+																	scope.sel_val_lst.push({ "value": _data.code, "label": _data.value });
+																}
+															})
+														})
+														var select_value = [];
+														for(i in scope.sel_val_lst) {
+															select_value.push(scope.sel_val_lst[i].label);
+														}
+														$timeout(function() {
+															if($scope.item.render_value != undefined){
+																$scope.item = _.extend($scope.item, { "select_value": select_value.join(",") });
+															}
+														}, 10)
+													}
+												}
+												scope.$watch(function() {
+													return scope.item.ismultiple
+												}, function() {
+													if(scope.item.ismultiple !== undefined) {
+														if(scope.item.ismultiple) {
+															$sel.attr('multiple', 'multiple');
+														} else {
+															$sel.attr('multiple', null);
+														}
+													}
+												})
+
+//												if(arr) {
+//													$sel.val($scope.item.render_value);
+//													_.each(arr,function(_arr){
+//														_.each($scope.sreach_data,function(_data){
+//															if(_data.code == _arr){
+//																scope.sel_val_lst.push({ 'value': _data.code, 'label':_data.value});
+//															}
+//														})
+//													})
+////													$sel.find('option:selected').each(function() {
+////														scope.sel_val_lst.push({ 'value': $(this).val(), 'label': $(this).text() });
+////													});
+//													var select_value = [];
+//													for(i in scope.sel_val_lst) {
+//														select_value.push(scope.sel_val_lst[i].label);
+//													}
+//													$timeout(function() {
+//														$scope.item = _.extend($scope.item, { "select_value": select_value.join(",") });
+//													}, 10)
+//												}
+												hide_item()//关联公式隐藏控件
+												
+												//匹配控件 并进行系统变量公式计算
+									            _.each($scope.$parent.sys_formula,function(sformula){
+									            	_.each(sformula.formula.child,function(_formula){
+									            		if(_formula.mdCode == scope.item.gcMeCode){
+									            			if(scope.childitem){
+									            				if($rootScope.sys_formula_computing){
+									            					$rootScope.sys_formula_computing(sformula,scope.childitem);
+									            				}
+									            			}else{
+									            				if($rootScope.sys_formula_computing){
+									            					$rootScope.sys_formula_computing(sformula);
+									            				}
+									            			}
+									            			return false;
+										            	}
+									            	});
+									            })
+											});
+											$timeout(function(){//用于检测显示是否完全
+												$scope.item['inited'] = true;
+											},100);
+										}, 1)
+
+									} else {
+										$scope.$parent.$parent.$parent.$parent.$parent.terro(res.data.errMsg);
+										$timeout(function(){//用于检测显示是否完全 失败也算显示完全 否则会无法结束监听
+											$scope.item['inited'] = true;
+										},100);
+									}
+								}, true);
+							}
+							getItem();
+							if(scope.editFlag !== 0) {
+								$el.find('div.select-container').on('click', function(event) {
+									$('div.drop_down_sel').remove();
+									var $select = $el.find('select');
+									var isMultiple = $select.attr('multiple');
+									//								var isMultiple = $scope.item.gcCpnMultiple;
+									var $options = $el.find('select > option');
+									var $options_str = '<ul>' +
+										'<li class="sel_query">' +
+										'<input type="text" name="query" >' +
+										'<i class="fa fa-search" aria-hidden="true"></i>' +
+										'</li>' +
+										'</ul>';
+									if($select.attr('multiple')) {
+										$options_str += '<ul>' +
+											'<li>' +
+											'<div>' +
+											'<div>' +
+											'<input type="checkbox" name="all">' +
+											'</div>' +
+											'<div>全选</div>' +
+											'</div>' +
+											'</li>' +
+											'</ul>';
+									}
+									//								$scope.$watch(function(){
+									//									return isMultiple
+									//								},function(){
+									////									alert(isMultiple);
+									//									if(scope.item.gcMeCode == 'F008'){
+									////										getItem();
+									//									}
+									//								})
+									$options.each(function() {
+										var checked = '';
+										var val_list = _.map(scope.sel_val_lst, function(op) {
+											return op.value;
+										});
+										if(_.indexOf(val_list, $(this).val()) > -1) {
+											checked = 'checked';
+										}
+
+										$options_str += '<ul>' +
+											'<li>' +
+											'<div>' +
+											'<div>' +
+											'<input type="checkbox" name="checkbox" label="' + $(this).text() + '" value="' + $(this).val() + '" ' + checked + ' >' +
+											'</div>' +
+											'<div  class="overhidden" title="' + $(this).text() + '">' + $(this).text() + '</div>' +
+											'</div>' +
+											'</li>' +
+											'</ul>';
+									});
+
+									var $select_obj = $('<div drop-down-selector="" filterlist="searchlist" class="drop_down_sel" >' +
+										$options_str +
+										'</div>');
+									$el.find('div.select3-element').append($select_obj);
+									//下拉框点击消失
+									$('body').off('click').on('click', function() {
+										$('div.drop_down_sel').remove();
+									});
+									$('div.drop_down_sel').off('click').on('click', function(event) {
+										event.stopPropagation();
+									});
+
+									// 查询功能
+									$select_obj.find('input[name="query"]').on('keyup', function() {
+										var $el = $(this);
+										var inputs = $select_obj.find('input[name="checkbox"]');
+										inputs.each(function() {
+											var val = $(this).attr('label');
+											var input_val = $el.val();
+											if(val.indexOf(input_val) > -1) {
+												$(this).closest('ul').show();
+											} else {
+												$(this).closest('ul').hide();
+											}
+										});
+									});
+									//下拉框关联非下拉框 取值
+									function formula_setdata(orgin, val, callback) {
+										http_service.post("supp/getName", {
+											"mdCode": orgin.pMdCode,
+											"mvCode": val
+										}, function(res) {
+											callback(res);
+										})
+									}
+									
+
+									$select_obj.find('input[name="checkbox"]').on('click', function() {
+										var vals_selected = [];
+										var vals_selected_item = [];
+										if(!isMultiple) {
+											$('div.drop_down_sel input[name="checkbox"]').prop('checked', false);
+											$(this).prop('checked', true);
+											$select.val($(this).val());
+											vals_selected = [{ 'value': $(this).val(), 'label': $(this).attr('label') }];
+											vals_selected_item = $(this).val();
+											scope.set_valueleft(_.map(vals_selected, "value"));
+											vals_selected_item = $(this).val();
+											$('div.drop_down_sel').remove();
+										} else {
+											var vls = [];
+											$('div.drop_down_sel input[name="checkbox"]:checked').each(function() {
+												vals_selected.push({ 'value': $(this).val(), 'label': $(this).attr('label') });
+												vals_selected_item.push($(this).val());
+												vls.push($(this).val());
+											});
+											$select.val(vls);
+											// 查询条件赋值
+											scope.set_valueleft(vls);
+
+										}
+										if(!$('div.drop_down_sel input[name="checkbox"]').prop('checked')) {
+											$('input[name="all"]').attr('checked', null)
+										}
+										$timeout(function() {
+											scope.sel_val_lst = vals_selected;
+//											
+											if(_.isArray(vals_selected_item)){
+												scope.item.render_value = vals_selected_item.join(",");
+												$scope.item.render_value = vals_selected_item.join(",");
+											}else{
+												scope.item.render_value = vals_selected_item;
+												$scope.item.render_value = vals_selected_item;
+											}
+											
+											//验证错误信息
+											scope.billCheck();
+											//										if(scope.item.render_value && scope.$parent.select_value == '002'){
+											//											$scope.$parent.showcontrol = true;
+											//											$scope.$parent.deptbudget();
+											//										}
+										}, 1);
+
+										//下拉框 根据公式联动
+										var this_val = $(this).val();
+										_.each($scope.$parent.formula, function(formula) {
+											//										if(formula.mathFormat == "select"){
+											if(scope.item.gcMeCode == formula.child[1].pMdCode) {
+												$scope.formula_conut(formula, this_val);
+											}
+											//										}
+										})
+										
+									});
+									$select_obj.find('input[name="all"]').on('click', function() {
+										if($(this).prop("checked") == false) {
+											$('div.drop_down_sel input[name="checkbox"]').each(function() {
+												if($(this).prop("checked") == true) {
+													$(this).click();
+												}
+											});
+										} else {
+											$('div.drop_down_sel input[name="checkbox"]').each(function() {
+												if($(this).prop("checked") == false) {
+													$(this).click();
+												}
+											});
+										}
+									})
+
+									var allflag = true
+									$('div.drop_down_sel input[name="checkbox"]').each(function() {
+										if($(this).prop("checked") == false) {
+											allflag = false;
+										}
+									});
+
+									if(allflag) {
+										$('input[name="all"]').attr('checked', 'checked')
+									} else {
+										$('input[name="all"]').attr('checked', null)
+									}
+
+									event.stopPropagation();
+								});
+							}
+							scope.set_valueleft = function(val) {
+								if(scope.item) {
+									if(val) {
+										if(val.length > 0) {
+											scope.item.valueLeft = val;
+										} else {
+											scope.item.valueLeft = false;
+										}
+									}
+								}
+							};
+							scope.rm_option = function(event) {
+								$timeout(function() {
+									//									var new_item = _.cloneDeep(scope.item);
+									//									new_item.render_value = "";
+									//									scope.item = new_item;
+									scope.item.render_value = "";
+									var $elt = $(event.target);
+									$elt.closest('div.select-container').attr('value', '');
+									$elt.closest('div.val-card').remove();
+									var val = ($elt).attr('val');
+									if(val) {
+										val = JSON.parse(val);
+									}
+									scope.sel_val_lst = _.filter(scope.sel_val_lst, function(t) {
+										return t.value != val.value;
+									});
+									// 多选改变时更新查询条件
+									scope.set_valueleft(_.map(scope.sel_val_lst, "value"));
+									$el.find('select').val(scope.sel_val_lst);
+
+									$('div.drop_down_sel input[name="checkbox"]:checked').each(function() {
+										// 点取消时 将查询条件中值删除
+										scope.set_valueleft([]);
+										if($(this).val() == val.value) {
+											$(this).prop("checked", false);
+										}
+									});
+									if(scope.$parent.select_value == '002') {
+										$scope.$parent.showcontrol = false;
+										$scope.$parent.deptbudget();
+									}
+
+									event.stopPropagation();
+								}, 1)
+
+							};
+						},
+						post: function($scope, element, attrs) {}
+					}
+				}
+			}
+		}
+	])
+	.directive('frmElemCloudAttr', ['$rootScope', 'http_service', function($rootScope, http_service) {
+		return {
+			restrict: 'ACEM',
+			templateUrl: './static/templates/frm_elem_cloud_attr.html',
+			scope: {
+				type: "=",
+				data: "=",
+				action: "@"
+			},
+			compile: function() {
+				return {
+					pre: function(scope, iElement, iAttrs, controller) {
+						scope.masDataDefineCode = null;
+						//						scope.masDataEleList_types = [{ "type": "预算" }, { "type": "申请" }, { "type": "报销" }];
+						scope.math_ceil = function(value) {
+							return Math.ceil(value);
+						};
+						scope.close = function() {
+							$(iElement).remove();
+						};
+						scope.pre_page = function() {
+							var pageNum = _.toInteger(scope.pageNumber);
+							if(pageNum && pageNum > 1) {
+								scope.pageNumber = --pageNum;
+							}
+						};
+						scope.next_page = function() {
+							var pageNum = _.toInteger(scope.pageNumber);
+							if(pageNum && pageNum < Math.ceil(scope.total / scope.pageSize)) {
+								scope.pageNumber = ++pageNum;
+							}
+						};
+						if(scope.action == 3) {
+							scope.url = 'cloud/cpn/masDataEleList';
+						} else {
+							scope.url = 'template/cpn/masDataEleList';
+						}
+						scope.$watchGroup(["pageNumber", "pageSize"], function() {
+							if(!scope.pageNumber || !scope.pageSize) return false;
+							http_service.post(
+								scope.url, {
+									"code": scope.type,
+									"keyWord": scope.keyWord,
+									"num_per_page": scope.pageSize,
+									"page_num": scope.pageNumber
+								},
+								function(res) {
+									$rootScope.search_hint(res.data.data.rows, 'arrary');
+									var data = res.data.data;
+									scope.total = data.total;
+									scope.attr_rows = data.rows;
+								}
+							);
+
+						});
+
+						scope.pageNumber = "1";
+						scope.pageSize = "10";
+						scope.keyWord = "";
+						scope.changed_page_size = function() {
+							scope.pageNumber = 1;
+						}
+						//pagenum键盘触发事件
+						check_number = function(strings){
+							//_.each(strings,function(string){
+							//	if(strings.indexOf(string) == -1){
+							//		return true;
+							//	}
+							//})
+							//return false;
+							var patrn = /^[0-9]*$/;
+							if (patrn.exec(strings) == null) {
+								return false
+							} else {
+								return true
+							}
+						}
+						scope.search_keydown = function(pageNumber){
+								if(check_number(pageNumber)){
+									scope.pageNumber =parseInt(pageNumber);
+									if(scope.pageNumber > Math.ceil(scope.total/scope.pageSize)){
+										scope.pageNumber = Math.ceil(scope.total/scope.pageSize);
+									}else if(scope.pageNumber < 1 || scope.pageNumber == 0){
+										scope.pageNumber = 1;
+									}
+								}else if(!check_number(pageNumber) && check_number(pageNumber.charAt(0))){
+									//遍历pagenumber字符
+									var pageNum = '';
+									_.each(pageNumber,function(pageCode){
+										if(check_number(pageCode)){
+											pageNum = pageNum + pageCode;
+										}else{
+											return false;
+										}
+									})
+									scope.pageNumber = pageNum;
+								}else{
+									scope.pageNumber = 1;
+								}
+						}
+						//按回车键则查询主数据
+						scope.search_masDataEleList_keydown = function(event) {
+							if(event.keyCode == 13) {
+								scope.search_masDataEleList();
+							}
+						}
+						scope.search_masDataEleList = function() {
+								//							scope.type
+								//								switch(scope.masDataEleList_type.type) {
+								//									case "预算":
+								//										scope.type = 10;
+								//										break;
+								//									case "申请":
+								//										scope.type = 20;
+								//										break;
+								//									case "报销":
+								//										scope.type = 30;
+								//										break;
+								//								}
+
+								scope.keyWord = scope.masDataEleList_keywords;
+								scope.pageNumber = 1;
+								http_service.post(
+									scope.url, {
+										//										"code": scope.type,
+										"keyWord": scope.keyWord,
+										"num_per_page": scope.pageSize,
+										"page_num": scope.pageNumber
+									},
+									function(res) {
+										var data = res.data.data;
+										scope.total = data.total;
+										scope.attr_rows = data.rows;
+									}
+								);
+							},
+							scope.get_cloud_attr = function(defineCode) {
+								var attr_rows = scope.attr_rows;
+								var attr_select = _.filter(scope.attr_rows, function(attr) {
+									return attr.masDataDefineCode == defineCode;
+								})[0];
+								if(attr_select) {
+									scope.data = _.extend(scope.data, {
+										'gcCpnName': attr_select.masDataDefineName,
+										//'gcElType': attr_select.eleValueType,
+										//'gcCpnAlias': attr_select.eleNameName,
+										'gcElIden': attr_select.eleCodeCode || attr_select.eleNameCode,
+										'gcMeCode': attr_select.masDataDefineCode
+										//'gcValField': attr_select.eleCodeCode,
+										//'gcElType': attr_select.eleValueType,
+										//'gcElLeng': attr_select.eleValueLen
+										//'gcTxtField': attr_select.eleNameCode,
+										//'gcBindDs': attr_select.masDataDefineCode
+									});
+								}
+
+								scope.close();
+							};
+					},
+					post: function($scope, element, attrs) {
+
+					}
+				}
+			}
+		}
+	}])
+	//控件属性
+	.directive('frmElementAttrEditor', ['$rootScope', '$compile', 'http_service', function($rootScope, $compile, http_service) {
+		return {
+			restrict: 'EACM',
+			templateUrl: './static/templates/frm_elem_attrs_editor.html',
+			scope: {
+				element: '=',
+				data: '=',
+				type: '='
+			},
+			compile: function() {
+				return {
+					pre: function(scope, iElement, iAttrs, controller) {},
+					post: function($scope, element, attrs) {
+
+						//获取主数据
+						$scope.showMasDataEleList = function() {
+							var $directive = $('<div frm-elem-Cloud-attr action="' + $scope.$parent.action + '" type="type" data="data" ></div>');
+							$('div[ng-view]').append($directive);
+							$compile($directive)($scope);
+						};
+						$scope.add_select_option = function() {
+							$scope.data.gcOptList.push({
+								'value': '',
+								'selected': true
+							});
+						};
+						//获取系统变量
+						function ReturnDataType() {
+							http_service.post('systemMath/search/list', {}, function(res) {
+								$scope.type_eill = res.data.data;
+								
+							})
+						}
+						ReturnDataType();
+						//长度检查
+						$scope.check_length = function() {
+							$scope.data.gcElLeng = $scope.data.gcElLeng.replace(/\D/g, '');
+							$scope.data['length_err'] = undefined;
+							if($scope.data.gcElLeng != '') {
+								if($scope.data.gcElLeng > 100) {
+									$scope.data['length_err'] = '长度不能超过100';
+								}
+							}
+						}
+						$scope.remove_select_option = function(option) {
+							_.remove($scope.data.gcOptList, function(n) {
+								return n === option;
+							});
+						};
+
+						$scope.manadatory_ifd_check = function(event) {
+							var $this = $(event.target);
+							var $element = $($scope.element);
+							if($this.prop('checked')) {
+								$element.find('h8[name="el_title"]').prepend('<span class="manadatory_ifd">*</span>');
+							} else {
+								$element.find('h8[name="el_title"] > span.manadatory_ifd').remove();
+							}
+						}
+
+						$scope.process_ifd_check = function(event) {
+							var $this = $(event.target);
+							var $element = $($scope.element);
+							if($this.prop('checked')) {
+								$element.find('h8[name="el_title"] > span.process_ifd').html('△');
+							} else {
+								$element.find('h8[name="el_title"] > span.process_ifd').html('');
+							}
+						}
+						//关联公式编辑
+						$scope.add_hide_formula = function() {
+							http_service.post("base/data/search", { "code": $scope.data.gcMeCode, "cache_id": $scope.data.gcMeCode }, function(res) {
+								$scope.base_data = res.data.data.child;
+								$scope.relate_formula_content = []; //关联公式集合
+								$scope.relate_form_data_choose = []; //可隐藏的控件
+								$scope.item_choose = [];
+
+								$('.el_form').find('div[name="form_el_row"]').each(function(index, el) {
+									el_data = $(el).data('data');
+									if(el_data.gcShowFlag != 0 && el_data.gcMeCode != undefined && el_data.gcCpnType != 9 && el_data.gcCpnType != 10 && el_data != $scope.data && el_data.gcCpnType != 17) {
+										if($scope.data.parent_type == 0) {
+											if(el_data.parent_type == 0) {
+												$scope.relate_form_data_choose.push(el_data);
+											}
+										} else if($scope.data.parent_type == 1) {
+											if(el_data.parent_type == 1) {
+												$scope.relate_form_data_choose.push(el_data);
+											}
+										} else if($scope.data.parent_type == 2) {
+											if(el_data.parent_type == 2) {
+												$scope.relate_form_data_choose.push(el_data);
+											}
+										}
+									}
+								});
+								if($scope.data.cpnHide) { //回调
+									$scope.relate_formula_content = _.cloneDeep($scope.data.cpnHide);
+									
+									_.each($scope.relate_formula_content, function(formula) {
+										_.each($scope.base_data, function(base) {
+											if(formula.cVal == base.code) {
+												formula.cVal = _.cloneDeep(base);
+											}
+										})
+										var formula_back = [];
+										
+										_.each(formula.cHideItem, function(_formula) {
+											_.each($scope.relate_form_data_choose, function(choose) {
+												if(_formula == choose.gcMeCode) {
+													formula_back.push(_.cloneDeep(choose));
+												}
+											})
+										})
+										formula.cHideItem = formula_back;
+									})
+									
+								}
+								var $pop = $('<div class="bg-modal"><div ng-click="close_edl($event)" class="pop_panel_formula" onMouseOver ="$(this).draggable();event.stopPropagation()" ;>' +
+									'<div class="custom_validate_relate_formula">' +
+									'<div class="cv_title_relate_formula">关联公式编辑 <div class="close" ><img src="./static/img/close.png" style="width:60%;margin-top:5px;"></div></div>' +
+									'<div class="col-md-3 formula_left">' +
+									'<p>表单控件</p>' +
+									'<ul>' +
+									'<li ng-repeat="item in relate_form_data_choose">' +
+									'<span ng-click="add_hide_item(item)" class="btn choose_item">{{item.gcCpnAlias}}</span>' +
+									'</li>' +
+									'</ul>' +
+									'</div>' +
+									'<div class="cv_fields_formula col-md-9">' +
+									'<div class="field_name_father">' +
+									'<div class="field_name">' +
+									$scope.data.gcCpnAlias + "&nbsp;=" +
+									'</div>' +
+									'<div class="formula_type">' +
+									'控件值&nbsp;' +
+									'<select ng-model="base_data_now" ng-options="base.value for base in base_data" ng-change="clear_hide_item()">' +
+									'</select>' +
+									'</div>' +
+									'</div>' +
+									'<div class="hide_content">' +
+									'<div class="hide_item">' +
+									'<ul>' +
+									'<li ng-repeat="item in item_choose">{{item.gcCpnAlias}}</li>' +
+									'</ul>' +
+									'</div>' +
+									'<button ng-click="insert_hide_item()" class="btn btn-action btn-success btn-favourite">确定</button>' +
+									'<button ng-click="clear_hide_item()" class="btn btn-action btn-success btn-favourite">清除</button>' +
+									'</div>' +
+									'<table class="table relate_talble">' +
+									'<thead>' +
+									'<tr>' +
+									'<th>控件值</th>' +
+									'<th>被隐藏的控件</th>' +
+									'</tr>' +
+									'</thead>' +
+									'<tbody>' +
+									'<tr ng-repeat="relate_item in relate_formula_content">' +
+									'<td>{{relate_item.cVal.value}}</td>' +
+									'<td>' +
+									'<span ng-repeat="single_item in relate_item.cHideItem">{{single_item.gcCpnAlias}}</span>' +
+									'<i ng-click="remove_relate_formula(relate_item)"><img src="./static/img/delete.png" class="deleteelment"></i>' +
+									'</td>' +
+									'</tr>' +
+									'</tbody>' +
+									'</table>' +
+									'</div>' +
+									'<div class="formula_btn">' +
+									'<button ng-click="relate_formula_commit()" class="btn btn-action btn-success btn-favourite confirm">保存</button>' +
+									'<button class="btn btn-action btn-success btn-favourite cancel">取消</button>' +
+									'</div>' +
+									'</div>' +
+									'</div></div>');
+								var $popdiv = $compile($pop)($scope);
+								$('body').append($popdiv);
+								$pop.find('div.close, button.cancel').on('click', function() {
+									$(this).closest('div.bg-modal').remove();
+								});
+								$scope.add_hide_item = function(item) {
+									var push_flag = true;
+									_.each($scope.item_choose, function(choose) {
+										if(_.isEqual(choose, item)) {
+											push_flag = false;
+										}
+									})
+									if(push_flag) {
+										$scope.item_choose.push(_.cloneDeep(item));
+									}
+								}
+								$scope.insert_hide_item = function() { //将要隐藏的控件加入表格中
+									if($scope.base_data_now != undefined && $scope.item_choose.length !==0) {
+										$scope.relate_formula_content.push({
+											"cVal": $scope.base_data_now,
+											"cHideItem": _.cloneDeep($scope.item_choose)
+										});
+									}else if($scope.base_data_now == undefined){
+										$rootScope.twarning("请选择控件值");
+									}else if($scope.item_choose.length == 0){
+										$rootScope.twarning("请选择表单控件");
+									}
+									$scope.clear_hide_item();
+								}
+								$scope.clear_hide_item = function() { //清空要隐藏的控件
+									$scope.item_choose = [];
+								}
+								$scope.remove_relate_formula = function(relate_item) { //删除一条关联公式
+									_.remove($scope.relate_formula_content, function(o) {
+										return o == relate_item;
+									})
+								}
+								$scope.relate_formula_commit = function() { //保存关联公式
+									var save_relate_formula = [];
+									_.each($scope.relate_formula_content, function(formula) {
+										var item_arr = [];
+										_.each(formula.cHideItem, function(item) {
+											item_arr.push(item.gcMeCode);
+										})
+										save_relate_formula.push({
+											"cVal": formula.cVal.code,
+											"cHideItem": item_arr
+										})
+									})
+									
+									_.extend($scope.data, { "cpnHide":save_relate_formula});
+									
+									$('div.bg-modal').remove();
+								}
+							}, true);
+						}
+						//公式编辑
+						$scope.add_formula = function() {
+							$scope.formula_content = "";
+							$scope.form_data_choose = [];
+							$('.el_form').find('div[name="form_el_row"]').each(function(index, el) {
+								var el_data = $(el).data('data');
+								if(el_data.gcMeCode != undefined && el_data.gcCpnType != 9 && el_data.gcCpnType != 10 && el_data.gcCpnType != 0 && el_data.gcCpnType != 14 && el_data != $scope.data && el_data.gcCpnType != 17) {
+									if($scope.data.parent_type == 1) { //公式条件不可跨子表单
+										if(el_data.parent_type != 2) {
+											$scope.form_data_choose.push(el_data);
+										}
+									} else if($scope.data.parent_type == 2) {
+										if(el_data.parent_type != 1) {
+											$scope.form_data_choose.push(el_data);
+										}
+									} else {
+										$scope.form_data_choose.push(el_data);
+									}
+								}
+							})
+							$scope.mResultFromat = [
+								{ "code": 1, "value": "parseInt({val})" },
+								{ "code": 2, "value": "parseFloat({val}.toFixed(2))" },
+								{ "code": 3, "value": "parseFloat({val}.toFixed(3))" }
+							];
+							$scope.fx_data = [{
+								"fx_name": "日期函数",
+								"fx_value": "Day()",
+								"fx_str": "Day",
+								"fx_formula_str": "(1/(24*60*60*1000))*"
+							}]
+							var edl_arr = [];
+							$scope.value_type = "";
+							//							if($scope.data.joinMath){
+							if($scope.data.joinMath && $scope.data.joinMath.length > 0) {
+								if($scope.data.joinMath[0].cpnMath.mView) {
+									$scope.formula_content = $scope.data.joinMath[0].cpnMath.mView; //显示公式回调
+								}
+								_.each($scope.mResultFromat, function(_result) {
+									if(_result.value == $scope.data.joinMath[0].cpnMath.mResultFromat) {
+										$scope.value_type = _result.code;
+									}
+								})
+								_.each($scope.data.joinMath[0].cpnMath.child, function(cpn) {
+									if(cpn.pIndex != 0) {
+										edl_arr.push(cpn);
+									}
+								})
+							}
+							//							}
+
+							_.each($scope.form_data_choose, function(data) {
+								data['edl'] = "";
+								_.each(edl_arr, function(edl) {
+									if(data.gcMeCode == edl.pMdCode && edl.meName != undefined) {
+										data['edl'] = { "meCode": edl.pMeCode, "meName": edl.meName }; //元素选择回调
+									}
+								})
+							});
+							var $pop = $('<div class="bg-modal"><div ng-click="close_edl($event)" class="pop_panel_formula" onMouseOver ="$(this).draggable();event.stopPropagation()" ;>' +
+								'<div class="custom_validate_formula">' +
+								'<div class="cv_title_formula">公式编辑 <div class="close" ><img src="./static/img/close.png" style="width:60%;margin-top:5px;"></div></div>' +
+								'<div class="col-md-4 formula_left">' +
+								'<p>表单控件</p>' +
+								'<ul>' +
+								'<li ng-repeat="item in form_data_choose">' +
+								'<span ng-click="add_item(item)" class="btn choose_item">{{item.gcCpnAlias}}</span>' +
+								'<span class="btn choose_edl" ng-click="add_mecode(item,$event)">元素选择</span>' +
+								'<ul ng-show="item.show_edl" class="fromula_edl">' +
+								'<li ng-click="add_edl(item,data)" ng-repeat="data in item.edl_data">{{data.meName}}</li>' +
+								'</ul>' +
+								'<span class="edl" ng-show="item.edl">{{item.edl.meName}}</span>' +
+								'</li>' +
+								'</ul>' +
+								'</div>' +
+								'<div class="cv_fields_formula col-md-6">' +
+								'<div class="field_name_father">' +
+								'<div class="field_name">' +
+								$scope.data.gcCpnAlias + "&nbsp;=" +
+								'</div>' +
+								'<div class="formula_type">' +
+								'结果格式' +
+								'<select ng-model="value_type">' +
+								'<option ng-value=""> 无限制 </option>' +
+								'<option ng-value="1"> 整数</option>' +
+								'<option ng-value="2"> 保留2位小数 </option>' +
+								'<option ng-value="3"> 保留3位小数</option>' +
+								'</select>' +
+								'</div>' +
+								'</div>' +
+								//									'<div class="col-md-12">'+
+								//										'<div>'+
+								'<textarea  id="formula_content" ng-model="formula_content">' +
+
+								'</textarea>' +
+								//										'</div>'+
+								//									'</div>'+
+								'</div>' +
+								'<div class="col-md-2 formula_right">' +
+								'<p>公式函数</p>' +
+								'<ul>' +
+								'<li class="btn" ng-repeat="fx in fx_data" ng-click="add_fx(fx)">{{fx.fx_name}}</li>' +
+								'</ul>' +
+								'</div>' +
+								'<div class="formula_btn">' +
+								'<button ng-click="formula_commit()" class="btn btn-action btn-success btn-favourite confirm">确定</button>' +
+								'<button class="btn btn-action btn-success btn-favourite cancel">取消</button>' +
+								'</div>' +
+								'</div>' +
+								'</div></div>');
+							var $popdiv = $compile($pop)($scope);
+							$('body').append($popdiv);
+							$pop.find('div.close, button.cancel').on('click', function() {
+								$(this).closest('div.bg-modal').remove();
+							});
+
+							function insertAfterText(textDom, value) { //在光标后插入文本
+								var selectRange;
+								if(document.selection) {
+									// IE Support
+									textDom.focus();
+									selectRange = document.selection.createRange();
+									selectRange.text = value;
+									$scope.formula_content = selectRange.text;
+									textDom.focus();
+								} else if(textDom.selectionStart || textDom.selectionStart == '0') {
+									// Firefox support
+									var startPos = textDom.selectionStart;
+									var endPos = textDom.selectionEnd;
+									var scrollTop = textDom.scrollTop;
+									$scope.formula_content = $scope.formula_content.substring(0, startPos) + value + $scope.formula_content.substring(endPos, $scope.formula_content.length);
+									textDom.focus();
+									textDom.selectionStart = startPos + value.length;
+									textDom.selectionEnd = startPos + value.length;
+									textDom.scrollTop = scrollTop;
+								} else {
+									$scope.formula_content += value;
+									textDom.focus();
+								}
+							}
+							$scope.add_item = function(item) { //添加控件
+								var formula_str = "[" + item.gcCpnAlias + "]";
+								insertAfterText(document.getElementById("formula_content"), formula_str);
+							}
+							$scope.add_mecode = function(item, event) {
+								http_service.post("base/data/element/info", { "code": item.gcMeCode }, function(res) {
+									_.each($scope.form_data_choose, function(_form) {
+										if(_form == item) {
+											_form['edl_data'] = res.data.data;
+											_form['show_edl'] = true;
+										} else {
+											_form['show_edl'] = false;
+										}
+									})
+								});
+
+								event.stopPropagation();
+							}
+							$scope.close_edl = function(event) {
+								_.each($scope.form_data_choose, function(_form) {
+									_form['show_edl'] = false;
+								});
+								event.stopPropagation();
+								event.preventDefault();
+							}
+							$scope.add_edl = function(item, data) {
+								_.each($scope.form_data_choose, function(_form) {
+									if(_form == item) {
+										_form['edl'] = data;
+									}
+								});
+							}
+							$scope.add_fx = function(fx) {
+								insertAfterText(document.getElementById("formula_content"), fx.fx_value);
+							}
+							$scope.formula_commit = function() { //保存公式
+								var formula_str = $scope.formula_content;
+								var str = $scope.formula_content,
+									reg = /\[(.*?)\]/g,
+									code_arr = [],
+									x = null;
+								while((x = reg.exec(str)) != null) {
+									code_arr.push(x[1]);
+								}
+								var formula_code = [];
+								formula_code.push({ "pMdCode": $scope.data.gcMeCode, "pType": 10, "pIndex": 0, "pMeCode": "code" });
+								
+								_.each(code_arr, function(code, i) {
+									_.each($scope.form_data_choose, function(item) {
+										if(code == item.gcCpnAlias) {
+											if(item.edl && item.edl != '') {
+												formula_code.push({ "pMdCode": item.gcMeCode, "pType": 10, "pIndex": (i + 1), "pMeCode": item.edl.meCode, "meName": item.edl.meName });
+											} else {
+												formula_code.push({ "pMdCode": item.gcMeCode, "pType": 10, "pIndex": (i + 1), "pMeCode": "code" });
+											}
+											if(item.gcCpnType == 5) {
+												formula_str = formula_str.replace("[" + code + "]", "new Date({" + (i + 1) + "})");
+											} else {
+												formula_str = formula_str.replace("[" + code + "]", "{" + (i + 1) + "}");
+											}
+											
+										}
+									})
+								});
+								_.each($scope.fx_data, function(fx) {
+									if(formula_str.indexOf(fx.fx_str) != -1) {
+										formula_str = formula_str.replace(new RegExp(fx.fx_str, 'g'), fx.fx_formula_str);
+									}
+								})
+								var mResultFromat;
+								_.each($scope.mResultFromat, function(_result) {
+									if(_result.code == $scope.value_type) {
+										mResultFromat = _result.value;
+									}
+								});
+								//								var post_data = {
+								//									"child":formula_code,
+								//									"mCount":formula_str,
+								//									"mType":10,
+								//									"mView":$scope.formula_content,
+								//									"mResultFromat":mResultFromat
+								//								}
+								//								http_service.post("form/math/insert",post_data,function(res){
+								if($scope.formula_content == "" || $scope.formula_content == undefined) {
+									$scope.data['joinMath'] = [];
+								} else {
+									$scope.data['joinMath'] = [{
+										"cpnMath": {
+											"mCount": formula_str,
+											//														"mName" : "公式名称",
+											"mResultFromat": mResultFromat,
+											"mType": 10,
+											"mView": $scope.formula_content,
+											"child": formula_code
+										}
+									}];
+								}
+								$pop.find('div.close, button.cancel').closest('div.bg-modal').remove();
+								//								});
+							}
+						}
+						$scope.add_customize_validation = function() {
+							// 加入的控件数据项
+							if($scope.data.gcErrorMsg == undefined) {
+								$scope.data.gcErrorMsg = "";
+							}
+							var isfixed;
+							if($scope.data.gcCheckCpnCode == -1) {
+								isfixed = 0;
+							} else {
+								isfixed = 1;
+							}
+							//							$rootScope.checkdata = $scope.data;
+							var titleText = '';
+							$('.el_form').find('div[name="form_el_row"]').each(function(index, el) {
+								el_data = $(el).data('data');
+								if(el_data.gcCpnType != 9 && el_data.gcCpnType != 10 && el_data.gcCpnType != 17) {
+									if($scope.data.parent_type != 2) { //支付方式子表单中的比较控件只能是支付方式子表单中的控件
+										if(el_data.parent_type != 2) {
+											titleText += '<option value="' + el_data.gcMeCode + '">' + el_data.gcCpnAlias + '</option>';
+										}
+									} else {
+										if(el_data.parent_type == 2) {
+											titleText += '<option value="' + el_data.gcMeCode + '">' + el_data.gcCpnAlias + '</option>';
+										}
+									}
+								}
+							})
+
+							var $pop = $('<div class="bg-modal"><div class="pop_panel" onMouseOver ="$(this).draggable();event.stopPropagation()" style="width:450px;height:270px;" id="create_order" ;>' +
+								'<div class="custom_validate">' +
+								'<div class="cv_title">校验规则设置 <div class="close" ><img src="./static/img/close.png" style="width:60%;margin-top:5px;"></div></div>' +
+								'<div class="cv_fields">' +
+								'<div class="col-md-3">控件名称</div><div class="col-md-3">比较符号</div><div class="col-md-3">数据项</div><div class="col-md-3">固定值</div>' +
+								'<div class="col-md-3">' +
+								'<div class="field_name">' +
+								$scope.data.gcCpnAlias +
+								'</div>' +
+								'</div>' +
+								'<div class="col-md-3">' +
+								'<select name="operator" ng-model="data.gcCheckOp">' +
+								'<option value=""> --请选择-- </option>' +
+								'<option value="<"> < </option>' +
+								'<option value="<="> <= </option>' +
+								'<option value=">"> > </option>' +
+								'<option value=">="> >= </option>' +
+								'<option value="=="> == </option>' +
+								'<option value="<>"> <> </option>' +
+								'</select>' +
+								'</div>' +
+								'<div class="col-md-3">' +
+								'<select name="data" ng-model="data.gcCheckCpnCode">' +
+								'<option value=""> --请选择-- </option>' +
+								//'<option value="0"> 已选择控件 </option>'+
+								titleText +
+								'<option value="-1"> 固定值 </option>' +
+								'</select>' +
+								'</div>' +
+								'<div class="col-md-3" >' +
+								'<input type="text" ng-disabled="' + isfixed + '" name="fixed_value" ng-model="data.gcCheckValue" >' +
+								'</div>' +
+								'</div>' +
+								'<div class="cv_label">提示信息</div>' +
+								'<div class="cv_msg_field">' +
+								'<input type="text"  name="msg" value="' + $scope.data.gcErrorMsg + '">' +
+								'</div>' +
+								'<div class="cv_btns">' +
+								//								'<div><button class="cancel">取消</button></div>' +
+								'<div><button class="confirm btn btn-action btn-success btn-favourite">确认</button></div>' +
+								'</div>' +
+								'</div>' +
+								'</div></div>');
+							var $popdiv = $compile($pop)($scope);
+							$('body').append($popdiv);
+							$pop.find('div.close, button.cancel').on('click', function() {
+								$(this).closest('div.bg-modal').remove();
+							});
+							$pop.find('select[name="data"]').on('change', function() {
+								$('input[name="fixed_value"]').val("");
+								if($(this).val() === '-1') {
+									$('input[name="fixed_value"]').removeAttr('disabled');
+								} else {
+									$('input[name="fixed_value"]').attr('disabled', 'disabled');
+								}
+							});
+							$pop.find('button.confirm').on('click', function() {
+								var operator = $pop.find('select[name="operator"]').val();
+								var data = $pop.find('select[name="data"]').val();
+								var fixed_value = $pop.find('input[name="fixed_value"]').prop('disabled') ? null : $pop.find('input[name="fixed_value"]').val();
+								var msg = $pop.find('input[name="msg"]').val();
+								if(operator) {
+									$scope.data.gcCheckOp = operator;
+								} else {
+									$scope.data.gcCheckOp = '';
+								}
+								if(data) {
+									$scope.data.gcCheckCpnCode = data;
+								} else {
+									$scope.data.gcCheckCpnCode = '';
+								}
+								if(fixed_value) {
+									$scope.data.gcCheckValue = fixed_value;
+								} else {
+									$scope.data.gcCheckValue = '';
+								}
+								if(msg) {
+									$scope.data.gcErrorMsg = msg;
+								} else {
+									$scope.data.gcErrorMsg = '';
+								}
+								$rootScope.swalsuccess({ "text": "校验规则设置完成" });
+								//								$('.bg-modal').hide();
+								$(this).closest('div.bg-modal').remove();
+							});
+						}
+
+						$scope.$watch('data', function(data) {
+							var $element = $($scope.element);
+							for(var el_attr in data) {
+								var el_attr_val = data[el_attr];
+								switch(el_attr) {
+									case 'gcCpnAlias':
+										$element.find(' > h8 > span.text').html(el_attr_val);
+										break;
+									case 'gcCpnDisc':
+										$element.find('> div[name="el_desc"]').html(el_attr_val);
+										break;
+									case 'gcDefVal':
+										$element.find('> div > input, > div > textarea').val(el_attr_val);
+										break;
+								}
+							}
+						}, true);
+
+					}
+				}
+			}
+		}
+	}])
+
+	//设置空白模板的控制器
+	.controller('budgetFormCustomizeCtrl', ['$scope', '$compile', 'http_service', '$routeParams', '$rootScope', '$timeout', '$route', function($scope, $compile, http_service, $routeParams, $rootScope, $timeout, $route) {
+		$scope.business = $routeParams.business;
+		$scope.type = $routeParams.type;
+		$scope.form_id = $routeParams.id;
+		$scope.action = $routeParams.action;
+
+		//点击保存触发的事件
+		var create_forms_flag = true;
+		$scope.create_forms = function() {
+			if(!create_forms_flag) {
+				return false;
+			}
+			create_forms_flag = false;
+			var post_data = [];
+			var el_data;
+			$('.el_form').find('div[name="form_el_row"]').each(function(index, el) {
+				el_data = $(el).data('data');
+				
+				if(el_data && !$(el).parent().closest('div.sub_form').length) {
+					if(el_data['gcCpnType'] === 10 || el_data['gcCpnType'] === 17) {
+						var children = [];
+						$(el).find('div[name="form_el_row"]').each(function(index, _el) {
+							if($(_el).data('data')) {
+								var _el_data = $(_el).data('data');
+								children.push(_el_data);
+							}
+						});
+						el_data['child'] = children;
+					}
+					el_data.gcInputMust = !el_data.gcInputMust ? 0 : 1;
+					post_data.push(el_data);
+
+				}
+			});
+			var child_num = 0;
+			var people_item = true;
+			var org_item = true;
+			var length_err_arr = []; //判断长度限制
+			_.each(post_data, function(_pd) {
+				delete _pd.show_edl;
+				delete _pd.edl;
+				delete _pd.edl_data;
+				delete _pd.parent_type;
+				if(_pd.length_err) {
+					length_err_arr.push(_pd.gcCpnAlias);
+				}
+				if(_pd.gcCpnType == 10) {
+					child_num++
+					_.each(_pd.child, function(cd) {
+						if(cd.length_err) {
+							length_err_arr.push(cd.gcCpnAlias);
+						}
+						delete cd.show_edl;
+						delete cd.edl;
+						delete cd.edl_data;
+						delete cd.parent_type;
+						if(cd.gcCpnType == 12) {
+							people_item = false;
+						} else if(cd.gcCpnType == 10) {
+							child_num = -1000;
+						} else if(cd.gcCpnType == 16) {
+							org_item = false;
+						}
+					})
+				}
+				if(_pd.gcCpnType == 17) {
+					_.each(_pd.child, function(cd) {
+						if(cd.length_err) {
+							length_err_arr.push(cd.gcCpnAlias);
+						}
+						delete cd.show_edl;
+						delete cd.edl;
+						delete cd.edl_data;
+						delete cd.parent_type;
+						if(cd.gcCpnType == 12) {
+							people_item = false;
+						} else if(cd.gcCpnType == 16) {
+							org_item = false;
+						}
+					})
+				}
+			})
+			if(length_err_arr.length > 0) {
+				var length_err_str = length_err_arr.join(",");
+				$scope.$parent.terro(length_err_str + "长度限制错误");
+				create_forms_flag = true;
+				return false;
+			}
+			if(child_num > 1) {
+				$scope.$parent.terro('只能有一个子表单');
+				create_forms_flag = true;
+				return false;
+			} else if(child_num < 0) {
+				$scope.$parent.terro('子表单中不能嵌套子表单');
+				create_forms_flag = true;
+				return false;
+			}
+//			if(people_item == false) {
+//				$scope.$parent.terro('人员控件不可以在子表单中');
+//				create_forms_flag = true;
+//				return false;
+//			}
+			if(org_item == false) {
+				$scope.$parent.terro('组织结构控件不可以在子表单中');
+				create_forms_flag = true;
+				return false;
+			}
+			if(!$scope.guTempName) {
+				//alert('模本名称未填写。');
+				$scope.twarning("模本名称未填写!");
+				create_forms_flag = true;
+				create_forms_flag = true;
+				/*
+				}else if(!$scope.guTempDisc){
+				    alert('模板描述为填写。');
+				*/
+			} else if(post_data.length != 0) {
+				var forms_data = {
+					"guTempType": $scope.type,
+					"guTempName": $scope.guTempName,
+					"guTempDisc": $scope.guTempDisc,
+					"child": post_data
+				};
+				if($scope.form_id) {
+					// action != 3  表单修改 else 模板修改
+					if($scope.action != 3) {
+						forms_data = _.extend(forms_data, {
+							'guId': $scope.form_id,
+							'cache_id': $scope.type
+						});
+						http_service.post('form/save', forms_data, function(res) {
+							if(res.status == 200) {
+								if(res.data.errMsg) {
+									$scope.$parent.terro(res.data.errMsg)
+
+									//alert(res.data.errMsg);
+								} else {
+									if(res.data.opState) {
+										$scope.$parent.tsuccess('表单' + $scope.guTempName + '更新成功。');
+										window.history.go(-1);
+									} else {
+										$scope.$parent.terro('表单' + $scope.guTempName + '更新失败。')
+
+									}
+									// alert('表单'+$scope.guTempName+'更新成功。');
+								}
+							}
+							create_forms_flag = true;
+						});
+					} else {
+						forms_data = _.extend(forms_data, {
+							'guId': $scope.form_id,
+							'cache_id': $scope.type
+						});
+						http_service.post('template/update', forms_data, function(res) {
+							if(res.status == 200) {
+								if(res.data.errMsg) {
+									$scope.$parent.terro(res.data.errMsg)
+
+									//alert(res.data.errMsg);
+								} else {
+									if(res.data.opState) {
+
+										$scope.$parent.tsuccess('模板' + $scope.guTempName + '更新成功。')
+									} else {
+										$scope.$parent.terro('模板' + $scope.guTempName + '更新失败。')
+									}
+
+									//alert('模板'+$scope.guTempName+'更新成功。');
+								}
+							}
+							create_forms_flag = true;
+						});
+					}
+				} else {
+					// action != 3  表单新增 else 模板新增
+					if($scope.action != 3) {
+						forms_data = _.extend(forms_data, {
+							'cache_id': $scope.type
+						});
+						http_service.post('form/save', forms_data, function(res) {
+							if(res.status == 200) {
+								if(res.data.errMsg) {
+									//									swal({
+									//										title: "错误",
+									//										text: res.data.errMsg,
+									//										type: "error",
+									//										confirmButtonText: "确定",
+									//									})
+									$scope.$parent.terro(res.data.errMsg)
+
+									//alert(res.data.errMsg);
+								} else {
+									if(res.data.opState) {
+										$scope.$parent.tsuccess('表单' + $scope.guTempName + '创建成功。');
+										var new_form_data = res;
+										new_form_data.data.data = forms_data;
+										window.history.go(-1);
+									} else {
+										$scope.$parent.terro('表单' + $scope.guTempName + '创建失败。')
+
+									}
+									//alert('表单'+$scope.guTempName+'创建成功。');
+								}
+							}
+							create_forms_flag = true;
+						});
+					} else {
+						forms_data = _.extend(forms_data, {
+							"guIndusId": $scope.business,
+							"guTempSource": 1
+						})
+						http_service.post('template/insert', forms_data, function(res) {
+							if(res.status == 200) {
+								if(res.data.errMsg) {
+									$scope.$parent.terro(res.data.errMsg)
+
+									//alert(res.data.errMsg);
+								} else {
+									if(res.data.opState) {
+										$scope.$parent.tsuccess('模板' + $scope.guTempName + '创建成功。')
+										window.history.go(-1);
+									} else {
+										$scope.$parent.terro('模板' + $scope.guTempName + '创建失败。')
+
+									}
+
+									//alert('模板'+$scope.guTempName+'创建成功。');
+								}
+							}
+							create_forms_flag = true;
+						});
+					}
+				}
+
+			} else {
+				$scope.twarning("表单不能为空!")
+			}
+		};
+
+		$scope.$on('$viewContentLoaded', function() {
+			if($scope.form_id) {
+				// action:1 编辑已有表单  action:2 || 3 根据模板编辑
+				if($scope.action == 1) {
+					http_service.post('form/list', {
+						"guTempType": parseInt($scope.type),
+						"cache_id": parseInt($scope.type)
+					}, function(res) {
+						if(!res.data.opState) {
+							return false;
+						}
+						var data = res.data.data;
+						$scope.guTempName = data.guTempName;
+						$scope.guTempDisc = data.guTempDisc;
+						build_form_editor(data);
+					}, true);
+				} else if($scope.action == 2 || $scope.action == 3) {
+					http_service.post('template/cpn/search', {
+						"gcTempId": $scope.form_id
+					}, function(res) {
+						var data = res.data.data;
+						if(data) {
+							$scope.guTempName = data.guTempName;
+							$scope.guTempDisc = data.guTempDisc;
+							build_form_editor(data);
+						}
+					})
+				}
+			} else {
+				build_form_editor();
+			}
+
+			$('div.split_form').height($(document).height() - 52);
+			$(window).resize(function() {
+				$('div.split_form').height($(document).height() - 52);
+			});
+
+			function build_form_editor(edit_form_data) {
+				var fb = new form_builder.create();
+				var data = {
+					'gcCpnName': '',
+					'gcCpnType': '',
+					'gcDmlLeng': '', //精度
+					'gcShowFlag': 1, // show flag
+					'gcEditFlag': 1,
+					'gcCpnAlias': '未命名',
+					'gcCpnDisc': '',
+					'gcDefVal': '',
+					'gcInputMust': 0,
+					'gcCpnInCol': 2,
+					'gcElIden': "元素标志符", // adding
+					'gcElLeng': 50, //adding
+					'gcMathId': 0
+
+				};
+				fb.add_elements([{
+						'type': 0,
+						'btn': '<button class="btn btn-success btn-elb">预算选择</button>',
+						'field': '<div class="multi_level_select"><div>点击选择</div></div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '预算选择',
+							'gcCpnType': 0,
+							'gcCpnInCol': 2
+						}))
+					},
+					{
+						'type': 1,
+						'btn': '<button class="btn btn-success btn-elb"><span class="fa fa-font"></span>  单行文本 </button>',
+						'field': '<input readonly >',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '单行文本',
+							'gcCpnType': 1,
+							'gcCpnFormat': 0
+
+						}))
+
+					},
+					{
+						'type': 2,
+						'btn': '<button class="btn btn-success btn-elb"><i class="fa fa-paragraph"></i>  多行文本 </button>',
+						'field': '<textarea readonly></textarea>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '多行文本',
+							'gcCpnType': 2
+						}))
+					},
+					//					{
+					//						'type': 3,
+					//						'btn': '<button class="btn btn-success btn-elb"><i class="fa fa-square-o"></i>  复选框 </button>',
+					//						'field': '<div>' +
+					//							'<div>' +
+					//							'<input type="checkbox" name="test_multi_radio">' +
+					//							'</div>' +
+					//							'</div>',
+					//						'data': _.cloneDeep(_.extend(data, {
+					//							'gcCpnAlias': '复选框',
+					//							'gcCpnType': 3,
+					//							'gcOptList': [{ 'value': '', 'selected': true }]
+					//						}))
+					//					},
+					//					{
+					//						'type': 4,
+					//						'btn': '<button class="btn btn-success btn-elb"><i class="fa fa-circle-o"></i>  单选框 </button>',
+					//						'field': '<input type="radio" readonly>',
+					//						'data': _.cloneDeep(_.extend(data, {
+					//							'gcCpnAlias': '单选框',
+					//							'gcCpnType': 4,
+					//							'gcOptList': [{ 'value': '', 'selected': true }]
+					//						}))
+					//					},
+					{
+						'type': 5,
+						'btn': '<button class="btn btn-success btn-elb"><i class="fa fa-calendar"></i>  日期时间 </button>',
+						'field': '<div class="dateclass">' +
+							'<input type="text" readonly class="ifd_time_picker" >' +
+							'<img src="./static/img/calendar.png" class="ifd_time_picker">' +
+							'</div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '日期时间',
+							'gcCpnType': 5,
+							'gcCpnFormat': 30,
+							
+
+						}))
+					},
+					{
+						'type': 6,
+						'btn': '<button class="btn btn-success btn-elb"><i class="fa fa-chevron-down"></i>  下拉框 </button>',
+						'field': '<div class="select3-element"><div class="select-container"  style="width:285px"><div class="suffix"><i class="fa fa-caret-down" aria-hidden="true"></i></div></div></div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '下拉框',
+							'gcCpnType': 6,
+							'gcCpnMultiple': 0,
+							'gcOptList': [{ 'value': '', 'selected': true }]
+						}))
+					},
+					{
+						'type': 7,
+						'btn': '<button class="btn btn-success btn-elb">123  数字 </button>',
+						'field': '<input  readonly/>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '123  数字',
+							'gcCpnType': 7,
+							'gcCpnFormat': 20
+						}))
+					},
+					/*
+					{
+					    'type': 8,
+					    'btn': '<button class="btn btn-success btn-elb"><i class="fa fa-home"></i>  地址 </button>',
+					    'field': '<div>'+
+					                    '<div>'+
+					                        '<select class="addr_select" disabled>'+
+					                            '<option value=""  selected>省/自治区/直辖市</option>'+
+					                        '</select>'+
+					                        '<select class="addr_select" disabled>'+
+					                            '<option value=""  selected>市</option>'+
+					                        '</select>'+
+					                        '<select class="addr_select" disabled>'+
+					                            '<option value=""  selected>区/县</option>'+
+					                        '</select>'+
+					                    '</div>'+
+					                    '<div class="addr_txt">'+
+					                       
+					                    '</div>'+
+					                '</div>',
+					    'data': _.cloneDeep(_.extend(data, {
+					        'gcCpnAlias': '地址',
+					        'gcCpnType': 8
+					    }))
+					},
+					*/
+
+					{
+						'type': 9,
+						'btn': '<button class="btn btn-success btn-elb">--  分割线 </button>',
+						'field': '<hr>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '--  分割线',
+							'gcCpnType': 9
+						}))
+					},
+					{
+						'type': 10,
+						'btn': '<button class="btn btn-success btn-elb">子表单</button>',
+						'field': '<div class="sub_form" ></div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '子表单',
+							'gcCpnType': 10,
+							'gcCpnInCol': 2
+
+						}))
+					},
+
+					//					{
+					//						'type': 11,
+					//						'btn': '<button class="btn btn-success btn-elb">城市选择</button>',
+					//						'field': '<div class="multi_level_select"><div>点击选择</div></div>',
+					//						'data': _.cloneDeep(_.extend(data, {
+					//							'gcCpnAlias': '城市选择',
+					//							'gcCpnType': 11
+					//						}))
+					//					},
+
+					{
+						'type': 12,
+						'btn': '<button class="btn btn-success btn-elb">人员选择</button>',
+						'field': '<div class="multi_level_select"><div>点击选择</div></div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '人员选择',
+							'gcCpnType': 12
+						}))
+					},
+					//					{
+					//						'type': 13,
+					//						'btn': '<button class="btn btn-success btn-elb">部门选择</button>',
+					//						'field': '<div class="multi_level_select"><div>点击选择</div></div>',
+					//						'data': _.cloneDeep(_.extend(data, {
+					//							'gcCpnAlias': '部门选择',
+					//							'gcCpnType': 13
+					//						}))
+					//					},
+					{
+						'type': 14,
+						'btn': '<button class="btn btn-success btn-elb">申请单选择</button>',
+						'field': '<div class="multi_level_select"><div>点击选择</div></div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '申请单选择',
+							'gcCpnType': 14,
+							'gcCpnInCol': 2
+						}))
+					},
+					{
+						'type': 15,
+						'btn': '<button class="btn btn-success btn-elb">标签</button>',
+						'field': '<label readonly >',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '标签',
+							'gcCpnType': 15,
+						}))
+					},
+					{
+						'type': 17,
+						'btn': '<button class="btn btn-success btn-elb">支付方式子表单</button>',
+						'field': '<div class="sub_form sub_form_pay" ></div>',
+						'data': _.cloneDeep(_.extend(data, {
+							'gcCpnAlias': '支付方式子表单',
+							'gcCpnType': 17,
+							'gcCpnInCol': 2
+						}))
+					}
+					//					{
+					//						'type': 16,
+					//						'btn': '<button class="btn btn-success btn-elb">组织机构</button>',
+					//						'field': '<div class="multi_level_select"><div>点击选择</div></div>',
+					//						'data': _.cloneDeep(_.extend(data, {
+					//							'gcCpnAlias': '组织机构',
+					//							'gcCpnType': 16
+					//						}))
+					//					}
+				]);
+				fb.add_forms('.el_form');
+				fb.add_forms('.sub_form');
+				fb.add_elements_box('.left');
+				fb.recover_form_data(edit_form_data, 'gcCpnType');
+				fb.element_appended_callback(after_el_append);
+				fb.bootstrap();
+			}
+
+		});
+
+		function edit_attrs($element) {
+			var data = $element.data('data');
+			/*
+			var $el = $(`
+			        <div 
+			            frm-element-attr-editor
+			            element="element" 
+			            data="data"
+			        >
+			        </div>
+			    `);
+			$('div[name="el_attr_editor_container"]').html($el);
+			$timeout(function(){
+			    $compile($el)($scope);
+			}, 0);
+			*/
+			$scope.$apply(function() {
+				$scope.element = $element;
+				$scope.data = data;
+				//$scope.$apply();
+			});
+		}
+
+		function clone_el_data(dst, src) {
+			var dst_els = dst.find('div[name="form_el_row"]');
+			var src_els = src.find('div[name="form_el_row"]');
+			if(dst_els.length) {
+				src_els.each(function(index, el) {
+					$(dst_els[index]).data('data', _.cloneDeep($(el).data('data')));
+				});
+			}
+			dst.data('data', _.cloneDeep(src.data('data')));
+
+		}
+
+		function after_el_append(element_data, element, place_holder, data) {
+			var $element = $(element);
+			var $form_el_row = $element.closest('div[name="form_el_row"]');
+			var el_data;
+			if(data) {
+				el_data = _.cloneDeep(data);
+			} else {
+				el_data = _.cloneDeep(element_data[0]['data']);
+			}
+			//el_data['gcElIden'] = new Date().getTime() + Math.random();
+			$form_el_row.data('data', el_data);
+			if(!$element.is('hr')) {
+				if(data) {
+					$form_el_row.prepend('<h8 name="el_title">' +
+						(data.gcInputMust ? '<span class="manadatory_ifd" >*</span>' : '') +
+						'<span class="process_ifd" >' + (data.gcMustCpn ? '△' : '') + '</span>' +
+						'<span class="text">' + (data.gcCpnAlias || '') +
+						'</span>' +
+						'</h8>' +
+						'<hr>' +
+						'<div name="el_desc">' +
+						(data.gcCpnDisc || '') +
+						'</div>');
+				} else {
+					$form_el_row.prepend('<h8 name="el_title">' +
+						'<span class="text">' +
+						element_data[0]['data']['gcCpnAlias'] +
+						'</span>' +
+						'</h8>' +
+						'<hr>' +
+						'<div name="el_desc"></div>');
+				}
+			}
+
+			var frm_el_click = function($icons, $form_el_row) {
+				//选项卡修改  开始
+				$icons.find('div.remove').on('click', function(event) {
+					$form_el_row.remove();
+					event.stopPropagation();
+				});
+
+				$icons.find('div.duplicate').on('click', function(event) {
+					var $clone = $form_el_row.clone();
+					$clone.removeClass('active');
+					$form_el_row.after($clone);
+					clone_el_data($clone, $form_el_row);
+					frm_el_click($clone.find('div.frm_item_icons'), $clone);
+					$clone.on('click', function() {
+						$('div[name="form_el_row"]').removeClass('active');
+						$(this).addClass('active');
+					});
+					event.stopPropagation();
+				});
+				if($($form_el_row).parent('.sub_form ').length > 0 && $($form_el_row).parent('.sub_form_pay').length == 0) { //判断此控件是否为子表单中的控件
+					$form_el_row.data('data', _.extend($form_el_row.data('data'), { 'parent_type': 1 }));
+				} else if($($form_el_row).parent('.sub_form_pay').length > 0) { //判断此控件是否为支付方式子表单中的控件
+					$form_el_row.data('data', _.extend($form_el_row.data('data'), { 'parent_type': 2 }));
+				} else {
+					$form_el_row.data('data', _.extend($form_el_row.data('data'), { 'parent_type': 0 }));
+				}
+				$form_el_row.on('click', function(event) {
+					var $scope = $route.current.scope;
+					var $el = $(this);
+					$('div[name="form_el_row"]').removeClass('active');
+					$el.addClass('active');
+					$timeout(function() {
+						$scope.element = $el;
+						$scope.data = $el.data('data');
+					}, 0);
+					event.stopPropagation();
+					event.preventDefault();
+				});
+			};
+			var $icons = $('<div class="frm_item_icons">' +
+				'<div class="frm_item_icon remove"><img src="static/img/delete.png" /></div>' +
+				'<div class="frm_item_icon duplicate"><img src="static/img/createorder.png" /></div>' +
+				'</div>');
+
+			//			if($form_el_row.data('data').gcCpnType != 0){
+			$form_el_row.append($icons);
+			//			}
+
+			frm_el_click($icons, $form_el_row);
+		}
+
+	}])
+	.filter("myhide", function() {
+		return function(input) {
+			if(input.value == "") {
+				return false;
+			} else {
+				return true;
+			}
+		}
+	});
\ No newline at end of file
diff --git a/src/static/js/budget_forms/module.js b/src/static/js/budget_forms/module.js
new file mode 100644
index 0000000..2c380ca
--- /dev/null
+++ b/src/static/js/budget_forms/module.js
@@ -0,0 +1,66 @@
+angular.module('budget_froms', [])
+.controller('budgetFormsCtrl', [
+    '$scope',
+    '$routeParams', 
+    '$route', 
+    '$compile', 
+    'http_service', 
+    'global_service', function($scope, $routeParams, $route, $compile, http_service, global_service){
+    $scope.type = $routeParams.type;
+    
+    if($routeParams.business){
+    	$scope.isguide = true;
+        $scope.business = $routeParams.business;
+    }else{
+        $scope.business = global_service.get_indus();
+        $scope.isguide = false;
+    }
+    
+    $scope.$on('$viewContentLoaded', function() {
+        $('div.split_form').height($(document).height() - 52);
+        $(window).resize(function(){
+            $('div.split_form').height($(document).height() - 52);
+        });
+    });
+    $scope.show_saved_form = function(business, type, action, templateid){
+       	$scope.business = business;
+        $scope.type = type;
+        $scope.action = action;
+        $scope.templateid = templateid;
+       	var $form = $('<div saved-form  business="business" isguide="isguide" type="type" unedit="1" action="action" templateid="templateid"></div>');
+        $('div.form_container').html($form);
+        $compile($form)($scope);
+    }
+    	$scope.show_saved_form($scope.business,$scope.type,1);
+    
+    
+    	$('body').on('click', function() {
+			$scope.show = false;
+		});
+		$('ul.showul').off('click').on('click', function(event) {
+			event.stopPropagation();
+		});
+    
+    http_service.post('indusExten/search', {"indusId":$scope.business, "tempType": $scope.type}, function(res){
+    	if(res.data.data.length!=0)
+    	{
+        $scope.indus_templates = res.data.data;
+    	}
+    		
+
+    });
+    
+    http_service.post('form/list',{"guTempType":parseInt($scope.type),"cache_id":parseInt($scope.type)},function(res){
+    	if (res.data.data && res.data.data.child.length > 0) {
+    		$scope.isShow = true;
+    	} else {
+    		$scope.isShow = false;
+    	}
+    },true);
+
+    
+//  $scope.searchtemplate = function(type){
+//  	http_service.post('template/search',{'guIndusId':$scope.business,'guTempType':type},function(res){
+//  	})
+//  }
+}]);
\ No newline at end of file
diff --git a/src/static/js/business/module.js b/src/static/js/business/module.js
new file mode 100644
index 0000000..e4fc227
--- /dev/null
+++ b/src/static/js/business/module.js
@@ -0,0 +1,57 @@
+angular.module('business', [])
+.controller('businessCtrl', [
+    '$scope', 
+    'http_service', 
+    '$location', 
+    'global_service',
+    function($scope, http_service, $location, global_service){
+
+    $scope.mouseover_business_item = function(e){
+        if($(e.target).is('div'))
+            $(e.target).addClass('hover_active');
+        else
+            $(e.target).closest('div').addClass('hover_active');
+    }
+
+    $scope.mouseout_business_item = function(e){
+        if($(e.target).is('div'))
+            $(e.target).removeClass('hover_active');
+        else
+            $(e.target).closest('div').removeClass('hover_active');
+    }
+
+    $scope.show_more = function(){
+        $scope.business_card_shown = !($scope.business_card_shown);
+    }
+
+    $scope.redirect_to_billing_cfg_guide = function(inCode){
+        global_service.set_indus(inCode);
+        var guide = {
+        	child:[
+        		{
+        			"gcPcsCode": 10,
+      				"gcPcsStep": 99,
+      				"gcInCode":inCode
+        		}
+        	]
+        };
+        http_service.post('guiCfg/insert',guide,function(res){//新增向导信息
+    		if(res.data.opState){
+    			$location.path("/billing_cfg_guide/"+inCode+"/1");
+    		}else{
+    			//弹窗     提示新增向导信息失败
+    		}
+    	});
+         
+    }
+
+    http_service.post('indus/search', {}, function(res){
+    	if(!res.data.opState){
+							return false;
+						}
+        $scope.business_list = res.data.data;
+
+    })
+
+
+}]);
\ No newline at end of file
diff --git a/src/static/js/config.json b/src/static/js/config.json
new file mode 100644
index 0000000..8b643df
--- /dev/null
+++ b/src/static/js/config.json
@@ -0,0 +1,26 @@
+{
+	"config": {
+		"register_url": "BEBFACA2545F097D357B3DF2C8F72324290CC91BC55F94E87F7A7AF03795538C039C3A0D72C0EDA39707CF7615647739873110A860DFF844",
+		"work_flow_url": "BEBFACA2545F097D88B4BCFB01876BABBCDAD513891773100F6752A7C828C2322F082349347FFE843935A5DA9DA79A1BEEAC97D33686D15CBF43C830FEDE6571",
+		"userPermission_url":"C6BB1993E6C14AC132418848D7990FAAD940E86C2B302473F04693673D28DD798F01ACCA63BE450E1D668845E53124C8",
+		"userPermission_method":"31159D0751DDAA1E",
+		"appId": "77576F4F3C47136D",
+		"remarks": "测试环境 启用的将config的_去掉"
+	},
+	"config_": {
+		"register_url": "BEBFACA2545F097D17A03E71CE198FCE27EBB656F0FED7677F7A7AF03795538C039C3A0D72C0EDA39707CF7615647739873110A860DFF844",
+		"work_flow_url": "BEBFACA2545F097D17A03E71CE198FCEB3102A466901CE237F7A7AF03795538C039C3A0D72C0EDA39707CF7615647739873110A860DFF844",
+		"userPermission_url":"C6BB1993E6C14AC132418848D7990FAAD940E86C2B302473F04693673D28DD798F01ACCA63BE450E1D668845E53124C8",
+		"userPermission_method":"31159D0751DDAA1E",
+		"appId": "77576F4F3C47136D",
+		"remarks": "预上线环境"
+	},
+	"config__": {
+		"register_url": "BEBFACA2545F097DEF4B9C1B8EC6ACE327EBB656F0FED767E1C582FEA0B359CF2F082349347FFE843935A5DA9DA79A1B0D73BE256BFBF618",
+		"work_flow_url": "BEBFACA2545F097DEF4B9C1B8EC6ACE3B3102A466901CE23E1C582FEA0B359CF2F082349347FFE843935A5DA9DA79A1B0D73BE256BFBF618",
+		"userPermission_url":"8403AF9C6547926D79F2D7809016203A6C6464F591E03DF926B8A74EF6C0CE7524C69A5948EB15DB7CE944590215811FC71953FDC0231CE315F54EAB4CC063AFA7C2458D0D9B9888E90CD0A6F53D99BD2E7BF8A5B52EADF21D668845E53124C8",
+		"userPermission_method":"BD512F90683BBDFA",
+		"appId": "77576F4F3C47136D",
+		"remarks": "正式环境"
+	}
+}
\ No newline at end of file
diff --git a/src/static/js/config_center/module.js b/src/static/js/config_center/module.js
new file mode 100644
index 0000000..7d8b022
--- /dev/null
+++ b/src/static/js/config_center/module.js
@@ -0,0 +1,21 @@
+angular.module('cfg_center', [])
+.controller('cfgCenterCtrl', ['$scope', function($scope){
+    
+}])
+.directive('hoverCard', ['$rootScope', function($rootScope){
+    return {
+        restrict: 'ACEM',
+        link: function($scope, element, attrs){
+            var $element = $(element);
+            $element
+            .on('mouseenter', function(){
+                $element.find('img').hide();
+                $element.find('label').show();
+            })
+            .on('mouseleave', function(){
+                $element.find('img').show();
+                $element.find('label').hide();
+            });
+        }
+    }
+}]);
\ No newline at end of file
diff --git a/src/static/js/data/form.json b/src/static/js/data/form.json
new file mode 100644
index 0000000..0b4e5ca
--- /dev/null
+++ b/src/static/js/data/form.json
@@ -0,0 +1,113 @@
+ {
+    "guTempType":"1",
+    "guTempName":"测试预算单",
+    "guTempDisc":"测试预算单样例数据",
+    "child": [
+        {
+            "gcCpnName":"",
+            "gcCpnType":2,
+            "gcCpnAlias":"多行文本",
+            "gcCpnDisc":"创建多行文本",
+            "gcDefVal":"",
+            "gcInputMust":false
+        },
+        {
+            "gcCpnName":"",
+            "gcCpnType":8,
+            "gcCpnAlias":"地址",
+            "gcCpnDisc":"dsfsdfsdfds2222",
+            "gcDefVal":"",
+            "gcInputMust":false,
+            "gcOptList":[
+                {"value":"","selected":true}
+            ]
+        },
+        {
+            "gcCpnName":"",
+            "gcCpnType":8,
+            "gcCpnAlias":"地址",
+            "gcCpnDisc":"dsfsdfsdfdsdddd",
+            "gcDefVal":"",
+            "gcInputMust":false,
+            "gcOptList":[
+                {"value":"","selected":true}
+            ]
+        },
+        {
+            "gcCpnName":"",
+            "gcCpnType":6,
+            "gcCpnAlias":"下拉框",
+            "gcCpnDisc":"",
+            "gcDefVal":"",
+            "gcInputMust":true,
+            "gcOptList":[
+                {"value":"123","selected":true,"$$hashKey":"object:47"},
+                {"value":"456","selected":true,"$$hashKey":"object:142"}
+            ]
+        },
+        {
+            "gcCpnName":"",
+            "gcCpnType":5,
+            "gcCpnAlias":"日期时间",
+            "gcCpnDisc":"",
+            "gcDefVal":"",
+            "gcInputMust":true,
+            "gcOptList":[
+                {"value":"","selected":true}
+            ]
+        },
+        {
+            "gcCpnName":"",
+            "gcCpnType":4,
+            "gcCpnAlias":"单选框",
+            "gcCpnDisc":"",
+            "gcDefVal":"",
+            "gcInputMust":false,
+            "gcOptList":[
+                {"value":"测试数据1","selected":true,"$$hashKey":"object:10"},
+                {"value":"测试数据2","selected":true,"$$hashKey":"object:14"}
+            ]
+        },
+        {
+            "gcCpnName":"",
+            "gcCpnType":10,
+            "gcCpnAlias":"子表单",
+            "gcCpnDisc":"",
+            "gcDefVal":"",
+            "gcInputMust":false,
+            "gcOptList":[
+                {
+                    "value":"",
+                    "selected":true
+                }
+            ],
+            "child":[
+                {
+                    "gcCpnName":"",
+                    "gcCpnType":6,
+                    "gcCpnAlias":"下拉框",
+                    "gcCpnDisc":"",
+                    "gcDefVal":"",
+                    "gcInputMust":true,
+                    "gcOptList":[
+                        {
+                            "value":"123",
+                            "selected":true,
+                            "$$hashKey":"object:16"
+                        }
+                    ]
+                },
+                {
+                    "gcCpnName":"",
+                    "gcCpnType":2,
+                    "gcCpnAlias":"子表单控件",
+                    "gcCpnDisc":"",
+                    "gcDefVal":"234",
+                    "gcInputMust":true
+                }
+            ]
+        }
+    ]
+ }
+ 
+
diff --git a/src/static/js/data/travel_expense_list.json b/src/static/js/data/travel_expense_list.json
new file mode 100644
index 0000000..40ca1d2
--- /dev/null
+++ b/src/static/js/data/travel_expense_list.json
@@ -0,0 +1,89 @@
+{
+    "data":[
+        {
+            "sfCfgType": "012",
+            "sfFieldName": "ap_c1",
+            "sfUserId": "10",
+            "gc_cpn_alias": "预算类型",
+            "gc_cpn_type": "text"
+        },
+        {
+            "sfCfgType": "012",
+            "sfFieldName": "ap_c2",
+            "sfUserId": "10",
+            "gc_cpn_alias": "申请人姓名",
+            "gc_cpn_type": "text"
+        },
+        {
+            "sfCfgType": "012",
+            "sfFieldName": "ap_c3",
+            "sfUserId": "11",
+            "gc_cpn_alias": "申请日期",
+            "gc_cpn_type": "date"
+        },{
+            "sfCfgType": "012",
+            "sfFieldName": "ap_c4",
+            "sfUserId": "11",
+            "gc_cpn_alias": "预算金额",
+            "gc_cpn_type": "number"
+        },
+        {
+            "sfCfgType": "012",
+            "sfFieldName": "ap_c5",
+            "sfUserId": "11",
+            "gc_cpn_alias": "当前负责人",
+            "gc_cpn_type": "text"
+        },
+        {
+            "sfCfgType": "012",
+            "sfFieldName": "ap_c6",
+            "sfUserId": "11",
+            "gc_cpn_alias": "申请日期",
+            "gc_cpn_type": "date"
+        },
+
+
+        {
+            "sfCfgType": "011",
+            "sfFieldName": "ap_c1",
+            "sfUserId": "10",
+            "gc_cpn_alias": "预算类型",
+            "gc_cpn_type": "text",
+            "selected": true
+        },
+        {
+            "sfCfgType": "011",
+            "sfFieldName": "ap_c2",
+            "sfUserId": "10",
+            "gc_cpn_alias": "申请人姓名",
+            "gc_cpn_type": "text"
+        },
+        {
+            "sfCfgType": "011",
+            "sfFieldName": "ap_c3",
+            "sfUserId": "11",
+            "gc_cpn_alias": "申请日期",
+            "gc_cpn_type": "date"
+        },{
+            "sfCfgType": "011",
+            "sfFieldName": "ap_c4",
+            "sfUserId": "11",
+            "gc_cpn_alias": "预算金额",
+            "gc_cpn_type": "number"
+        },
+        {
+            "sfCfgType": "011",
+            "sfFieldName": "ap_c5",
+            "sfUserId": "11",
+            "gc_cpn_alias": "当前负责人",
+            "gc_cpn_type": "text"
+        },
+        {
+            "sfCfgType": "011",
+            "sfFieldName": "ap_c6",
+            "sfUserId": "11",
+            "gc_cpn_alias": "申请日期",
+            "gc_cpn_type": "date"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/src/static/js/expend_standard/module.js b/src/static/js/expend_standard/module.js
new file mode 100644
index 0000000..f893f3e
--- /dev/null
+++ b/src/static/js/expend_standard/module.js
@@ -0,0 +1,2539 @@
+angular.module('expend_standard', [])
+.directive('orgSelectorStandard', ['$rootScope', 'http_service', '$compile', '$timeout', 'myServeice', function($rootScope, http_service, $compile, $timeout, myServeice) {
+		return {
+			restrict: 'EACM',
+			scope: {
+				datamodel: '=',
+				options: '='
+			},
+			template: '<div  class="user_element">' +
+				'<span name="user_el_content">' +
+				'<span class="user_name"  ng-repeat="org in org_selected" >' +
+				'{{org.orgName}} <a ng-href="javascript:void(0)" ng-click="remove_org(org);"><i class="fa fa-times" aria-hidden="true" style="color:#fff;"></i></a>' +
+				'</span>' +
+				'&nbsp;&nbsp;<a class="btn_user_el_add_user" href="javascript:void(0);"  ng-click="select_org($event);" >选择组织机构</a>' +
+				'</span>' +
+				'</div>',
+			replace: true,
+			controller: ['$scope', '$element', function($scope, $element) {
+				$scope.org_selected = [];
+				
+				$scope.select_org = function(e) {
+					$('div[name="org_select_popup"]').remove();
+					var activeclass = "{true:'hr_name',false:'hr_name_selected'}[user.state]";
+					var pop_element = $('<div' +
+						' name="org_select_popup"' +
+						' class="org_select_popup_standard col-md-12"' +
+						'onMouseOver ="$(this).draggable();event.stopPropagation();"' +
+						'>' +
+						'<div class="org_sel_form">' +
+						'<div class="row btn_cls org_sel_form_close">' +
+						'<a ng-href="javascript:void(0);"><i class="fa fa-times main_close" aria-hidden="true"  ng-click="close();"></i></a>' +
+						'</div>' +
+						'<div class="hr_tree left ztree" style="overflow:auto;">' + '</div>' +
+						'<div class="right">' +
+						'<div class="right_area">' +
+						'<div class="area_title selected_personnel">' +
+						'<label>已选人员</label>' +
+						'<span class="float_right">' +
+						'<a ng-href="javascript:void(0);" class="clear_selected_users" ng-click="clear_org();" ><i class="fa fa-trash-o" aria-hidden="true"></i></a>' +
+						'</span>' +
+						'</div>' +
+
+						'<div class="area_body">' +
+							'<ul>'+
+								'<li ng-repeat="org in org_selected">'+
+									'<div class="area_content">'+
+										'<a class="hr_name" ng-href="javascript:void(0);" href="javascript:void(0);">{{org.orgName}}</a>'+
+										'<button class="hr_name_addbtn" ng-click="remove_org(org);">-</button>'+
+									'</div>'+
+								'</li>'+
+							'</ul>'+
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>');
+					$($element).append(pop_element);
+					$compile(pop_element)($scope);
+					$scope.init_tree();
+					var form_el_div = $($element).closest('div.sub_form_container').children('div').not('[name="journel_budget"]');
+					e.stopPropagation();
+				};
+			}],
+			link: function($scope, element, attrs) {
+				$scope.stop_prg = function(event) {
+					event.stopPropagation();
+				};
+
+				$scope.close = function() {
+					$('div[name="org_select_popup"]').remove();
+					myServeice.setpd($scope.parentitem, $scope.users_selected, $scope.type);
+					//				$scope.query_journel_budget();
+				};
+				//清除选择
+				$scope.clear_org = function(){
+					$scope.org_selected = [];
+					$scope.datamodel = [""];
+				}
+				//选择组织机构
+				$scope.add_org = function(treeNode) {
+					if(treeNode.children && treeNode.children.length != 0){
+						_.each(treeNode.children,function(cd){
+							$scope.add_org(cd);
+						});
+					}else{
+						var org_selecting = {
+							"orgName":treeNode.name,
+							"orgCode":treeNode.orgCode
+						};
+						var push_flag = true;
+						
+						_.each($scope.org_selected,function(_org){
+							if(_org.orgCode == org_selecting.orgCode){
+								push_flag = false;
+							}
+						});
+						if(push_flag){
+							$scope.org_selected.push(org_selecting);
+							if($scope.datamodel && $scope.datamodel.length > 0){
+								$scope.datamodel.splice(0, $scope.datamodel.length);
+							}
+							_.each($scope.org_selected, function(item) {
+								if(!$scope.datamodel)
+									$scope.datamodel = [];
+									$scope.datamodel.push(item.orgCode);
+							})
+						}
+					}
+				};
+				$scope.remove_org = function(org) {
+					_.remove($scope.org_selected,function(n){
+						return n == org;
+					});
+					_.pull($scope.datamodel,org.orgCode);
+				};
+				function get_org(data,arr){
+					_.each(data,function(_data){
+						if(_data.orgCode == arr){
+							$scope.org_selected.push({
+								"orgName":_data.orgName,
+								"orgCode":_data.orgCode
+							})
+						}
+					});
+					if(data.child){
+						get_org(data.child,arr);
+					}
+				}
+				$scope.init_tree = function() {
+					http_service.post('base/data/search/institutionData', {}, function(res) {
+						console.log('33333333');
+						if(res.data.opState){
+							var hr_data_str = JSON.stringify(res.data.data).replace(/child/g, 'children').replace(/orgName/g, 'name');
+							var hr_data_json = JSON.parse(hr_data_str);
+							var setting = {
+								'callback': {
+									'onClick': function(event, treeId, treeNode) {
+										var orgName = treeNode.name;
+										var md_id = treeNode.orgCode;
+										if(treeNode.level > 0){
+											$scope.add_org(treeNode);
+										}
+									}
+								}
+							};
+							console.log('1110');
+							$.fn.zTree.init($("div.hr_tree"), setting, hr_data_json);
+						}else{
+							$scope.$parent.$parent.$parent.$parent.$parent.terro(res.data.errMsg)
+						}
+					
+					});
+				}
+				$scope.init_org = function(){
+					http_service.post('base/data/search/institutionData', {}, function(res) {
+						console.log(22222222);
+						if(res.data.opState){
+							if($scope.datamodel && $scope.datamodel.length != 0){
+								_.each($scope.datamodel,function(_arr){
+									_.each(res.data.data,function(data){
+										get_org(data.child,_arr);
+									})
+								})
+							}
+						}
+					});
+				};
+				$scope.init_org();
+			}
+		}
+	}])
+	.directive('select4', ['$rootScope', 'http_service', '$timeout', '$interval',
+		function($rootScope, http_service, $timeout, $interval) {
+			return {
+				restrict: 'ACEM',
+				templateUrl: './static/templates/select3.html',
+				transclude: true,
+				scope: {
+					style: '=', 
+					datamodel: '=',
+					options: '='
+				},
+				compile: function() {
+					return {
+						pre: function(scope, iElement, iAttrs, controller) {
+							var $scope = scope;
+							$scope.type = scope.$parent.type;
+							$scope.billid = scope.$parent.billid;
+
+							$scope.$watchGroup(['datamodel','options'], function() {
+								if(scope.datamodel){
+									if(scope.datamodel.length == 0){//替换控件时清空
+										scope.sel_val_lst = [];
+									}else if(scope.datamodel[0] == ''){
+										scope.sel_val_lst = [];
+									}
+								}else{
+									scope.sel_val_lst = [];
+								}
+								var mp = _.filter(scope.options, function(op) {
+									return _.indexOf(scope.datamodel, op.code) > -1;
+								});
+								if(mp.length !== 0){
+									scope.sel_val_lst = _.map(mp, function(m) {
+										return { 'value': m.code, 'label': m.value };
+									});
+								}
+								
+								var typename = _.filter(scope.options, function(op) {
+									return _.indexOf(scope.datamodel, op.mdCode) > -1||_.indexOf(scope.datamodel, op.cdCode) > -1;
+								});
+								if(typename.length !== 0 && !scope.sel_val_lst){
+									scope.sel_val_lst = _.map(typename, function(n) {
+										return {'value': n.mdCode||n.cdCode, 'label': n.mdName||n.cdValue };
+									});
+//									scope.sel_val_lst = scope.datamodel;
+								}
+							}, true);
+							var $el = $(iElement);
+							$el.find('div.select-container').css({"padding-left":'10px',"width":"90%"});
+							$el.find('div.suffix').css({"width":"30%","max-width":"26px"});
+							$el.find('div.val-card').css({"padding":"0px","height":"28px","line-height":"28px"});
+							$el.find('div.select-container').on('click', function(event) {
+								$('div.drop_down_sel').remove();
+								var $select = $el.find('select');
+								var isMultiple = $select.attr('multiple');
+								var $options = $el.find('select > option');
+								// 增加搜索框
+								var $options_str = '<ul>' +
+									'<li class="sel_query">' +
+									'<input type="text" name="query" >' +
+									'<i class="fa fa-search" aria-hidden="true"></i>' +
+									'</li>' +
+									'</ul>';
+								// 可多选时 增加全选复选框
+								if($select.attr('multiple')) {
+									$options_str += '<ul>' +
+										'<li>' +
+										'<div>' +
+										'<div style="padding:0px 8px 0px 4px; ">' +
+										'<input type="checkbox" name="all" >' +
+										'</div>' +
+										'<div>全选</div>' +
+										'</div>' +
+										'</li>' +
+										'</ul>';
+								}
+								_.each(scope.options, function(option) {
+									var checked = '';
+									if(_.indexOf(scope.datamodel, option.code) > -1) {
+										checked = 'checked';
+									}
+									var optionvalue = option.value || option.mdName || option.cdValue;
+									var optioncode = option.code || option.mdCode || option.cdCode;
+									$options_str += '<ul>' +
+										'<li>' +
+										'<div>' +
+										'<div style="padding:0px 8px 0px 4px; ">' +
+										'<input type="checkbox" name="checkbox" label="' + optionvalue + '" value="' + optioncode + '" ' + checked + ' >' +
+										'</div>' +
+										'<div class="overhidden" title="' + optionvalue + '">' + optionvalue + '</div>' +
+										'</div>' +
+										'</li>' +
+										'</ul>';
+								});
+								var $select_obj = $('<div drop-down-selector="" filterlist="searchlist" class="drop_down_sel" style="background:#fff;">' +
+									$options_str +
+									'</div>');
+								$el.find('div.select3-element').append($select_obj);
+								$('body').off('click').on('click', function() {
+									$('div.drop_down_sel').remove();
+								});
+								$('div.drop_down_sel').off('click').on('click', function(event) {
+									event.stopPropagation();
+								});
+
+								// 查询功能
+								$select_obj.find('input[name="query"]').on('keyup', function() {
+									var $el = $(this);
+									var inputs = $select_obj.find('input[name="checkbox"]');
+									inputs.each(function() {
+										var val = $(this).attr('label');
+										var input_val = $el.val();
+										if(val.indexOf(input_val) > -1) {
+											$(this).closest('ul').show();
+										} else {
+											$(this).closest('ul').hide();
+										}
+									});
+								});
+
+								// 点击选择
+								$select_obj.find('input[name="checkbox"]').on('click', function() {
+									var vals_selected = [];
+									if(!isMultiple) {
+										$('div.drop_down_sel input[name="checkbox"]').prop('checked', false);
+										$(this).prop('checked', true);
+										$select.val($(this).val());
+										vals_selected = [{ 'value': $(this).val(), 'label': $(this).attr('label') }];
+									} else {
+										var vls = [];
+										$('div.drop_down_sel input[name="checkbox"]:checked').each(function() {
+											vals_selected.push({ 'value': $(this).val(), 'label': $(this).attr('label') });
+											vls.push($(this).val());
+										});
+										$select.val(vls);
+									}
+									$timeout(function() {
+										scope.sel_val_lst = vals_selected;
+									}, 0);
+									if(scope.datamodel && scope.datamodel.length > 0){
+										scope.datamodel.splice(0, scope.datamodel.length);
+									}
+									_.each(vals_selected, function(item) {
+										if(!scope.datamodel)
+											scope.datamodel = [];
+											scope.datamodel.push(item.value);
+									})
+									/*
+									$timeout(function(){
+									    scope.datamodel.concat(select_vals);
+									}, 0);
+									*/
+								});
+								$select_obj.find('input[name="all"]').on('click', function() {
+									if($(this).prop("checked") == false) {
+										$('div.drop_down_sel input[name="checkbox"]').each(function() {
+											if($(this).prop("checked") == true) {
+												$(this).click();
+											}
+										});
+									} else {
+										$('div.drop_down_sel input[name="checkbox"]').each(function() {
+											if($(this).prop("checked") == false) {
+												$(this).click();
+											}
+										});
+									}
+								})
+								event.stopPropagation();
+							});
+							scope.rm_option = function(event) {
+								var $elt = $(event.target);
+								$elt.closest('div.val-card').remove();
+								var val = $elt.attr('val');
+								var value = JSON.parse(val).value;
+								scope.sel_val_lst = _.filter(scope.sel_val_lst, function(t) {
+									return JSON.stringify(t) != value;
+								});
+								$timeout(function() {
+									_.pull(scope.datamodel, value);
+								}, 0);
+								event.stopPropagation();
+							};
+						},
+						post: function($scope, element, attrs) {}
+					}
+				}
+			}
+		}
+	])
+	.directive('expenseStandardRow', ['$rootScope', 'http_service', '$timeout','$compile', function($rootScope, http_service, $timeout,$compile) {
+		return {
+			restrict: 'ACEM',
+			template: '<tr>' +
+				'<td ng-repeat="col in rowData" >' +
+				'<a ' +
+				'class="foldBtn" ' +
+				'ng-href="javascript:void(0);" ' +
+				'ng-click="unfold(expensedata, expenserowdata, $index)" ' +
+				'ng-if="!col.code && col.values.length && !isEmpty(col) && expenserowdata[$index].grant_value.length > 1" ' +
+				'>' +
+//				'<i class="fa fa-plus-square-o" aria-hidden="true"></i>' +
+//				'<img src="./static/img/unfold.png" class="unfoldelment"/>' +
+				'<img src="./static/img/list.png" class="unfoldelment"/>' +
+				'</a>' +
+				'<a ' +
+				'class="foldBtn" ' +
+				'ng-href="javascript:void(0);" ' +
+				'ng-click="fold(expensedata, expenserowdata, $index)" ' +
+				'ng-if="!col.code && col.values.length && !isEmpty(col) && expenserowdata[$index].group_id" ' +
+				'>' +
+				//				'<i class="fa fa-minus-square-o" aria-hidden="true"></i>' +
+//				'<img src="./static/img/unfold.png" class="unfoldelment"/>' +
+				'<img src="./static/img/list.png" class="unfoldelment"/>' +
+				'</a>' +
+				'<div ng-if="col.is_org" org-selector-standard datamodel="expenserowdata[$index].grant_value" options="col.values"></div>'+
+				'<span  select4 datamodel="expenserowdata[$index].grant_value" options="col.values" style=style ng-if="!col.is_org && !col.code && !isEmpty(col) && col.elIden && col.elIden.length != 0 != null && col.mdCode" >' +
+				'<select multiple ' +
+				'ng-options="val.code as val.value for val in col.values" ' +
+				'ng-model="expenserowdata[$index].grant_value" ' +
+				'value="expenserowdata[$index].grant_value" ' +
+				'>' +
+				'</select>' +
+				'</span>' +
+				'<span class="Inverse_icon" ng-click="change_Inverse($index)" ng-if="!col.is_org && !col.code && !isEmpty(col) && col.elIden && col.elIden.length != 0 != null && col.mdCode">'+
+					'<i ng-if="expenserowdata[$index].asInverse == 1" class="fa fa-check-square-o" aria-hidden="true"></i>'+
+					'<i ng-if="expenserowdata[$index].asInverse == 0" class="fa fa-minus-square-o" aria-hidden="true"></i>'+
+				'</span>'+
+				'<input type="text" ng-if= "!col.is_org && !col.code && !isEmpty(col) && !col.values.length && (col.elIden == null || col.elIden.length == 0) && col.eleValue && col.mdCode" ng-model = "expenserowdata[$index].grant_value" class="fxinput" /><span ng-if= "!col.is_org && !col.code && !isEmpty(col) && !col.values.length && col.eleValue && col.mdCode && (col.elIden == null || col.elIden.length == 0)" class="fxclass" ng-click="fxdiv(col,$index)">Fx</span>'+
+				'<input type="text" ng-if="!col.is_org && col.code && !isEmpty(col) && col.mdCode" ng-model="expenserowdata[$index].grant_value">' +
+				'<input type="text" ng-if="!col.is_org && !col.code && !col.mdCode && !col.id && !col.value" ng-model="expenserowdata[$index].grant_value">' +
+				'<a ng-click="rm_row(expenserowdata);" ng-if="$index === rowData.length-1" style="position:absolute;right:-15px;top:-2px;z-index:9;"><img src="./static/img/delete.png" class="deleteelment"/></a>' +
+				'<input type="text" ng-if="col.id && col.notFound != true" class="fxinput" ng-model="expenserowdata[$index].sys_val.show_sys_fx">'+
+				'<span class="fxclass" ng-if="col.id && col.notFound != true" ng-click="sys_fx(col,$index)">Fx</span>'+
+				'</td>' +
+				'</tr>',
+			replace: true,
+			scope: {
+				tabletitlescfg: '=',
+				expenserowdata: '=',
+				expensedata: '='
+			},
+			compile: function() {
+				return {
+					pre: function(scope, iElement, iAttrs, controller) {
+						scope.style = {
+							'width': '80%'
+						}
+						scope.isEmpty = function(obj) {
+							return _.keys(obj).length === 1;
+						};
+						scope.rm_row = function(rowData) {
+							
+							
+							var delete_index;
+							_.each(scope.expensedata, function(_row_data, index) {
+								if(_row_data === rowData) {
+									
+									
+									delete_index = index;
+								}
+							});
+							if(scope.expensedata.length > 1){
+								scope.expensedata.splice(delete_index,1);
+							}else{
+								var ex_keys = _.keys(scope.expensedata[0]);
+								_.each(ex_keys,function(ekey){
+									scope.expensedata[0][ekey] = {"asInverse":1,"grant_value":""}
+								})
+							}
+							
+						};
+						$('body').off('click').on('click', function() {
+							$('div.showtype').remove();
+						});
+						$('div.showtype').off('click').on('click', function(event) {
+							event.stopPropagation();
+						});
+						//正选、反选
+						scope.change_Inverse = function(index){
+							if(scope.expenserowdata[index].asInverse == 1){
+								scope.expenserowdata[index].asInverse = 0;
+							}else{
+								scope.expenserowdata[index].asInverse = 1;
+							}
+						}
+						scope.unfold = function(allData, rowData, colNum) {
+							var colValues = _.uniq(rowData[colNum]['grant_value']);
+							var uid = rowData[colNum]['group_id'] || _.uuid();
+							var newRowData = [];
+							_.each(allData, function(data) {
+								if(data === rowData) {
+									for(var i = 0, len = colValues.length; i < len; i++) {
+										var dt = _.cloneDeep(data);
+										dt[colNum]['grant_value'] = [colValues[i]];
+										dt[colNum]['group_id'] = uid;
+										newRowData.push(dt);
+									}
+								} else {
+									newRowData.push(data);
+								}
+							});
+							scope.expensedata.splice(0, scope.expensedata.length);
+							$timeout(function() {
+								_.each(newRowData, function(rd) {
+									scope.expensedata.push(rd);
+								});
+							}, 1);
+
+						};
+						scope.fold = function(allData, rowData, colNum) {
+							var colValues = rowData[colNum]['grant_value'];
+							var uid = rowData[colNum]['group_id'];
+							var newRowData = [];
+							var gt_vals = [];
+							var tmp = {};
+							_.each(allData, function(data) {
+								if(!data[colNum]) return false;
+								var _uid = data[colNum] && data[colNum]['group_id'];
+								if(_uid === uid) {
+									if(!tmp[uid]) {
+										newRowData.push(rowData);
+										tmp[uid] = rowData;
+									}
+									gt_vals = gt_vals.concat(data[colNum]['grant_value']);
+								} else {
+									newRowData.push(data);
+								}
+							});
+							if(!!gt_vals.length && tmp[uid]) {
+								tmp[uid][colNum]['grant_value'] = gt_vals;
+								tmp[uid][colNum]['group_id'] = null;
+							}
+							scope.expensedata.splice(0, scope.expensedata.length);
+
+							$timeout(function() {
+								_.each(newRowData, function(rd) {
+									scope.expensedata.push(rd);
+								});
+							}, 1);
+						};
+						
+//						scope.$watch(function(){
+//							return $rootScope.relate	
+//						},function(){
+//							if($rootScope.relate != undefined){
+//								scope.relation = $rootScope.relate.split(" ")[0];
+//								scope.amounts = $rootScope.relate.split(" ")[1];
+//							}
+//						})
+//						
+//						scope.$watch(function(){
+//							return $rootScope.pervalue
+//						},function(){
+//							if($rootScope.pervalue != undefined){
+//								scope.per = $rootScope.pervalue;
+//							}
+//						})
+						
+						scope.sys_fx = function(col,$index){//系统变量编辑
+							scope.sys_fx_index = $index;
+							if(scope.expenserowdata[$index] && scope.expenserowdata[$index]['sys_val'].id == undefined){
+								_.extend(scope.expenserowdata[$index]['sys_val'],col);
+//								scope.expenserowdata[$index]['sys_val'] = _.cloneDeep(col);
+							}
+							scope.sys_col = _.cloneDeep(scope.expenserowdata[$index]['sys_val']);
+							scope.joinMath = [];
+							_.each(scope.sys_col.children,function(cd){
+								if(cd.joinMathId && cd.joinchildren == undefined){
+									_.each($rootScope.system_titles,function(sys_tit){
+										if(sys_tit.id == cd.joinMathId){
+											_.extend(cd,{'joinchildren':_.cloneDeep(sys_tit.child)});
+											scope.joinMath.push(cd);
+										}
+									})
+								}else if(cd.joinMathId){
+									scope.joinMath.push(cd);
+								}
+							})
+//							if(col.group == 1 || col.group == 2){
+//								scope.sys_count_show = true;
+//							}else{
+//								scope.sys_count_show = false;
+//							}
+							scope.sys_count_show = col.group;
+							scope.col_type = col.resultFromat;
+							if(scope.sys_count_show == 3){
+								scope.sys_sign_list = ["+","-","*","/"];
+							}else{
+								if(col.resultFromat == 10 || col.resultFromat == 30){//系统变量类型为 数值
+									scope.sys_sign_list = ["<",">",">=","<=","==","<>"];
+	//								scope.sys_data_type_list = [{"label":"字符","value":"string"},{"label":"数值","value":"number"}];
+								}else if(col.resultFromat == 20){//系统变量类型为 比较
+									scope.sys_sign_list = ["=="];
+									scope.sys_data_type_list = [{"label":"真","value":"true"},{"label":"假","value":"false"}];
+								}
+							}
+							scope.sys_sign = undefined;
+							scope.sys_data = undefined;
+							scope.sys_data_type = undefined;
+							if(scope.sys_col.sys_count){
+								var sys_relation = _.drop(scope.sys_col.sys_count.split(" "));
+								if(col.resultFromat == 10 || col.resultFromat == 30){
+									scope.sys_sign = sys_relation[0];
+									scope.sys_data = sys_relation[1];
+//									scope.sys_data_type = sys_relation[2].replace("{","");
+//									scope.sys_data_type = scope.sys_data_type.replace("}","");
+//									_.each(scope.sys_data_type_list,function(data_type){
+//										if(data_type.value == scope.sys_data_type){
+//											$timeout(function(){
+//												scope.sys_data_type = _.cloneDeep(data_type);
+//											},1)
+//											
+//										}
+//									})
+								}else if(col.resultFromat == 20){
+									scope.sys_sign = sys_relation[0];
+									scope.sys_data_type = sys_relation[1];
+									_.each(scope.sys_data_type_list,function(data_type){
+										if(data_type.value == scope.sys_data_type){
+											$timeout(function(){
+												scope.sys_data_type = _.cloneDeep(data_type);
+											},1)
+										}
+									})
+								}
+							}
+							var sys_null = '';
+							var sys_fx = "<div class='bg-modal''>"+
+							"<div class='pop_panel' style='width:450px;height:auto;' onMouseOver ='$(this).draggable();event.stopPropagation();'>"+
+								"<div class='custom_validate'>" +
+									"<div class='cv_title' style='margin-bottom:5px'>规则公式<div class='close' ng-click='sys_close()'><img src='./static/img/close.png' style='width:60%;margin-top:5px;'></div></div>"+
+									"<div class='relate_title'>"+
+										"<span class='col-md-3'>系统变量</span>"+
+										"<span class='col-md-3' style='text-align: right;'>运算符</span>"+
+										"<span class='col-md-3' ng-show='col_type == 20 && sys_count_show != 3'>数据类型</span>"+
+										"<span class='col-md-3' ng-show='col_type == 10 || col_type == 30 || sys_count_show == 3'>输入值</span>"+
+									"</div>"+
+									"<div style='margin-bottom:5px' class='col-md-4'>"+
+										"<span class='sys_fxspan' title='"+col.mdName+"'>"+col.mdName+"</span>"+
+									"</div>"+
+									"<div style='margin-bottom:5px' class='col-md-3'>"+
+										"<select class='relate_select' ng-change='clear_data()' ng-model='sys_sign' ng-options='sign for sign in sys_sign_list'>"+
+											"<option value=''>-- 请选择 --</option>"+
+										"</select>"+
+									"</div>"+
+									"<div style='margin-bottom:5px' class='col-md-3' ng-show='col_type == 20 && sys_count_show != 3'>"+
+										"<select ng-disabled='(sys_sign.length == 0 || sys_sign == undefined)' class='relate_select' ng-model='sys_data_type' ng-options=' type.label for type in sys_data_type_list track by type.value'>"+
+											"<option value=''>-- 请选择 --</option>"+
+										"</select>"+
+									"</div>"+
+									"<div style='margin-bottom:5px' class='col-md-3' ng-show='col_type == 10 || col_type == 30 || sys_count_show == 3'>"+
+										"<input class='relate_select' type='text' ng-model='sys_data' ng-disabled='(sys_sign.length == 0 || sys_sign == undefined)' />"+
+									"</div>"+
+									"<div class='col-md-12'>"+
+										"<div class='col-md-4' ng-if='parameter.joinMathId == undefined' ng-repeat='parameter in sys_col.children track by $index'>"+
+											"<label>{{parameter.mdName}}<span ng-if='parameter.meName'>-{{parameter.meName}}</span></label>"+
+											"<input type='text' class='sys_text' ng-model='parameter.val'/>"+
+										"</div>"+
+									"</div>"+
+									"<div class='col-md-12' ng-if='joins.joinMathId != undefined' ng-repeat='joins in joinMath track by $index'>"+
+										"<div class='col-md-4' ng-repeat='join in joins.joinchildren track by $index'>"+
+											"<label>{{join.mdName}}<span ng-if='join.meName'>-{{join.meName}}</span></label>"+
+											"<input type='text' class='sys_text' ng-model='join.val'/>"+
+										"</div>"+
+									"</div>"+
+									"<div class='col-md-11 sys_savefx'><button class='btn btn-success btn-favourite savebtn' ng-click='save_sys_fx()'>保存</button></div>" +
+								"</div>"+
+							"</div>"+
+							"</div>"
+							var $sys_fx = $compile(sys_fx)(scope); 
+							$('body').append($sys_fx);
+						}
+						
+						scope.sys_close = function(){
+							$('.bg-modal').remove();
+						}
+						
+						scope.clear_data = function(){
+							if(scope.sys_sign == '' || _.isNull(scope.sys_sign)){
+								scope.sys_data = '';
+								scope.sys_data_type = "";
+							}
+						}
+						
+						scope.save_sys_fx = function(){
+							scope.expenserowdata[scope.sys_fx_index]['sys_val'] = _.cloneDeep(scope.sys_col);
+							var sys_arr = [];
+							_.each(scope.sys_col.children,function(cd){
+								if(cd.val && cd.val != ""){
+									if(cd.joinMathId == undefined){
+										sys_arr.push(cd.val);
+									}else{
+										_.each(scope.joinMath,function(join){
+											if(join.joinMathId == cd.joinMathId){
+												_.each(cd.joinchildren,function(jcd){
+													if(jcd.val && jcd.val != ""){
+														sys_arr.push(jcd.val)
+													}
+												})
+											}
+										})
+									}
+								}
+							});
+							scope.expenserowdata[scope.sys_fx_index]['sys_val']['show_sys_fx'] = scope.sys_col.name + "(" + sys_arr.join(",") + ")";
+//							if(scope.sys_count_show){//补助条件 与 标准
+								var sys_count = '';
+								var sys_count_str = '';
+								if(scope.sys_sign != undefined && scope.sys_sign != "" && _.isNull(scope.sys_sign) == false){
+									sys_count += " " + scope.sys_sign;
+									sys_count_str += " " + scope.sys_sign;
+								}
+								
+								if(scope.sys_data != undefined && scope.sys_data != "" && _.isNull(scope.sys_data) == false){
+									sys_count += " "+scope.sys_data;
+									sys_count_str += " " + scope.sys_data;
+								}
+								
+								
+								if(scope.sys_data_type != '' && scope.sys_data_type != undefined && scope.sys_data_type.value != "" && _.isNull(scope.sys_data_type.value) == false){
+									if(scope.col_type == 10 || scope.col_type == 30){
+										sys_count += " {"+scope.sys_data_type.value + "}";
+									}else{
+										sys_count += " "+ scope.sys_data_type.value;
+									}
+									sys_count_str += " "+ scope.sys_data_type.label;
+								}
+								
+								if((scope.sys_sign == undefined || scope.sys_sign == "" || _.isNull(scope.sys_sign) || scope.sys_data == undefined || scope.sys_data == "" || _.isNull(scope.sys_data)) && (scope.col_type == 10 || scope.col_type == 30 || scope.sys_count_show == 3)){//运算符 与输入值必须同时存在
+									scope.expenserowdata[scope.sys_fx_index]['sys_val']['sys_count'] = '';
+									sys_count_str = '';
+								}else if(scope.col_type == 20 && (scope.sys_sign == undefined || scope.sys_sign == "" || _.isNull(scope.sys_sign) || scope.sys_data_type == '' || scope.sys_data_type == undefined || scope.sys_data_type.value == "" || _.isNull(scope.sys_data_type.value))){
+									scope.expenserowdata[scope.sys_fx_index]['sys_val']['sys_count'] = '';
+									sys_count_str = '';
+								}else{
+									scope.expenserowdata[scope.sys_fx_index]['sys_val']['sys_count'] = sys_count;
+								}
+								scope.expenserowdata[scope.sys_fx_index]['sys_val']['show_sys_fx'] += sys_count_str
+//							}
+							scope.sys_close();
+						}
+						
+						scope.fxdiv = function(col,$index){
+							
+							scope.fixdiv_index = $index;
+							var fxdiv = "<div class='bg-modal''>"+
+							"<div class='pop_panel' style='width:450px;height:270px;' onMouseOver ='$(this).draggable();event.stopPropagation();'>"+
+							"<div class='custom_validate'>" +
+							"<div class='cv_title' style='margin-bottom:5px'>规则公式<div class='close' ng-click='close()'><img src='./static/img/close.png' style='width:60%;margin-top:5px;'></div></div>"+
+							"<span class='fxtitle'>补助标准内容</span><span class='fxtitle'>布尔运算符</span><span class='fxtitle'>数据类型</span><span class='fxtitle'>输入值</span>" +
+							"<div class='col-md-3 fxspan'>"+col.mdName+"</div>"+
+							"<div class='search_column col-md-3'>"+
+							"<div class='select3-element selectul'>"+
+							"<div class='select-container' style='width:100px;padding-left:10px;' ng-click = 'fxshowss = !fxshowss' class='relation'>{{relation}}"+
+							"<div class='suffix'>"+
+							"<i class='fa fa-caret-down' aria-hidden='true'></i>"+
+							"</div>"+
+							"</div>"+
+							"<ul ng-show='fxshowss' class='showfx' id='showfxs' ng-click='getrelation($event)'>"+
+							"<li><</li>"+
+							"<li><=</li>"+
+							"<li>></li>"+
+							"<li>>=</li>"+
+							"<li>==</li>"+
+							"</ul>"+
+							"</div>"+
+							"</div>"+
+							"<div class='search_column col-md-3'>"+
+							"<div class='select3-element selectul'  ng-click='fxshows = !fxshows'>"+
+							"<div class='select-container' style='width:100px;padding-left:10px;'  ng-style='style'>{{per}}"+
+							"<div class='suffix'>"+
+							"<i class='fa fa-caret-down' aria-hidden='true'></i>"+
+							"</div>"+
+							"</div>"+
+							"<ul ng-show='fxshows' class='showfx' id='showfx' ng-click='getper($event)'>"+
+							"<li>天数</li>"+
+							"<li>公里数</li>"+
+							"<li>小时数</li>"+
+							"</ul>"+
+							"</div>"+
+							"</div>"+
+							"<div class='col-md-2'><input type='text' ng-model='amounts' min='0' style='width:60px;padding:10px;'/></div>"+
+							"<div class='col-md-11 fxresult'>公式结果:{{aa}}"+ col.mdName +" {{relation}} {{amounts}} {{per}}</div>"+
+							"<div class='col-md-11 savefx'><button class='btn btn-success btn-favourite savebtn' ng-click='savefx()'>保存</button></div>" +
+							"</div>"+
+							"</div>"+
+							"</div>"
+							var $fxdiv = $compile(fxdiv)(scope); 
+							$('body').append($fxdiv);
+							if(scope.expenserowdata[$index] && scope.expenserowdata[$index].grant_value){
+								if(_.isArray(scope.expenserowdata[$index].grant_value)){
+									var fx_data = scope.expenserowdata[$index].grant_value[0].split(" ");
+								}else{
+									var fx_data = scope.expenserowdata[$index].grant_value.split(" ");
+								}
+								
+								scope.relation = fx_data[1];
+								scope.amounts = fx_data[2];
+								scope.per = fx_data[3];
+							}
+//							$('body').off('click').on('click',function() {
+//								if(scope.fxshows){
+//									$('#showfx').hide();
+//									scope.fxshows = false;
+//								}
+//								if(scope.fxshowss){
+//									$('#showfxs').hide();
+//									scope.fxshowss = false;
+//								}
+//							});
+//							$('body').off('click').on('click', function() {
+//									$('div.showfx').remove();
+//								});
+//							$('div.drop_down_sel').off('click').on('click', function(event) {
+//								event.stopPropagation();
+//							});				
+//							$('div.select3-element').off('click').on('click', function(event) {
+//								event.stopPropagation();
+//							});
+
+						}
+						
+						scope.getper = function(event){
+							var event = event || window.event;
+							scope.per = event.target.innerHTML;
+							scope.per = scope.per.split("").slice(0,-1).join("");
+							scope.fxshows = true;
+						}
+						
+						scope.getrelation = function(event){
+							var event = event || window.event;
+							scope.relation = event.target.innerText;
+							scope.fxshowss = false;
+						}
+						scope.close = function(){
+							$('.fxresult').text("");
+							$('.bg-modal').hide();
+						}
+						scope.savefx = function(){
+							if(!scope.per || !scope.relation || !scope.amounts){
+								scope.$parent.$parent.$parent.tinfo('请填写完成后保存');
+							}else if(isNaN(scope.amounts)){
+								scope.$parent.$parent.$parent.tinfo('请在输入值处填写数字');
+							}else{
+								scope.result = $('.fxresult').text().substring(5);
+								$('.fxresult').text("");
+								if(scope.expenserowdata[scope.fixdiv_index] == undefined){
+									var grant_value_now = {"grant_value":scope.result};
+									var fixdiv_index = scope.fixdiv_index;
+									scope.expenserowdata[fixdiv_index] = grant_value_now;
+								}else{
+									scope.expenserowdata[scope.fixdiv_index].grant_value = scope.result;
+								}
+								scope.close();
+							}
+							
+						}
+						
+						
+						function refreshRowData() {
+							scope.rowData = [];
+//							
+							_.each(scope.expenserowdata,function(row_data){
+								if(row_data != undefined && row_data.asInverse == undefined){
+									_.extend(row_data,{"asInverse":1});
+								}
+							})
+							var conditionCfg = scope.tabletitlescfg.expenseConditionsTitles;
+							var criteriaCfg = scope.tabletitlescfg.expenseCtriteraTitles;
+							var budgetCfg = scope.tabletitlescfg.expenseBudgetTitles;
+							var i = 0;
+							_.each(conditionCfg, function(cfg) {
+//								if(!cfg.mdId) {
+//									scope.rowData[i] = {};
+//								} else {
+									scope.rowData[i] = cfg;
+//								}
+								i++;
+							});
+							_.each(criteriaCfg, function(cfg) {
+//								if(!cfg.mdId) {
+//									scope.rowData[i] = {};
+//								} else {
+									scope.rowData[i] = cfg;
+//								}
+								i++;
+							});
+//							
+							_.each(budgetCfg, function(cfg) {
+								_.each(cfg.child, function(sub_cfg) {
+									if(!sub_cfg.code && cfg.id == undefined) {
+										scope.rowData[i] = {};
+									} else if(cfg.id != undefined){//系统变量处理
+										scope.rowData[i] = cfg;
+									} else{
+										scope.rowData[i] = _.extend(
+											sub_cfg, {
+												'mdId': cfg.mdId,
+												'mdDesc': cfg.mdDesc,
+												'mdCode': cfg.mdCode,
+												'mdName': cfg.mdName,
+												'mdType': cfg.mdType
+											}
+										);
+									}
+									i++;
+								});
+							});
+							_.each(scope.rowData, function(title) {
+								if(!title.code && title.mdCode && title.eleCode) {
+									http_service.post('base/data/search', { "code": title.mdCode,"cache_id":title.mdCode }, function(res) {
+										if(!res.data.opState){
+											return false;
+										}
+										title['values'] = res.data.data.child;
+										title['elIden'] = res.data.data.elIden;
+									},true)
+								}
+							});
+							var is_org;
+							_.each(filed,function(_filed){
+								if(_filed.busCode == "orgCode"){
+									is_org = _filed.mdCode;
+								}
+							})
+							_.each(scope.rowData, function(title){
+								if(title.mdCode == is_org){
+									title[is_org] == true;
+								}
+//								if(title.mdCode == "F085"){
+//									title['is_org'] = true;
+//								}
+							})
+						}
+						scope.$watch('tabletitlescfg', function() {
+							refreshRowData();
+						}, true);
+					}
+				}
+			}
+		}
+	}])
+	.directive('expenseTable', ['$rootScope', 'http_service','$timeout', function($rootScope, http_service,$timeout) {
+		return {
+			restrict: 'ACEM',
+			templateUrl: './static/templates/expense_standard_table.html',
+			replace: true,
+			scope: {
+				allexpensedata: '=',
+				expensedata: '=',
+				index: '=',
+				tabletitlescfg: '=',
+				tabletitlescfgs: '=',
+				sstype: '=',
+				ssname: '=',
+//				ssSubType:'=',
+				sstypes: '=',
+				ssnames: '=',
+				ssrules:'=',
+//				ssSubTypes:'=',
+				sstypename: '=',
+				ssnamename:'=',
+				sstnames:'=',
+				ssnnames:'='
+			},
+			compile: function() {
+				return {
+					pre: function(scope, iElement, iAttrs, controller) {
+						scope.$watch("tabletitlescfg",function(){
+							scope.expenseConditionsTitles = scope.tabletitlescfg['expenseConditionsTitles'];
+							scope.expenseCtriteraTitles = scope.tabletitlescfg['expenseCtriteraTitles'];
+							scope.expenseBudgetTitles = scope.tabletitlescfg['expenseBudgetTitles'];
+						});
+						scope.expenseConditionsTitles = scope.tabletitlescfg['expenseConditionsTitles'];
+						scope.expenseCtriteraTitles = scope.tabletitlescfg['expenseCtriteraTitles'];
+						scope.expenseBudgetTitles = scope.tabletitlescfg['expenseBudgetTitles'];
+						
+						scope.$watch(function(){
+							return scope.ssrules;
+						},function(){
+							scope.ssRule = scope.ssrules[scope.index];
+						})
+						
+						scope.ssRuleOps = [
+							{"val":"0","name":"无"},
+							{"val":"1","name":"最大"},
+							{"val":"2","name":"最小"},
+							{"val":"3","name":"平均"},
+							{"val":"4","name":"最先到达"},
+							{"val":"5","name":"最后到达"}
+						];
+						scope.budgetColspan = function(titles) {
+							var colspan = 0;
+							_.each(titles, function(title) {
+								if(title.child && title.child.length) {
+									colspan += title.child.length;
+								} else {
+									colspan += 1;
+								}
+							});
+							return colspan;
+						};
+						scope.duplicate_expense_strd_table = function() {
+							$('div.drop_down_sel').remove();
+							scope.allexpensedata.push(_.cloneDeep(scope.expensedata));
+							scope.tabletitlescfgs.push(_.cloneDeep(scope.tabletitlescfg));
+//							scope.sstypename.push(_.cloneDeep(scope.sstypename));
+//							scope.ssnamename.push(_.cloneDeep(scope.ssnamename));
+							scope.ssnames.push(_.cloneDeep(scope.ssname));
+							scope.sstypes.push(_.cloneDeep(scope.sstype));
+//							scope.ssSubTypes.push(_.cloneDeep(scope.ssSubType));
+						};
+						
+						scope.rm_expense_strd_table = function() {
+							$('div.drop_down_sel').remove();
+							_.remove(scope.allexpensedata, function(item) {
+								return item === scope.expensedata
+							});
+							_.remove(scope.tabletitlescfgs, function(item) {
+								return item === scope.tabletitlescfg;
+							});
+//							_.remove(scope.ssnames,function(item){
+//								return item === scope.ssname
+//							})
+//							_.remove(scope.types,function(item){
+//								return item === scope.sstype
+//							})
+//							_.remove(scope.expenseBudgetTitles,function(item){
+//								return item === scope.expenseBudgetTitles[0]
+//							})
+//							_.remove(scope.expenseConditionsTitles,function(item){
+//								return item === scope.expenseConditionsTitles[0]
+//							})
+//							_.remove(scope.expenseCtriteraTitles,function(item){
+//								return item === scope.expenseCtriteraTitles[0]
+//							})
+//							scope.addConditions();
+//							scope.addCritera();
+//							scope.addBudget();
+
+//							_.each(scope.expenseBudgetTitles,function(budgettitle){
+//								_.remove(scope.tabletitlescfg,function(item){
+//									return item === budgettitle
+//								})
+//							})
+//							_.each(scope.expenseConditionsTitles,function(conditiontitle){
+//								_.remove(scope.tabletitlescfg,function(item){
+//									return item === conditiontitle
+//								})
+//							})
+//							_.each(scope.expenseCtriteraTitles,function(ctriteratitle){
+//								_.remove(scope.tabletitlescfg,function(item){
+//									return item === ctriteratitle
+//								})
+//							})
+//							scope.sstypename=''
+//							scope.ssnamename=''
+							scope.sstypes.splice(scope.index,1)
+							scope.ssnames.splice(scope.index,1)
+							scope.ssrules.splice(scope.index,1)
+							scope.ssRule = scope.ssrules[scope.index];
+						};
+						
+//						scope.$watch('tabletitlescfgs', function() {
+//							scope.$parent.table();
+//						});
+						//添加一个条件目录
+						scope.addConditions = function() {
+							var index = _.cloneDeep(scope.expenseConditionsTitles).length;
+							for(i in scope.expensedata){
+								var data = _.cloneDeep(scope.expensedata[i]);
+								var newdata = {};
+								var num = -1;
+								for(j in scope.expensedata[i]){
+									num++;
+									newdata[num] = _.cloneDeep(data[j]);
+									
+									if(j == (index-1)){
+										num++;
+										newdata[num] = {"grant_value":[""]};
+									}else if(j > (index-1)){
+										newdata[num] = _.cloneDeep(data[j]);
+									}
+								}
+								scope.expensedata[i] = newdata;
+							}
+							scope.expenseConditionsTitles.push({
+								enable: true
+							});
+						};
+						//添加一个标准目录
+						scope.addCritera = function() {
+							var index1 = _.cloneDeep(scope.expenseConditionsTitles).length;
+							var index2 = _.cloneDeep(scope.expenseCtriteraTitles).length;
+							var index = index1+index2;
+							for(i in scope.expensedata){
+								var data = _.cloneDeep(scope.expensedata[i]);
+								var newdata = {};
+								var num = -1;
+								for(j in scope.expensedata[i]){
+									num++;
+									newdata[num] = _.cloneDeep(data[j]);
+									
+									if(j == (index-1)){
+										num++;
+										newdata[num] = {"grant_value":[""]};
+									}else if(j > (index-1)){
+										newdata[num] = _.cloneDeep(data[j]);
+									}
+								}
+								scope.expensedata[i] = newdata;
+							}
+							scope.expenseCtriteraTitles.push({
+								enable: true
+							});
+//							var sliceinfo = [];
+//							_.each(scope.allexpensedata,function(data){
+////								if(data.length > 1){
+//									_.each(data,function(info,index){
+//										for(i in info){
+//											var infos = info[i];
+//											info[2] = {'grant_value':['']}
+//											if(parseInt(i) > 2){
+////												info[i] = info[i+1];
+//												sliceinfo.push(infos); 
+//											}
+//										}
+//									})
+////								}
+//							})
+						};
+
+						//添加一个横向显示的目录
+						scope.addBudget = function() {
+							for(i in scope.expensedata){
+								var data = _.cloneDeep(scope.expensedata[i]);
+								var num = -1;
+								for(j in scope.expensedata[i]){
+									num++;
+								}
+								num++;
+								scope.expensedata[i][num] = {"grant_value":[""]};
+							}
+							scope.expenseBudgetTitles.push({
+								enable: true,
+								child: [{}]
+							});
+						};
+						//移出目录
+						scope.rmTitle = function(title,indexs,type) {
+							var index1 = _.cloneDeep(scope.expenseConditionsTitles).length;
+							var index2 = _.cloneDeep(scope.expenseCtriteraTitles).length;
+							var index3 = _.cloneDeep(scope.expenseBudgetTitles).length;
+							var typeindex;
+							var index;
+							var childnum;
+							var thischildnum;
+							switch (type){
+								case 1:
+									index = indexs+1;
+									typeindex = index1;
+									thischildnum = 1;
+									break;
+								case 2:
+									index = parseInt(index1)+indexs+1;
+									typeindex = index2;
+									thischildnum = 1;
+									break;
+								case 3:
+									index = parseInt(index1)+parseInt(index2);
+									typeindex = index3;
+									childnum = 0;
+									for(i in scope.expenseBudgetTitles){
+										childnum += scope.expenseBudgetTitles[i].child.length;
+										if(scope.expenseBudgetTitles[i] == title){
+											break;
+										}
+									}
+//									index += childnum;
+									thischildnum = title.child.length;
+									index = index + childnum - thischildnum +1;
+									break;
+							}
+								for(i in scope.expensedata){
+									var data = _.cloneDeep(scope.expensedata[i]);
+									var newdata = {};
+									var num = -1;
+									for(j in scope.expensedata[i]){
+//										num++;
+//										if(index == 1){
+//											newdata[j] = {"grant_value":[""]};
+//										}else{
+//											newdata[j] = _.cloneDeep(data[j]);
+//										}
+										num++;
+										if(j != (index-1)){
+											if(data[num] != undefined){
+												newdata[j] = _.cloneDeep(data[num]);
+											}
+										}else{
+											if(typeindex != 1){
+												num += thischildnum;
+												newdata[j] = _.cloneDeep(data[num]);
+											}else{
+												newdata[j] = {"grant_value":[""]};
+												if(type == 3){
+													break;
+												}
+											}
+										}
+									}
+									scope.expensedata[i] = newdata;
+								}
+								
+							_.remove(scope.expenseConditionsTitles, function(item) {
+								if(title == item){
+									_.extend(title,{"id":false});
+								}
+								if(title == item && scope.expenseConditionsTitles.length === 1) {
+									_.extend(item, {
+										"mdId": "",
+										"mdDesc": "",
+										"mdName": "",
+										"mdType": "",
+										"mdCode":""
+									});
+									return false;
+								}
+								return item === title;
+							});
+							_.remove(scope.expenseCtriteraTitles, function(item) {
+								if(title == item){
+									_.extend(title,{"id":false});
+								}
+								if(title == item && scope.expenseCtriteraTitles.length === 1) {
+									_.extend(item, {
+										"mdId": "",
+										"mdDesc": "",
+										"mdName": "",
+										"mdType": "",
+										"mdCode":""
+									});
+									return false;
+								}
+								return item === title;
+							});
+							_.remove(scope.expenseBudgetTitles, function(item) {
+								if(title == item){
+									_.extend(title,{"id":false});
+								}
+								if(title == item && scope.expenseBudgetTitles.length === 1) {
+									item.child = [{}];
+									_.extend(item, {
+										"child": [{}],
+										"mdId": "",
+										"mdDesc": "",
+										"mdName": "",
+										"mdType": "",
+										"mdCode":""
+									});
+									return false;
+								}
+								return item === title;
+							});
+						};
+						//关系选择
+						scope.togle_relation = function(title,index,type){
+							switch(type){
+								case 1:
+//								
+								    if(scope.expenseConditionsTitles[index]['asRelation'] != undefined && scope.expenseConditionsTitles[index]['asRelation'] == 0){
+								    	scope.expenseConditionsTitles[index]['asRelation'] = 1;
+								    }else{
+								    	scope.expenseConditionsTitles[index]['asRelation'] = 0;
+								    }
+								break;
+								case 2:
+									if(scope.expenseCtriteraTitles[index]['asRelation'] != undefined && scope.expenseCtriteraTitles[index]['asRelation'] == 0){
+								    	scope.expenseCtriteraTitles[index]['asRelation'] = 1;
+								    }else{
+								    	scope.expenseCtriteraTitles[index]['asRelation'] = 0;
+								    }
+								break;
+							}
+						}
+//						function refreshRowData() {
+//							scope.rowData = [];
+//							var conditionCfg = scope.expenseConditionsTitles;
+//							var criteriaCfg = scope.expenseCtriteraTitles;
+//							var budgetCfg = scope.expenseBudgetTitles;
+//							var i = 0;
+//							_.each(conditionCfg, function(cfg) {
+//								if(!cfg.mdId) {
+//									scope.rowData[i] = {};
+//								} else {
+//									scope.rowData[i] = cfg;
+//								}
+//								i++;
+//							});
+//							_.each(criteriaCfg, function(cfg) {
+//								if(!cfg.mdId) {
+//									scope.rowData[i] = {};
+//								} else {
+//									scope.rowData[i] = cfg;
+//								}
+//								i++;
+//							});
+//							_.each(budgetCfg, function(cfg) {
+//								_.each(cfg.child, function(sub_cfg) {
+//									if(!sub_cfg.code) {
+//										scope.rowData[i] = {};
+//									} else {
+//										scope.rowData[i] = _.extend(
+//											sub_cfg, {
+//												'mdId': cfg.mdId,
+//												'mdDesc': cfg.mdDesc,
+//												'mdCode': cfg.mdCode,
+//												'mdName': cfg.mdName,
+//												'mdType': cfg.mdType
+//											}
+//										);
+//									}
+//									i++;
+//								});
+//							});
+//							_.each(scope.rowData, function(title) {
+//								if(!title.code && title.mdCode) {
+//									http_service.post('base/data/search', { "code": title.mdCode }, function(res) {
+//										title['values'] = res.data.data.child;
+//										title['elIden'] = res.data.data.elIden;
+//									})
+//								}else{
+//									title['values']=[]
+//								}
+//							});
+//						}
+//						scope.$watch('tabletitlescfgs', function() {
+//							refreshRowData();
+//						}, true);
+						scope.$watch('expenseBudgetTitles', function() {
+							var budgetSubTitles = [];
+							_.each(scope.expenseBudgetTitles, function(title) {
+								if(title.child && title.child.length !== 0){
+									budgetSubTitles = budgetSubTitles.concat(title.child);
+								}
+								else{
+									title.child = [{"value":title.mdName}];
+									budgetSubTitles.push([{
+										"child": [{}],
+										"mdId": "",
+										"mdDesc": "",
+										"mdName": "",
+										"mdType": ""
+									}])
+								}
+							});
+							
+							scope.budgetSubTitles = budgetSubTitles;
+						}, true);
+						
+						//添加数据
+						scope.addRow = function() {
+							$('div.drop_down_sel').remove();
+							var data = _.cloneDeep(scope.expensedata);
+							
+							_.each(data[0],function(exdata){
+								exdata['grant_value'] = [""];
+								if(exdata['sys_val'] && exdata['sys_val'].id != undefined){
+									exdata['sys_val'] = {"show_sys_fx":exdata['sys_val'].name + "()"};
+								}
+							})
+							scope.expensedata.push(data[0]);
+						};
+
+						scope.selecttype = function($index) {
+							// TODO
+							scope.sstype = scope.ssTypeOptions[$index].mdCode;
+							scope.sstypename.push(scope.ssTypeOptions[$index].mdName);
+						}
+						
+						
+						scope.selectname = function($index) {
+							scope.ssname = scope.ssNameOptions[$index].cdCode;
+							scope.ssnamename = scope.ssNameOptions[$index].cdValue;
+						}
+					},
+					post: function($scope, element, attrs) {
+						if(!$scope.expensedata.length){
+							
+							$scope.expensedata.push({});
+						}
+							
+						http_service.post('supp/search/money/type', {}, function(res) {
+							$scope.ssTypeOptions = res.data.data;
+							$scope.$watch(function(){
+								return $scope.sstype
+							},function(){
+								_.each($scope.ssTypeOptions,function(opt){
+									if(opt.code == $scope.sstype){
+										$scope.sstypename = opt.value;
+									}
+								})
+							})
+							$scope.$watch(function(){
+								return $scope.ssname
+							},function(){
+								if($scope.ssname != "222"){
+									$timeout(function(){
+										$scope.ssSubType = true;
+										$scope.ssRule = "0";
+									},1)
+								}
+								_.each($scope.ssNameOptions,function(opt){
+									if(opt.cdCode == $scope.ssname){
+										$scope.ssnamename = opt.cdValue;
+									}
+								})
+							})
+							
+							
+						});
+//						http_service.post('supp/search/const', { "cdType": "90" }, function(res) {
+							$scope.ssNameOptions = _.filter(cddata,function(o){
+								return o.cdType == 90;
+							})
+//							$scope.ssNameOptions = res.data.data;
+								$scope.$watch(function(){
+									return $scope.$parent.ssSubTypes;
+								},function(){
+									$scope.ssSubType = $scope.$parent.ssSubTypes[$scope.index];
+								})
+								$scope.$watch(function(){
+									return $scope.ssSubType;
+								},function(){
+									 $scope.$parent.ssSubTypes[$scope.index] = $scope.ssSubType;
+								})
+								
+								$scope.$watch(function(){
+									return $scope.$parent.ssrules;
+								},function(){
+									  $scope.ssRule = $scope.$parent.ssrules[$scope.index];
+								})
+								
+								$scope.$watch(function(){
+									return $scope.ssRule;
+								},function(){
+									 $scope.$parent.ssrules[$scope.index] = $scope.ssRule;
+								})
+//						});
+//						$(document).off('click').on('click',function(event){
+////							$scope.showname = false;
+////							$scope.showclass = false;
+//							$('.showtype').hide();
+//							$('.showname').hide();
+//							event.stopPropagation()
+//							event.preventDefault()
+//						})
+//						$scope.showtype = function(event){
+//							$(event).closest('.select3-element').find('.showtype').show();
+////							$scope.showclass = true
+//							event.stopPropagation()
+//							event.preventDefault();
+//						}
+//						$('.type').off('click').on('click',function(event){
+//							$('.showtype.typeshow').show();
+//							$(event.target).show();
+////							$scope.showtype = true
+//							event.stopPropagation();
+//						})
+//						$('.name').off('click').on('click',function(event){
+////							$('.showname.showtype').show();
+//							$(event.target).show();
+////							$scope.showname = true
+//							event.stopPropagation();
+//						})
+					}
+				}
+			}
+		}
+	}])
+	.controller('expendStandardCtrl', ['$scope', 'http_service', '$timeout','$rootScope', function($scope, http_service, $timeout,$rootScope) {
+		$scope.sstypes = [''];
+		$scope.ssnames = [''];
+		$scope.ssrules = ['0'];//最大、最小、平均、最先到达、最后到达、无
+		$scope.ssSubTypes = ['1'];
+		$scope.allexpensedata = [
+			[]
+		];
+		$scope.tabletitlescfgs = [{
+			"expenseConditionsTitles": [{}],
+			"expenseCtriteraTitles": [{}],
+			"expenseBudgetTitles": [{ "child": [{}] }]
+		}];
+
+		function refreshMas(obj) {
+			var title;
+			if(obj.type != 5){
+				title = _.get(_.filter($scope.expense_titles, function(o) {
+					return o.mdCode === obj.mdCode;
+				}), 0);
+			}else{//系统变量回调
+				
+				
+				title =_.cloneDeep(_.get(_.filter($scope.system_titles,function(o){
+					return o.id == obj.id;
+				}), 0))
+				if(title != undefined){
+					if(obj.child != undefined && title.child != undefined){
+						_.extend(title,{'children':title.child});
+						title.child = [{'value':title.name}];
+					}
+					
+					_.extend(title,{'mdName':title.name});
+					
+				}else{
+					title = {'mdName':'此系统变量已被删除','notFound':true};
+				}
+				
+			}
+			_.extend(obj,title);
+			return obj;
+		}
+
+		function refreshBudget(obj) {
+			if(obj.mdCode){
+				http_service.post('base/data/search', { "code": obj.mdCode,"ceche":obj.mdCode }, function(res) {
+					if(!res.data.data) return false;
+					$timeout(function() {
+						obj.child = res.data.data.child;
+						obj.elIden = res.data.data.elIden;
+					}, 1);
+				},true);
+			}
+			
+		}
+
+		function getTableCFG(data) {
+			//添加关系属性
+//			
+			_.each(data.child,function(dt){
+				if(dt.asRelation == undefined){
+					dt['asRelation'] = 1;
+				}
+			})
+			
+			var firstColumnDT = _.filter(data.child, function(dt) {
+				return dt.asRowNo === 0;
+			});
+			var conditions = _.filter(firstColumnDT, function(dt) {
+				return dt.asType == 1;
+			});
+//			var relations = _.filter(firstColumnDT, function(dt) {
+//				return dt.asDefType === 11;
+//			});
+			conditions = _.sortBy(conditions, function(o) {
+				return o.asColNo;
+			});
+//			relations = _.sortBy(relations, function(o) {
+//				return o.asColNo;
+//			});
+			var criterias = _.filter(firstColumnDT, function(dt) {
+				return dt.asType == 2;
+			});
+			criterias = _.sortBy(criterias, function(o) {
+				return o.asColNo;
+			});
+			var budgets = _.filter(firstColumnDT, function(dt) {
+				return dt.asType == 3;
+			});
+			budgets = _.groupBy(budgets, 'asMasDefineCode');
+			var tableCFG = {
+				"expenseConditionsTitles": [{}],
+				"expenseCtriteraTitles": [{}],
+				"expenseBudgetTitles": [{ "child": [{}] }]
+			};
+			var conditionCFG = [];
+			_.each(conditions, function(condition, k) {
+				if(condition.asDefType != 5){
+					conditionCFG.push(refreshMas({
+						"mdId": "",
+						"mdCode": condition.asMasDefineCode,
+						"mdName": "",
+						"mdDesc": "",
+						"mdType": "1",
+						"mdDef1": "",
+						"mdDef2": "",
+						"mdDef3": "",
+						"mdDef4": "",
+						"mdDef5": "",
+						"values": [],
+						"elIden": condition.asElIden,
+						"type": condition.asDefType,
+						"enable": !!k,
+						'asRelation':condition.asRelation,
+						'group':1
+					}));
+				}else{
+					conditionCFG.push(refreshMas({
+						"elIden": condition.asElIden,
+						'id':condition.asMasDefineCode,
+						"type": condition.asDefType,
+						"enable": !!k,
+						'asRelation':condition.asRelation,
+						'group':1
+					}));
+				}
+				
+			});
+//			_.each(relations,function(relation,j){
+//				if(relation.asDefType != 5){
+//					conditionCFG.push(refreshMas({
+//						"mdId": "",
+//						"mdCode": relation.asMasDefineCode,
+//						"mdName": "",
+//						"mdDesc": "",
+//						"mdType": "1",
+//						"mdDef1": "",
+//						"mdDef2": "",
+//						"mdDef3": "",
+//						"mdDef4": "",
+//						"mdDef5": "",
+//						"values": [],
+//						"elIden": relation.asElIden,
+//						"type": relation.asDefType,
+//						"enable": !!j,
+//						'asRelation':relation.asRelation
+//					}));
+//				}else{
+//					conditionCFG.push(refreshMas({
+//						"id": relation.asMasDefineCode,
+//						"elIden": relation.asElIden,
+//						"type": relation.asDefType,
+//						"enable": !!j,
+//						'asRelation':relation.asRelation
+//					}));
+//				}
+//				
+//			})
+			tableCFG['expenseConditionsTitles'] = conditionCFG;
+			var criteriaCFG = [];
+			_.each(criterias, function(criteria, k) {
+				if(criteria.asDefType != 5){
+					criteriaCFG.push(refreshMas({
+						"mdId": "tmp",
+						"mdCode": criteria.asMasDefineCode,
+						"mdName": "",
+						"mdDesc": "",
+						"mdType": "1",
+						"mdDef1": "",
+						"mdDef2": "",
+						"mdDef3": "",
+						"mdDef4": "",
+						"mdDef5": "",
+						"values": [],
+						"elIden": criteria.asDefName,
+						"type": criteria.asDefType,
+						"enable": !!k,
+						'asRelation':criteria.asRelation,
+						'group':2
+					}));
+				}else{
+					criteriaCFG.push(refreshMas({
+						"id": criteria.asMasDefineCode,
+						"elIden": criteria.asDefName,
+						"type": criteria.asDefType,
+						"enable": !!k,
+						'asRelation':criteria.asRelation,
+						'group':2
+					}));
+				}
+			});
+			tableCFG['expenseCtriteraTitles'] = criteriaCFG;
+			var budgetCFG = [];
+			
+			_.each(budgets, function(budget, k) {
+				budget = budget[0]
+				
+				if(budget.asDefType == 5){
+					var cfg = refreshMas({
+						"child": [],
+						"id": budget.asMasDefineCode,
+						"elIden": budget.asDefName,
+						"type": budget.asDefType,
+						'group':3
+					});
+				}else{
+					var cfg = refreshMas({
+						"child": [],
+						"mdId": "",
+						"mdCode": budget.asMasDefineCode,
+						"mdName": "",
+						"mdDesc": "",
+						"mdType": budget.asDefType,
+						"mdDef1": "",
+						"mdDef2": "",
+						"mdDef3": "",
+						"mdDef4": "",
+						"mdDef5": "",
+						"elIden": budget.asDefName,
+						'group':3
+					});
+				}
+				if(k > 0) {
+					cfg['enable'] = true;
+				}
+				
+				refreshBudget(cfg);
+				budgetCFG.push(cfg);
+			});
+			tableCFG['expenseBudgetTitles'] = budgetCFG;
+		
+			return tableCFG;
+		};
+
+		function toRowData(data) {
+			var rowData = {};
+			_.each(data, function(o, k) {
+				if(o['asDefValues'][0].indexOf('${') > -1){
+					
+					var value = o['asDefValues'][0].match(/{(.*)} /)[1];
+					var relate = o['asDefValues'][0].match(/} (.*) /)[1];
+					var per = o['asDefValues'][0].match(/{(\d)}$/)[1];
+					var pervalue;
+					switch(per){
+						case "1":
+							pervalue = '天';
+							break;
+						case "2":
+							pervalue = '小时';
+							break;
+						case "3":
+							pervalue = '公里';
+							break;
+					}
+					$rootScope.relate = relate;
+					$rootScope.pervalue = pervalue;
+//					http_service.post('supp/search/master', { "mdType": "2" }, function(res) {
+						_.each($scope.expense_titles_first.data.data,function(info){
+							if(info.mdCode == value){
+								o['asDefValues'] = [info.mdName +" "+ relate + " " + pervalue];
+								rowData[o.asColNo] = { "grant_value": o['asDefValues'] }
+							}
+						})
+//					})
+				}else{
+					if(o.asDefType == 5){//系统变量  回调
+						var sys_back;
+						_.each($scope.system_titles,function(title){
+							if(title.id == o.asMasDefineCode){
+								sys_back = _.cloneDeep(title);
+							}
+						});
+						if(sys_back != undefined){
+							var sys_value = JSON.parse(o.asDefValues);
+							var sys_value_key = _.keys(sys_value);
+							_.each(sys_back.child,function(cd){//引用公式 回调
+								if(cd.joinMathId){
+									_.each($scope.system_titles,function(title){
+										if(cd.joinMathId == title.id){
+											_.extend(cd,{"joinchildren":_.cloneDeep(title.child)})
+										}
+									})
+								}
+							})
+							_.each(sys_back.child,function(cd){
+								_.each(sys_value_key,function(sk){
+									
+									if(cd.pIndex == sk){
+										if(cd.joinMathId == undefined){
+											cd['val'] = sys_value[sk];
+										}else{
+											var sys_jval_key = _.keys(sys_value[sk]);
+											_.each(cd.joinchildren,function(jcd){
+												_.each(sys_jval_key,function(jk){
+													if(jk == jcd.pIndex){
+														jcd['val'] = sys_value[sk][jk];
+													}
+												})
+											})
+										}
+									}
+								})
+							})
+							_.extend(sys_back,{'children':sys_back.child,'show_sys_fx':o['asShowCount']});
+							if(o.asCount){
+								_.extend(sys_back,{'sys_count':o.asCount});
+							}
+							if(o.asInverse != undefined){//正、反选属性回调
+								rowData[o.asColNo] = { "grant_value": o['asShowCount'],"asInverse": o.asInverse,"sys_val":sys_back};
+							}else{
+								rowData[o.asColNo] = { "grant_value": o['asShowCount'],"asInverse": 1,"sys_val":sys_back}
+							}
+						}else{
+							rowData[o.asColNo] = { "grant_value": o['asShowCount'],"asInverse": 1};
+						}
+						
+					}else{
+						if(o.asInverse != undefined){//正、反选属性回调
+							rowData[o.asColNo] = { "grant_value": o['asDefValues'],"asInverse": o.asInverse};
+						}else{
+							rowData[o.asColNo] = { "grant_value": o['asDefValues'],"asInverse": 1 }
+						}
+					}
+				}
+			});
+//			
+			return rowData;
+		}
+
+		function getExpenseData(data) {
+			
+			var expense_data = data.child;
+			if(!expense_data.length) return false;
+			var expense_data_row_group = _.groupBy(expense_data, 'asRowNo');
+			
+			function sortNumber(a,b)
+			{
+				return a - b
+			}
+			var keys = _.keys(expense_data_row_group).sort(sortNumber);
+			
+			var tableData = [];
+			var rowData;
+			_.each(keys, function(i) {
+				var data = expense_data_row_group[i];
+				rowData = toRowData(data);
+				tableData.push(rowData);
+			});
+			
+			return tableData;
+		};
+		
+		$scope.table = function(){
+			expenseTableOnceMore()
+		}
+		
+		function expenseTableOnceMore() {
+			http_service.post('supp/search', {}, function(res) {
+				$scope.get_all_data = true;
+				var data_list = res.data.data;
+				
+				
+				var tableCFG = [];
+				_.each(data_list, function(data) {
+					tableCFG.push(getTableCFG(_.cloneDeep(data)));
+				});
+				_.each(tableCFG, function(cfg, index) {
+					if($scope.tabletitlescfgs[index])
+						_.each(cfg, function(v, k) {
+							_.extend($scope.tabletitlescfgs[index][k], v);
+						});
+					else
+						$scope.tabletitlescfgs.push(cfg);
+				});
+//				_.each($scope.tabletitlescfgs,function(cfg,index){
+//					_.each(cfg,function(m,n){
+//						if(m.length != 1){
+//						}
+//						_.each(m,function(ms){
+//						})
+//					})
+//				})
+				var expenseData = [];
+				_.each(data_list, function(data) {
+					expenseData.push(getExpenseData(_.cloneDeep(data)));
+				});
+				_.each(expenseData, function(cfg, index) {
+					if($scope.allexpensedata[index]){
+//						_.each(cfg, function(v, k) {
+//							if($scope.allexpensedata[index][k]){
+//								_.extend($scope.allexpensedata[index][k], v);
+//							}
+//							else{
+//								$scope.allexpensedata[index].push(v);
+//							}
+							$scope.allexpensedata[index] = cfg
+//						});
+					}else{
+						$scope.allexpensedata.push(cfg);
+					}
+				});
+				var sstypes = [];
+//				http_service.post('supp/search/master', { "mdType": "3" }, function(res) {
+//					var typedata = res.data.data;
+//					for(i in data_list){
+//						var data = data_list[i]
+//						sstypes.push(data.ssType);
+//						http_service.post('supp/search/master', { "mdType": "3" }, function(res) {
+//							if(typedata.mdCode == data.ssType){
+//								sstypenames.push(typedata.mdCode)
+//							}
+//						});
+//					}
+//				});
+
+				http_service.post('supp/search/money/type', {}, function(res) {
+					for(i in data_list){
+						var data = data_list[i]
+						sstypes.push(data.ssType);
+						var typedata = res.data.data;
+						if(typedata.code == data.ssType){
+							sstypenames.push(typedata.code)
+						}
+					}
+					_.each(sstypes, function(type, index) {
+						if($scope.sstypes[index] === '') {
+							$scope.sstypes[index] = type;
+						} else {
+							$scope.sstypes.push(type);
+						}
+					});
+					var ssnames = [];
+					_.each(data_list, function(data) {
+						ssnames.push(data.ssName);
+					});
+					_.each(ssnames, function(name, index) {
+						if($scope.ssnames[index] === '') {
+							$scope.ssnames[index] = name;
+						} else {
+							$scope.ssnames.push(name);
+						}
+					});
+					var ssSubTypes=[];
+					$scope.ssSubTypes = [];
+					
+					_.each(data_list,function(data){
+						ssSubTypes.push(data.ssSubType);
+					})
+					
+					_.each(ssSubTypes,function(sub){
+							if(sub == 0){
+								
+								$scope.ssSubTypes.push(false);
+							}else{
+								$scope.ssSubTypes.push(true);
+							}
+					})
+					
+					$scope.ssrules = [];
+					
+					_.each(data_list,function(data){
+						$scope.ssrules.push(data.ssRule);
+					})
+					
+					//费用类型
+					$scope.ssTypeOptions = res.data.data;
+					$scope.sstypename = [];
+					_.each($scope.sstypes,function(type){
+						_.each($scope.ssTypeOptions,function(typeoption){
+							if(type == typeoption.code){
+								$scope.sstypename.push(typeoption.value);
+							}
+						})
+					})
+					//报销方式
+//					http_service.post('supp/search/const', { "cdType": "90" }, function(res) {
+						$scope.ssNameOptions = _.filter(cddata,function(o){
+								return o.cdType == 90;
+							})
+//						$scope.ssNameOptions = res.data.data;
+						$scope.ssnamename = [];
+						_.each($scope.ssnames,function(name){
+							_.each($scope.ssNameOptions, function(nameoption){
+								if(name == nameoption.cdCode){
+									$scope.ssnamename.push(nameoption.cdValue);
+								}
+							})
+						})
+//					});
+				});
+				
+//				for(i in data_list){
+//					var data = data_list[i]
+//					sstypes.push(data.ssType);
+//					//					sstypenames.push(data.ss)
+//					http_service.post('supp/search/money/type', {}, function(res) {
+//						var typedata = res.data.data;
+//						if(typedata.mdCode == data.ssType){
+//							sstypenames.push(typedata.mdCode)
+//						}
+//					});
+////				});
+//				}
+				
+				//费用类型
+//				http_service.post('supp/search/money/type', {}, function(res) {
+//					$scope.ssTypeOptions = res.data.data;
+//					$scope.sstypename = [];
+//					_.each($scope.sstypes,function(type){
+//						_.each($scope.ssTypeOptions,function(typeoption){
+//							if(type == typeoption.mdCode){
+//								$scope.sstypename.push(typeoption.mdName);
+//							}
+//						})
+//					})
+//				});
+			});
+		}
+		
+		//修改公式保存样式
+		function change_relation_style(data){
+			if(data != undefined){
+//				if(data.length < 2){
+//					return false;
+//				}
+				if(_.isArray(data)){
+					data = data[0]
+					if(data.length  <2){
+						return false;
+					}
+				}
+				
+				var value = data.split(" ");
+				var per = value.slice(-1);
+				var percode;
+				switch(per[0]){
+					case '天':
+						percode = 1;
+						break;
+					case '小时':
+						percode = 2;
+						break;
+					case '公里':
+						percode = 3;
+						break;
+				}
+				data = data.split(" ").slice(1,-1).join(" ")+" ${"+percode+"}";
+				return data;
+			}
+		}
+		
+		
+		
+		//保存的格式
+		function get_expense_standard_data(data, cfg, type, name,sub,rule) {
+			if(sub){
+				sub = 1;
+			}else{
+				sub = 0;
+			}
+			
+			var expenseStandardData = [];
+			var rowCfgs = [];
+//			
+//			
+			//删除关系属性
+			cfg['expenseConditionsTitles'][cfg['expenseConditionsTitles'].length-1].asRelation = undefined;
+			cfg['expenseCtriteraTitles'][cfg['expenseCtriteraTitles'].length-1].asRelation = undefined;
+			_.each(cfg['expenseBudgetTitles'],function(cfg){
+				cfg.asRelation = undefined;
+			})
+			var expense_condtions = cfg['expenseConditionsTitles'];
+			var expense_criters = cfg['expenseCtriteraTitles'];
+			var expense_budgets = cfg['expenseBudgetTitles'];
+			//补助条件 
+			var m = 0;
+			
+			for(i in expense_condtions){
+				var cfgItem = expense_condtions[i];
+				if(!cfgItem.eleCode && cfgItem.id == undefined){
+					_.each(data,function(ex_data){
+						if(ex_data[m] == undefined){
+							return false;
+						}
+						if(_.isArray(ex_data[m].grant_value)){
+							ex_data[m].grant_value = ex_data[m].grant_value[0];
+						}
+						cfgItem.grant_value = "${"+cfgItem.mdCode+ "} " + change_relation_style(ex_data[m].grant_value);
+					})
+//					for(j in document.getElementsByClassName("fxinput")){
+//						var fxinput = document.getElementsByClassName("fxinput");
+//						if(change_relation_style(fxinput[j].value) !== undefined){
+//							cfgItem.grant_value = "${"+cfgItem.mdCode+ "} " + change_relation_style(fxinput[m].value);
+//							m++;
+//						}
+//					}
+					rowCfgs.push(_.extend(cfgItem, { 'type': 11 ,'elIden': cfgItem['eleValue'] || '','code':cfgItem['elIden']||'','asType':1}));
+					break;
+				}else{
+					rowCfgs.push(_.extend(cfgItem, { 'type': 1,'code':cfgItem['elIden'] || '','elIden': cfgItem['eleValue'] || '','asType':1}));
+				}
+				m++;
+			}
+			_.each(expense_criters, function(cfgItem) {
+				rowCfgs.push(_.extend(cfgItem, { 'type': 2 ,'elIden': cfgItem['eleValue'] || '','code':cfgItem['elIden'] || '' ,'asType':2}));
+			});
+			_.each(expense_budgets, function(cfgItem) {
+				if(cfgItem.child && cfgItem.child.length) {
+					_.each(cfgItem.child, function(_cfgItem) {
+						if(cfgItem.id != undefined){
+							rowCfgs.push(_.extend(_cfgItem, { 'type': 3, 'elIden': cfgItem['eleValue'] || '','code':_cfgItem['code'] || '' ,'mdCode':cfgItem['mdCode'] || $scope.types,"id":cfgItem.id,'asType':3}));
+						}else{
+							rowCfgs.push(_.extend(_cfgItem, { 'type': 3, 'elIden': cfgItem['eleValue'] || '','code':_cfgItem['code'] || '' ,'mdCode':cfgItem['mdCode'] || $scope.types,'asType':3}));
+						}
+						
+					});
+				}
+			})
+			
+			_.each(rowCfgs,function(cfg){//系统变量处理  修改type
+				if(cfg.id != undefined && cfg.id != false){
+					cfg['type'] = 5;
+				}
+			})
+			
+			
+			_.each(rowCfgs, function(cfg, column) {
+				_.each(data, function(dtRow, row) {
+					var columnValue = dtRow[column];
+					if(dtRow[column] != undefined){
+						if(dtRow[column]['grant_value'] && dtRow[column]['grant_value'].length == 0){
+						 	dtRow[column]['grant_value'] = [""];
+						 }
+						if(cfg.values && cfg.values.length == 0 && !cfg.is_org){
+								if(change_relation_style(dtRow[column].grant_value) != false && cfg.mdCode){
+									cfg['grant_value'] = "${"+cfg.mdCode+ "} " + change_relation_style(dtRow[column].grant_value);
+								}else{
+									cfg['grant_value'] = "";
+								}
+						}
+					}
+					if(!cfg.eleCode){//非下拉框 排除反选属性
+						if(dtRow[column] != undefined){
+							dtRow[column]["asInverse"] = undefined;
+						}else{
+							dtRow[column] = {"asInverse":undefined};
+						}
+						
+					}
+					if(cfg.type != 5){
+						expenseStandardData.push({
+							'asType':cfg.asType,//1:补助标准条件,2:补助标准结果,3:补助金额
+							"asColNo": column, //列号
+							"asDefName": cfg['elIden'], //主数据元素标识符
+							"asDefType": cfg['type'], //1:补助标准条件,2:补助标准结果,3:补助金额,90:报销方式
+							"asDefValues": cfg['grant_value'] || (dtRow && dtRow[column] && dtRow[column]['grant_value']) || [''], //主数据元素值code
+	//						"group_id": dtRow && dtRow[column] && dtRow[column]['group_id'], //group id
+							"asElIden": cfg['code'], //暂时为空
+							"asMasDefineCode": cfg['mdCode'],
+							"asRowNo": row,
+							'asRelation':cfg.asRelation,
+							'asInverse':dtRow[column]['asInverse']
+						});
+					}else{
+						var sys_fx_val = {};
+						var show_sys_val = '';
+						
+						if(dtRow[column].sys_val){
+							show_sys_val = dtRow[column].sys_val.show_sys_fx;
+							_.each(dtRow[column].sys_val.children,function(cd){
+								if(cd.joinMathId == undefined){
+									if(cd.val && cd.val != ""){
+										sys_fx_val[cd.pIndex] = cd.val;
+									}
+								}else{
+									var jval = {};
+									_.each(cd.joinchildren,function(jcd){
+										if(jcd.val && jcd.val != ""){
+											jval[jcd.pIndex] = jcd.val;
+										}
+									})
+									sys_fx_val[cd.pIndex] = jval;
+								}
+							})
+						}
+						sys_fx_val = JSON.stringify(sys_fx_val);
+						expenseStandardData.push({
+							'asType':cfg.asType,//1:补助标准条件,2:补助标准结果,3:补助金额
+							"asColNo": column, //列号
+							"asElIden": "", //暂时为空
+							"asDefType": cfg['type'], //1:补助标准条件,2:补助标准结果,3:补助金额,90:报销方式
+							"asDefValues": cfg.notFound?['{}']:sys_fx_val,
+							"asMasDefineCode": cfg['id'],
+							"asRowNo": row,
+							'asRelation':cfg.asRelation,
+							'asShowCount':show_sys_val,
+							"asCount":cfg.notFound?"":dtRow[column].sys_val.sys_count
+						});
+					}
+				});
+			});
+//			
+			_.each(expenseStandardData,function(expense){
+				if(expense.asRelation == undefined){
+					delete expense.asRelation;
+				}
+				if(expense.asInverse == undefined){
+					delete expense.asInverse;
+				}
+			})
+//			
+			return {
+				"child": expenseStandardData,
+				"ssDispFun": "显示用逻辑公式",
+				"ssLogicFun": "计算用逻辑公式",
+				"ssName": name,
+				"ssSubType": sub,
+				"ssType": type,
+				"ssRule":rule
+			}
+		}
+		$scope.$on('$viewContentLoaded', function() {
+			var frm_height = $(document).height() - 52;
+			$('div.split_form').height(frm_height);
+			$(window).resize(function() {
+				var frm_height = $(document).height() - 52;
+				$('div.split_form').height(frm_height);
+			});
+		});
+		//新建表格
+		$scope.create_expense_strd_table = function() {
+			$('div.drop_down_sel').remove();
+//			$timeout(function(){
+				$scope.allexpensedata.push([]);
+				$scope.tabletitlescfgs.push({
+					"expenseConditionsTitles": [{}],
+					"expenseCtriteraTitles": [{}],
+					"expenseBudgetTitles": [{ "child": [{}] }]
+				});
+				$scope.ssnames.push('');
+				$scope.sstypes.push('');
+				$scope.ssSubTypes.push(true);
+//			},1)
+		}
+
+		//保存报销标准
+		$scope.saveExpense = function() {
+			$('div.drop_down_sel').remove();
+			var data = [];
+			var pst_dt = { "data": [] };
+			_.each($scope.allexpensedata, function(dt, index) {
+				var cfg = _.cloneDeep($scope.tabletitlescfgs[index]);
+				var type = _.cloneDeep($scope.sstypes[index]);
+				var name = _.cloneDeep($scope.ssnames[index]);
+				var sub = _.cloneDeep($scope.ssSubTypes[index]);
+				var rule = _.cloneDeep($scope.ssrules[index]);
+				var expense_dt = get_expense_standard_data(dt, cfg, type, name,sub,rule);
+				pst_dt['data'].push(expense_dt);
+			});
+			
+			http_service.post('supp/save', pst_dt, function(res) {
+				if(res.data.opState) {
+					//alert('保存补助标准成功。')
+					$scope.$parent.tsuccess( "保存补助标准成功!")
+				} else {
+					//alert('后台错误保存补助标准失败。')
+					$scope.$parent.terro("后台错误,保存补助标准失败。")
+				}
+			});
+
+		};
+		
+		//切换补助标准内容 与 系统变量
+		$scope.title_type = true;//默认显示补助标准内容
+		
+		
+		http_service.post('supp/search/master', {"mdType":2}, function(res) {
+			if(res.data.data){
+				_.each(res.data.data,function(title){
+					//添加默认的关系属性
+//					if(title.asRelation == undefined){
+//						_.extend(title,{'asRelation':1});
+//					}
+				})
+			}
+			$scope.expense_titles_first = res;
+			var expense_titles = res.data.data;
+			$scope.expense_titles = expense_titles;
+			expense_titles = _.map(expense_titles, function(title, n) {
+				return {
+					'type': n,
+					'btn': '<div class="col-md-6"><button title="'+ title.mdName +'" class="btn btn-success btn-elb">' + title.mdName + '</button></div>',
+					'field': '<span style="display:none;">' + title.mdName + '</span>',
+					'data': title
+				}
+			});
+			
+			var fb = new form_builder.create();
+			fb.no_wrapper(false);
+			fb.add_elements(expense_titles);
+			fb.add_forms('td.expenseTitle');
+			fb.add_elements_box('.expense_titles');
+			fb.element_appended_before_allback(before_el_append);
+			fb.element_appended_callback(after_el_append);
+			fb.bootstrap();
+			//将拖动的数据加入表格 
+			function after_el_append(title, holder) {
+				var this_title = title;
+				var title_data = arguments[0] && arguments[0][0] && arguments[0][0]['data'];
+				var $td_holder = $(arguments[2]);
+				var group = $td_holder.attr('group');
+				var index = $td_holder.attr('index');
+				var tableindex = $td_holder.attr('tableindex');
+				var cellIndex = 0;
+			
+				//				
+				//				
+				//				
+				//				
+				//				
+				switch(group) {
+					case 'condition':
+						var title = $scope.tabletitlescfgs[tableindex]['expenseConditionsTitles'][index];
+						$timeout(function() {
+							_.extend(title_data, {
+								"asRelation": 1
+							}); //默认关系属性
+							for(var key in title){
+								delete title[key];
+							}	
+							_.extend(title, title_data);
+							_.extend(title, {"group":1});
+							
+						}, 1);
+						//单元格index
+						cellIndex = index;
+						break;
+					case 'criteria':
+						var title = $scope.tabletitlescfgs[tableindex]['expenseCtriteraTitles'][index];
+						$timeout(function() {
+							for(var key in title){
+								delete title[key];
+							}
+							if(this_title[0].data.eleCode) {
+								_.extend(title_data, {
+									"asRelation": 1
+								}); //默认关系属性
+								_.extend(title, title_data);
+								_.extend(title, {"group":2});
+							} else {
+								var errMsg = "补助标准不支持" + title_data.mdName + "控件";
+								$scope.$parent.terro(errMsg);
+								if(!title.mdCode) {
+									_.extend(title, {
+										"enable": true
+									});
+								}
+							}
+						}, 1);
+						//单元格index
+						cellIndex = $scope.tabletitlescfgs[tableindex]['expenseConditionsTitles'].length + parseInt(index);
+						break;
+					case 'expense':
+						var title = $scope.tabletitlescfgs[tableindex]['expenseBudgetTitles'][index];
+						for(var key in title){
+								delete title[key];
+							}
+						$timeout(function() {
+							_.extend(title, title_data);
+							_.extend(title, {"group":3});
+						}, 1);
+						//单元格index
+						cellIndex = $scope.tabletitlescfgs[tableindex]['expenseCtriteraTitles'].length +
+							$scope.tabletitlescfgs[tableindex]['expenseConditionsTitles'].length +
+							parseInt(index);
+						http_service.post('base/data/search', {
+							"code": title_data.mdCode,
+							"cache_id": title_data.mdCode
+						}, function(res) {
+							if(!res.data.data) return false;
+							$timeout(function() {
+								title.child = res.data.data.child;
+								title.elIden = res.data.data.elIden;
+								title.drag = true;
+							}, 1);
+						}, true);
+						break;
+				}
+				//					var data_list = $scope.allexpensedata[tableindex];
+				//					var grant_val;
+				//					_.each(data_list, function(data) {
+				//						if(data[cellIndex]){
+				//							grant_val = data[cellIndex]['grant_value'];
+				//						}else{
+				//							grant_val = [''];
+				//						}
+				//						
+				//						if(grant_val && _.isArray(grant_val)) {
+				//							grant_val.splice(0, grant_val.length);
+				//						}
+				//					});
+				if(cellIndex && (group === 'condition' || group === 'criteria')) {
+					var data_list = $scope.allexpensedata[tableindex];
+					_.each(data_list, function(data) {
+						if(data && data[cellIndex]) {
+							if(this_title[0].data.eleCode != undefined && group != 'criteria') {
+								data[cellIndex]['grant_value'] = [];
+							}
+							data[cellIndex]['asInverse'] = 1;
+						} else {
+							var asobj = {};
+							asobj[cellIndex] = {
+								'asInverse': 1
+							}
+							_.extend(data, asobj);
+						}
+						//						var grant_val = data[cellIndex]['grant_value'];
+						//						if(grant_val && _.isArray(grant_val)) {
+						//							grant_val.splice(0, grant_val.length);
+						//						}
+					});
+				} else if(cellIndex) {
+					var data_list = $scope.allexpensedata[tableindex];
+					_.each(data_list, function(data) {
+						for(i in data) {
+							if(i >= cellIndex) {
+								data[i]['grant_value'] = [];
+							}
+						}
+					});
+				}
+			
+			}
+			//			$scope.$watch(function(){
+			//			return $scope.tabletitlescfgs.length
+			//			},function(){
+			//				after_el_append()
+			//			})
+			
+			function before_el_append(title, holder) {
+				$(holder).find('span').remove();
+			}
+		});
+		http_service.post('systemMath/search/list', {}, function(response) { //获得系统变量
+			var system_titles = response.data.data;
+			$scope.system_titles = system_titles;
+			$rootScope.system_titles = system_titles;
+			system_titles = _.map(system_titles, function(title, n) {
+				return {
+					'type': n,
+					'btn': '<div class="col-md-6"><button title="' + title.name + '" class="btn btn-success btn-elb">' + title.name + '</button></div>',
+					'field': '<span style="display:none;">' + title.name + '</span>',
+					'data': title
+				}
+			});
+			
+			var sys = new form_builder_s.create();
+			sys.no_wrapper(false);
+			sys.add_elements(system_titles);
+			sys.add_forms('td.expenseTitle');
+			sys.add_elements_box('.system_titles');
+			sys.element_appended_before_allback(before_el_append_s);
+			sys.element_appended_callback(after_el_append_s);
+			sys.bootstrap();
+
+			function after_el_append_s(title, holder) {
+				var this_title = title;
+				var title_data = arguments[0] && arguments[0][0] && arguments[0][0]['data'];
+				var $td_holder = $(arguments[2]);
+				var group = $td_holder.attr('group');
+				var index = $td_holder.attr('index');
+				var tableindex = $td_holder.attr('tableindex');
+				var cellIndex = 0;
+				
+				
+				
+				_.extend(title_data,{'children':title_data.child})
+				switch(group) {
+					case 'condition':
+						var title = $scope.tabletitlescfgs[tableindex]['expenseConditionsTitles'][index];
+						for(var key in title){
+							delete title[key];
+						}	
+						$timeout(function() {
+							_.extend(title_data, {
+								"asRelation": 1,
+								'mdName':title_data.name
+							}); //默认关系属性
+							_.extend(title, title_data);
+							_.extend(title, {"group":1});
+						}, 1);
+						//单元格index
+						cellIndex = index;
+						break;
+					case 'criteria':
+						var title = $scope.tabletitlescfgs[tableindex]['expenseCtriteraTitles'][index];
+						for(var key in title){
+							delete title[key];
+						}	
+						$timeout(function() {
+							_.extend(title_data, {
+								"asRelation": 1,
+								'mdName':title_data.name
+							}); //默认关系属性
+							_.extend(title, title_data);
+							_.extend(title, {"group":2});
+						}, 1);
+						//单元格index
+						cellIndex = $scope.tabletitlescfgs[tableindex]['expenseConditionsTitles'].length + parseInt(index);
+						break;
+					case 'expense':
+						var title = $scope.tabletitlescfgs[tableindex]['expenseBudgetTitles'][index];
+						for(var key in title){
+							delete title[key];
+						}	
+						$timeout(function() {
+							_.extend(title_data, {
+								'mdName':title_data.name
+							});
+							_.extend(title, title_data);
+							_.extend(title, {"group":3});
+							title.child = [{"value":title_data.name}];
+							title.drag = true;
+						}, 1);
+						//单元格index
+						cellIndex = $scope.tabletitlescfgs[tableindex]['expenseCtriteraTitles'].length +
+							$scope.tabletitlescfgs[tableindex]['expenseConditionsTitles'].length +
+							parseInt(index);
+						
+//						http_service.post('base/data/search', {
+//							"code": title_data.mdCode,
+//							"cache_id": title_data.mdCode
+//						}, function(res) {
+//							if(!res.data.data) return false;
+//							$timeout(function() {
+//								title.child = res.data.data.child;
+//								title.elIden = res.data.data.elIden;
+//								title.drag = true;
+//							}, 1);
+//						}, true);
+						break;
+				}
+				if(cellIndex && (group === 'condition' || group === 'criteria')) {
+					var data_list = $scope.allexpensedata[tableindex];
+					
+					_.each(data_list, function(data) {
+						if(data[cellIndex]) {
+							data[cellIndex]['grant_value'] = [];
+							data[cellIndex]['asInverse'] = 1;
+						} else {
+							var asobj = {};
+							asobj[cellIndex] = {
+								'asInverse': 1
+							}
+							_.extend(data, asobj);
+						}
+						data[cellIndex]['sys_val'] = {'show_sys_fx':title_data.name+"()"}
+					});
+				} else if(cellIndex) {
+					
+					var data_list = $scope.allexpensedata[tableindex];
+					
+					_.each(data_list, function(data) {
+						for(i in data) {
+							if(i >= cellIndex) {
+								data[i]['grant_value'] = [];
+//								data[i]['sys_val'] = {'show_sys_fx':title_data.name+"()"}
+							}
+						}
+						
+						data[cellIndex] ={'sys_val':{'show_sys_fx':title_data.name+"()"}}
+					});
+				}
+			}
+
+			function before_el_append_s(title, holder) {
+				$(holder).find('span').remove();
+			}
+			$scope.table = function() {
+				expenseTableOnceMore();
+			}
+
+			$scope.$watch('tabletitlescfgs', function() {
+				expenseTableOnceMore();
+			});
+		})
+	}]);
\ No newline at end of file
diff --git a/src/static/js/forms_center/module.js b/src/static/js/forms_center/module.js
new file mode 100644
index 0000000..abdfc8d
--- /dev/null
+++ b/src/static/js/forms_center/module.js
@@ -0,0 +1,17 @@
+angular.module('user_forms_center', [])
+.controller('userFormsCenterCtrl', ['$scope','$routeParams', '$compile', function($scope, $routeParams, $compile){
+    $scope.type = $routeParams.type;
+    //由于设置高度产生滚动条,注释之
+    //$scope.$on('$viewContentLoaded', function() {
+    //    $('div.split_form').height($(document).height() - 52);
+    //    $(window).resize(function(){
+    //        $('div.split_form').height($(document).height() - 52);
+    //    });
+    //});
+
+    $scope.show_saved_form = function(){
+        var $form = $('<div saved-form ></div>');
+        $('div.form_container').html($form);
+        $compile($form)($scope);
+    }
+}]);
\ No newline at end of file
diff --git a/src/static/js/messages_center/module.js b/src/static/js/messages_center/module.js
new file mode 100644
index 0000000..950eede
--- /dev/null
+++ b/src/static/js/messages_center/module.js
@@ -0,0 +1,164 @@
+
+/**
+ * Created by lichen on 2017/6/16.
+ */
+//(function(){
+    angular.module('messages_center',[])
+        //点击标为已处理
+        .directive('clickRead', ['$rootScope', '$compile', 'http_service', '$http', function($rootScope, $compile, http_service, $http) {
+            return{
+                scope:true,
+                link:function(scope, element, attrs) {
+                    //scope: true;
+                    $(element).css({
+                        'cursor': 'pointer'
+                    });
+                    $(element).on('click',function(){
+                        var index = $(element).index();
+                        var param;
+                        _.each(scope.messages,function(message,i){
+                            if (i == index){
+                                scope.eId = message.eId;
+                                param = message;
+                                return false;
+                            }
+                        });
+                        
+                        if(param.eState == '已处理'){
+                        	return false;
+                        }
+                        http_service.post('errmsg/update/err',{"eId":param.eId},function(res){
+                              $(element).find('td').eq(3).text('已处理').css('color','red');
+                              param.eState = '已处理';
+                        })
+                    })
+                }
+            }
+        }])
+        .controller('messageCenterCtrl',['$scope', '$routeParams', '$route', '$compile', '$http', 'http_service', '$rootScope',function($scope, $routeParams, $route, $compile, $http, http_service,$rootScope){
+            //分页下拉列表
+            $scope.page = {
+                //"eTenantId": null,
+                "eDataState":20,
+                "page_num":1,
+                "num_per_page":20
+            };
+            $scope.pre_page = function() {
+                if($scope.page.page_num > 1) {
+                    $scope.page.page_num = $scope.page.page_num - 1;
+                }
+                search_errMsg($scope.page.eDataState);
+            }
+            $scope.next_page = function() {
+                if($scope.page.page_num < Math.ceil($scope.result_rows / $scope.page.num_per_page)) {
+                    $scope.page.page_num = (parseInt($scope.page.page_num) + 1).toString();
+                }
+                search_errMsg($scope.page.eDataState);
+            }
+            $scope.change_page_num = function(num_per_page){
+                //$scope.page_num = 1;
+                var num_page_new = '';
+                _.each(num_per_page,function(num_per_code){
+                    if(check_number(num_per_code)){
+                        num_page_new = num_page_new + num_per_code;
+                    }else{
+                        return false
+                    }
+                })
+                $scope.page.num_per_page = num_page_new;
+                if($scope.page.page_num > Math.ceil($scope.result_rows/$scope.page.num_per_page)){
+                    $scope.page.page_num = Math.ceil($scope.result_rows/$scope.page.num_per_page);
+                }
+                search_errMsg($scope.page.eDataState);
+            }
+            check_number = function(strings){
+                var patrn = /^[0-9]*$/;
+                if (patrn.exec(strings) == null) {
+                    return false
+                } else {
+                    return true
+                }
+            }
+            $scope.change_page = function(pageNumber){
+                if(pageNumber == ''){
+                    return false;
+                }
+                else if(check_number(pageNumber)){
+                    $scope.page.page_num = parseInt(pageNumber);
+                    if($scope.page.page_num > Math.ceil($scope.result_rows/$scope.page.num_per_page)){
+                        $scope.page.page_num = Math.ceil($scope.result_rows/$scope.page.num_per_page);
+                    }else if($scope.page.page_num < 1){
+                        $scope.page.page_num = 1;
+                    }
+                }
+                else if(!check_number(pageNumber) && check_number(pageNumber.charAt(0))){
+                    //遍历pagenumber字符
+                    var pageNum = '';
+                    _.each(pageNumber,function(pageCode){
+                        if(check_number(pageCode)){
+                            pageNum = pageNum + pageCode;
+                        }else{
+                            return false;
+                        }
+                    })
+                    $scope.page.page_num = pageNum;
+                }else{
+                    $scope.page.page_num = 1;
+                }
+                search_errMsg($scope.page.eDataState);
+            }
+            $scope.new_messages = [];
+            $scope.change_state = function(state_now){
+                $scope.state_now = state_now;
+                $scope.page.page_num = 1,
+                //"num_per_page":20
+                search_errMsg(state_now);
+            }
+            $scope.change_tenantState = function(tenant_name){
+                $scope.page['eTenantId'] = $scope.tenant_name;
+                if($scope.tenant_name == ''){
+                    $scope.page = _.omit($scope.page,'eTenantId');
+                }
+                search_errMsg($scope.page.eDataState);
+            }
+            search_errMsg = function(state_now){
+                //if(state_now == 20){
+                //    $scope.page.eDataState = state_now;
+                //}else if(state_now == 10){
+                //    $scope.page.eDataState = state_now;
+                //}else{
+                //    $scope.page.eDataState = '';
+                //}
+                $scope.page.eDataState = state_now;
+                $scope.messages = [];
+                http_service.post('errmsg/search/err',$scope.page,function(res){
+                    $scope.result_rows = res.data.rows;
+                    $scope.messages = res.data.data;
+                    //分页
+                    $scope.total_page = Math.ceil($scope.result_rows / $scope.page.num_per_page);
+                    //已处理未处理状态筛选
+                    _.each($scope.messages, function (msg) {
+                        if(msg.eDataState == 20){
+                            _.extend(msg,{'eState':"未处理"});
+                        }else{
+                            _.extend(msg,{'eState':"已处理"});
+                        }
+                        //if(eState == msg.edataState || eState == "2"){
+                        //    $scope.messages.push(msg);
+                        //}
+                    })
+                    if($scope.result_rows == 0){
+                        $scope.page.page_num = 0;
+                    }
+                })
+            }
+            search_tenantMsg = function(){
+                http_service.post('/guiCfg/search/gui',[],function(res){
+                    $scope.tenants =res.data.data;
+                })
+            }
+            search_errMsg(20);
+            search_tenantMsg();
+        }]);
+//})();
+
diff --git a/src/static/js/qxv2.json b/src/static/js/qxv2.json
new file mode 100644
index 0000000..9d676e7
--- /dev/null
+++ b/src/static/js/qxv2.json
@@ -0,0 +1,279 @@
+[
+	{
+		"display": "差旅费",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "差旅费",
+				"type": 512,
+				"name": "travel_reimbursement",
+				"children": null
+			},
+			{
+				"display": "预算单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "预算单",
+						"type": 512,
+						"name": "budgetorder",
+						"children": null
+					},
+					{
+						"display": "预算单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "预算单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/1",
+								"children": null
+							},
+							{
+								"display": "查询按钮",
+								"type": 512,
+								"name": "search_condition",
+								"children": null
+							}, {
+								"display": "更改查询内容",
+								"type": 512,
+								"name": "change_search_condition",
+								"children": null
+							}, {
+								"display": "更改显示内容",
+								"type": 512,
+								"name": "show_condition",
+								"children": null
+							},{
+								"display": "删除按钮(批量)",
+								"type": 512,
+								"name": "delete_order",
+								"children": null
+							}, {
+								"display": "预算单流程状态",
+								"type": 512,
+								"name": "flow_content",
+								"children": null
+							}, {
+								"display": "删除按钮",
+								"type": 512,
+								"name": "deletebtn",
+								"children": null
+							}, {
+								"display": "提交按钮",
+								"type": 512,
+								"name": "commitbtn",
+								"children": null
+							}, {
+								"display": "审核按钮",
+								"type": 512,
+								"name": "auditbtn",
+								"children": null
+							}, {
+								"display": "保存按钮",
+								"type": 512,
+								"name": "savebtn",
+								"children": null
+							}, {
+								"display": "编辑按钮",
+								"type": 512,
+								"name": "editbtn",
+								"children": null
+							}, {
+								"display": "驳回按钮",
+								"type": 512,
+								"name": "backbtn",
+								"children": null
+							}
+						]
+					}
+				]
+			}, {
+				"display": "申请单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "申请单",
+						"type": 512,
+						"name": "applyorder",
+						"children":null
+					},
+					{
+						"display": "申请单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "申请单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/2",
+								"children":null
+							},
+							 {
+								"display": "更改查询内容",
+								"type": 512,
+								"name": "change_search_condition",
+								"children": null
+							}, {
+								"display": "更改显示内容",
+								"type": 512,
+								"name": "show_condition",
+								"children": null
+							}, {
+								"display": "新建按钮",
+								"type": 512,
+								"name": "new_order",
+								"children": null
+							}, {
+								"display": "删除按钮(批量)",
+								"type": 512,
+								"name": "delete_order",
+								"children": null
+							}, {
+								"display": "申请单流程状态",
+								"type": 512,
+								"name": "flow_content",
+								"children": null
+							}, {
+								"display": "删除按钮",
+								"type": 512,
+								"name": "deletebtn",
+								"children": null
+							}, {
+								"display": "提交按钮",
+								"type": 512,
+								"name": "commitbtn",
+								"children": null
+							}, {
+								"display": "审核按钮",
+								"type": 512,
+								"name": "auditbtn",
+								"children": null
+							}, {
+								"display": "保存按钮",
+								"type": 512,
+								"name": "savebtn",
+								"children": null
+							}, {
+								"display": "编辑按钮",
+								"type": 512,
+								"name": "editbtn",
+								"children": null
+							}, {
+								"display": "驳回按钮",
+								"type": 512,
+								"name": "backbtn",
+								"children": null
+							}
+						]
+					}
+				]
+			}, {
+				"display": "报销单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "报销单",
+						"type": 512,
+						"name": "expendorder",
+						"children":null
+					},
+					{
+						"display": "报销单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/3",
+								"children":null
+							},
+							{
+								"display": "查询按钮",
+								"type": 512,
+								"name": "search_condition",
+								"children": null
+							}, {
+								"display": "更改查询内容",
+								"type": 512,
+								"name": "change_search_condition",
+								"children": null
+							}, {
+								"display": "更改显示内容",
+								"type": 512,
+								"name": "show_condition",
+								"children": null
+							}, {
+								"display": "新建按钮",
+								"type": 512,
+								"name": "new_order",
+								"children": null
+							}, {
+								"display": "删除按钮(批量)",
+								"type": 512,
+								"name": "delete_order",
+								"children": null
+							}, {
+								"display": "报销单流程状态",
+								"type": 512,
+								"name": "flow_content",
+								"children": null
+							}, {
+								"display": "删除按钮",
+								"type": 512,
+								"name": "deletebtn",
+								"children": null
+							}, {
+								"display": "提交按钮",
+								"type": 512,
+								"name": "commitbtn",
+								"children": null
+							}, {
+								"display": "审核按钮",
+								"type": 512,
+								"name": "auditbtn",
+								"children": null
+							}, {
+								"display": "保存按钮",
+								"type": 512,
+								"name": "savebtn",
+								"children": null
+							}, {
+								"display": "编辑按钮",
+								"type": 512,
+								"name": "editbtn",
+								"children": null
+							}, {
+								"display": "驳回按钮",
+								"type": 512,
+								"name": "backbtn",
+								"children": null
+							}, {
+								"display": "票据上传按钮(新增报销单)",
+								"type": 512,
+								"name": "bill_com+C29:D125mit_create",
+								"children": null
+							}, {
+								"display": "票据上传按钮(修改报销单)",
+								"type": 512,
+								"name": "bill_commit_update",
+								"children": null
+							}, {
+								"display": "票据上传按钮(报销单详情)",
+								"type": 512,
+								"name": "bill_commit_detail",
+								"children": null
+							}
+						]
+					}
+				]
+			}
+		]
+	}
+]
\ No newline at end of file
diff --git a/src/static/js/qxv3.json b/src/static/js/qxv3.json
new file mode 100644
index 0000000..8b9964a
--- /dev/null
+++ b/src/static/js/qxv3.json
@@ -0,0 +1,1010 @@
+[
+  {
+    "display": "差旅费",
+    "type": 256,
+    "name": null,
+    "children": [
+      {
+        "display": "差旅费",
+        "type": 512,
+        "name": "travel_reimbursement",
+        "children": null
+      },
+      {
+        "display": "预算单",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "预算单",
+            "type": 512,
+            "name": "budgetorder",
+            "children": null
+          },
+          {
+            "display": "预算单查询列表页面",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "预算单查询列表页面",
+                "type": 512,
+                "name": "travel_expense/1",
+                "children": null
+              },
+              {
+                "display": "查询按钮",
+                "type": 512,
+                "name": "search_condition",
+                "children": null
+              },
+              {
+                "display": "更改查询内容",
+                "type": 512,
+                "name": "change_search_condition",
+                "children": null
+              },
+              {
+                "display": "更改显示内容",
+                "type": 512,
+                "name": "show_condition",
+                "children": null
+              },
+              {
+                "display": "新建按钮",
+                "type": 512,
+                "name": "new_order",
+                "children": null
+              },
+              {
+                "display": "删除按钮(批量)",
+                "type": 512,
+                "name": "delete_order",
+                "children": null
+              },
+              {
+                "display": "预算单流程状态",
+                "type": 512,
+                "name": "flow_content",
+                "children": null
+              },
+              {
+                "display": "删除按钮",
+                "type": 512,
+                "name": "deletebtn",
+                "children": null
+              },
+              {
+                "display": "提交按钮",
+                "type": 512,
+                "name": "commitbtn",
+                "children": null
+              },
+              {
+                "display": "审核按钮",
+                "type": 512,
+                "name": "auditbtn",
+                "children": null
+              },
+              {
+                "display": "保存按钮",
+                "type": 512,
+                "name": "savebtn",
+                "children": null
+              },
+              {
+                "display": "编辑按钮",
+                "type": 512,
+                "name": "editbtn",
+                "children": null
+              },
+              {
+                "display": "驳回按钮",
+                "type": 512,
+                "name": "backbtn",
+                "children": null
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "display": "申请单",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "申请单",
+            "type": 512,
+            "name": "applyorder",
+            "children": null
+          },
+          {
+            "display": "申请单查询列表页面",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "申请单查询列表页面",
+                "type": 512,
+                "name": "travel_expense/2",
+                "children": null
+              },
+              {
+                "display": "查询按钮",
+                "type": 512,
+                "name": "search_condition",
+                "children": null
+              },
+              {
+                "display": "更改查询内容",
+                "type": 512,
+                "name": "change_search_condition",
+                "children": null
+              },
+              {
+                "display": "更改显示内容",
+                "type": 512,
+                "name": "show_condition",
+                "children": null
+              },
+              {
+                "display": "新建按钮",
+                "type": 512,
+                "name": "new_order",
+                "children": null
+              },
+              {
+                "display": "删除按钮(批量)",
+                "type": 512,
+                "name": "delete_order",
+                "children": null
+              },
+              {
+                "display": "申请单流程状态",
+                "type": 512,
+                "name": "flow_content",
+                "children": null
+              },
+              {
+                "display": "删除按钮",
+                "type": 512,
+                "name": "deletebtn",
+                "children": null
+              },
+              {
+                "display": "提交按钮",
+                "type": 512,
+                "name": "commitbtn",
+                "children": null
+              },
+              {
+                "display": "审核按钮",
+                "type": 512,
+                "name": "auditbtn",
+                "children": null
+              },
+              {
+                "display": "保存按钮",
+                "type": 512,
+                "name": "savebtn",
+                "children": null
+              },
+              {
+                "display": "编辑按钮",
+                "type": 512,
+                "name": "editbtn",
+                "children": null
+              },
+              {
+                "display": "驳回按钮",
+                "type": 512,
+                "name": "backbtn",
+                "children": null
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "display": "报销单",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "报销单",
+            "type": 512,
+            "name": "expendorder",
+            "children": null
+          },
+          {
+            "display": "报销单查询列表页面",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "报销单查询列表页面",
+                "type": 512,
+                "name": "travel_expense/3",
+                "children": null
+              },
+              {
+                "display": "查询按钮",
+                "type": 512,
+                "name": "search_condition",
+                "children": null
+              },
+              {
+                "display": "更改查询内容",
+                "type": 512,
+                "name": "change_search_condition",
+                "children": null
+              },
+              {
+                "display": "更改显示内容",
+                "type": 512,
+                "name": "show_condition",
+                "children": null
+              },
+              {
+                "display": "新建按钮",
+                "type": 512,
+                "name": "new_order",
+                "children": null
+              },
+              {
+                "display": "删除按钮(批量)",
+                "type": 512,
+                "name": "delete_order",
+                "children": null
+              },
+              {
+                "display": "报销单流程状态",
+                "type": 512,
+                "name": "flow_content",
+                "children": null
+              },
+              {
+                "display": "删除按钮",
+                "type": 512,
+                "name": "deletebtn",
+                "children": null
+              },
+              {
+                "display": "提交按钮",
+                "type": 512,
+                "name": "commitbtn",
+                "children": null
+              },
+              {
+                "display": "审核按钮",
+                "type": 512,
+                "name": "auditbtn",
+                "children": null
+              },
+              {
+                "display": "保存按钮",
+                "type": 512,
+                "name": "savebtn",
+                "children": null
+              },
+              {
+                "display": "编辑按钮",
+                "type": 512,
+                "name": "editbtn",
+                "children": null
+              },
+              {
+                "display": "驳回按钮",
+                "type": 512,
+                "name": "backbtn",
+                "children": null
+              },
+              {
+                "display": "票据上传按钮(新增报销单)",
+                "type": 512,
+                "name": "bill_com+C29:D125mit_create",
+                "children": null
+              },
+              {
+                "display": "票据上传按钮(修改报销单)",
+                "type": 512,
+                "name": "bill_commit_update",
+                "children": null
+              },
+              {
+                "display": "票据上传按钮(报销单详情)",
+                "type": 512,
+                "name": "bill_commit_detail",
+                "children": null
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "display": "待办事项",
+    "type": 256,
+    "name": null,
+    "children": [
+      {
+        "display": "待办事项",
+        "type": 512,
+        "name": "termination",
+        "children": null
+      },
+      {
+        "display": "我的待办",
+        "type": 512,
+        "name": "mytodos",
+        "children": null
+      },
+      {
+        "display": "待办事项页面",
+        "type": 512,
+        "name": "travel_expense_todos/",
+        "children": null
+      },
+      {
+        "display": "待办预算查看页面",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "待办预算查看页面",
+            "type": 512,
+            "name": "termination_budget",
+            "children": null
+          },
+          {
+            "display": "查询按钮",
+            "type": 512,
+            "name": "search_budget",
+            "children": null
+          },
+          {
+            "display": "更改查询内容",
+            "type": 512,
+            "name": "termination_budget_search",
+            "children": null
+          }
+        ]
+      },
+      {
+        "display": "待办申请查看页面",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "待办申请查看页面",
+            "type": 512,
+            "name": "termination_apply",
+            "children": null
+          },
+          {
+            "display": "查询按钮",
+            "type": 512,
+            "name": "search_apply",
+            "children": null
+          },
+          {
+            "display": "更改查询内容",
+            "type": 512,
+            "name": "termination_apply_search",
+            "children": null
+          }
+        ]
+      },
+      {
+        "display": "待办报销查看页面",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "待办报销查看页面",
+            "type": 512,
+            "name": "termination_expend",
+            "children": null
+          },
+          {
+            "display": "查询按钮",
+            "type": 512,
+            "name": "search_expend",
+            "children": null
+          },
+          {
+            "display": "更改查询内容",
+            "type": 512,
+            "name": "termination_expend_search",
+            "children": null
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "display": "配置中心",
+    "type": 256,
+    "name": null,
+    "children": [
+      {
+        "display": "配置中心",
+        "type": 512,
+        "name": "config_center",
+        "children": null
+      },
+      {
+        "display": "配置中心",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "配置中心",
+            "type": 512,
+            "name": "cfg_center/",
+            "children": null
+          },
+          {
+            "display": "预算单配置",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "预算单配置",
+                "type": 512,
+                "name": "budget_template",
+                "children": null
+              },
+              {
+                "display": "预算单配置页面",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "预算单配置页面",
+                    "type": 512,
+                    "name": "/budget_froms/10",
+                    "children": null
+                  },
+                  {
+                    "display": "使用空白的预算单",
+                    "type": 256,
+                    "name": null,
+                    "children": [
+                      {
+                        "display": "使用空白的预算单",
+                        "type": 512,
+                        "name": "/budget_form_customize/10",
+                        "children": null
+                      },
+                      {
+                        "display": "保存按钮",
+                        "type": 512,
+                        "name": "save_create_form",
+                        "children": null
+                      }
+                    ]
+                  },
+                  {
+                    "display": "我创建的预算单",
+                    "type": 512,
+                    "name": "myform",
+                    "children": null
+                  },
+                  {
+                    "display": "行业精选预算单",
+                    "type": 512,
+                    "name": "bussiness_template",
+                    "children": null
+                  },
+                  {
+                    "display": "编辑按钮",
+                    "type": 512,
+                    "name": "edit_template",
+                    "children": null
+                  }
+                ]
+              },
+              {
+                "display": "行业精选预算单",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "行业精选预算单",
+                    "type": 512,
+                    "name": "/budget_froms/*/10",
+                    "children": null
+                  },
+                  {
+                    "display": "启用模板按钮",
+                    "type": 512,
+                    "name": "start_template",
+                    "children": null
+                  },
+                  {
+                    "display": "从该模板创建按钮",
+                    "type": 512,
+                    "name": "create_form_template",
+                    "children": null
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "display": "申请单配置",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "申请单配置",
+                "type": 512,
+                "name": "apply_template",
+                "children": null
+              },
+              {
+                "display": "申请单配置页面",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "申请单配置页面",
+                    "type": 512,
+                    "name": "/budget_froms/20",
+                    "children": null
+                  },
+                  {
+                    "display": "使用空白的申请单",
+                    "type": 256,
+                    "name": null,
+                    "children": [
+                      {
+                        "display": "使用空白的申请单",
+                        "type": 512,
+                        "name": "budget_form_customize/20",
+                        "children": null
+                      },
+                      {
+                        "display": "保存按钮",
+                        "type": 512,
+                        "name": "save_create_form",
+                        "children": null
+                      }
+                    ]
+                  },
+                  {
+                    "display": "我创建的申请单",
+                    "type": 512,
+                    "name": "myform",
+                    "children": null
+                  },
+                  {
+                    "display": "行业精选申请单",
+                    "type": 512,
+                    "name": "bussiness_template",
+                    "children": null
+                  },
+                  {
+                    "display": "编辑按钮",
+                    "type": 512,
+                    "name": "edit_template",
+                    "children": null
+                  }
+                ]
+              },
+              {
+                "display": "行业精选申请单",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "行业精选申请单",
+                    "type": 512,
+                    "name": "/budget_froms/*/20",
+                    "children": null
+                  },
+                  {
+                    "display": "启用模板按钮",
+                    "type": 256,
+                    "name": null,
+                    "children": [
+                      {
+                        "display": "启用模板按钮",
+                        "type": 512,
+                        "name": "start_template",
+                        "children": null
+                      },
+                      {
+                        "display": "报销单配置",
+                        "type": 256,
+                        "name": null,
+                        "children": [
+                          {
+                            "display": "报销单配置",
+                            "type": 512,
+                            "name": "expend_template",
+                            "children": null
+                          },
+                          {
+                            "display": "报销单配置页面",
+                            "type": 256,
+                            "name": null,
+                            "children": [
+                              {
+                                "display": "报销单配置页面",
+                                "type": 512,
+                                "name": "/budget_froms/30",
+                                "children": null
+                              },
+                              {
+                                "display": "使用空白的报销单",
+                                "type": 256,
+                                "name": null,
+                                "children": [
+                                  {
+                                    "display": "使用空白的报销单",
+                                    "type": 512,
+                                    "name": "/budget_form_customize/30",
+                                    "children": null
+                                  },
+                                  {
+                                    "display": "保存按钮",
+                                    "type": 512,
+                                    "name": "save_create_form",
+                                    "children": null
+                                  }
+                                ]
+                              },
+                              {
+                                "display": "我创建的报销单",
+                                "type": 512,
+                                "name": "myform",
+                                "children": null
+                              },
+                              {
+                                "display": "行业精选报销单",
+                                "type": 512,
+                                "name": "bussiness_template",
+                                "children": null
+                              },
+                              {
+                                "display": "编辑按钮",
+                                "type": 512,
+                                "name": "edit_template",
+                                "children": null
+                              }
+                            ]
+                          },
+                          {
+                            "display": "行业精选报销单",
+                            "type": 256,
+                            "name": null,
+                            "children": [
+                              {
+                                "display": "行业精选报销单",
+                                "type": 512,
+                                "name": "/budget_froms/*/30",
+                                "children": null
+                              },
+                              {
+                                "display": "启用模板按钮",
+                                "type": 512,
+                                "name": "start_template",
+                                "children": null
+                              },
+                              {
+                                "display": "从该模板创建按钮",
+                                "type": 512,
+                                "name": "create_form_template",
+                                "children": null
+                              }
+                            ]
+                          }
+                        ]
+                      }
+                    ]
+                  },
+                  {
+                    "display": "从该模板创建按钮",
+                    "type": 512,
+                    "name": "create_form_template",
+                    "children": null
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "display": "系统设置",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "系统设置",
+                "type": 512,
+                "name": "system",
+                "children": null
+              },
+              {
+                "display": "系统设置页面",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "系统设置页面",
+                    "type": 512,
+                    "name": "/system_config",
+                    "children": null
+                  },
+                  {
+                    "display": "完成按钮",
+                    "type": 512,
+                    "name": "save_system",
+                    "children": null
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "display": "报销标准",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "报销标准",
+                "type": 512,
+                "name": "standard",
+                "children": null
+              },
+              {
+                "display": "报销标准配置页面",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "报销标准配置页面",
+                    "type": 512,
+                    "name": "/expend_standard",
+                    "children": null
+                  },
+                  {
+                    "display": "新建按钮",
+                    "type": 512,
+                    "name": "new_standard",
+                    "children": null
+                  },
+                  {
+                    "display": "保存按钮",
+                    "type": 512,
+                    "name": "save_standard",
+                    "children": null
+                  },
+                  {
+                    "display": "复制按钮",
+                    "type": 512,
+                    "name": "copy_standard",
+                    "children": null
+                  },
+                  {
+                    "display": "删除按钮",
+                    "type": 512,
+                    "name": "delete_standard",
+                    "children": null
+                  },
+                  {
+                    "display": "添加数据按钮",
+                    "type": 512,
+                    "name": "add_standard_data",
+                    "children": null
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "display": "工作流配置",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "工作流配置",
+                "type": 512,
+                "name": "flow",
+                "children": null
+              },
+              {
+                "display": "工作流配置页面",
+                "type": 256,
+                "name": null,
+                "children": [
+                  {
+                    "display": "工作流配置页面",
+                    "type": 512,
+                    "name": "/work_flow",
+                    "children": null
+                  },
+                  {
+                    "display": "配置流程按钮(预算)",
+                    "type": 512,
+                    "name": "config_budget",
+                    "children": null
+                  },
+                  {
+                    "display": "配置流程按钮(申请)",
+                    "type": 512,
+                    "name": "config_apply",
+                    "children": null
+                  },
+                  {
+                    "display": "配置流程按钮(报销)",
+                    "type": 512,
+                    "name": "config_expend",
+                    "children": null
+                  },
+                  {
+                    "display": "部署按钮(预算)",
+                    "type": 512,
+                    "name": "econfig_budget",
+                    "children": null
+                  },
+                  {
+                    "display": "部署按钮(申请)",
+                    "type": 512,
+                    "name": "econfig_apply",
+                    "children": null
+                  },
+                  {
+                    "display": "部署按钮(报销)",
+                    "type": 512,
+                    "name": "econfig_expend",
+                    "children": null
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "display": "云中心",
+    "type": 256,
+    "name": null,
+    "children": [
+      {
+        "display": "云中心",
+        "type": 512,
+        "name": "cloud_center",
+        "children": null
+      },
+      {
+        "display": "模板中心",
+        "type": 256,
+        "name": null,
+        "children": [
+          {
+            "display": "模板中心",
+            "type": 512,
+            "name": "template_center",
+            "children": null
+          },
+          {
+            "display": "模板管理页面",
+            "type": 256,
+            "name": null,
+            "children": [
+              {
+                "display": "模板管理页面",
+                "type": 512,
+                "name": "/templates_center",
+                "children": null
+              },
+              {
+                "display": "添加预算单模板按钮",
+                "type": 512,
+                "name": "add_budget_template",
+                "children": null
+              },
+              {
+                "display": "删除预算单模板按钮",
+                "type": 512,
+                "name": "delete_budget_template",
+                "children": null
+              },
+              {
+                "display": "添加申请单模板按钮",
+                "type": 512,
+                "name": "add_apply_template",
+                "children": null
+              },
+              {
+                "display": "删除申请单模板按钮",
+                "type": 512,
+                "name": "delete_apply_template",
+                "children": null
+              },
+              {
+                "display": "添加报销单模板按钮",
+                "type": 512,
+                "name": "add_expend_template",
+                "children": null
+              },
+              {
+                "display": "删除报销单模板按钮",
+                "type": 512,
+                "name": "delete_expend_template",
+                "children": null
+              },
+              {
+                "display": "添加行业按钮",
+                "type": 512,
+                "name": "add_bussiness",
+                "children": null
+              },
+              {
+                "display": "修改行业按钮",
+                "type": 512,
+                "name": "edit_bussiness",
+                "children": null
+              },
+              {
+                "display": "删除行业按钮",
+                "type": 512,
+                "name": "delete_bussiness",
+                "children": null
+              },
+              {
+                "display": "上传模板按钮",
+                "type": 512,
+                "name": "template_pass",
+                "children": null
+              },
+              {
+                "display": "取消模板按钮",
+                "type": 512,
+                "name": "template_cancle",
+                "children": null
+              },
+              {
+                "display": "模版中心编辑按钮",
+                "type": 512,
+                "name": "edit_template_center",
+                "children": null
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "display": "初始化向导页面",
+    "type": 256,
+    "name": null,
+    "children": [
+      {
+        "display": "初始化向导页面",
+        "type": 512,
+        "name": "/guide",
+        "children": null
+      },
+      {
+        "display": "选择行业向导页面",
+        "type": 512,
+        "name": "/business",
+        "children": null
+      },
+      {
+        "display": "设置向导页面",
+        "type": 512,
+        "name": "/billing_cfg_guide",
+        "children": null
+      }
+    ]
+  }
+]
\ No newline at end of file
diff --git a/src/static/js/qxv4.json b/src/static/js/qxv4.json
new file mode 100644
index 0000000..9e10acb
--- /dev/null
+++ b/src/static/js/qxv4.json
@@ -0,0 +1,878 @@
+[
+	{
+		"display": "差旅费",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "差旅费",
+				"type": 512,
+				"name": "travel_reimbursement",
+				"children": null
+			}, {
+				"display": "预算单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "预算单",
+						"type": 512,
+						"name": "budgetorder",
+						"children": null
+					}, {
+						"display": "预算单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "预算单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/1",
+								"children": null
+							}, {
+								"display": "查询按钮",
+								"type": 512,
+								"name": "searchtravel_expense/1",//search_condition
+								"children": null
+							}, {
+								"display": "更改查询内容",
+								"type": 512,
+								"name": "changetravel_expense/1",//change_search_condition
+								"children": null
+							}, {
+								"display": "更改显示内容",
+								"type": 512,
+								"name": "showtravel_expense/1",//show_condition
+								"children": null
+							}, {
+								"display": "新建按钮",
+								"type": 512,
+								"name": "newtravel_expense/1",//new_order
+								"children": null
+							}, {
+								"display": "删除按钮(批量)",
+								"type": 512,
+								"name": "deletetravel_expense/1",//delete_order
+								"children": null
+							}, {
+								"display": "预算单流程状态",
+								"type": 512,
+								"name": "flowtravel_expense/1",//flow_content
+								"children": null
+							}, {
+								"display": "删除按钮",
+								"type": 512,
+								"name": "deletebtntravel_expense/1",//deletebtn
+								"children": null
+							}, {
+								"display": "提交按钮",
+								"type": 512,
+								"name": "commitbtntravel_expense/1",//commitbtn
+								"children": null
+							}, {
+								"display": "审核按钮",
+								"type": 512,
+								"name": "auditbtntravel_expense/1",//auditbtn
+								"children": null
+							}, {
+								"display": "保存按钮",
+								"type": 512,
+								"name": "savebtntravel_expense/1",//savebtn
+								"children": null
+							}, {
+								"display": "编辑按钮",
+								"type": 512,
+								"name": "editbtntravel_expense/1",//editbtn
+								"children": null
+							}, {
+								"display": "驳回按钮",
+								"type": 512,
+								"name": "backbtntravel_expense/1",//backbtn
+								"children": null
+							}
+						]
+					}
+				]
+			}, {
+				"display": "申请单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "申请单",
+						"type": 512,
+						"name": "applyorder",
+						"children": null
+					}, {
+						"display": "申请单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "申请单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/2",
+								"children": null
+							}, {
+								"display": "查询按钮",
+								"type": 512,
+								"name": "searchtravel_expense/2",//search_condition
+								"children": null
+							}, {
+								"display": "更改查询内容",
+								"type": 512,
+								"name": "changetravel_expense/2",//change_search_condition
+								"children": null
+							}, {
+								"display": "更改显示内容",
+								"type": 512,
+								"name": "showtravel_expense/2",//show_condition
+								"children": null
+							}, {
+								"display": "新建按钮",
+								"type": 512,
+								"name": "newtravel_expense/2",//new_order
+								"children": null
+							}, {
+								"display": "删除按钮(批量)",
+								"type": 512,
+								"name": "deletetravel_expense/2",//delete_order
+								"children": null
+							}, {
+								"display": "申请单流程状态",
+								"type": 512,
+								"name": "flowtravel_expense/2",//flow_content
+								"children": null
+							}, {
+								"display": "删除按钮",
+								"type": 512,
+								"name": "deletebtntravel_expense/2",//deletebtn
+								"children": null
+							}, {
+								"display": "提交按钮",
+								"type": 512,
+								"name": "commitbtntravel_expense/2",//commitbtn
+								"children": null
+							}, {
+								"display": "审核按钮",
+								"type": 512,
+								"name": "auditbtntravel_expense/2",//auditbtn
+								"children": null
+							}, {
+								"display": "保存按钮",
+								"type": 512,
+								"name": "savebtntravel_expense/2",//savebtn
+								"children": null
+							}, {
+								"display": "编辑按钮",
+								"type": 512,
+								"name": "editbtntravel_expense/2",//editbtn
+								"children": null
+							}, {
+								"display": "驳回按钮",
+								"type": 512,
+								"name": "backbtntravel_expense/2",//backbtn
+								"children": null
+							}
+						]
+					}
+				]
+			}, {
+				"display": "报销单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "报销单",
+						"type": 512,
+						"name": "expendorder",
+						"children": null
+					}, {
+						"display": "报销单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/3",
+								"children": null
+							}, {
+								"display": "查询按钮",
+								"type": 512,
+								"name": "searchtravel_expense/3",//search_condition
+								"children": null
+							}, {
+								"display": "更改查询内容",
+								"type": 512,
+								"name": "change_searchtravel_expense/3",//change_search_condition
+								"children": null
+							}, {
+								"display": "更改显示内容",
+								"type": 512,
+								"name": "showtravel_expense/3",//show_condition
+								"children": null
+							}, {
+								"display": "新建按钮",
+								"type": 512,
+								"name": "newtravel_expense/3",//new_order
+								"children": null
+							}, {
+								"display": "删除按钮(批量)",
+								"type": 512,
+								"name": "deletetravel_expense/3",//delete_order
+								"children": null
+							}, {
+								"display": "报销单流程状态",
+								"type": 512,
+								"name": "flowtravel_expense/3",//flow_content
+								"children": null
+							}, {
+								"display": "删除按钮",
+								"type": 512,
+								"name": "deletebtntravel_expense/3",//deletebtn
+								"children": null
+							}, {
+								"display": "提交按钮",
+								"type": 512,
+								"name": "commitbtntravel_expense/3",//commitbtn
+								"children": null
+							}, {
+								"display": "审核按钮",
+								"type": 512,
+								"name": "auditbtntravel_expense/3",//auditbtn
+								"children": null
+							}, {
+								"display": "保存按钮",
+								"type": 512,
+								"name": "savebtntravel_expense/3",//savebtn
+								"children": null
+							}, {
+								"display": "编辑按钮",
+								"type": 512,
+								"name": "editbtntravel_expense/3",//editbtn
+								"children": null
+							}, {
+								"display": "驳回按钮",
+								"type": 512,
+								"name": "backbtntravel_expense/3",//backbtn
+								"children": null
+							}, {
+								"display": "票据上传按钮(新增报销单)",
+								"type": 512,
+								"name": "bill_commit_create",
+								"children": null
+							}, {
+								"display": "票据上传按钮(修改报销单)",
+								"type": 512,
+								"name": "bill_commit_update",
+								"children": null
+							}, {
+								"display": "票据上传按钮(报销单详情)",
+								"type": 512,
+								"name": "bill_commit_detail",
+								"children": null
+							}
+						]
+					}
+				]
+			}
+		]
+	}, {
+		"display": "待办事项",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "待办事项",
+				"type": 512,
+				"name": "termination",
+				"children": null
+			}, {
+				"display": "我的待办",
+				"type": 512,
+				"name": "mytodos",
+				"children": null
+			}, {
+				"display": "待办事项页面",
+				"type": 512,
+				"name": "travel_expense_todos/",
+				"children": null
+			}, {
+				"display": "待办预算查看页面",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "待办预算查看页面",
+						"type": 512,
+						"name": "termination_budget",
+						"children": null
+					}, {
+						"display": "查询按钮",
+						"type": 512,
+						"name": "search_budget",
+						"children": null
+					}, {
+						"display": "更改查询内容",
+						"type": 512,
+						"name": "termination_budget_search",
+						"children": null
+					}
+				]
+			}, {
+				"display": "待办申请查看页面",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "待办申请查看页面",
+						"type": 512,
+						"name": "termination_apply",
+						"children": null
+					}, {
+						"display": "查询按钮",
+						"type": 512,
+						"name": "search_apply",
+						"children": null
+					}, {
+						"display": "更改查询内容",
+						"type": 512,
+						"name": "termination_apply_search",
+						"children": null
+					}
+				]
+			}, {
+				"display": "待办报销查看页面",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "待办报销查看页面",
+						"type": 512,
+						"name": "termination_expend",
+						"children": null
+					}, {
+						"display": "查询按钮",
+						"type": 512,
+						"name": "search_expend",
+						"children": null
+					}, {
+						"display": "更改查询内容",
+						"type": 512,
+						"name": "termination_expend_search",
+						"children": null
+					}
+				]
+			}
+		]
+	}, {
+		"display": "配置中心",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "配置中心",
+				"type": 512,
+				"name": "config_center",
+				"children": null
+			}, {
+				"display": "配置中心",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "配置中心",
+						"type": 512,
+						"name": "cfg_center/",
+						"children": null
+					}, {
+						"display": "预算单配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "预算单配置",
+								"type": 512,
+								"name": "budget_template",
+								"children": null
+							}, {
+								"display": "预算单配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "预算单配置页面",
+										"type": 512,
+										"name": "/budget_froms/10",
+										"children": null
+									}, {
+										"display": "使用空白的预算单",
+										"type": 256,
+										"name": null,
+										"children": [
+											{
+												"display": "使用空白的预算单",
+												"type": 512,
+												"name": "/budget_form_customize/10",
+												"children": null
+											}, {
+												"display": "保存按钮",
+												"type": 512,
+												"name": "save/budget_form_customize/10",//save_create_form
+												"children": null
+											}
+										]
+									}, {
+										"display": "我创建的预算单",
+										"type": 512,
+										"name": "myform/budget_froms/10",//myform
+										"children": null
+									}, {
+										"display": "行业精选预算单",
+										"type": 512,
+										"name": "bussiness/budget_froms/10",//bussiness_template
+										"children": null
+									}, {
+										"display": "编辑按钮",
+										"type": 512,
+										"name": "edit/budget_froms/10",//edit_template
+										"children": null
+									}
+								]
+							}, {
+								"display": "行业精选预算单",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "行业精选预算单",
+										"type": 512,
+										"name": "/budget_froms/*/10",
+										"children": null
+									}, {
+										"display": "启用模板按钮",
+										"type": 512,
+										"name": "start/budget_froms/*/10",//start_template
+										"children": null
+									}, {
+										"display": "从该模板创建按钮",
+										"type": 512,
+										"name": "create/budget_froms/*/10",//create_form_template
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "申请单配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "申请单配置",
+								"type": 512,
+								"name": "apply_template",
+								"children": null
+							}, {
+								"display": "申请单配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "申请单配置页面",
+										"type": 512,
+										"name": "/budget_froms/20",
+										"children": null
+									}, {
+										"display": "使用空白的申请单",
+										"type": 256,
+										"name": null,
+										"children": [
+											{
+												"display": "使用空白的申请单",
+												"type": 512,
+												"name": "budget_form_customize/20",
+												"children": null
+											}, {
+												"display": "保存按钮",
+												"type": 512,
+												"name": "savebudget_form_customize/20",//save_create_form
+												"children": null
+											}
+										]
+									}, {
+										"display": "我创建的申请单",
+										"type": 512,
+										"name": "myform/budget_froms/20",//myform
+										"children": null
+									}, {
+										"display": "行业精选申请单",
+										"type": 512,
+										"name": "bussiness/budget_froms/20",//bussiness_template
+										"children": null
+									}, {
+										"display": "编辑按钮",
+										"type": 512,
+										"name": "edit/budget_froms/20",//edit_template
+										"children": null
+									}
+								]
+							}, {
+								"display": "行业精选申请单",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "行业精选申请单",
+										"type": 512,
+										"name": "/budget_froms/*/20",
+										"children": null
+									}, {
+										"display": "启用模板按钮",
+										"type": 512,
+										"name": "start/budget_froms/*/20",//start_template
+										"children": null
+									}, {
+										"display": "从该模板创建按钮",
+										"type": 512,
+										"name": "create/budget_froms/*/20",//create_form_template
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "报销单配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销单配置",
+								"type": 512,
+								"name": "expend_template",
+								"children": null
+							}, {
+								"display": "报销单配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "报销单配置页面",
+										"type": 512,
+										"name": "/budget_froms/30",
+										"children": null
+									}, {
+										"display": "使用空白的报销单",
+										"type": 256,
+										"name": null,
+										"children": [
+											{
+												"display": "使用空白的报销单",
+												"type": 512,
+												"name": "/budget_form_customize/30",
+												"children": null
+											}, {
+												"display": "保存按钮",
+												"type": 512,
+												"name": "save/budget_form_customize/30",//save_create_form
+												"children": null
+											}
+										]
+									}, {
+										"display": "我创建的报销单",
+										"type": 512,
+										"name": "myform/budget_froms/30",//myform
+										"children": null
+									}, {
+										"display": "行业精选报销单",
+										"type": 512,
+										"name": "bussiness/budget_froms/30",//bussiness_template
+										"children": null
+									}, {
+										"display": "编辑按钮",
+										"type": 512,
+										"name": "edit/budget_froms/30",//edit_template
+										"children": null
+									}
+								]
+							}, {
+								"display": "行业精选报销单",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "行业精选报销单",
+										"type": 512,
+										"name": "/budget_froms/*/30",
+										"children": null
+									}, {
+										"display": "启用模板按钮",
+										"type": 512,
+										"name": "start/budget_froms/*/30",//start_template
+										"children": null
+									}, {
+										"display": "从该模板创建按钮",
+										"type": 512,
+										"name": "create/budget_froms/*/30",//create_form_template
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "系统设置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "系统设置",
+								"type": 512,
+								"name": "system",
+								"children": null
+							}, {
+								"display": "系统设置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "系统设置页面",
+										"type": 512,
+										"name": "/system_config",
+										"children": null
+									}, {
+										"display": "完成按钮",
+										"type": 512,
+										"name": "save_system",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "报销标准",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销标准",
+								"type": 512,
+								"name": "standard",
+								"children": null
+							}, {
+								"display": "报销标准配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "报销标准配置页面",
+										"type": 512,
+										"name": "/expend_standard",
+										"children": null
+									}, {
+										"display": "新建按钮",
+										"type": 512,
+										"name": "new_standard",
+										"children": null
+									}, {
+										"display": "保存按钮",
+										"type": 512,
+										"name": "save_standard",
+										"children": null
+									}, {
+										"display": "复制按钮",
+										"type": 512,
+										"name": "copy_standard",
+										"children": null
+									}, {
+										"display": "删除按钮",
+										"type": 512,
+										"name": "delete_standard",
+										"children": null
+									}, {
+										"display": "添加数据按钮",
+										"type": 512,
+										"name": "add_standard_data",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "工作流配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "工作流配置",
+								"type": 512,
+								"name": "flow",
+								"children": null
+							}, {
+								"display": "工作流配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "工作流配置页面",
+										"type": 512,
+										"name": "/work_flow",
+										"children": null
+									}, {
+										"display": "配置流程按钮(预算)",
+										"type": 512,
+										"name": "config_budget",
+										"children": null
+									}, {
+										"display": "配置流程按钮(申请)",
+										"type": 512,
+										"name": "config_apply",
+										"children": null
+									}, {
+										"display": "配置流程按钮(报销)",
+										"type": 512,
+										"name": "config_expend",
+										"children": null
+									}, {
+										"display": "部署按钮(预算)",
+										"type": 512,
+										"name": "econfig_budget",
+										"children": null
+									}, {
+										"display": "部署按钮(申请)",
+										"type": 512,
+										"name": "econfig_apply",
+										"children": null
+									}, {
+										"display": "部署按钮(报销)",
+										"type": 512,
+										"name": "econfig_expend",
+										"children": null
+									}
+								]
+							}
+						]
+					}
+				]
+			}
+		]
+	}, {
+		"display": "云中心",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "云中心",
+				"type": 512,
+				"name": "cloud_center",
+				"children": null
+			}, {
+				"display": "模板中心",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "模板中心",
+						"type": 512,
+						"name": "template_center",
+						"children": null
+					}, {
+						"display": "模板管理页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "模板管理页面",
+								"type": 512,
+								"name": "/templates_center",
+								"children": null
+							}, {
+								"display": "添加预算单模板按钮",
+								"type": 512,
+								"name": "add_budget_template",
+								"children": null
+							}, {
+								"display": "删除预算单模板按钮",
+								"type": 512,
+								"name": "delete_budget_template",
+								"children": null
+							}, {
+								"display": "添加申请单模板按钮",
+								"type": 512,
+								"name": "add_apply_template",
+								"children": null
+							}, {
+								"display": "删除申请单模板按钮",
+								"type": 512,
+								"name": "delete_apply_template",
+								"children": null
+							}, {
+								"display": "添加报销单模板按钮",
+								"type": 512,
+								"name": "add_expend_template",
+								"children": null
+							}, {
+								"display": "删除报销单模板按钮",
+								"type": 512,
+								"name": "delete_expend_template",
+								"children": null
+							}, {
+								"display": "添加行业按钮",
+								"type": 512,
+								"name": "add_bussiness",
+								"children": null
+							}, {
+								"display": "修改行业按钮",
+								"type": 512,
+								"name": "edit_bussiness",
+								"children": null
+							}, {
+								"display": "删除行业按钮",
+								"type": 512,
+								"name": "delete_bussiness",
+								"children": null
+							}, {
+								"display": "上传模板按钮",
+								"type": 512,
+								"name": "template_pass",
+								"children": null
+							}, {
+								"display": "取消模板按钮",
+								"type": 512,
+								"name": "template_cancle",
+								"children": null
+							}, {
+								"display": "模版中心编辑按钮",
+								"type": 512,
+								"name": "edit_template_center",
+								"children": null
+							}
+						]
+					}
+				]
+			}
+		]
+	}, {
+		"display": "初始化向导页面",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "初始化向导页面",
+				"type": 512,
+				"name": "/guide",
+				"children": null
+			}, {
+				"display": "选择行业向导页面",
+				"type": 512,
+				"name": "/business",
+				"children": null
+			}, {
+				"display": "设置向导页面",
+				"type": 512,
+				"name": "/billing_cfg_guide",
+				"children": null
+			}
+		]
+	}
+]
\ No newline at end of file
diff --git a/src/static/js/qxv5.json b/src/static/js/qxv5.json
new file mode 100644
index 0000000..c172ef7
--- /dev/null
+++ b/src/static/js/qxv5.json
@@ -0,0 +1,884 @@
+[
+	{
+		"display": "差旅费",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "差旅费",
+				"type": 512,
+				"name": "travel_reimbursement",
+				"children": null
+			}, {
+				"display": "预算单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "预算单",
+						"type": 512,
+						"name": "budgetorder",
+						"children": null
+					}, {
+						"display": "预算单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "预算单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/1",
+								"children": null
+							}, {
+								"display": "查询按钮(预算单)",
+								"type": 512,
+								"name": "searchtravel_expense/1",
+								"children": null
+							}, {
+								"display": "更改查询内容(预算单)",
+								"type": 512,
+								"name": "changetravel_expense/1",
+								"children": null
+							}, {
+								"display": "更改显示内容(预算单)",
+								"type": 512,
+								"name": "showtravel_expense/1",
+								"children": null
+							}, {
+								"display": "新建按钮(预算单)",
+								"type": 512,
+								"name": "newtravel_expense/1",
+								"children": null
+							}, {
+								"display": "删除按钮(批量)(预算单)",
+								"type": 512,
+								"name": "deletetravel_expense/1",
+								"children": null
+							}, {
+								"display": "预算单流程状态(预算单)",
+								"type": 512,
+								"name": "flowtravel_expense/1",
+								"children": null
+							}, {
+								"display": "删除按钮(预算单)",
+								"type": 512,
+								"name": "deletebtntravel_expense/1",
+								"children": null
+							}, {
+								"display": "提交按钮(预算单)",
+								"type": 512,
+								"name": "commitbtntravel_expense/1",
+								"children": null
+							}, {
+								"display": "审核按钮(预算单)",
+								"type": 512,
+								"name": "auditbtntravel_expense/1",
+								"children": null
+							}, {
+								"display": "保存按钮(预算单)",
+								"type": 512,
+								"name": "savebtntravel_expense/1",
+								"children": null
+							}, {
+								"display": "编辑按钮(预算单)",
+								"type": 512,
+								"name": "editbtntravel_expense/1",
+								"children": null
+							}, {
+								"display": "驳回按钮(预算单)",
+								"type": 512,
+								"name": "backbtntravel_expense/1",
+								"children": null
+							}
+						]
+					}
+				]
+			}, {
+				"display": "申请单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "申请单",
+						"type": 512,
+						"name": "applyorder",
+						"children": null
+					}, {
+						"display": "申请单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "申请单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/2",
+								"children": null
+							}, {
+								"display": "查询按钮(申请单)",
+								"type": 512,
+								"name": "searchtravel_expense/2",
+								"children": null
+							}, {
+								"display": "更改查询内容(申请单)",
+								"type": 512,
+								"name": "changetravel_expense/2",
+								"children": null
+							}, {
+								"display": "更改显示内容(申请单)",
+								"type": 512,
+								"name": "showtravel_expense/2",
+								"children": null
+							}, {
+								"display": "新建按钮(申请单)",
+								"type": 512,
+								"name": "newtravel_expense/2",
+								"children": null
+							}, {
+								"display": "删除按钮(批量)(申请单)",
+								"type": 512,
+								"name": "deletetravel_expense/2",
+								"children": null
+							}, {
+								"display": "申请单流程状态(申请单)",
+								"type": 512,
+								"name": "flowtravel_expense/2",
+								"children": null
+							}, {
+								"display": "删除按钮(申请单)",
+								"type": 512,
+								"name": "deletebtntravel_expense/2",
+								"children": null
+							}, {
+								"display": "提交按钮(申请单)",
+								"type": 512,
+								"name": "commitbtntravel_expense/2",
+								"children": null
+							}, {
+								"display": "审核按钮(申请单)",
+								"type": 512,
+								"name": "auditbtntravel_expense/2",
+								"children": null
+							}, {
+								"display": "保存按钮(申请单)",
+								"type": 512,
+								"name": "savebtntravel_expense/2",
+								"children": null
+							}, {
+								"display": "编辑按钮(申请单)",
+								"type": 512,
+								"name": "editbtntravel_expense/2",
+								"children": null
+							}, {
+								"display": "驳回按钮(申请单)",
+								"type": 512,
+								"name": "backbtntravel_expense/2",
+								"children": null
+							}
+						]
+					}
+				]
+			}, {
+				"display": "报销单",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "报销单",
+						"type": 512,
+						"name": "expendorder",
+						"children": null
+					}, {
+						"display": "报销单查询列表页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销单查询列表页面",
+								"type": 512,
+								"name": "travel_expense/3",
+								"children": null
+							}, {
+								"display": "查询按钮(报销单)",
+								"type": 512,
+								"name": "searchtravel_expense/3",
+								"children": null
+							}, {
+								"display": "更改查询内容(报销单)",
+								"type": 512,
+								"name": "changetravel_expense/3",
+								"children": null
+							}, {
+								"display": "更改显示内容(报销单)",
+								"type": 512,
+								"name": "showtravel_expense/3",
+								"children": null
+							}, {
+								"display": "新建按钮(报销单)",
+								"type": 512,
+								"name": "newtravel_expense/3",
+								"children": null
+							}, {
+								"display": "删除按钮(批量)(报销单)",
+								"type": 512,
+								"name": "deletetravel_expense/3",
+								"children": null
+							}, {
+								"display": "报销单流程状态(报销单)",
+								"type": 512,
+								"name": "flowtravel_expense/3",
+								"children": null
+							}, {
+								"display": "删除按钮(报销单)",
+								"type": 512,
+								"name": "deletebtntravel_expense/3",
+								"children": null
+							}, {
+								"display": "提交按钮(报销单)",
+								"type": 512,
+								"name": "commitbtntravel_expense/3",
+								"children": null
+							}, {
+								"display": "审核按钮(报销单)",
+								"type": 512,
+								"name": "auditbtntravel_expense/3",
+								"children": null
+							}, {
+								"display": "保存按钮(报销单)",
+								"type": 512,
+								"name": "savebtntravel_expense/3",
+								"children": null
+							}, {
+								"display": "编辑按钮(报销单)",
+								"type": 512,
+								"name": "editbtntravel_expense/3",
+								"children": null
+							}, {
+								"display": "驳回按钮(报销单)",
+								"type": 512,
+								"name": "backbtntravel_expense/3",
+								"children": null
+							}, {
+								"display": "票据上传按钮(新增报销单)",
+								"type": 512,
+								"name": "bill_commit_create",
+								"children": null
+							}, {
+								"display": "票据上传按钮(修改报销单)",
+								"type": 512,
+								"name": "bill_commit_update",
+								"children": null
+							}, {
+								"display": "票据上传按钮(报销单详情)",
+								"type": 512,
+								"name": "bill_commit_detail",
+								"children": null
+							}
+						]
+					}
+				]
+			}
+		]
+	}, {
+		"display": "待办事项",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "待办事项",
+				"type": 512,
+				"name": "termination",
+				"children": null
+			}, {
+				"display": "我的待办",
+				"type": 512,
+				"name": "mytodos",
+				"children": null
+			}, {
+				"display": "待办事项页面",
+				"type": 512,
+				"name": "travel_expense_todos/",
+				"children": null
+			}, {
+				"display": "待办预算查看页面",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "待办预算查看页面",
+						"type": 512,
+						"name": "termination_budget",
+						"children": null
+					}, {
+						"display": "查询按钮(待办预算)",
+						"type": 512,
+						"name": "search_budget",
+						"children": null
+					}, {
+						"display": "更改查询内容(待办预算)",
+						"type": 512,
+						"name": "termination_budget_search",
+						"children": null
+					}
+				]
+			}, {
+				"display": "待办申请查看页面",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "待办申请查看页面",
+						"type": 512,
+						"name": "termination_apply",
+						"children": null
+					}, {
+						"display": "查询按钮(待办申请)",
+						"type": 512,
+						"name": "search_apply",
+						"children": null
+					}, {
+						"display": "更改查询内容(待办申请)",
+						"type": 512,
+						"name": "termination_apply_search",
+						"children": null
+					}
+				]
+			}, {
+				"display": "待办报销查看页面",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "待办报销查看页面",
+						"type": 512,
+						"name": "termination_expend",
+						"children": null
+					}, {
+						"display": "查询按钮(待办报销)",
+						"type": 512,
+						"name": "search_expend",
+						"children": null
+					}, {
+						"display": "更改查询内容(待办报销)",
+						"type": 512,
+						"name": "termination_expend_search",
+						"children": null
+					}
+				]
+			}
+		]
+	}, {
+		"display": "配置中心",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "配置中心",
+				"type": 512,
+				"name": "config_center",
+				"children": null
+			}, {
+				"display": "配置中心",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "配置中心",
+						"type": 512,
+						"name": "cfg_center/",
+						"children": null
+					}, {
+						"display": "预算单配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "预算单配置",
+								"type": 512,
+								"name": "budget_template",
+								"children": null
+							}, {
+								"display": "预算单配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "预算单配置页面",
+										"type": 512,
+										"name": "/budget_froms/10",
+										"children": null
+									}, {
+										"display": "使用空白的预算单",
+										"type": 256,
+										"name": null,
+										"children": [
+											{
+												"display": "使用空白的预算单",
+												"type": 512,
+												"name": "/budget_form_customize/10",
+												"children": null
+											}, {
+												"display": "保存按钮(预算单编辑)",
+												"type": 512,
+												"name": "save/budget_form_customize/10",
+												"children": null
+											}
+										]
+									}, {
+										"display": "我创建的预算单",
+										"type": 512,
+										"name": "myform/budget_froms/10",
+										"children": null
+									}, {
+										"display": "行业精选预算单",
+										"type": 512,
+										"name": "bussiness/budget_froms/10",
+										"children": null
+									}, {
+										"display": "编辑按钮(预算单编辑)",
+										"type": 512,
+										"name": "edit/budget_froms/10",
+										"children": null
+									}
+								]
+							}, {
+								"display": "行业精选预算单",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "行业精选预算单",
+										"type": 512,
+										"name": "/budget_froms/*/10",
+										"children": null
+									}, {
+										"display": "启用模板按钮(预算单编辑)",
+										"type": 512,
+										"name": "start/budget_froms/10",
+										"children": null
+									}, {
+										"display": "从该模板创建按钮(预算单编辑)",
+										"type": 512,
+										"name": "create/budget_froms/10",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "申请单配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "申请单配置",
+								"type": 512,
+								"name": "apply_template",
+								"children": null
+							}, {
+								"display": "申请单配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "申请单配置页面",
+										"type": 512,
+										"name": "/budget_froms/20",
+										"children": null
+									}, {
+										"display": "使用空白的申请单",
+										"type": 256,
+										"name": null,
+										"children": [
+											{
+												"display": "使用空白的申请单",
+												"type": 512,
+												"name": "budget_form_customize/20",
+												"children": null
+											}, {
+												"display": "保存按钮(申请单编辑)",
+												"type": 512,
+												"name": "savebudget_form_customize/20",
+												"children": null
+											}
+										]
+									}, {
+										"display": "我创建的申请单",
+										"type": 512,
+										"name": "myform/budget_froms/20",
+										"children": null
+									}, {
+										"display": "行业精选申请单",
+										"type": 512,
+										"name": "bussiness/budget_froms/20",
+										"children": null
+									}, {
+										"display": "编辑按钮(申请单编辑)",
+										"type": 512,
+										"name": "edit/budget_froms/20",
+										"children": null
+									}
+								]
+							}, {
+								"display": "行业精选申请单",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "行业精选申请单",
+										"type": 512,
+										"name": "/budget_froms/*/20",
+										"children": null
+									}, {
+										"display": "启用模板按钮(申请单编辑)",
+										"type": 512,
+										"name": "start/budget_froms/20",
+										"children": null
+									}, {
+										"display": "从该模板创建按钮(申请单编辑)",
+										"type": 512,
+										"name": "create/budget_froms/20",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "报销单配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销单配置",
+								"type": 512,
+								"name": "expend_template",
+								"children": null
+							}, {
+								"display": "报销单配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "报销单配置页面",
+										"type": 512,
+										"name": "/budget_froms/30",
+										"children": null
+									}, {
+										"display": "使用空白的报销单",
+										"type": 256,
+										"name": null,
+										"children": [
+											{
+												"display": "使用空白的报销单",
+												"type": 512,
+												"name": "/budget_form_customize/30",
+												"children": null
+											}, {
+												"display": "保存按钮(报销单编辑)",
+												"type": 512,
+												"name": "save/budget_form_customize/30",
+												"children": null
+											}
+										]
+									}, {
+										"display": "我创建的报销单",
+										"type": 512,
+										"name": "myform/budget_froms/30",
+										"children": null
+									}, {
+										"display": "行业精选报销单",
+										"type": 512,
+										"name": "bussiness/budget_froms/30",
+										"children": null
+									}, {
+										"display": "编辑按钮(报销单编辑)",
+										"type": 512,
+										"name": "edit/budget_froms/30",
+										"children": null
+									}
+								]
+							}, {
+								"display": "行业精选报销单",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "行业精选报销单",
+										"type": 512,
+										"name": "/budget_froms/*/30",
+										"children": null
+									}, {
+										"display": "启用模板按钮(报销单编辑)",
+										"type": 512,
+										"name": "start/budget_froms/30",
+										"children": null
+									}, {
+										"display": "从该模板创建按钮(报销单编辑)",
+										"type": 512,
+										"name": "create/budget_froms/30",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "系统设置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "系统设置",
+								"type": 512,
+								"name": "system",
+								"children": null
+							}, {
+								"display": "系统设置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "系统设置页面",
+										"type": 512,
+										"name": "/system_config",
+										"children": null
+									}, {
+										"display": "完成按钮",
+										"type": 512,
+										"name": "save_system",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "报销标准",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "报销标准",
+								"type": 512,
+								"name": "standard",
+								"children": null
+							}, {
+								"display": "报销标准配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "报销标准配置页面",
+										"type": 512,
+										"name": "/expend_standard",
+										"children": null
+									}, {
+										"display": "新建按钮",
+										"type": 512,
+										"name": "new_standard",
+										"children": null
+									}, {
+										"display": "保存按钮",
+										"type": 512,
+										"name": "save_standard",
+										"children": null
+									}, {
+										"display": "复制按钮",
+										"type": 512,
+										"name": "copy_standard",
+										"children": null
+									}, {
+										"display": "删除按钮",
+										"type": 512,
+										"name": "delete_standard",
+										"children": null
+									}, {
+										"display": "添加数据按钮",
+										"type": 512,
+										"name": "add_standard_data",
+										"children": null
+									}
+								]
+							}
+						]
+					}, {
+						"display": "工作流配置",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "工作流配置",
+								"type": 512,
+								"name": "flow",
+								"children": null
+							}, {
+								"display": "工作流配置页面",
+								"type": 256,
+								"name": null,
+								"children": [
+									{
+										"display": "工作流配置页面",
+										"type": 512,
+										"name": "/work_flow",
+										"children": null
+									}, {
+										"display": "配置流程按钮(预算)",
+										"type": 512,
+										"name": "config_budget",
+										"children": null
+									}, {
+										"display": "配置流程按钮(申请)",
+										"type": 512,
+										"name": "config_apply",
+										"children": null
+									}, {
+										"display": "配置流程按钮(报销)",
+										"type": 512,
+										"name": "config_expend",
+										"children": null
+									}, {
+										"display": "部署按钮(预算)",
+										"type": 512,
+										"name": "econfig_budget",
+										"children": null
+									}, {
+										"display": "部署按钮(申请)",
+										"type": 512,
+										"name": "econfig_apply",
+										"children": null
+									}, {
+										"display": "部署按钮(报销)",
+										"type": 512,
+										"name": "econfig_expend",
+										"children": null
+									}
+								]
+							}
+						]
+					}
+				]
+			}
+		]
+	}, {
+		"display": "云中心",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "云中心",
+				"type": 512,
+				"name": "cloud_center",
+				"children": null
+			}, {
+				"display": "模板中心",
+				"type": 256,
+				"name": null,
+				"children": [
+					{
+						"display": "模板中心",
+						"type": 512,
+						"name": "template_center",
+						"children": null
+					}, 
+					{
+				        "display": "消息中心",
+				        "type": 512,
+				        "name": "messages_center",
+				        "children": null
+				      },{
+						"display": "模板管理页面",
+						"type": 256,
+						"name": null,
+						"children": [
+							{
+								"display": "模板管理页面",
+								"type": 512,
+								"name": "/templates_center",
+								"children": null
+							}, {
+								"display": "添加预算单模板按钮",
+								"type": 512,
+								"name": "add_budget_template",
+								"children": null
+							}, {
+								"display": "删除预算单模板按钮",
+								"type": 512,
+								"name": "delete_budget_template",
+								"children": null
+							}, {
+								"display": "添加申请单模板按钮",
+								"type": 512,
+								"name": "add_apply_template",
+								"children": null
+							}, {
+								"display": "删除申请单模板按钮",
+								"type": 512,
+								"name": "delete_apply_template",
+								"children": null
+							}, {
+								"display": "添加报销单模板按钮",
+								"type": 512,
+								"name": "add_expend_template",
+								"children": null
+							}, {
+								"display": "删除报销单模板按钮",
+								"type": 512,
+								"name": "delete_expend_template",
+								"children": null
+							}, {
+								"display": "添加行业按钮",
+								"type": 512,
+								"name": "add_bussiness",
+								"children": null
+							}, {
+								"display": "修改行业按钮",
+								"type": 512,
+								"name": "edit_bussiness",
+								"children": null
+							}, {
+								"display": "删除行业按钮",
+								"type": 512,
+								"name": "delete_bussiness",
+								"children": null
+							}, {
+								"display": "上传模板按钮",
+								"type": 512,
+								"name": "template_pass",
+								"children": null
+							}, {
+								"display": "取消模板按钮",
+								"type": 512,
+								"name": "template_cancle",
+								"children": null
+							}, {
+								"display": "模版中心编辑按钮",
+								"type": 512,
+								"name": "edit_template_center",
+								"children": null
+							}
+						]
+					}
+				]
+			}
+		]
+	}, {
+		"display": "初始化向导页面",
+		"type": 256,
+		"name": null,
+		"children": [
+			{
+				"display": "初始化向导页面",
+				"type": 512,
+				"name": "/guide",
+				"children": null
+			}, {
+				"display": "选择行业向导页面",
+				"type": 512,
+				"name": "/business",
+				"children": null
+			}, {
+				"display": "设置向导页面",
+				"type": 512,
+				"name": "/billing_cfg_guide",
+				"children": null
+			}
+		]
+	}
+]
\ No newline at end of file
diff --git a/src/static/js/qxv6.json b/src/static/js/qxv6.json
new file mode 100644
index 0000000..6c5501e
--- /dev/null
+++ b/src/static/js/qxv6.json
@@ -0,0 +1,886 @@
+{
+  "errorCode": 0,
+  "errorMessage": null,
+  "data": {
+    "value": {
+      "functionPermissionSet": [
+        {
+          "id": "fc35f602d26d49baa378944295fd20eb",
+          "display": "报销标准配置页面",
+          "type": 512,
+          "children": null,
+          "name": "/expend_standard"
+        },
+        {
+          "id": "bba7206938fc47d7966716d50e92e5e1",
+          "display": "删除按钮(批量)",
+          "type": 512,
+          "children": null,
+          "name": "deletetravel_expense/2"
+        },
+        {
+          "id": "d53b68242db149619bfd38799d1398a0",
+          "display": "预算单",
+          "type": 512,
+          "children": null,
+          "name": "budgetorder"
+        },
+        {
+          "id": "ef755b894ad94036a26e7291e2a88576",
+          "display": "添加报销单模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "add_expend_template"
+        },
+        {
+          "id": "16076c79dd5c4914ab2f9dec812aa606",
+          "display": "删除按钮(批量)",
+          "type": 512,
+          "children": null,
+          "name": "deletetravel_expense/1"
+        },
+        {
+          "id": "98880329275b427d8c3aec9103b4d49c",
+          "display": "更改查询内容",
+          "type": 512,
+          "children": null,
+          "name": "termination_budget_search"
+        },
+        {
+          "id": "5ec8a0480b52484e887370790bc470c6",
+          "display": "部署按钮(报销)",
+          "type": 512,
+          "children": null,
+          "name": "econfig_expend"
+        },
+        {
+          "id": "61b5a6702467413fb83d3e229f55663e",
+          "display": "保存按钮",
+          "type": 512,
+          "children": null,
+          "name": "savebudget_form_customize/20"
+        },
+        {
+          "id": "0abf17cfa1fe4dcab4eb36d41f03a991",
+          "display": "更改查询内容",
+          "type": 512,
+          "children": null,
+          "name": "changetravel_expense/1"
+        },
+        {
+          "id": "17ba494ca4e5489ba35a6144344c053c",
+          "display": "保存按钮",
+          "type": 512,
+          "children": null,
+          "name": "savebtntravel_expense/3"
+        },
+        {
+          "id": "b278945e75774868b8dbe93af722ed9b",
+          "display": "工作流配置",
+          "type": 512,
+          "children": null,
+          "name": "flow"
+        },
+        {
+          "id": "61861a4b770045cf98d0f112862b8375",
+          "display": "添加数据按钮",
+          "type": 512,
+          "children": null,
+          "name": "add_standard_data"
+        },
+        {
+          "id": "b62a012b03ce468fb5d25affa6a90841",
+          "display": "查询按钮",
+          "type": 512,
+          "children": null,
+          "name": "search_budget"
+        },
+        {
+          "id": "deaa3bf2a7af4932bcb76aabed3dd156",
+          "display": "使用空白的报销单",
+          "type": 512,
+          "children": null,
+          "name": "/budget_form_customize/30"
+        },
+        {
+          "id": "49394d22a5604c09808cfde1c53d3278",
+          "display": "报销单",
+          "type": 512,
+          "children": null,
+          "name": "expendorder"
+        },
+        {
+          "id": "901c2485147b449892d02b8d86aa9254",
+          "display": "差旅费",
+          "type": 512,
+          "children": null,
+          "name": "travel_reimbursement"
+        },
+        {
+          "id": "a3773827220441b5ad37d0ce1da729e8",
+          "display": "编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "edit/budget_froms/10"
+        },
+        {
+          "id": "a111bf73e2434321a19f58e6bbc86d6b",
+          "display": "预算单配置页面",
+          "type": 512,
+          "children": null,
+          "name": "/budget_froms/10"
+        },
+        {
+          "id": "08860fbc63474ae9aabefa06fc5bb04f",
+          "display": "驳回按钮",
+          "type": 512,
+          "children": null,
+          "name": "backbtntravel_expense/2"
+        },
+        {
+          "id": "bace39fd26454006b66c4ec36f63abc1",
+          "display": "启用模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "start/budget_froms/10"
+        },
+        {
+          "id": "9fe3d515e91d42efbb089eff35ef773a",
+          "display": "删除预算单模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "delete_budget_template"
+        },
+        {
+          "id": "803aec36819d4b48954fe9b7bdd3f49f",
+          "display": "复制按钮",
+          "type": 512,
+          "children": null,
+          "name": "copy_standard"
+        },
+        {
+          "id": "e9645c5adab3424a8d80429a199dfa84",
+          "display": "编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "editbtntravel_expense/3"
+        },
+        {
+          "id": "b9902dfbbf414520af26ca6701538dc3",
+          "display": "行业精选申请单",
+          "type": 512,
+          "children": null,
+          "name": "bussiness/budget_froms/20"
+        },
+        {
+          "id": "ec19f5abd7c84ef39e55258c9a7f0835",
+          "display": "行业精选预算单",
+          "type": 512,
+          "children": null,
+          "name": "bussiness/budget_froms/10"
+        },
+        {
+          "id": "77f1d6fb69724e92af4b8566e3a43567",
+          "display": "配置中心",
+          "type": 512,
+          "children": null,
+          "name": "config_center"
+        },
+        {
+          "id": "daf9761fe2b4422a9efa5180f5780b77",
+          "display": "编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "edit/budget_froms/30"
+        },
+        {
+          "id": "e1ad41708af84ab5a7ed02b8e2565d74",
+          "display": "提交按钮",
+          "type": 512,
+          "children": null,
+          "name": "commitbtntravel_expense/1"
+        },
+        {
+          "id": "01640c88ea844fb19e7b1deac851d46e",
+          "display": "票据上传按钮(新增报销单)",
+          "type": 512,
+          "children": null,
+          "name": "bill_commit_create"
+        },
+        {
+          "id": "02f8d6db01c0494d98e4f735abd38a8c",
+          "display": "待办预算查看页面",
+          "type": 512,
+          "children": null,
+          "name": "termination_budget"
+        },
+        {
+          "id": "a19f784aa61840f8bc13752b0074b14c",
+          "display": "预算单流程状态",
+          "type": 512,
+          "children": null,
+          "name": "flowtravel_expense/1"
+        },
+        {
+          "id": "fc7fef9529c143d5b3618293a1e06b86",
+          "display": "删除按钮",
+          "type": 512,
+          "children": null,
+          "name": "deletebtntravel_expense/1"
+        },
+        {
+          "id": "a9cc8e1fdb2c4edab39987edd64c2564",
+          "display": "待办报销查看页面",
+          "type": 512,
+          "children": null,
+          "name": "termination_expend"
+        },
+        {
+          "id": "e369d56e449c42b1b18e5cd1999b775c",
+          "display": "审核按钮",
+          "type": 512,
+          "children": null,
+          "name": "auditbtntravel_expense/3"
+        },
+        {
+          "id": "d7de97b5f62747c1bf5ebd5f5b64d6b1",
+          "display": "配置流程按钮(报销)",
+          "type": 512,
+          "children": null,
+          "name": "config_expend"
+        },
+        {
+          "id": "55a93836c80f435eafb22db2cce059af",
+          "display": "我创建的报销单",
+          "type": 512,
+          "children": null,
+          "name": "myform/budget_froms/30"
+        },
+        {
+          "id": "1ff0d7b6250a4dbaa8c14e627764a706",
+          "display": "审核按钮",
+          "type": 512,
+          "children": null,
+          "name": "auditbtntravel_expense/2"
+        },
+        {
+          "id": "9dd0aa2d384a4294b987f3b4b3288d7e",
+          "display": "新建按钮",
+          "type": 512,
+          "children": null,
+          "name": "newtravel_expense/2"
+        },
+        {
+          "id": "abc94e63ee424f68a33b200548ff0fb9",
+          "display": "新建按钮",
+          "type": 512,
+          "children": null,
+          "name": "new_standard"
+        },
+        {
+          "id": "341c159be9a04b5282d32fb13e158af8",
+          "display": "查询按钮",
+          "type": 512,
+          "children": null,
+          "name": "searchtravel_expense/2"
+        },
+        {
+          "id": "733c08e950c245ef86d787070681136c",
+          "display": "申请单配置",
+          "type": 512,
+          "children": null,
+          "name": "apply_template"
+        },
+        {
+          "id": "6ad47d6585094703980ca6548de799a5",
+          "display": "新建按钮",
+          "type": 512,
+          "children": null,
+          "name": "newtravel_expense/3"
+        },
+        {
+          "id": "254783ff053d4e72b8372490ec16674c",
+          "display": "审核按钮",
+          "type": 512,
+          "children": null,
+          "name": "auditbtntravel_expense/1"
+        },
+        {
+          "id": "f9b3b0d3864642409d1bedfa63d2deaa",
+          "display": "编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "editbtntravel_expense/1"
+        },
+        {
+          "id": "128beb279a664551ae973324bafcc2c8",
+          "display": "待办事项页面",
+          "type": 512,
+          "children": null,
+          "name": "travel_expense_todos/"
+        },
+        {
+          "id": "b9a0328e95134cb293ca041c40fd23b9",
+          "display": "从该模板创建按钮",
+          "type": 512,
+          "children": null,
+          "name": "create/budget_froms/20"
+        },
+        {
+          "id": "b8e17dea62fc49db888425b3e218cc00",
+          "display": "保存按钮",
+          "type": 512,
+          "children": null,
+          "name": "savebtntravel_expense/2"
+        },
+        {
+          "id": "29a08f01f17e4f92910580485e78e00d",
+          "display": "行业精选预算单",
+          "type": 512,
+          "children": null,
+          "name": "/budget_froms/*/10"
+        },
+        {
+          "id": "59e80ea883a1473480c24aa2675de6ee",
+          "display": "修改行业按钮",
+          "type": 512,
+          "children": null,
+          "name": "edit_bussiness"
+        },
+        {
+          "id": "5942e51639b2412a9da7862bbede1a32",
+          "display": "删除按钮(批量)",
+          "type": 512,
+          "children": null,
+          "name": "deletetravel_expense/3"
+        },
+        {
+          "id": "00ccfdb015504d40b0848637276aed83",
+          "display": "驳回按钮",
+          "type": 512,
+          "children": null,
+          "name": "backbtntravel_expense/3"
+        },
+        {
+          "id": "1e0f0c897c794d78969b9765b7ca0e66",
+          "display": "配置中心",
+          "type": 512,
+          "children": null,
+          "name": "cfg_center/"
+        },
+        {
+          "id": "dac6504415c94ff3a1cdf8848540583b",
+          "display": "报销标准",
+          "type": 512,
+          "children": null,
+          "name": "standard"
+        },
+        {
+          "id": "17a989ebe52247a7bced59e82fd738a5",
+          "display": "删除行业按钮",
+          "type": 512,
+          "children": null,
+          "name": "delete_bussiness"
+        },
+        {
+          "id": "4e401f05cf074494949313c1ce193f97",
+          "display": "驳回按钮",
+          "type": 512,
+          "children": null,
+          "name": "backbtntravel_expense/1"
+        },
+        {
+          "id": "e95234d66cce49eb9521262101b814ba",
+          "display": "更改查询内容",
+          "type": 512,
+          "children": null,
+          "name": "changetravel_expense/3"
+        },
+        {
+          "id": "12652d757ef74510867627e393f0f8a8",
+          "display": "申请单",
+          "type": 512,
+          "children": null,
+          "name": "applyorder"
+        },
+        {
+          "id": "5d1d7079b1ac468ca8b5f9f6512fdb24",
+          "display": "删除申请单模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "delete_apply_template"
+        },
+        {
+          "id": "cefd6c6cf64b4769b9f72bd4c7d63847",
+          "display": "新建按钮",
+          "type": 512,
+          "children": null,
+          "name": "newtravel_expense/1"
+        },
+        {
+          "id": "d5a0a5071903400ea7b1a5032183310f",
+          "display": "添加行业按钮",
+          "type": 512,
+          "children": null,
+          "name": "add_bussiness"
+        },
+        {
+          "id": "7c481185fdb24ae782300060527db7ef",
+          "display": "更改查询内容",
+          "type": 512,
+          "children": null,
+          "name": "changetravel_expense/2"
+        },
+        {
+          "id": "fa3118ed726d4ed6ae9c1f79b0e7f80c",
+          "display": "系统设置页面",
+          "type": 512,
+          "children": null,
+          "name": "/system_config"
+        },
+        {
+          "id": "950f90b092ac410f93472359b0c68daf",
+          "display": "更改查询内容",
+          "type": 512,
+          "children": null,
+          "name": "termination_apply_search"
+        },
+        {
+          "id": "8c95d4fdefc3420db7dceb51bd8cd9e9",
+          "display": "模板管理页面",
+          "type": 512,
+          "children": null,
+          "name": "/templates_center"
+        },
+        {
+          "id": "ddb36740de124a549391431c5e4c5fde",
+          "display": "编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "edit/budget_froms/20"
+        },
+        {
+          "id": "b116532e60344a86881c908f74e5690d",
+          "display": "报销单查询列表页面",
+          "type": 512,
+          "children": null,
+          "name": "travel_expense/3"
+        },
+        {
+          "id": "6e9c460d67714120a5733007e0d4d4e2",
+          "display": "预算单查询列表页面",
+          "type": 512,
+          "children": null,
+          "name": "travel_expense/1"
+        },
+        {
+          "id": "09d77e2047104c1fa2c2ffd1c2c233b5",
+          "display": "云中心",
+          "type": 512,
+          "children": null,
+          "name": "cloud_center"
+        },
+        {
+          "id": "44c52dd118f146df9e6da293b382e2e1",
+          "display": "我创建的申请单",
+          "type": 512,
+          "children": null,
+          "name": "myform/budget_froms/20"
+        },
+        {
+          "id": "5d7995dbbaeb47d09ba58e70ea2d1555",
+          "display": "删除按钮",
+          "type": 512,
+          "children": null,
+          "name": "deletebtntravel_expense/3"
+        },
+        {
+          "id": "8a30d1406e644b1db13ce53f3dad41ea",
+          "display": "更改查询内容",
+          "type": 512,
+          "children": null,
+          "name": "termination_expend_search"
+        },
+        {
+          "id": "1ec7aed164c3499b809e69a60c2555de",
+          "display": "我创建的预算单",
+          "type": 512,
+          "children": null,
+          "name": "myform/budget_froms/10"
+        },
+        {
+          "id": "9df3d3fdfadf45909788bec44cfa6b13",
+          "display": "报销单配置页面",
+          "type": 512,
+          "children": null,
+          "name": "/budget_froms/30"
+        },
+        {
+          "id": "4cbbb6e1a70246d1926b16d99a1058f9",
+          "display": "工作流配置页面",
+          "type": 512,
+          "children": null,
+          "name": "/work_flow"
+        },
+        {
+          "id": "99556f612564428f81405027780071e4",
+          "display": "票据上传按钮(报销单详情)",
+          "type": 512,
+          "children": null,
+          "name": "bill_commit_detail"
+        },
+        {
+          "id": "7e4d3325275540beaa88afe787ed57d3",
+          "display": "从该模板创建按钮",
+          "type": 512,
+          "children": null,
+          "name": "create/budget_froms/30"
+        },
+        {
+          "id": "dd42793035d04560b831cda2cc48397d",
+          "display": "模板中心",
+          "type": 512,
+          "children": null,
+          "name": "template_center"
+        },
+        {
+          "id": "dd42793035d04560b831cda2cc48397d",
+          "display": "消息中心",
+          "type": 512,
+          "children": null,
+          "name": "messages_center"
+        },
+        {
+          "id": "e70056f7b1f1421a97cd0a741b450d49",
+          "display": "部署按钮(预算)",
+          "type": 512,
+          "children": null,
+          "name": "econfig_budget"
+        },
+        {
+          "id": "0d95321d5c9f45fea0952ca94c2df181",
+          "display": "预算单配置",
+          "type": 512,
+          "children": null,
+          "name": "budget_template"
+        },
+        {
+          "id": "3ab604c40c4c465cac5ad28840eaa139",
+          "display": "取消模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "template_cancle"
+        },
+        {
+          "id": "2b32d0ca782a4d8fb5205c4c0ed7e010",
+          "display": "启用模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "start/budget_froms/30"
+        },
+        {
+          "id": "628e166c25d04e638d7080a9a3dffe47",
+          "display": "保存按钮",
+          "type": 512,
+          "children": null,
+          "name": "save/budget_form_customize/30"
+        },
+        {
+          "id": "d476780268fe43a9925b0cc9950bafb4",
+          "display": "使用空白的预算单",
+          "type": 512,
+          "children": null,
+          "name": "/budget_form_customize/10"
+        },
+        {
+          "id": "23ae499578b540e4aff5a98e127ba2d0",
+          "display": "我的待办",
+          "type": 512,
+          "children": null,
+          "name": "mytodos"
+        },
+        {
+          "id": "554519b545974daeb43158629aadbd3b",
+          "display": "票据上传按钮(修改报销单)",
+          "type": 512,
+          "children": null,
+          "name": "bill_commit_update"
+        },
+        {
+          "id": "317c0cfcf6d3488c8a0bd86f685338b2",
+          "display": "更改显示内容",
+          "type": 512,
+          "children": null,
+          "name": "showtravel_expense/2"
+        },
+        {
+          "id": "04b3157fb9a74fdaa271f9433ab0abf4",
+          "display": "查询按钮",
+          "type": 512,
+          "children": null,
+          "name": "searchtravel_expense/3"
+        },
+        {
+          "id": "024bd376bbfa4f24b8703a9e447bfe49",
+          "display": "申请单查询列表页面",
+          "type": 512,
+          "children": null,
+          "name": "travel_expense/2"
+        },
+        {
+          "id": "dba6ce7bd8b5453ba2729f420e44ae89",
+          "display": "行业精选申请单",
+          "type": 512,
+          "children": null,
+          "name": "/budget_froms/*/20"
+        },
+        {
+          "id": "792f1c57ad7a40cf9a9d1e50d3cf8301",
+          "display": "设置向导页面",
+          "type": 512,
+          "children": null,
+          "name": "/billing_cfg_guide"
+        },
+        {
+          "id": "a7de64e6a8d8432b81e1bb765250b2ff",
+          "display": "报销单配置",
+          "type": 512,
+          "children": null,
+          "name": "expend_template"
+        },
+        {
+          "id": "bdda4f1ed18747f7af2630112a42005e",
+          "display": "启用模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "start/budget_froms/20"
+        },
+        {
+          "id": "ce486107d68f4253a8d58dad7a005307",
+          "display": "申请单流程状态",
+          "type": 512,
+          "children": null,
+          "name": "flowtravel_expense/2"
+        },
+        {
+          "id": "dc6d91ab518445119cb34d63004ad7dd",
+          "display": "上传模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "template_pass"
+        },
+        {
+          "id": "1c81080e5c8747bead8ac649aa498aab",
+          "display": "行业精选报销单",
+          "type": 512,
+          "children": null,
+          "name": "bussiness/budget_froms/30"
+        },
+        {
+          "id": "b1eaa959d10c4bd1a9317fba4a6c73ed",
+          "display": "模版中心编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "edit/templates_center"
+        },
+        {
+          "id": "023fcbbcece8445da7a4a4b2bd80ab87",
+          "display": "提交按钮",
+          "type": 512,
+          "children": null,
+          "name": "commitbtntravel_expense/2"
+        },
+        {
+          "id": "1f3a93a5239f47689ac352854708281f",
+          "display": "删除报销单模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "delete_expend_template"
+        },
+        {
+          "id": "11eb381b4f9246bf9e99f6df535bac45",
+          "display": "配置流程按钮(预算)",
+          "type": 512,
+          "children": null,
+          "name": "config_budget"
+        },
+        {
+          "id": "f8d2e9ced808465285089921bc12c450",
+          "display": "行业精选报销单",
+          "type": 512,
+          "children": null,
+          "name": "/budget_froms/*/30"
+        },
+        {
+          "id": "2340743735f44a7b8624a8d50b37cd79",
+          "display": "保存按钮",
+          "type": 512,
+          "children": null,
+          "name": "save/budget_form_customize/10"
+        },
+        {
+          "id": "9db6f9cae452495490647af40f9aa974",
+          "display": "初始化向导页面",
+          "type": 512,
+          "children": null,
+          "name": "/guide"
+        },
+        {
+          "id": "da61f621e24741fcb00893ae640c0474",
+          "display": "待办申请查看页面",
+          "type": 512,
+          "children": null,
+          "name": "termination_apply"
+        },
+        {
+          "id": "77d4126bfe7c4ea4bda5e30f135732c1",
+          "display": "待办事项",
+          "type": 512,
+          "children": null,
+          "name": "termination"
+        },
+        {
+          "id": "89cad8836a66420ca33084c663ffce38",
+          "display": "查询按钮",
+          "type": 512,
+          "children": null,
+          "name": "search_expend"
+        },
+        {
+          "id": "5b0de96272144703aafebd9e62a11be6",
+          "display": "保存按钮",
+          "type": 512,
+          "children": null,
+          "name": "save_standard"
+        },
+        {
+          "id": "7032df9bf5c944759620bf9046608056",
+          "display": "完成按钮",
+          "type": 512,
+          "children": null,
+          "name": "save_system"
+        },
+        {
+          "id": "ea360a0e9b2a4dcdaf11180305f849b5",
+          "display": "添加预算单模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "add_budget_template"
+        },
+        {
+          "id": "3a54860bad2a4893a37360915c3ac425",
+          "display": "更改显示内容",
+          "type": 512,
+          "children": null,
+          "name": "showtravel_expense/1"
+        },
+        {
+          "id": "68dd03d33ae04a4ab9ab764f2f6294a5",
+          "display": "报销单流程状态",
+          "type": 512,
+          "children": null,
+          "name": "flowtravel_expense/3"
+        },
+        {
+          "id": "db7920170f984e5cbfb05491bc4e9be4",
+          "display": "删除按钮",
+          "type": 512,
+          "children": null,
+          "name": "deletebtntravel_expense/2"
+        },
+        {
+          "id": "7ce8c3cdf0db4d30bd4a5c41aa8ba292",
+          "display": "申请单配置页面",
+          "type": 512,
+          "children": null,
+          "name": "/budget_froms/20"
+        },
+        {
+          "id": "8b74049898f64632a9060a64806cee7d",
+          "display": "配置流程按钮(申请)",
+          "type": 512,
+          "children": null,
+          "name": "config_apply"
+        },
+        {
+          "id": "386d80d1cc824b2baad0ef59ebbf4017",
+          "display": "编辑按钮",
+          "type": 512,
+          "children": null,
+          "name": "editbtntravel_expense/2"
+        },
+        {
+          "id": "a577efd4adf4410f854ae01fc16c1c98",
+          "display": "从该模板创建按钮",
+          "type": 512,
+          "children": null,
+          "name": "create/budget_froms/10"
+        },
+        {
+          "id": "f0844023f31e42f7b81b469e8120b7b7",
+          "display": "部署按钮(申请)",
+          "type": 512,
+          "children": null,
+          "name": "econfig_apply"
+        },
+        {
+          "id": "0e4de7ae295047899235edeaff1720e1",
+          "display": "系统设置",
+          "type": 512,
+          "children": null,
+          "name": "system"
+        },
+        {
+          "id": "37325f06a5d642e6af0c717b51c97e65",
+          "display": "添加申请单模板按钮",
+          "type": 512,
+          "children": null,
+          "name": "add_apply_template"
+        },
+        {
+          "id": "285f05985da849d9bf1990b908cd07bd",
+          "display": "查询按钮",
+          "type": 512,
+          "children": null,
+          "name": "search_apply"
+        },
+        {
+          "id": "849ab88e280c498f9455dc6df3378098",
+          "display": "提交按钮",
+          "type": 512,
+          "children": null,
+          "name": "commitbtntravel_expense/3"
+        },
+        {
+          "id": "7dd682b592254890a1f38d56bab4111a",
+          "display": "删除按钮",
+          "type": 512,
+          "children": null,
+          "name": "delete_standard"
+        },
+        {
+          "id": "61537c4fb0954588ab672370750342ce",
+          "display": "选择行业向导页面",
+          "type": 512,
+          "children": null,
+          "name": "/business"
+        },
+        {
+          "id": "689415556e974f47955df8628a77cb48",
+          "display": "使用空白的申请单",
+          "type": 512,
+          "children": null,
+          "name": "budget_form_customize/20"
+        },
+        {
+          "id": "9ee56ae0beb44c2b8a23b286c9a33f3a",
+          "display": "更改显示内容",
+          "type": 512,
+          "children": null,
+          "name": "showtravel_expense/3"
+        }
+      ],
+      "dataPermissionMap": {}
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/static/js/qxv7.json b/src/static/js/qxv7.json
new file mode 100644
index 0000000..b638d11
--- /dev/null
+++ b/src/static/js/qxv7.json
@@ -0,0 +1,71 @@
+{
+  "opState": true,
+  "rows": 32,
+  "data":[
+    {
+      "eId":1,
+      "eState":"未读",
+      "eCouldNumber":"1018500170500015",
+      "eBillCode":"1018500170500015-001-01",
+      "eBillKey":"To",
+      "eBillName":"兰州",
+      "eViewMsg":"城市间交通费 到达地 兰州 主数据中未定义",
+      "eDataState":0,
+      "eLevel":9,
+      "eInTime":"2017-01-07 12:00",
+      "eUpTime":"2017-01-07 12:00"
+    },
+    {
+      "eId":3,
+      "eState":"已读",
+      "eCouldNumber":"1018500170500015",
+      "eBillCode":"1018500170500015-001-01",
+      "eBillKey":"To",
+      "eBillName":"兰州",
+      "eViewMsg":"城市间交通费 到达地 兰州 主数据中未定义",
+      "eDataState":0,
+      "eLevel":9,
+      "eInTime":"2017-01-07 12:00",
+      "eUpTime":"2017-01-07 12:00"
+    },
+    {
+      "eId":5,
+      "eState":"已读",
+      "eCouldNumber":"1018500170500015",
+      "eBillCode":"1018500170500015-001-01",
+      "eBillKey":"To",
+      "eBillName":"兰州",
+      "eViewMsg":"城市间交通费 到达地 兰州 主数据中未定义",
+      "eDataState":0,
+      "eLevel":9,
+      "eInTime":"2017-01-07 12:00",
+      "eUpTime":"2017-01-07 12:00"
+    },
+    {
+      "eId":7,
+      "eState":"未读",
+      "eCouldNumber":"1018500170500015",
+      "eBillCode":"1018500170500015-001-01",
+      "eBillKey":"To",
+      "eBillName":"兰州",
+      "eViewMsg":"城市间交通费 到达地 兰州 主数据中未定义",
+      "eDataState":0,
+      "eLevel":9,
+      "eInTime":"2017-01-07 12:00",
+      "eUpTime":"2017-01-07 12:00"
+    },
+    {
+      "eId":9,
+      "eState":"未读",
+      "eCouldNumber":"1018500170500015",
+      "eBillCode":"1018500170500015-001-01",
+      "eBillKey":"To",
+      "eBillName":"兰州",
+      "eViewMsg":"城市间交通费 到达地 兰州 主数据中未定义",
+      "eDataState":0,
+      "eLevel":9,
+      "eInTime":"2017-01-07 12:00",
+      "eUpTime":"2017-01-07 12:00"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/static/js/registry/module.js b/src/static/js/registry/module.js
new file mode 100644
index 0000000..c78a2cc
--- /dev/null
+++ b/src/static/js/registry/module.js
@@ -0,0 +1,72 @@
+angular.module('registry_module', [])
+.controller('registryCtrl',['http_service','$scope','$location','$rootScope',function(http_service,$scope,$location,$rootScope){
+	$scope.tenantnames=[
+		{"name":"租户1","code":888},
+		{"name":"租户2","code":999}
+	]
+//	$scope.usernames=[
+//		{"name":"yonghu1","code":1},
+//		{"name":"yonghu2","code":1},
+//		{"name":"yonghu3","code":1},
+//		{"name":"yonghu4","code":1}
+//	]
+	$scope.adminnames=[
+		{"name":"用户1","code":1},
+		{"name":"用户2","code":2},
+		{"name":"用户3","code":3},
+		{"name":"用户4","code":4}
+	]
+	$scope.adminnames2=[
+		{"name":"用户5","code":5},
+		{"name":"用户6","code":6},
+		{"name":"用户7","code":7},
+		{"name":"用户8","code":8}
+	]
+	//测试用
+//	token:{
+//		tenant:"租户id",
+//		user:"userId"
+//	}
+	$("#top").hide();	
+	$('#registrySection').hide();
+	$scope.selectuser = function($index){
+		$scope.username = $scope.adminname[$index].code;
+//		//获得加密用户id
+//		http_service.post('workflow/userInfo?userId='+$scope.username,{},function(response){
+//			var info = response.data.data;
+//			$("<script>").attr({type:"text/javascript",src:"http://122.114.176.216:8888/workspace/travel-info-min.js?info="+info}).appendTo("head");
+//		})
+	}
+	function setCookie(cname,cvalue,exdays){
+	  var d = new Date();
+	  d.setTime(d.getTime()+(exdays*24*60*60*1000));
+	  var expires = "expires="+d.toGMTString();
+	  document.cookie = cname + "=" + cvalue + "; " + expires;
+	}
+	$scope.registry = function(){
+		if($scope.username){
+			setCookie("token","{tenant:"+$scope.tenantname+",user:"+$scope.username+"}",30);
+			http_service.post('/guiCfg/create',{},function(response){
+				
+			})
+			$location.path('/business');
+			$("#top").show();
+		}else{
+			$scope.tinfo('请选择登录用户')
+		}
+	}
+//	$scope.lessee=function(){
+//	}
+	
+	$scope.selecttenant =function($index){
+		$scope.tenantname = $scope.tenantnames[$index].code;
+		if($scope.tenantname == 888){
+			$scope.adminname = $scope.adminnames;
+		}else{
+			$scope.adminname = $scope.adminnames2;
+		}
+		$('#tenant').hide();
+		$('#registrySection').show();
+	}
+}])
+
diff --git a/src/static/js/saved_form/module.js b/src/static/js/saved_form/module.js
new file mode 100644
index 0000000..1698681
--- /dev/null
+++ b/src/static/js/saved_form/module.js
@@ -0,0 +1,5364 @@
+angular.module('saved_form_directive', [])
+	.factory("myServeice", ['http_service', '$timeout', function(http_service, $timeout) {
+		return {
+			parentitem: [],
+			users_selected: [],
+			type: "",
+			setpd: function(parentitem, users_selected, type) {
+				this.parentitem = parentitem;
+				this.users_selected = users_selected;
+				this.type = type;
+			},
+			setuser:function(users_selected){
+				this.users_selected = users_selected;
+			},
+			getparentitem: function() {
+				return this.parentitem;
+			},
+			getusers_selected: function() {
+				return this.users_selected;
+			},
+			gettype: function() {
+				return this.type;
+			}
+		}
+	}])
+	.directive('formItem', ['$rootScope', function($rootScope) {
+		return {
+			restrict: 'EACM',
+			templateUrl: './static/templates/form_item.html',
+			replace: true,
+			scope: {
+			
+			},
+			link: function($scope, element, attrs) {
+
+			}
+		}
+	}])
+	.directive('date', ['$timeout','$rootScope', function($timeout,$rootScope) {
+		return {
+			scope: {
+				item: "@",
+				edit:"=",
+				editflag:"@",
+				realitem:"="
+			},
+			link: function(scope, element, attrs) {
+				var editflag,editflag_class;
+				if(scope.editflag == 1){
+					editflag = true;
+					editflag_class = "abled_time";
+				}else{
+					editflag = false;
+					editflag_class = "disabled_time";
+				}
+				scope.$watch(function(){
+					return scope.realitem;
+				},function(){
+					if(scope.realitem.sys_value != undefined){
+						if(scope.realitem.render_value != scope.realitem.sys_value){
+							scope.realitem["sys_red"] = true;
+						}else{
+							scope.realitem["sys_red"] = false;
+						}
+					}
+				});
+				var fp;
+				$timeout(function(){
+					fp =  new Flatpickr($(element)[0], {
+						enableTime: false,
+						altInput: false,
+						altFormat: "Y-m-d",
+						clickOpens:editflag,
+						altInputClass:editflag_class,
+						defaultDate: $(element).val(),
+						onClose:function(){
+							$timeout(function(){
+								if($rootScope.sort_bytime){
+									var time_item = JSON.parse(scope.item);
+									time_item.render_value = $(element).val();
+									$rootScope.sort_bytime(time_item);
+								}
+							},1)
+						} 
+					});
+				},1)
+				$(element).click(function(){
+					fp.open();
+					fp.setDate($(element).val());
+				})
+
+//				scope.$watch(function() {
+//					return $(element).val();
+//				}, function() {
+//					if($(element).val() == ""){
+//						$(element).flatpickr({
+//	//						enableTime: true,
+//							altInput: true,
+//							altFormat: "Y-m-d",
+//							enableTime:false,
+//							clickOpens:editflag,
+//							altInputClass:editflag_class,
+//							defaultDate: $(element).val()
+//						});
+//					}
+//				});
+//				$(element).change(function() {
+//					scope.$parent.$parent.$parent.check_data(scope.edit);
+//					var time = $(this).val();
+//					_.extend(scope.$parent.$parent.item, { "render_value": time });
+//					if(scope.item) {
+//						_.extend(scope.$parent.$parent.$parent._item, { "render_value": time });
+//					}
+//				});
+			}
+		}
+
+	}])
+
+	.directive('time', ['$timeout','$rootScope', function($timeout,$rootScope) {
+		return {
+			scope: {
+				item: "@",
+				edit:"=",
+				realitem:"="
+			},
+			link: function(scope, element, attrs) {
+				var editflag,editflag_class;
+				if(scope.editflag == 1){
+					editflag = true;
+					editflag_class = "abled_time";
+				}else{
+					editflag = false;
+					editflag_class = "disabled_time";
+				}
+				scope.$watch(function(){
+					return scope.realitem;
+				},function(){
+					if(scope.realitem.sys_value != undefined){
+						if(scope.realitem.render_value != scope.realitem.sys_value){
+							scope.realitem["sys_red"] = true;
+						}else{
+							scope.realitem["sys_red"] = false;
+						}
+					}
+				});
+				var fp;
+				$timeout(function(){
+					fp =  new Flatpickr($(element)[0], {
+						enableTime: true,
+						altInput: false,
+						altFormat: "h:i",
+						clickOpens:editflag,
+						altInputClass:editflag_class,
+						defaultDate: $(element).val(),
+						time_24hr:true,
+						onClose:function(){
+							$timeout(function(){
+								if($rootScope.sort_bytime){
+									var time_item = JSON.parse(scope.item);
+									time_item.render_value = $(element).val();
+									$rootScope.sort_bytime(time_item);
+								}
+							},1)
+						} 
+					});
+				},1)
+				$(element).click(function(){
+					fp.open();
+					fp.setDate($(element).val());
+				})
+
+//				scope.$watch(function() {
+//					return $(element).val();
+//				}, function() {
+//					if($(element).val() == ""){
+//						$(element).flatpickr({
+//	//						enableTime: true,
+//							altInput: true,
+//							altFormat: "h:i",
+//							enableTime:false,
+//							clickOpens:editflag,
+//							altInputClass:editflag_class,
+//							defaultDate: $(element).val()
+//						});
+//					}
+//				});
+//				$(element).change(function() {
+//					scope.$parent.$parent.$parent.check_data(scope.edit);
+//					var time = $(this).val();
+//					_.extend(scope.$parent.$parent.item, { "render_value": time });
+//					if(scope.item) {
+//						_.extend(scope.$parent.$parent.$parent._item, { "render_value": time });
+//					}
+//				});
+			}
+		}
+	}])
+
+	.directive('datetime', ['$timeout','$rootScope', function($timeout,$rootScope) {
+		return {
+			scope: {
+				item: "@",
+				edit:"=",
+				editflag:"@",
+				realitem:"="
+			},
+			link: function(scope, element, attrs) {
+				var editflag,editflag_class;
+				if(scope.editflag == 1){
+					editflag = true;
+					editflag_class = "abled_time";
+				}else{
+					editflag = false;
+					editflag_class = "disabled_time";
+				}
+				var fp;
+				scope.$watch(function(){
+					return scope.realitem;
+				},function(){
+					if(scope.realitem.sys_value != undefined){
+						if(scope.realitem.render_value != scope.realitem.sys_value){
+							scope.realitem["sys_red"] = true;
+						}else{
+							scope.realitem["sys_red"] = false;
+						}
+					}
+				});
+				$timeout(function(){
+					fp =  new Flatpickr($(element)[0], {
+						enableTime: true,
+						altInput: false,
+						altFormat: "Y-m-d h:i",
+						clickOpens:editflag,
+						altInputClass:editflag_class,
+						defaultDate: $(element).val(),
+						time_24hr:true,
+						onClose:function(){
+							$timeout(function(){
+//								_.each($scope.)
+								if($rootScope.sort_bytime){
+									var time_item = JSON.parse(scope.item);
+									time_item.render_value = $(element).val();
+									$rootScope.sort_bytime(time_item);
+								}
+							},1)
+						} 
+					});
+				},1)
+				$(element).click(function(){
+					fp.open();
+					fp.setDate($(element).val());
+				})
+//				scope.$watch(function() {
+//					return $(element).val();
+//				}, function() {
+//					if($(element).val() == ""){
+//						$(element).flatpickr({
+//	//						enableTime: true,
+//							altInput: true,
+//							altFormat: "Y-m-d h:i",
+//							enableTime:false,
+//							clickOpens:editflag,
+//							altInputClass:editflag_class,
+//							defaultDate: $(element).val()
+//						});
+//					}
+//				});
+//				$(element).change(function() {
+//					scope.$parent.$parent.$parent.check_data(scope.edit);
+//					var time = $(this).val();
+//					_.extend(scope.$parent.$parent.item, { "render_value": time });
+//					if(scope.item) {
+//						_.extend(scope.$parent.$parent.$parent._item, { "render_value": time });
+//					}
+//				});
+			}
+		}
+
+	}])
+
+	.filter('cityfilter', function() {
+		return function(value, cityList) {
+			var flag = false;
+			for(i in cityList) {
+				if(value == cityList[i]) {
+					flag = true;
+				}
+			}
+			return flag;
+		}
+	})
+
+	.filter('citycode', function() {
+		return function(value) {
+
+		}
+	})
+
+	//选择城市的控件
+	.directive('selectCity', function() {
+		return {
+			restrict: 'ACEM',
+			templateUrl: './static/templates/city.html',
+			controller: ['http_service', '$scope', '$timeout', function(http_service, $scope, $timeout) {
+				//获取城市
+				$scope.cityList = [];
+				http_service.post('base/data/search/city', {}, function(response) {
+					$scope.provinces = response.data.data;
+					_.each($scope.form_items, function(item) {
+						if(item.gcCpnType == 11) {
+							$scope.$watch(function() {
+								return item.render_value;
+							}, function() {
+								if(item.render_value){
+									$scope.ccode = item.render_value.split(",");
+								}
+								_.each($scope.ccode, function(code) {
+									_.each($scope.provinces, function(citycode) {
+										_.each(citycode.child, function(citylistcode) {
+											if(citylistcode.code == code) {
+												$scope.cityList.push(citylistcode.value);
+											}
+										})
+									});
+								})
+
+							})
+						}
+					});
+				});
+				$scope.firstcitys = [];
+				$scope.secondcitys = [];
+				$scope.thirdcitys = [];
+
+				//存储选中的一级城市
+				//				if(localStorage.getItem("selectedcity")) {
+				//					$scope.cityList = localStorage.getItem("selectedcity");
+				//					$scope.cityList = $scope.cityList.split(",");
+				//				} else {
+				//					$scope.cityList = [];
+				//				}
+				//
+				//				if(localStorage.getItem("selectedcitycode")) {
+				//					$scope.citycode = localStorage.getItem("selectedcitycode");
+				//					$scope.citycode = $scope.citycode.split(",");
+				//				} else {
+				//					$scope.citycode = [];
+				//				}
+
+				//点击省份响应事件
+				$scope.selecthot = function($index) {
+					$scope.citys = $scope.provinces[$index].child;
+
+					$scope.firstcitys.splice(0, $scope.firstcitys.length);
+					$scope.secondcitys.splice(0, $scope.secondcitys.length);
+					$scope.thirdcitys.splice(0, $scope.thirdcitys.length);
+					for(i in $scope.citys) {
+						if($scope.citys[i].level == '2') {
+							$scope.firstcitys.push($scope.citys[i]);
+						}
+						if($scope.citys[i].level == '3') {
+							$scope.secondcitys.push($scope.citys[i]);
+						}
+						if($scope.citys[i].level == '4') {
+							$scope.thirdcitys.push($scope.citys[i]);
+						}
+					}
+					$scope.citys = $scope.firstcitys;
+					$scope.firstcity = function() {
+						$scope.citys = $scope.firstcitys;
+					}
+					$scope.secondcity = function() {
+						$scope.citys = $scope.secondcitys;
+					}
+					$scope.thirdcity = function() {
+						$scope.citys = $scope.thirdcitys;
+					}
+				}
+
+				$scope.hidecity = function() {
+					$scope.city = false;
+					$(".citybtn").text($scope.cityList.join(",") || "请选择城市");
+				}
+				$scope.citybtn = function() {
+					$scope.city = $scope.edit;
+				}
+				$scope.selectcity = function($event, $index) {
+					if($event.target.checked) {
+						$scope.cityList.push($scope.citys[$index].value);
+						$scope.citycode.push($scope.citys[$index].code);
+					} else {
+						for(i in $scope.cityList) {
+							if($scope.citys[$index].value == $scope.cityList[i]) {
+								$scope.cityList.splice(i, 1);
+								$scope.citycode.splice(i, 1);
+							}
+						}
+					}
+					//					localStorage.setItem("selectedcity", $scope.cityList + "");
+					//					localStorage.setItem("selectedcitycode", $scope.citycode);
+				}
+
+				//删除某个选中城市,改变多选框状态的同时,已选城市列表删除此城市
+				$scope.deletecity = function($index) {
+					for(j in $scope.citys) {
+						if($scope.citys[j].value == $scope.cityList[$index]) {
+							$(".citycontent input")[j].checked = false;
+						}
+					}
+					$scope.cityList.splice($index, 1);
+					$scope.citycode.splice($index, 1);
+					//					localStorage.setItem("selectedcitycode", $scope.citycode);
+					//					localStorage.setItem("selectedcity", $scope.cityList + "");
+				}
+
+				//保存输入框中的城市,若存在则加入选中城市
+				$scope.saveflag = true;
+				$scope.savecity = function() {
+					for(i in $scope.provinces) {
+						for(j in $scope.provinces[i].child) {
+							if($scope.provinces[i].child[j].value.indexOf($scope.somecity) >= 0) {
+								$scope.cityList.push($scope.provinces[i].child[j].value);
+								$scope.citycode.push($scope.provinces[i].child[j].code);
+								$scope.saveflag = false;
+							}
+						}
+					}
+					if($scope.saveflag) {
+						//alert("抱歉,无此城市");
+						//						swal({
+						//							title: "警告",
+						//							text: "抱歉,无此城市!",
+						//							type: "warning",
+						//							confirmButtonText: "确定",
+						//						})
+						$scope.$parent.tinfo("抱歉,无此城市!")
+
+					}
+				}
+			}]
+		}
+	})
+	.filter('colorfilter', function() {
+		return function(value, color) {
+			switch(value) {
+				case 10:
+					color = '#39beb5';
+					break;
+				case 20:
+					color = '#FFCC00';
+					break;
+				case 30:
+					color = '#73ff96';
+					break;
+				default:
+					color = '#ccc';
+					break;
+			}
+			return color;
+		}
+	})
+	.filter('statusfilter', function() {
+		return function(value) {
+			var slogan = ""
+			switch(value) {
+				case 10:
+					slogan = "./static/img/yes.png";
+					break;
+				case 20:
+					slogan = "./static/img/no.png";
+					break;
+				case 30:
+					slogan = "./static/img/yes.png";
+					break;
+				default:
+					slogan = "./static/img/continue.png";
+					break;
+
+			}
+			return slogan;
+		}
+	})
+	.filter('borderfilter', function() {
+		return function(border) {
+			switch(border) {
+				case 10:
+					border = "#999";
+					break;
+
+				case 20:
+					border = "#999";
+					break;
+
+				case 30:
+					border = "#fff";
+					break;
+
+				default:
+					border = "#fff";
+					break;
+			}
+			return border;
+		}
+	})
+	.filter('borderfilt', function() {
+		return function(edit) {
+			switch(edit) {
+				case false:
+					edit = "#ccc";
+					break;
+
+				case true:
+					edit = "#fff";
+					break;
+
+				default:
+					edit = "#fff";
+					break;
+			}
+			return edit;
+		}
+	})
+	.filter('stepfilter', function() {
+		return function(step) {
+			switch(step) {
+				case 10:
+					step = "已处理";
+					break;
+
+				case 20:
+					step = "退回";
+					break;
+
+				case 30:
+					step = "已完成";
+					break;
+
+				default:
+					step = "待处理";
+					break;
+			}
+			return step;
+		}
+	})
+	.directive('userSelector', ['$rootScope', 'http_service', '$compile', '$timeout', 'myServeice', function($rootScope, http_service, $compile, $timeout, myServeice) {
+		return {
+			restrict: 'EACM',
+			scope: {
+				item: '=',
+				parentitem: '=',
+				type: '='
+			},
+			template: '<div  class="user_element">' +
+				'<label>' +
+				'{{item.gcCpnAlias}}' +
+				'<text class="manadatory_ifd" ng-if="item.gcInputMust==1">*</text>'+
+				'</label>' +
+				'<span name="user_el_content" gcColName="{{item.gcColName}}" user_selected="{{item.render_value}}" >' +
+				'<span class="user_name" ng-repeat="user in users_selected" >' +
+				'{{user.personName}} <a ng-href="javascript:void(0)" ng-click="remove_user(user);"><i class="fa fa-times" aria-hidden="true" style="color:#fff;"></i></a>' +
+				'</span>' +
+				'&nbsp;&nbsp;<a class="btn_user_el_add_user" href="javascript:void(0);"  ng-click="select_user($event);" >选择人员</a>' +
+				'</span>' +
+				'</div>',
+			replace: true,
+			controller: ['$scope', '$element', function($scope, $element) {
+				$scope.users_selected = [];
+				$scope.users_selecting = {};
+				$scope.journel_budget_list = [];
+				$scope.departments_selected = [];
+
+				$scope.$watch('parentitem', function() {
+					var budget_list = $scope.parentitem.budget_list;
+					var user_ids = _.map(budget_list, function(budget) {
+
+						return budget['userId'];
+					})
+					if(user_ids && user_ids.length) {
+						http_service.post('personnel/search/personns', { "pdIds": user_ids }, function(res) {
+							$scope.users_selected = res.data.data;
+						});
+					}
+				}, true);
+				$scope.rm_sel_user = function(user) {
+					$scope.users_selected = _.filter($scope.users_selected, function(_user) {
+						return _user.personCode !== user.personCode;
+					})
+					$scope.query_journel_budget();
+				};
+				$scope.select_user = function(e) {
+					if($rootScope.close_expend_select){
+						$rootScope.close_expend_select();
+					}
+					if($rootScope.close_apply_select){
+						$rootScope.close_apply_select();
+					}
+					$('div[name="user_selector_popup"]').remove();
+					var activeclass = "{true:'hr_name',false:'hr_name_selected'}[user.state]";
+					var pop_element = $('<div' +
+						' name="user_selector_popup"' +
+						' class="user_select_popup col-md-12"' +
+						'onMouseOver ="$(this).draggable();event.stopPropagation();"' +
+						'>' +
+						'<div class="user_sel_form">' +
+						'<div class="row btn_cls user_sel_form_close">' +
+						'<a ng-href="javascript:void(0);"><i class="fa fa-times main_close" aria-hidden="true"  ng-click="close();"></i></a>' +
+						'</div>' +
+						'<div class="main">' +
+						'<div class="center_area">' +
+						'<div class="area_title">' +
+						'<label>选择人员</label>' +
+						'<span><input type="text" ng-click="stop_prg($event);" ng-change="get_users()" value="" ng-model="user_filter" /></span>' +
+						'</div>' +
+						'<div class="area_body">' +
+						'<div ng-repeat="(first_letter, users) in users_selecting track by $index">' +
+						'<label class="label_letter_group">{{first_letter}}</label>' +
+						'<ul>' +
+						//						'<a class="hr_gp_title" >人员{{$index+1}}</a>' +
+						'<li ng-repeat="user in users" >' +
+						'<div>' +
+						'<a ng-class="' + activeclass + '" ng-href="javascript:void(0);" ng-model="user.personName">{{user.personName}}</a>' +
+						'<button class="hr_name_addbtn"  ng-click="add_user(user);">{{user.state|selected_flag}}</button>' +
+						'</div>' +
+						'</li>' +
+						'</ul>' +
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'<div class="hr_tree left ztree" id="tree" style="overflow:auto;">' + '</div>' +
+						'<div class="right">' +
+						'<div class="right_area">' +
+						'<div class="area_title selected_personnel">' +
+						'<label>已选人员</label>' +
+						'<span class="float_right">' +
+						'<a ng-href="javascript:void(0);" class="clear_selected_users" ng-click="clear_selected_users();" ><i class="fa fa-trash-o" aria-hidden="true"></i></a>' +
+						'</span>' +
+						'</div>' +
+
+						'<div class="area_body">' +
+						'<ul ng-repeat="user in departments_selected">' +
+						'<div class="gp_title" dep_show="true" ng-click="show_department(event);">' +
+						'<i class="fa fa-caret-right" style="margin-left:3px" aria-hidden="true"></i>' +
+						'<a class="hr_gp_title" title="{{user.orgName}}[{{user.user_info.length}}]">{{user.orgName}}[{{user.user_info.length}}]</a>' + '<i class="fa fa-times department_close" ng-click="remove_department(user);" aria-hidden="true"></i>' +
+						'</div>' +
+						'<div>' +
+						'<li ng-repeat="user_info in user.user_info">' +
+						'<div>' +
+						'<a class="hr_name" ng-href="javascript:void(0);">{{user_info.personName}}</a>' +
+						'<button class="hr_name_addbtn"  ng-click="remove_user(user_info);">-</button>' +
+						'</div>' +
+						'</li>' +
+						'</div>' +
+						'</ul>' +
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>');
+					$($element).append(pop_element);
+					$compile(pop_element)($scope);
+					$scope.init_tree();
+					var form_el_div = $($element).closest('div.sub_form_container').children('div').not('[name="journel_budget"]');
+					form_el_div.find('input, select').off('change').on('change', function() {
+						$scope.query_journel_budget();
+					});
+					e.stopPropagation();
+				};
+			}],
+			link: function($scope, element, attrs) {
+				$scope.user_filter = "";
+				$scope.stop_prg = function(event) {
+					event.stopPropagation();
+				};
+
+				$scope.user_filter_func = function() {
+					var users_selecting = {};
+					_.each($scope.users_selecting_cache, function(users, name) {
+						var users_filtered = _.filter(users, function(user) {
+							return user.perOrgCode.indexOf($scope.user_filter) > -1;
+						});
+						if(users_filtered.length > 0) {
+							users_selecting[name] = users_filtered;
+						}
+					});
+					$scope.users_selecting = users_selecting;
+				}
+
+				//搜索人员
+				$scope.get_users = function() {
+					$scope.users_selecting = {};
+					if($scope.user_filter !== ""){
+						http_service.post('base/data/search/personData',{'personName':$scope.user_filter},function(res){
+							
+							_.each(res.data.data,function(user_data){
+								var user_fristname = user_data.perFirstName;
+								if($scope.users_selected.length > 0 && $scope.users_selected[0].personCode == user_data.personCode){
+									user_data['state'] = false;
+								}else{
+									user_data['state'] = true;
+								}
+								
+								$scope.users_selecting[user_fristname] = [user_data];
+							})
+						})
+					}
+				};
+				$scope.clear_selected_users = function() {
+					$scope.users_selected = [];
+					$scope.departments_selected = [];
+				};
+				$rootScope.close_user_selector = function(){
+					$scope.close();
+				}
+				$scope.close = function() {
+					$('div[name="user_selector_popup"]').remove();
+					myServeice.setpd($scope.parentitem, $scope.users_selected, $scope.type);
+					//				$scope.query_journel_budget();
+				};
+				$scope.query_journel_budget = function() {
+					var children = $scope.parentitem.child;
+					var pd = {
+						"type": $scope.type,
+						"journeyInfo": [],
+						"child": []
+					}
+					_.each(children, function(child) {
+						pd['journeyInfo'].push({
+							"gcElIden": child['gcElIden'],
+							"gcColName": child['gcColName'],
+							"gcVal": $(element).closest('div.sub_form').find('*[gccolname="' + child['gcColName'] + '"]').val()
+						});
+					});
+
+					_.each($scope.users_selected, function(user) {
+						pd['child'].push({
+							"userId": user.pdId
+						});
+					});
+
+					http_service.post('apply/userMoney', pd, function(res) {
+							var journel_budget_list = res.data.data;
+						$timeout(function() {
+							//                      $scope.parentitem.budget_list = journel_budget_list;
+							//                      $scope.item.budget_list = journel_budget_list;
+							$scope.item_budget_list = journel_budget_list;
+						}, 1);
+						
+					});
+				};
+				//公式联动
+				function formula_computing(formula,usercode,this_item,parent_item){
+					if($rootScope.stepCode == 30 || $rootScope.stepCode == 10){// 已完成/审核中 表单  不计算
+						return false;
+					}
+					//判断公式应用于哪个表单
+//					var travelType = formula.travelType;//获取公对应的表单
+//					var account_flag =false;//控制是否计算
+//					if(travelType == $scope.type){
+//						account_flag = true;
+//					}else if(travelType == 0){
+//						account_flag = true;
+//					}
+//					if(account_flag == false){
+//						return false;
+//					}
+
+					//判断此控件是否在子表单中
+					var is_child = true;
+					var child_item;
+					if(this_item == parent_item){
+						is_child = false;
+					}
+					//解析公式
+					var target_code = formula.child[0];
+					var org_code = formula.child[1];
+					//判断是否执行此公式
+					if(org_code.pMdCode != this_item.gcMeCode){
+						return false;
+					}
+					var post_data = {
+						"code":org_code.pMdCode,
+						"views":[org_code.pMeCode],
+						"criteria":[{
+						       "key":"code",
+						       "val":usercode
+						   }]
+					}
+					http_service.post("base/data/getVals",post_data,function(res){
+						var res_data = res.data.data;
+						if(res_data != undefined && res_data.length != 0){
+							if(is_child){
+								_.each($scope.$parent.form_items,function(form){
+									if(form.child && form.child.length != 0 && form == parent_item){
+										_.each(form.child,function(cd){
+											if(cd.gcMeCode == target_code.pMdCode){
+												if(formula.child.length <= 2){
+													
+													$rootScope.formula_num_id.push(formula.id)//前端公式计数
+													$rootScope.formula_num++;
+													
+													cd.render_value = res_data[0][org_code.pMeCode];
+												}
+												if($rootScope.change_apmonut){
+													$timeout(function(){
+														$rootScope.change_apmonut(cd);
+													},10)
+												}
+											}
+										})
+									}
+								})
+							}else{
+								_.each($scope.$parent.form_items,function(form){
+									if(form.gcCpnType != 10 && form.gcCpnType != 17 ){
+										if(form.gcMeCode == target_code.pMdCode){
+//											
+//											
+											if(formula.child.length <= 2){
+												
+												$rootScope.formula_num_id.push(formula.id)//前端公式计数
+												$rootScope.formula_num++;
+												
+												form.render_value = res_data[0][org_code.pMeCode];
+											}
+											if($rootScope.change_apmonut){
+												$timeout(function(){
+													$rootScope.change_apmonut(form);
+												},10)
+											}
+										}
+									}else{
+										_.each(form.child,function(cd){
+											if(cd.gcMeCode == target_code.pMdCode){
+//											
+//											
+											if(formula.child.length <= 2){
+												
+												$rootScope.formula_num_id.push(formula.id)//前端公式计数
+												$rootScope.formula_num++;
+												
+												cd.render_value = res_data[0][org_code.pMeCode];
+											}
+											if($rootScope.change_apmonut){
+												$timeout(function(){
+													$rootScope.change_apmonut(cd);
+												},10)
+											}
+										}
+										})
+									}
+								})
+							}
+						}
+						if(res_data != undefined && res_data.length == 0 && org_code.pMeCode != 'code'){
+							
+							$rootScope.formula_num_id.push(formula.id)//前端公式计数
+							$rootScope.formula_num++;
+							
+						}
+					},false,function(){
+						
+						$rootScope.formula_num_id.push(formula.id)//前端公式计数
+						$rootScope.formula_num++;
+						
+					});
+				}
+				$rootScope.formula_computing_user = function(formula,value,this_item,parent_item){
+					formula_computing(formula,value,this_item,parent_item);
+				}
+				//根据部门code找部门name
+				function get_orgname(user,cd){
+					_.each(cd,function(hr_data){
+						if(hr_data.orgCode == user.perOrgCode){
+							user['orgName'] = hr_data.orgName;
+						}else if(hr_data.child && hr_data.child.length > 0){
+							get_orgname(user,hr_data.child);
+						}
+					});
+				}
+				//人员变更清空申请选择
+//				function clear_apply(){
+//					_.each($scope.$parent.form_items,function(form){
+//						if(form.gcCpnType == 14){//申请选择
+//							$rootScope.expend_number_info = null;
+//							form.render_value = "";
+//							$scope.$parent.$parent.$parent.expend_heads = [];
+//							$scope.$parent.$parent.$parent.expend_selectinfo = [];
+//							$scope.$parent.$parent.$parent.expend_thshow = false;
+//						}
+//					});
+//					$scope.$parent.form_items = _.remove($scope.$parent.form_items,function(form){
+//						return form.gcCpnType == 10 && form.deleteflag_jour;
+//					});
+//					//添加行程按钮显示
+//					$rootScope.show_add_jour();
+//				}
+				//添加已选人员
+				$scope.add_user = function(user, event) {
+					if(!user.state){//若为“-” 则执行删除
+						$scope.remove_user(user);
+						return false;
+					}
+					if($scope.users_selected.length == 0){//只能选择一个人员
+						if(user.orgName == undefined){
+							get_orgname(user,$scope.hr_data_str);
+						}
+						var department_filter = _.filter($scope.departments_selected, function(_department) {
+							return _department.orgName === user.orgName;
+						});
+						if(!!!department_filter.length) {
+							$scope.departments_selected.push({
+								"orgName": user.orgName,
+								"user_info": []
+							});
+						}
+						for(i in $scope.departments_selected) {
+							if($scope.departments_selected[i].orgName == user.orgName) {
+								var user_filter = _.filter($scope.departments_selected[i].user_info, function(_user) {
+									return _user.personCode === user.personCode;
+								});
+								if(!!!user_filter.length) {
+									$scope.departments_selected[i].user_info.push(user);
+								}
+							}
+						}
+						var user_filter = _.filter($scope.users_selected, function(_user) {
+							return _user.personCode === user.personCode;
+						});
+						if(!!!user_filter.length) {
+							$scope.users_selected.push(user);
+						}
+						user.state = false;
+						$scope.item.render_value = user.personCode;
+						
+						//匹配控件 并进行公式计算
+					            _.each($scope.$parent.formula,function(formula){
+//					            	_.each(formula.child,function(_formula){
+//					            		if(formula.mathFormat != "select"){//排除无效公式
+					            			formula_computing(formula,user.personCode,$scope.item,$scope.parentitem);
+//					            		}
+//					            	});
+					            });
+					            
+					            $scope.close();
+				}
+					$rootScope.change_apmonut($scope.item);
+					
+					$rootScope.check_bill_user();//验证报销人信息
+				};
+				$scope.remove_user = function(user_info) {
+					if($scope.item == $scope.parentitem && $scope.type == 30){
+						$rootScope.clear_apply();
+					}
+					if(user_info.orgName == undefined){
+							get_orgname(user_info,$scope.hr_data_str);
+						}
+					_.each($scope.users_selecting,function(user){
+						user[0].state = true;
+					})
+					for(i in $scope.users_selecting_cache) {
+						var data = $scope.users_selecting_cache[i];
+						for(m in data) {
+							if(data[m].personCode == user_info.personCode) {
+								data[m].state = true;
+							}
+						}
+					}
+					for(i in $scope.departments_selected) {
+						if(user_info.orgName == $scope.departments_selected[i].orgName) {
+							for(m in $scope.departments_selected[i].user_info) {
+								if($scope.departments_selected[i].user_info[m].personCode == user_info.personCode) {
+									$scope.departments_selected[i].user_info.splice(m, 1);
+									if($scope.departments_selected[i].user_info.length == 0) {
+										$scope.departments_selected.splice(i, 1);
+									}
+								}
+							}
+						}
+					}
+					for(i in $scope.users_selected) {
+						if($scope.users_selected[i].personCode == user_info.personCode) {
+							$scope.users_selected.splice(i, 1);
+						}
+					}
+					$scope.item.render_value = "";
+					$rootScope.check_bill_user();//验证报销人信息
+				};
+				$scope.remove_department = function(user) {
+					for(i in $scope.departments_selected) {
+						if($scope.departments_selected[i] == user) {
+							$scope.departments_selected.splice(i, 1);
+						}
+					}
+					var arr = [];
+					for(i in $scope.users_selected) {
+						if($scope.users_selected[i].orgName != user.orgName) {
+							arr.push($scope.users_selected[i]);
+						}
+					}
+					$scope.users_selected = arr;
+					for(i in $scope.users_selecting) {
+						if($scope.users_selecting[i][0].orgName == user.orgName) {
+							$scope.users_selecting[i][0].state = true;
+						}
+					}
+				};
+				$scope.show_department = function(event) {
+					var event = window.event || event;
+					if(event.target.getAttribute("dep_show") == "true") {
+						event.target.nextSibling.style.display = "none";
+						event.target.setAttribute("dep_show", false);
+					} else {
+						event.target.nextSibling.style.display = "block";
+						event.target.setAttribute("dep_show", true);
+					}
+
+				}
+				$scope.show_department = function(event) {
+					var event = window.event || event;
+					if(event.target.getAttribute("dep_show") == "true") {
+						event.target.nextSibling.style.display = "none";
+						event.target.setAttribute("dep_show", false);
+					} else {
+						event.target.nextSibling.style.display = "block";
+						event.target.setAttribute("dep_show", true);
+					}
+
+				}
+				$scope.init_tree = function() {
+					$scope.user_filter = "";
+					http_service.post('base/data/search/institutionData', {}, function(res) {
+						if(res.data.opState){
+							$scope.hr_data_str = res.data.data;
+								var hr_data_str = JSON.stringify(res.data.data).replace(/child/g, 'children').replace(/orgName/g, 'name');
+						var hr_data_json = JSON.parse(hr_data_str);
+						var setting = {
+							'callback': {
+								'onClick': function(event, treeId, treeNode) {
+									var orgName = treeNode.name;
+									var md_id = treeNode.orgCode;
+									if(md_id) {
+										http_service.post('base/data/search/personData', { 'perOrgCode': md_id }, function(res) {
+											var users = res.data.data;
+											_.each(users, function(user) {
+												if($scope.users_selected.length > 0 && $scope.users_selected[0].personCode == user.personCode){
+													_.extend(user, { 'orgName': orgName, "state": false });
+												}else{
+													_.extend(user, { 'orgName': orgName, "state": true });
+												}
+											});
+											if(users && users.length) {
+												var grouped_users = _.groupBy(users, function(user) {
+													//                                              return user.pdFirstName;
+													return user.perFirstName;
+												});
+												$scope.users_selecting_cache = grouped_users;
+											} else {
+												$scope.users_selecting_cache = {}
+											}
+											$scope.user_filter_func();
+										});
+									}
+								}
+							}
+						};
+						$.fn.zTree.init($("div.hr_tree"), setting, hr_data_json);
+						var treeObj = $.fn.zTree.getZTreeObj("tree");
+						treeObj.expandAll(true);
+						}else{
+							$scope.$parent.$parent.$parent.$parent.$parent.terro(res.data.errMsg)
+						}
+					
+					});
+					
+					
+				}
+				var per_num = 0;
+//				if($scope.$parent.isbill == "false"){
+//					per_num = 1;
+//				}else{
+//					per_num = 0;
+//				}
+				$scope.$watch(function(){// 用于保存过去信息
+					return $scope.users_selected;
+				},function(){
+					if($scope.users_selected != undefined && $scope.users_selected.length != 0){
+						$scope.item['old_users_selected'] = $scope.users_selected;
+					}
+				})
+				$scope.$watch(function() { return $scope.item.render_value }, function() {
+					
+					if($rootScope.stepCode == undefined || ($rootScope.stepCode != 30 && $rootScope.stepCode != 10)){
+						if($scope.item.render_value) {
+							per_num++;
+							var arr = [$scope.item.render_value]
+							http_service.post('base/data/search/personData', { "personCode": arr[0] }, function(res) {
+								$scope.users_selected = res.data.data;
+								$timeout(function(){//用于检测显示是否完全
+											$scope.item['inited'] = true;
+										},1);
+								if($scope.users_selected.length != 0){//非空验证
+									
+									myServeice.setpd($scope.parentitem, $scope.users_selected, $scope.type);
+									http_service.post('base/data/search/institutionData', {}, function(res) {
+										console.log('5555555555');
+										var users = $scope.users_selected;
+										var orgs = res.data.data[0].child;
+										var orgName;
+										_.each(orgs,function(org){
+											if(org.orgCode == users[0].perOrgCode){
+												orgName = org.orgName;
+											}
+										})
+										$scope.departments_selected = [{ "orgName": orgName, "user_info": [$scope.users_selected[0]] }];
+										_.each(users, function(user) {
+											if(user.personCode != $scope.users_selected[0].personCode) {
+												_.extend(user, { 'orgName': orgName, "state": true });
+											} else {
+												_.extend(user, { 'orgName': orgName, "state": false });
+											}
+			
+										});
+										if(users && users.length) {
+											var grouped_users = _.groupBy(users, function(user) {
+												//                                              return user.pdFirstName;
+												return user.perFirstName;
+											});
+											$scope.users_selecting_cache = grouped_users;
+										} else {
+											$scope.users_selecting_cache = {}
+										}
+										$scope.user_filter_func();
+									});
+								}
+								//匹配控件 并进行公式计算  无论请求返回是否为空  都要进行公式计算
+							    _.each($scope.$parent.formula,function(formula){
+							        formula_computing(formula,$scope.item.render_value,$scope.item,$scope.parentitem);
+							    });
+							});
+	//						$scope.users_selected = [{
+	//							"personCode": "1001",
+	//							"perFirstName": "Z",
+	//							"orgName": "总务部",
+	//							"perOrgCode": "001",
+	//							"state": false,
+	//							"personName": "张总"
+	//						}];
+							
+						}else{
+							$timeout(function(){//用于检测显示是否完全
+											$scope.item['inited'] = true;
+										},1);
+						}
+					}else{
+						$timeout(function(){//用于检测显示是否完全
+											$scope.item['inited'] = true;
+										},1);
+						if($scope.item.old_users_selected != undefined){
+							$scope.users_selected = $scope.item.old_users_selected;
+						}
+					}
+					
+
+				});
+				//          var timer = setInterval(function(){
+				//					if($scope.item.render_value){
+				//						var arr = [$scope.item.render_value]
+				////						http_service.post('personnel/search/personns', { "pdIds": arr }, function(res) {
+				////							$scope.users_selected = res.data.data;
+				////						});
+				//						$scope.users_selected = [{"code": "1001",
+				//										"firstName": "Z",
+				//										"group_name": "总务部",
+				//										"perOrgCode": "001",
+				//										"state": false,
+				//										"value": "张总"}];
+				//						$scope.departments_selected = [{"group_name":$scope.users_selected[0].group_name,"user_info":[$scope.users_selected[0]]}];
+				//						http_service.post('base/data/search/personData', {'perOrgCode': $scope.users_selected[0].perOrgCode}, function(res){
+				//                                      var users = res.data.data;
+				//                                      _.each(users, function(user){
+				//                                      	if(user.code != $scope.users_selected[0].code){
+				//                                      		_.extend(user, {'group_name': $scope.users_selected[0].group_name,"state":true});
+				//                                      	}else{
+				//                                      		_.extend(user, {'group_name': $scope.users_selected[0].group_name,"state":false});
+				//                                      	}
+				//                                          
+				//                                      });
+				//                                      if(users && users.length){
+				//                                          var grouped_users = _.groupBy(users, function(user){
+				////                                              return user.pdFirstName;
+				//												return user.firstName;
+				//                                          });
+				//                                          $scope.users_selecting_cache = grouped_users;
+				//                                      }else{
+				//                                          $scope.users_selecting_cache = {}
+				//                                      }
+				//                                      $scope.user_filter_func();
+				//                                  });
+				//						clearInterval(timer);
+				//					}
+				//				},10);
+			}
+		}
+	}])
+	.directive('orgSelector', ['$rootScope', 'http_service', '$compile', '$timeout', 'myServeice', function($rootScope, http_service, $compile, $timeout, myServeice) {
+		return {
+			restrict: 'EACM',
+			scope: {
+				item: '=',
+				parentitem: '=',
+				type: '='
+			},
+			template: '<div  class="user_element">' +
+				'<label>' +
+				'{{item.gcCpnAlias}}' +
+				'</label>' +
+				'<span name="user_el_content" gcColName="{{item.gcColName}}" org_selected="{{item.render_value}}">' +
+				'<span class="user_name"  ng-repeat="org in org_selected" >' +
+				'{{org.orgName}} <a ng-href="javascript:void(0)" ng-click="remove_org(org);"><i class="fa fa-times" aria-hidden="true" style="color:#fff;"></i></a>' +
+				'</span>' +
+				'&nbsp;&nbsp;<a class="btn_user_el_add_user" href="javascript:void(0);"  ng-click="select_org($event);" >选择组织机构</a>' +
+				'</span>' +
+				'</div>',
+			replace: true,
+			controller: ['$scope', '$element', function($scope, $element) {
+				$scope.org_selected = [];
+				
+				$scope.select_org = function(e) {
+					$('div[name="org_select_popup"]').remove();
+					var activeclass = "{true:'hr_name',false:'hr_name_selected'}[user.state]";
+					var pop_element = $('<div' +
+						' name="org_select_popup"' +
+						' class="org_select_popup col-md-12"' +
+						'onMouseOver ="$(this).draggable();event.stopPropagation();"' +
+						'>' +
+						'<div class="org_sel_form">' +
+						'<div class="row btn_cls org_sel_form_close">' +
+						'<a ng-href="javascript:void(0);"><i class="fa fa-times main_close" aria-hidden="true"  ng-click="close();"></i></a>' +
+						'</div>' +
+						'<div class="hr_tree left ztree" style="overflow:auto;">' + '</div>' +
+						'<div class="right">' +
+						'<div class="right_area">' +
+						'<div class="area_title selected_personnel">' +
+						'<label>已选人员</label>' +
+						'<span class="float_right">' +
+						'<a ng-href="javascript:void(0);" class="clear_selected_users" ng-click="clear_org();" ><i class="fa fa-trash-o" aria-hidden="true"></i></a>' +
+						'</span>' +
+						'</div>' +
+
+						'<div class="area_body">' +
+							'<ul>'+
+								'<li ng-repeat="org in org_selected">'+
+									'<div class="area_content">'+
+										'<a class="hr_name" ng-href="javascript:void(0);" href="javascript:void(0);">{{org.orgName}}</a>'+
+										'<button class="hr_name_addbtn" ng-click="remove_org(org);">-</button>'+
+									'</div>'+
+								'</li>'+
+							'</ul>'+
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>' +
+						'</div>');
+					$($element).append(pop_element);
+					$compile(pop_element)($scope);
+					$scope.init_tree();
+					var form_el_div = $($element).closest('div.sub_form_container').children('div').not('[name="journel_budget"]');
+					e.stopPropagation();
+				};
+			}],
+			link: function($scope, element, attrs) {
+				$scope.stop_prg = function(event) {
+					event.stopPropagation();
+				};
+
+				$scope.close = function() {
+					$('div[name="org_select_popup"]').remove();
+					myServeice.setpd($scope.parentitem, $scope.users_selected, $scope.type);
+					//				$scope.query_journel_budget();
+				};
+				//清除选择
+				$scope.clear_org = function(){
+					$scope.org_selected = [];
+					$scope.item.render_value = "";
+				}
+				//选择组织机构
+				$scope.add_org = function(orgName, orgCode) {
+					var org_selecting = {
+						"orgName":orgName,
+						"orgCode":orgCode
+					};
+					var push_flag = true;
+					
+					_.each($scope.org_selected,function(_org){
+						if(_org.orgCode == org_selecting.orgCode){
+							push_flag = false;
+						}
+					});
+					if(push_flag){
+						$scope.org_selected.push(org_selecting);
+						var selected_code = [];
+						_.each($scope.org_selected,function(_org){
+							selected_code.push(_org.orgCode);
+						});
+						$scope.item.render_value = selected_code.join(",");
+					}
+				};
+				$scope.remove_org = function(org) {
+					_.remove($scope.org_selected,function(n){
+						return n == org;
+					});
+					var selected_code = [];
+					_.each($scope.org_selected,function(_org){
+						selected_code.push(_org.orgCode);
+					});
+					$scope.item.render_value = selected_code.join(",");
+				};
+				function get_org(data,arr){
+					_.each(data,function(_data){
+						if(_data.orgCode == arr){
+							$scope.org_selected.push({
+								"orgName":_data.orgName,
+								"orgCode":_data.orgCode
+							})
+						}
+					});
+					if(data.child){
+						get_org(data.child,arr);
+					}
+				}
+				$scope.init_tree = function() {
+					http_service.post('base/data/search/institutionData', {}, function(res) {
+						if(res.data.opState){
+							console.log(111111111);
+							var hr_data_str = JSON.stringify(res.data.data).replace(/child/g, 'children').replace(/orgName/g, 'name');
+							var hr_data_json = JSON.parse(hr_data_str);
+//							if($scope.item.render_value && $scope.item.render_value != ""){
+//								var org_arr = $scope.item.render_value.split(",");
+//								_.each(org_arr,function(_arr){
+//									_.each(res.data.data,function(data){
+//										get_org(data.child,_arr);
+//									})
+//								})
+//							}
+							var setting = {
+								'callback': {
+									'onClick': function(event, treeId, treeNode) {
+										var orgName = treeNode.name;
+										var md_id = treeNode.orgCode;
+										if(treeNode.level > 0){
+											$scope.add_org(orgName,md_id);
+										}
+									}
+								}
+							};
+							console.log('1113');
+							$.fn.zTree.init($("div.hr_tree"), setting, hr_data_json);
+						}else{
+							$scope.$parent.$parent.$parent.$parent.$parent.terro(res.data.errMsg)
+						}
+					
+					});
+				}
+				$scope.init_org = function(){
+					http_service.post('base/data/search/institutionData', {}, function(res) {
+						console.log('666666');
+						if(res.data.opState){
+							if($scope.item.render_value && $scope.item.render_value != ""){
+								var org_arr = $scope.item.render_value.split(",");
+								_.each(org_arr,function(_arr){
+									_.each(res.data.data,function(data){
+										get_org(data.child,_arr);
+									})
+								})
+							}
+						}
+					});
+				};
+				$scope.init_org();
+			}
+		}
+	}])
+	.directive('savedForm', ['$rootScope', 'http_service', '$location', '$compile', 'myServeice', '$timeout','$interval', function($rootScope, http_service, $location, $compile, myServeice, $timeout,$interval) {
+		return {
+			restrict: 'EACM',
+			templateUrl: './static/templates/saved_form.html?v=201801031718',
+			scope: {
+				business: '=',
+				type: '=',
+				templateid: '=',
+				action: '=',
+				isbill: '@',
+				billid: '=',
+				edit: '=',
+				btnflag: "=",
+				unedit:"=",
+				isguide:"="
+			},
+			compile: function() {
+				return {
+					pre: function($scope, element, attrs, controller) {
+						/*
+						http_service.get('http://apis.map.qq.com/ws/district/v1/list?key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77', function(res){
+						});
+						*/
+						if($rootScope.update_speical != undefined){//系统变量公式监听初始化
+							$rootScope.update_speical();
+						}
+						$rootScope.update_speical = undefined;
+						if($rootScope.update_speical_formula != undefined){//前端公式监听初始化
+							$rootScope.update_speical_formula();
+						}
+						$rootScope.update_speical_formula = undefined;
+						$rootScope.save_form_uid = _.uuid();
+						$scope.sys_num_check = 0;
+						$rootScope.formula_num = 0;
+						$rootScope.formula_num_id = [];//查询详情时初始化需要进行请求的前端公式 计数变量
+						$rootScope.close_lock = false;//初始化关闭状态
+						$scope.sysSearchFinsh = undefined;
+						$rootScope.stepCode = undefined// 初始化流程状态
+						$rootScope.version = undefined//初始化版本号
+						$rootScope.lock = undefined//锁头初始化
+						$scope.maindata_err_sys = [];
+						myServeice.setpd("", "", "");
+						$scope.test = "disabled";
+						$scope.cost_err = [];
+						$rootScope.budget_selected = "";//初始化选择的预算 的单号
+						$rootScope.expend_number_info = "";//初始化选择的申请 的单号
+						$scope.tap_type = 10;//默认显示子表单选项卡
+						//切换选项卡
+						$scope.toggle_tap = function(tap_type){
+							$scope.tap_type = tap_type;
+						}
+						//去除空白
+						$scope.form_show = function(item){
+							var show_flag = true;
+							if(item.gcCpnType == 10 && item.gcCpnType != $scope.tap_type){
+								show_flag = false;
+							}
+							if(item.gcCpnType == 17 && item.gcCpnType != $scope.tap_type){
+								show_flag = false;
+							}
+							return show_flag;
+						}
+						//数据校验
+						$scope.check_data = function(edit){
+//							if(edit){
+//								$scope.$parent.checkdata();
+//							}
+						}
+						//改变字的颜色
+						$scope.changclass = function(item,_item){
+							var thisval;
+							var classname;
+							_.each(item.money,function(money){
+								if(money.jp_cd_code == _item.gcMeCode){
+									thisval = money.jp_amount;
+									if(parseFloat(thisval) > parseFloat(_item.render_value) || _item.render_value == ""){
+										classname =  "jp_normal";
+									}else{
+										classname = "jp_active";
+									}
+								}
+							})
+							return classname;
+						}
+						//绑定input的value值
+						$scope.input_change = function(item,event){
+							item['render_value'] = $(event).val();
+						}
+						$scope.enable_templates = function(business, type, guId, action) {
+							http_service.post('template/cpn/search', { "gcTempId": guId }, function(res) {
+								var templates = res.data.data;
+								res.data.data.cache_id = res.data.data.guTempType;
+								var tempdata = _.extend(res.data.data,{'gcStart':1})
+								if(templates) {
+									http_service.post('form/save', tempdata, function(res) {
+										if(res.data.opState) {
+										$rootScope.swalsuccess({
+												"text": "模板启用成功!"
+											}, function() {
+												$timeout(function() {
+													$scope.redirect_to_args('budget_froms', type);
+												}, 1)
+											});
+										} else {
+											$rootScope.swalerror({ "text": "模板启用失败!" })
+										}
+									})
+								}
+							});
+						}
+						//按公式计算结果
+						function count_by_formula(formula,code_arr,child_num){
+							var formula_str;
+							if(child_num != undefined){
+								var sum = 0;
+								var is_count = false;
+								for(i=0;i<child_num;i++){
+									formula_str = formula.mCount;
+									_.each(code_arr,function(code,j){
+										var restr = "{"+(j+1)+"}";
+										if(_.isArray(code.value)){
+											var val_code = code.value[i];
+											if(_.isNumber(val_code)){
+												formula_str = formula_str.replace(restr,val_code);
+											}else{
+												if(val_code != 0 && val_code !== "" && val_code != undefined){
+													if(val_code.indexOf("-") != -1){
+														var datestr = "'"+val_code+"'";
+														formula_str = formula_str.replace(restr,datestr);
+													}else{
+														formula_str = formula_str.replace(restr,code.value[i]);
+													}
+												}else{
+													formula_str = formula_str.replace(restr,code.value[i]);
+												}
+												
+											}
+											
+										}else{
+											var val_code = code.value;
+											if(_.isNumber(val_code)){
+												formula_str = formula_str.replace(restr,code.value);
+											}else{
+												if(val_code != 0 && val_code !== "" && val_code != undefined){
+													if(val_code.indexOf("-") != -1){
+														var datestr = "'"+code.value+"'";
+														formula_str = formula_str.replace(restr,datestr);
+													}else{
+														formula_str = formula_str.replace(restr,code.value);
+													}
+												}else{
+													formula_str = formula_str.replace(restr,code.value);
+												}
+											}
+										}
+									})
+									if(formula_str.indexOf("{") != -1){
+										sum = NaN;
+									}else{
+										if(formula.mResultFromat){
+											var formula_result = eval(formula_str);
+											var val = formula_result;
+											var result_str = formula.mResultFromat.replace("{val}","("+formula_result+")");
+											if(_.isNaN(eval(result_str)) == false){
+												is_count = true;
+												sum += eval(result_str);
+											}
+										}else{
+											if(_.isNaN(eval(formula_str)) == false){
+												is_count = true;
+												sum += eval(formula_str);
+											}
+										}
+//										if(formula_str.indexOf("toFixed") != -1){
+//											sum += Number(eval(formula_str));
+//										}else{
+//											sum += eval(formula_str);
+//										}
+									}
+								}
+								if(is_count){
+									if(_.isNumber(sum)){
+										return sum;
+									}else{
+										sum = sum.substring(1);
+										return sum;
+									}
+								}else{
+									return NaN;
+								}
+								
+							}else{
+								formula_str = formula.mCount;
+								_.each(code_arr,function(code,i){
+									var restr = "{"+(i+1)+"}";
+									if(code.isDate){
+										var datestr = "'"+code.value+"'";
+										formula_str = formula_str.replace(restr,datestr);
+									}else{
+										formula_str = formula_str.replace(restr,code.value);
+									}
+									
+								})
+								if(formula_str.indexOf("{") != -1){
+									return NaN
+								}else{
+									if(formula.mResultFromat){
+										var formula_result = eval(formula_str);
+										var result_str = formula.mResultFromat.replace("{val}","("+formula_result+")");
+										return eval(result_str);
+									}else{
+										return eval(formula_str);
+									}
+								}
+								
+							}
+						}
+						//公式计算
+						function formula_computing(formula,form_items){
+							if($scope.stepCode == 30 || $scope.stepCode == 10){// 已完成/审核中 表单  不计算
+								return false;
+							}
+							//判断公式应用于哪个表单
+//							var travelType = formula.travelType;//获取公对应的表单
+//							var account_flag =false;//控制是否计算
+//							if(travelType == $scope.type){
+//								account_flag = true;
+//							}else if(travelType == 0){
+//								account_flag = true;
+//							}
+//							if(account_flag == false){
+//								return false;
+//							}
+							//解析公式
+							var code_arr = [];
+							var target_code;
+							_.each(formula.child,function(_formula,i){
+								
+								if(i == 0){//获取被关联控件的主数据code
+									target_code = _formula['pMdCode'];
+								}else{
+									code_arr.push(_formula);
+								}
+							});
+							//排除既为结果 又为条件的公式
+//							if(item.gcMeCode == target_code){
+//								return false;
+//							}
+							_.each($scope.form_items,function(item){
+								if(item.gcCpnType != 10 && item.gcCpnType != 17){
+									if(item.gcMeCode == target_code){
+										if(item.gcCpnType == 12){//人员关联公式 不计算
+											return false;
+										}
+										var child_num,child_num_pay;
+										var is_normal_child = true;//普通子表单
+										var is_select = false;
+										_.each(code_arr,function(code){
+											var is_child = true;
+											_.each(form_items,function(_item){
+												if(code.pMdCode == _item.gcMeCode){
+													is_child = false;
+													if(_item.render_value != undefined && _item.render_value !== ""){
+														if(_item.gcCpnType == 7){
+															_.extend(code,{"value":Number(_item.render_value)});
+														}else if(_item.gcCpnType == 5){
+															_.extend(code,{"value":_item.render_value,"isDate":true});
+														}
+														else if((_item.gcCpnType == 6 || _item.gcCpnType == 12) && code_arr.length == 1){
+															is_select = true;
+														}
+														else{
+															_.extend(code,{"value":_item.render_value});
+														}
+													}else{
+														if(_item.gcCpnType == 7){
+															_.extend(code,{"value":0});
+														}else if(_item.gcCpnType == 5){
+															_.extend(code,{"value":code.pDefVal,"isDate":true});
+														}else if(_item.gcCpnType == 6){
+//															is_select = true;
+														}else{
+															_.extend(code,{"value":""});
+														}
+													}
+												}
+											})
+											if(is_child){
+												child_num = 0;
+												child_num_pay = 0;
+												var all_sum = [];
+												var is_Number = false;
+												_.each(form_items,function(_forms){
+													if(_forms.gcCpnType == 10){
+														child_num++;
+														_.each(_forms.child,function(_cd){
+															if(_cd.gcMeCode == code.pMdCode){
+																if((_cd.gcCpnType == 6 || _cd.gcCpnType == 12) && code_arr.length == 1){
+																	is_select = true;
+																}
+																if(_cd.render_value != undefined && _cd.render_value !== ""){
+																	if(_cd.gcCpnType == 7){
+																		is_Number = true;
+																		all_sum.push(Number(_cd.render_value));
+																	}else{
+																		all_sum.push(_cd.render_value);
+																	}
+																}else{
+																	if(_cd.gcCpnType == 7){
+																		is_Number = true;
+																		all_sum.push(0);
+																	}else{
+																		all_sum.push(code.pDefVal);
+																	}
+																}
+															}
+														});
+													}else if(_forms.gcCpnType == 17){
+														child_num_pay++;
+														_.each(_forms.child,function(_cd){
+															if(_cd.gcMeCode == code.pMdCode){
+																is_normal_child = false;
+																if((_cd.gcCpnType == 6 || _cd.gcCpnType == 12) && code_arr.length == 1){
+																	is_select = true;
+																}
+																if(_cd.render_value != undefined && _cd.render_value !== ""){
+																	if(_cd.gcCpnType == 7){
+																		is_Number = true;
+																		all_sum.push(Number(_cd.render_value));
+																	}else{
+																		all_sum.push(_cd.render_value);
+																	}
+																}else{
+																	if(_cd.gcCpnType == 7){
+																		is_Number = true;
+																		all_sum.push(0);
+																	}else{
+																		all_sum.push(code.pDefVal);
+																	}
+																}
+															}
+														});
+													}
+												});
+												if(is_Number){
+													_.extend(code,{"value":all_sum,"isNumber":true});
+												}else{
+													_.extend(code,{"value":all_sum});
+												}
+											}
+										});
+										//计算结果
+										var goal;
+										if(is_select == false){
+											if(child_num != undefined && child_num_pay != undefined){
+												if(is_normal_child){
+													goal = count_by_formula(formula,code_arr,child_num);
+												}else{
+													goal = count_by_formula(formula,code_arr,child_num_pay);
+												}
+											
+											}else{
+												goal = count_by_formula(formula,code_arr);
+											}
+											if(_.isNaN(goal) == false){
+												$timeout(function(){
+													item.render_value = goal;
+													$scope.change_apmonut(item);
+												},1)
+											}
+											
+										}
+									}
+								}else{
+									_.each(item.child,function(cd){
+										if(cd.gcMeCode == target_code){
+											if(cd.gcCpnType == 12){//人员关联公式 不计算
+												return false;
+											}
+											var is_select = false;
+											_.each(code_arr,function(code){
+												var in_child = false;
+												_.each(item.child,function(_cd){
+													if(code.pMdCode == _cd.gcMeCode){
+														in_child = true;
+														if(_cd.render_value != undefined && _cd.render_value !== ""){
+															if(_cd.gcCpnType == 7){
+																_.extend(code,{"value":Number(_cd.render_value)});
+															}else if(_cd.gcCpnType == 5){
+																_.extend(code,{"value":_cd.render_value,"isDate":true});
+															}
+															else if((_cd.gcCpnType == 6 || _cd.gcCpnType == 12) && code_arr.length == 1){
+																is_select = true;
+															}
+															else{
+																_.extend(code,{"value":_cd.render_value});
+															}
+														}else{
+															if(_cd.gcCpnType == 7){
+																_.extend(code,{"value":0});
+															}else if(_cd.gcCpnType == 5){
+																_.extend(code,{"value":code.pDefVal,"isDate":true});
+															}else if((_cd.gcCpnType == 6 || _cd.gcCpnType == 12) && code_arr.length == 1){
+																is_select = true;
+															}else{
+																_.extend(code,{"value":""});
+															}
+														}
+													}
+												});
+												if(in_child == false){
+													_.each(form_items,function(_form){
+														if(_form.gcMeCode == code.pMdCode){
+															if(_form.render_value != undefined && _form.render_value !== ""){
+																if(_form.gcCpnType == 7){
+																	_.extend(code,{"value":Number(_form.render_value)});
+																}else if(_form.gcCpnType == 5){
+																	_.extend(code,{"value":_form.render_value,"isDate":true});
+																}
+																else if((_form.gcCpnType == 6 || _form.gcCpnType == 12) && code_arr.length == 1){
+																	is_select = true;
+																}
+																else{
+																	_.extend(code,{"value":_form.render_value});
+																}
+																
+															}else{
+																if(_form.gcCpnType == 7){
+																	_.extend(code,{"value":0});
+																}else if(_form.gcCpnType == 5){
+																	_.extend(code,{"value":code.pDefVal,"isDate":true});
+																}
+																else if((_form.gcCpnType == 6 || _form.gcCpnType == 12) && code_arr.length == 1){
+																	is_select = true;
+																}
+																else{
+																	_.extend(code,{"value":""});
+																}
+															}
+														}
+													});
+												}
+											});
+											
+											//计算结果
+											if(is_select == false){
+												var goal = count_by_formula(formula,code_arr);
+												if(_.isNaN(goal) == false){
+//													$timeout(function(){
+														cd.render_value = goal;
+														$scope.change_apmonut(cd,item);
+//													},10)
+												}
+											}
+										}
+									})
+								}
+								
+							})
+						}
+						$scope.formula_computing = function(formula,form_items){
+							formula_computing(formula,form_items);
+						}
+						//子表单按时间排序
+							function sort_fun(a,b){
+								console.log('-------1111------');
+								console.log(a);
+								console.log(b);
+								if(a.time_type.length > 10 && b.time_type.length > 10){
+									console.log('----------:if');
+									return a.time - b.time;
+								}else if(a.time_type.substring(0,10) == b.time_type.substring(0,10)){
+									console.log('--------------:else if');
+									var from_code,to_code;
+									_.each(filed,function(_filed){
+										switch(_filed.busCode){
+											case "From":
+												from_code = _filed.mdCode;
+											break;
+											case "To":
+												to_code = _filed.mdCode;
+											break;
+										}
+									})
+									var a_from,a_to,b_from,b_to;
+									_.each(a.jour.child,function(cd){
+										console.log('each1');
+										console.log('cd.gcMeCode'+cd.gcMeCode);
+										console.log('from_code'+from_code);
+										if(cd.gcMeCode == from_code){
+											a_from = cd.render_value;
+										}else if(cd.gcMeCode == to_code){
+											a_to = cd.render_value;
+										}
+										console.log('a_from'+a_from);
+										console.log('a_to'+a_to);
+									})
+									_.each(b.jour.child,function(cd){
+										console.log('each2');
+										console.log('cd.gcMeCode'+cd.gcMeCode);
+										console.log('from_code'+from_code);
+										if(cd.gcMeCode == from_code){
+											b_from = cd.render_value;
+										}else if(cd.gcMeCode == to_code){
+											b_to = cd.render_value;
+										}
+										console.log('b_from'+b_from);
+										console.log('b_to'+b_to);
+									})
+									if(a_from != "" && a_from != undefined && b_from != "" && b_from != undefined && a_to != "" && a_to != undefined && b_to != "" && b_to != undefined){
+										if(a_from == b_to){
+											return -1;
+										}else if(a_to == b_from){
+											return 1;
+										}else{
+											return 0;
+										}
+									}else{
+										return 0;
+									}
+								}else{
+									console.log('--------------:else');
+									return a.time - b.time;
+								}
+							}
+							function sort_bytime(item){
+								var formDate,toDate;
+								_.each(filed,function(_filed){
+									switch (_filed.busCode){
+										case 'FromDate':
+											formDate = _filed.mdCode;
+										break;
+										case 'ToDate':
+											toDate = _filed.mdCode;
+										break;
+									}
+								});
+								
+								
+								
+								if(item != undefined){
+									if(item.gcMeCode != formDate && item.gcMeCode != toDate){
+										return false;
+									}
+								}
+								var new_jour = [];
+								var oder_index = [];
+								console.log('-------1114------');
+								console.log($scope.form_items);
+								_.each($scope.form_items,function(form,i){
+									if(form.gcCpnType == 10){
+										var date_flag = true;
+										_.each(form.child,function(cd){
+											var sort_time;
+											if(cd.gcMeCode == formDate){
+												console.log('----------cd.gcMeCode:'+cd.gcMeCode);
+												console.log('----------formDate:'+formDate);
+												date_flag = false;
+												sort_time = $rootScope.getNewDate(cd.render_value);
+												if(cd.render_value == ''){
+													sort_time = undefined;
+												}
+												new_jour.push({'jour':_.cloneDeep(form),'time':sort_time,"time_type":cd.render_value});
+												oder_index.push(i);
+											}
+										})
+										if(date_flag){//没有出发日期则找到达日期
+											_.each(form.child,function(cd){
+												var sort_time;
+												console.log('cd.render_value:'+cd.render_value);
+												if(cd.gcMeCode == toDate){
+													sort_time = $rootScope.getNewDate(cd.render_value);
+													console.log('sort_time:'+sort_time);
+													if(cd.render_value == ''){
+														sort_time = undefined;
+													}
+													console.log(new_jour);
+													new_jour.push({'jour':_.cloneDeep(form),'time':sort_time,"time_type":cd.render_value});
+													console.log(oder_index);
+													oder_index.push(i);
+												}
+											});
+										}
+									}
+								});
+								new_jour.sort(sort_fun);
+								console.log('-------1117------');
+								console.log(new_jour);
+								$rootScope.new_jour = new_jour;
+//								new_jour = _.sortBy(new_jour,function(o){
+//									return o.time;
+//								})
+								$timeout(function(){
+									
+									_.each(oder_index,function(index,k){
+										$scope.form_items[index] = new_jour[k].jour;
+									})
+									$scope.count_number()//计算子表单序号
+									show_other_cost()//其它费用提示(必须在排序后)
+								},1)
+							}
+							$rootScope.sort_bytime = function(item){
+								sort_bytime(item);
+							}
+							
+							function sys_formula_data(condition_code,target_ischild,child_item){//递归 从控件上取值
+								if(target_ischild){
+									_.each($scope.form_items,function(form){
+										if(form == child_item){
+											_.each(condition_code,function(cond){
+												if(cond.joinMathId && cond.systemMathEntity){
+													return sys_formula_data(cond.systemMathEntity.child,target_ischild,child_item);
+												}else{
+													_.each(form.child,function(cd){
+														if(cd.gcMeCode == cond.mdCode){
+															cond['val'] = cd.render_value;
+														}
+													})
+												}
+											});
+											_.each(condition_code,function(cond){
+												if(cond.joinMathId && cond.systemMathEntity){
+													return sys_formula_data(cond.systemMathEntity.child,target_ischild,child_item);
+												}else{
+													_.each($scope.form_items,function(_form){
+														if(_form.gcMeCode == cond.mdCode){
+															cond['val'] = _form.render_value;
+														}
+													})
+												}
+											});
+										}
+									})
+								}else{
+									_.each(condition_code,function(cond){
+										if(cond.joinMathId && cond.systemMathEntity){
+											return sys_formula_data(cond.systemMathEntity.child,target_ischild,child_item);
+										}else{
+											_.each($scope.form_items,function(_form){
+												if(_form.gcMeCode == cond.mdCode){
+													cond['val'] = _form.render_value;
+												}
+											})
+										}
+									});
+								}
+								return condition_code;
+							}
+							function sys_formula_post(condition_code,post_data){//递归获得 请求参数
+								_.each(condition_code,function(cond){
+									if(cond.joinMathId && cond.systemMathEntity){
+										post_data.values.push({
+											'countCpnMath':{"mathId":cond.joinMathId,"values":[]}
+										});
+										return sys_formula_post(cond.systemMathEntity.child,post_data.values[(post_data.values.length - 1)].countCpnMath);
+									}else{
+										if(cond.val != undefined && _.trim(cond.val) != ''){
+											post_data.values.push({"mdCode":cond.mdCode,"meVal":cond.val});
+										}
+									}
+								})
+								return post_data;
+							}
+							function sys_formula_computing(sys_formula,child_item,isfrist){
+								if($scope.stepCode == 30 || $scope.stepCode == 10){// 已完成/审核中  表单  不计算
+									return false;
+								}
+								if($scope.sysSearchFinsh == undefined && $scope.billid){
+									return false;
+								}
+								if($scope.sys_begin != undefined){
+									$scope.sys_begin++;
+									if($scope.sys_num_check <= $scope.sys_begin){
+										if(isfrist != true && $scope.edit != true){//编辑时 不拦截
+											return false;
+										}
+									}
+								}
+								function sys_formula_check(post_data){//检查请求参数 有无空值
+									if(post_data.values.length == 0){
+										post_flag = false
+									}
+								_.each(post_data.values,function(_data){
+									if(_data.countCpnMath){
+										return sys_formula_check(_data.countCpnMath);
+									}else{
+										if(_data.meVal == undefined || _.trim(_data) == ''){
+											post_flag = false
+										}
+									}
+								});
+							}
+								
+								
+								var condition_code = [];
+								_.each(sys_formula.formula.child,function(_formula){
+									condition_code.push(_formula);
+								});
+								var target_ischild = true;
+								var target_index;
+								if(child_item){
+									if(child_item.num == undefined || child_item.num == ""){
+										target_index = 0;
+									}else{
+										target_index = child_item.num - 1;
+									}
+								}
+								_.each($scope.form_items,function(form){
+									if(sys_formula.target == form.gcMeCode){
+										target_ischild = false;
+									}
+								});
+								condition_code = sys_formula_data(condition_code,target_ischild,child_item);
+//								if(target_ischild){
+//									_.each($scope.form_items,function(form){
+//										if(form == child_item){
+//											_.each(condition_code,function(cond){
+//												_.each(form.child,function(cd){
+//													if(cd.gcMeCode == cond.mdCode){
+//														cond['val'] = cd.render_value;
+//													}
+//												})
+//											});
+//											_.each(condition_code,function(cond){
+//												_.each($scope.form_items,function(_form){
+//													if(_form.gcMeCode == cond.mdCode){
+//														cond['val'] = _form.render_value;
+//													}
+//												})
+//											});
+//										}
+//									})
+//								}else{
+//									_.each(condition_code,function(cond){
+//										_.each($scope.form_items,function(_form){
+//											if(_form.gcMeCode == cond.mdCode){
+//												cond['val'] = _form.render_value;
+//											}
+//										})
+//									});
+//								}
+								
+								var post_data = {
+									"mathId":sys_formula.mathId,
+									"values":[]
+								}
+								var post_flag = true;
+//								_.each(condition_code,function(cond){
+//									if(cond.val){
+//										post_data.values.push({"mdCode":cond.mdCode,"meVal":cond.val});
+//									}else{
+//										post_flag = false;
+//									}
+//								})
+								sys_formula_post(condition_code,post_data);
+								sys_formula_check(post_data);
+								
+								var useful_length = 0;
+								
+								_.each(sys_formula.formula.child,function(fcd){
+									if(fcd.mdCode != undefined){
+										_.each($scope.form_items,function(form){
+											if(form.gcMeCode == fcd.mdCode){
+												useful_length++;
+											}
+										});
+										if($scope.form_jour && $scope.form_jour.child){
+											_.each($scope.form_jour.child,function(jour){
+												if(jour.gcMeCode == fcd.mdCode){
+													useful_length++;
+												}
+											});
+										}
+										if($scope.form_pay && $scope.form_pay.child){
+											_.each($scope.form_pay.child,function(pay){
+												if(pay.gcMeCode == fcd.mdCode){
+													useful_length++;
+												}
+											})
+										}
+									}else{
+										useful_length++;
+									}
+								})
+								if(sys_formula.mathId == 38){
+//									
+//									
+//									
+								}
+								
+								
+								
+								if(post_flag && useful_length == post_data.values.length){
+									//改变传值参数 开始
+									var post_data_real = getquery_pd();
+									if(target_ischild){
+										_.extend(post_data_real,{"index":target_index,"mathId":sys_formula.mathId});
+									}else{
+										var has_jour = false;
+										_.each($scope.form_items,function(form){
+											if(form.gcCpnType == 10){
+												has_jour = true;
+											}
+										})
+										if(has_jour == false){
+											var empty_jour = _.cloneDeep($scope.form_jour);
+											_.each(empty_jour.child,function(ej){
+												ej.render_value = "";
+											})
+											post_data_real = getquery_pd(empty_jour);
+											_.extend(post_data_real,{"mathId":sys_formula.mathId});
+										}else{
+											_.extend(post_data_real,{"mathId":sys_formula.mathId});
+										}
+									}
+									//改变传值参数 结束
+									
+									http_service.post("form/constCpn",post_data_real,function(res){
+//										if(res.data.data.defErr == undefined){
+											if(target_ischild){
+												_.each($scope.form_items,function(form){
+													if(form == child_item){
+														_.each(form.child,function(cd){
+															if(cd.gcMeCode == sys_formula.target && res.data.data.data != "NaN"){
+																if(res.data.data.data != undefined){
+																	cd['sys_value'] = res.data.data.data;
+																}else{
+																	cd['sys_value'] = "";
+																}
+																if(cd.gcEditFlag != 1){// 只有不可编辑或为空时  才填到控件中去
+																	cd.render_value = res.data.data.data;
+																}else if(cd.render_value == undefined || _.trim(cd.render_value) == ""){
+																	cd.render_value = res.data.data.data;
+																}
+																$scope.$watch(function(){
+																	return cd.render_value;
+																},function(){
+//																	
+																	if(cd.sys_value != "" && cd.sys_value != undefined && cd.sys_value != cd.render_value){
+																		cd['sys_red'] = true;
+																	}else{
+																		cd['sys_red'] = false;
+																	}
+																})
+																$scope.change_apmonut(cd);
+															}
+														})
+													}
+												})
+											}else{
+												_.each($scope.form_items,function(form){
+													if(form.gcMeCode == sys_formula.target && res.data.data.data != "NaN"){
+														if(res.data.data.data != undefined){
+															form['sys_value'] = res.data.data.data;
+														}else{
+															form['sys_value'] = "";
+														}
+														if(form.gcEditFlag != 1) { // 只有不可编辑或为空时  才填到控件中去
+															form.render_value = res.data.data.data;
+														} else if(form.render_value == undefined || _.trim(form.render_value) == "") {
+															form.render_value = res.data.data.data;
+														}
+														$scope.$watch(function() {
+															return form.render_value;
+														}, function() {
+															if(form.sys_value != "" && form.sys_value != undefined && form.sys_value != form.render_value) {
+																form['sys_red'] = true;
+															} else {
+																form['sys_red'] = false;
+															}
+														})
+														$scope.change_apmonut(form);
+													}
+												})
+											}
+										if(res.data.data.defErr != undefined){
+											
+											$scope.maindata_isright_sys = false;
+											if($scope.maindata_err_sys == undefined){
+												$scope.maindata_err_sys = [];
+												$scope.maindata_err_sys.push(res.data.data.defErr);
+											}else{
+												$scope.maindata_err_sys.push(res.data.data.defErr);
+											}
+										}
+										if(isfrist){
+											$scope.sys_num++;
+										}
+									},false,function(){
+										if(isfrist){
+											$scope.sys_num++;
+										}
+									})
+								}else{
+									if(isfrist){
+										$scope.sys_num++;
+									}
+								}
+							}
+							$rootScope.sys_formula_computing = function(sys_formula,child_item){
+								sys_formula_computing(sys_formula,child_item);
+							}
+						//绑定控件  计算总金额
+						$rootScope.change_apmonut = function(item){
+							$scope.change_apmonut(item)
+						}
+							$scope.change_apmonut = function(item,child_item){
+								eachMoney_check();//费用类型 金额验证
+								$scope.bill_data_check();//获取详情数据后  验证
+								
+
+				                
+					            //匹配控件 并进行公式计算
+					            _.each($scope.formula,function(formula){
+					            	_.each(formula.child,function(_formula,i){
+					            		if(i > 0){
+					            			if(_formula.pMdCode == item.gcMeCode){
+					            				formula_computing(formula,$scope.form_items);
+						            		}
+					            		}
+					            		
+					            	});
+					            })
+					            
+					            
+					            
+					            //匹配控件 并进行系统变量公式计算
+					            _.each($scope.sys_formula,function(sformula){
+//					            	_.each(sformula.formula.child,function(_formula){
+										//递归检查 是否进行系统变量公式计算
+							            function sys_count_flag(sformula){
+							            	_.each(sformula.child,function(_formula){
+							            		if(_formula.joinMathId){
+							            			return sys_count_flag(_formula.systemMathEntity,sys_flag);
+							            		}else{
+							            			if(_formula.mdCode == item.gcMeCode){
+								            			sys_flag = true;
+									            	}
+							            		}
+							            	});
+							            }
+										var sys_flag = false;
+										sys_count_flag(sformula.formula);
+//										
+//										
+//										
+					            		if(sys_flag){
+					            			if(child_item){
+					            				sys_formula_computing(sformula,child_item);
+					            			}else{
+					            				sys_formula_computing(sformula);
+					            			}
+						            	}
+					            		
+//					            	});
+					            })
+					            //子表单按时间排序
+					            if(item.gcCpnType != 5){
+					            	sort_bytime(item);
+					            }
+					            show_other_cost()//其它费用提示(必须在排序后)
+							}
+//						})
+						
+						//显示费用类型错误信息
+						function cost_err_check(){
+							$scope.show_cost_err = false;
+	                            var cost_err = [];
+	                            _.each($scope.form_items,function(form){
+	                            	if(form.gcCpnType == 10 && form.eachMoney && form.eachMoney.length > 0){
+	                            		cost_err.journame = form.gcCpnAlias + form.num;
+	                            		_.each(form.eachMoney,function(money){
+		                            		if(money.errorMsg.length != 0){
+		                            			$scope.show_cost_err = true;
+		                            			_.each(money.errorMsg,function(msg){
+		                            				var normName = [];
+			                            			_.each(msg.normCode,function(_norm){
+			                            				normName.push(_norm.name);
+			                            			});
+			                            			var normStr = normName.join(",");
+			                            			if(form.num){
+			                            				cost_err.push({
+				                            				"journame":form.gcCpnAlias + form.num,
+				                            				"errinfo":"费用类型--"+msg.costTypeName+",报销方式--"+msg.expendWayName+",错误提示--"+normStr+msg.errMsg
+				                            			});
+			                            			}else{
+			                            				cost_err.push({
+				                            				"journame":form.gcCpnAlias,
+				                            				"errinfo":"费用类型--"+msg.costTypeName+",报销方式--"+msg.expendWayName+",错误提示--"+normStr+msg.errMsg
+				                            			});
+			                            			}
+			                            			
+		                            			})
+		                            		}
+		                            	})
+	                            	}
+	                            	
+	                            })
+	                        $scope.cost_err = cost_err;
+	                        $scope.$parent.cost_err = cost_err;
+						}
+						$rootScope.query_journel_budget = function(formtype,callback,isfirst){
+							$scope.query_journel_budget(formtype,callback,isfirst);
+						}
+						function getquery_pd(empty_jour){
+							var pd;
+							if($scope.$parent.exCouldNumber){
+								pd = {
+									"orderCode":$scope.$parent.exCouldNumber,
+									"joumeyInfo": []
+								}
+							}else{
+								pd = {
+									"joumeyInfo": []
+								}
+							}
+							
+							var mdtype_arr = [];
+							_.each($scope.form_items,function(_item){
+								if(_item.gcMeCode != undefined){//计算费用表单信息全部传递
+									if(_item['bhValue'] != undefined){
+										mdtype_arr.push({
+												"meCode": _item['gcElIden'],
+												"mdCode": _item['gcMeCode'],
+												"meVal": _item['bhValue'] 
+										});
+									}else{
+										mdtype_arr.push({
+												"meCode": _item['gcElIden'],
+												"mdCode": _item['gcMeCode'],
+												"meVal": _item['render_value'] ? _item['render_value'] : _item['gcDefVal']
+										});
+									}
+								}
+							})
+							if(empty_jour){
+								var pdarr = {
+										"journeyId":"",
+										"journeyInfo":[]
+									};
+									var beginTime,endTime;
+										_.each(filed,function(_filed){
+											switch(_filed.busCode){
+												case "FromDate":
+													beginTime = _filed.mdCode;
+												break;
+												case "ToDate":
+													endTime = _filed.mdCode;
+												break;
+											}
+										})
+										_.each(empty_jour.child, function(child) {
+											if(child.gcCpnType != 9) { //过滤掉分割线
+												if(child['bhValue'] != undefined){
+													pdarr.journeyInfo.push({
+														"meCode": child['gcElIden'],
+														"mdCode": child['gcMeCode'],
+														"meVal": child['bhValue']
+													});
+												}else{
+													pdarr.journeyInfo.push({
+														"meCode": child['gcElIden'],
+														"mdCode": child['gcMeCode'],
+														"meVal": child['render_value']!=undefined  ? child['render_value'] : child['gcDefVal']
+													});
+												}
+												
+												if(child.gcMeCode == beginTime){
+													beginTime = child.render_value;
+												}
+												if(child.gcMeCode == endTime){
+													endTime = child.render_value;
+												}
+											}
+										});
+										_.each(mdtype_arr,function(madtype){
+											pdarr.journeyInfo.push(madtype);
+										})
+										
+										if(empty_jour.aj_id){
+											pdarr.journeyId = empty_jour.aj_id;
+										}
+										if(empty_jour.ej_id){
+											pdarr.journeyId = empty_jour.ej_id;
+										}
+	                                    if(empty_jour.ej_days != undefined){
+	                                    	_.extend(pdarr,{'journeyDays':empty_jour.ej_days});
+	//										pdarr['journeyDays'] = _item.ej_days;
+										}
+	                                    if(empty_jour.ej_hours != undefined){
+	                                    	_.extend(pdarr,{'journeyTime':empty_jour.ej_hours});
+	//										pdarr['journeyTime'] = _item.ej_hours;
+										}
+	                                    if(empty_jour.ej_kms != undefined){
+	                                    	_.extend(pdarr,{'journeyKM':empty_jour.ej_kms});
+	//										pdarr['journeyKM'] = _item.ej_kms;
+										}
+	//                                  if(_item.span_night != undefined){
+	//                                  	_.extend(pdarr,{'spanNight':_item.span_night});
+	//									}
+										if(endTime!=undefined&&endTime!==""&&beginTime!=undefined&&beginTime!==""){
+											var span_night = ($rootScope.getNewDate(endTime) - $rootScope.getNewDate(beginTime))/(24*60*60*1000);
+											_.extend(pdarr,{'spanNight':span_night});
+										}
+										pd.joumeyInfo.push(pdarr);
+							}else{
+								_.each(_.cloneDeep($scope.form_items),function(_item){
+									var pdarr = {
+										"journeyId":"",
+										"journeyInfo":[]
+									};
+									if(_item.gcCpnType == 10){
+										var beginTime,endTime;
+										_.each(filed,function(_filed){
+											switch(_filed.busCode){
+												case "FromDate":
+													beginTime = _filed.mdCode;
+												break;
+												case "ToDate":
+													endTime = _filed.mdCode;
+												break;
+											}
+										})
+										_.each(_item.child, function(child) {
+											if(child.gcCpnType != 9) { //过滤掉分割线
+												if(child['bhValue'] != undefined){
+													pdarr.journeyInfo.push({
+														"meCode": child['gcElIden'],
+														"mdCode": child['gcMeCode'],
+														"meVal": child['bhValue']
+													});
+												}else{
+													pdarr.journeyInfo.push({
+														"meCode": child['gcElIden'],
+														"mdCode": child['gcMeCode'],
+														"meVal": child['render_value']!=undefined  ? child['render_value'] : child['gcDefVal']
+													});
+												}
+												if(child.gcMeCode == 'F116'){
+												}
+												if(child.gcMeCode == beginTime){
+													beginTime = child.render_value;
+												}else{
+													beginTime = undefined;
+												}
+												if(child.gcMeCode == endTime){
+													endTime = child.render_value;
+												}else{
+													endTime = undefined;
+												}
+											}
+										});
+										_.each(mdtype_arr,function(madtype){
+											pdarr.journeyInfo.push(madtype);
+										})
+										
+										if(_item.aj_id){
+											pdarr.journeyId = _item.aj_id;
+										}
+										if(_item.ej_id){
+											pdarr.journeyId = _item.ej_id;
+										}
+	                                    if(_item.ej_days != undefined){
+	                                    	_.extend(pdarr,{'journeyDays':_item.ej_days});
+	//										pdarr['journeyDays'] = _item.ej_days;
+										}
+	                                    if(_item.ej_hours != undefined){
+	                                    	_.extend(pdarr,{'journeyTime':_item.ej_hours});
+	//										pdarr['journeyTime'] = _item.ej_hours;
+										}
+	                                    if(_item.ej_kms != undefined){
+	                                    	_.extend(pdarr,{'journeyKM':_item.ej_kms});
+	//										pdarr['journeyKM'] = _item.ej_kms;
+										}
+	//                                  if(_item.span_night != undefined){
+	//                                  	_.extend(pdarr,{'spanNight':_item.span_night});
+	//									}
+										if(endTime!=undefined&&endTime!==""&&beginTime!=undefined&&beginTime!==""){
+											var span_night = ($rootScope.getNewDate(endTime) - $rootScope.getNewDate(beginTime))/(24*60*60*1000);
+											_.extend(pdarr,{'spanNight':span_night});
+										}
+										pd.joumeyInfo.push(pdarr);
+									}
+								})
+							}
+							return pd;
+						}
+						$scope.query_journel_budget = function(formtype,callback,isfirst) {//计算费用
+							if(isfirst != true){
+								$rootScope.formula_num = 0;
+								$rootScope.formula_num_id = [];//非自动计算 则将前端公式计数清零
+							}
+							$rootScope.isfirst = isfirst;
+							$scope.$parent.save_btn_flag= false;//计算费用中不可提交、保存
+							    //参数设置,若用默认值可以省略以下面代
+							    toastr.options = {
+								"closeButton": false, //是否显示关闭按钮
+								"debug": false, //是否使用debug模式
+								"positionClass": "toast-top-center",//弹出窗的位置
+								"showDuration": "300",//显示的动画时间
+								"hideDuration": "3000",//消失的动画时间
+								"timeOut": "500000", //展现时间
+								"extendedTimeOut": "1000",//加长展示时间
+								"showEasing": "swing",//显示时的动画缓冲方式
+								"hideEasing": "linear",//消失时的动画缓冲方式
+								"showMethod": "fadeIn",//显示时的动画方式
+								"hideMethod": "fadeOut" //消失时的动画方式
+							};
+							
+							if(isfirst == false){
+								toastr.info('计算费用中');
+							}
+							var moneyUrl;
+							if(formtype == 20){
+								moneyUrl = "apply/userMoney";
+							}else if(formtype == 30){
+								moneyUrl = "expend/userMoney";
+							}
+							var parentitem = myServeice.getparentitem();
+							var users_selected = myServeice.getusers_selected();
+							var type = myServeice.gettype();
+							var children = parentitem.child;
+							var pd = getquery_pd();
+
+							if($scope.billid){
+								_.extend(pd,{"billId":$scope.billid});
+							}
+							
+							http_service.post(moneyUrl, pd, function(res){
+								toastr.clear();
+		                    	var journel_budget_list = res.data.data;
+		                    	$rootScope.version = res.data.data.version;//初始化版本号
+		                    	if(formtype == 20){//申请单计算费用
+		                    		$timeout(function(){
+				                        var child_item = [];
+				                        var main_item = [];
+				                        _.each($scope.form_items, function(_item){
+				                            if(_item.gcCpnType == 10){
+				                            	child_item.push(_item);
+				                            }else{
+				                            	main_item.push(_item);
+				                            }
+				                        });
+				                        var allcost = 0;
+				                        for(i in journel_budget_list.eachMoney){
+				                        	var eachMoney = journel_budget_list.eachMoney[i].money;
+				                        	if(child_item[i].budget_list&&child_item[i].budget_list.length!=0){
+				                        		child_item[i].budget_list[0].child = eachMoney;
+				                        	}else{
+				                        		_.extend(child_item[i],{"budget_list":[{"child":eachMoney}]});
+				                        	}
+				                        	_.each(child_item[i].child,function(cd){
+												_.each(eachMoney,function(data){
+													if(data.jp_cd_code == cd.gcMeCode){
+//															cd.standard_money = data.jp_amount;
+//															cd['standard_show'] = true;
+															if(cd.gcEditFlag != 1){
+																cd.render_value = data.jp_amount;
+//																$scope.change_apmonut(cd);
+															}else if(cd.render_value == undefined || cd.render_value == ""){
+																cd.render_value = data.jp_amount;
+//																$scope.change_apmonut(cd);
+															}
+														if(cd.render_value != undefined){
+															allcost += parseFloat(cd.render_value);
+														}
+													}
+												})
+											});
+				                        }	
+				                        _.each(child_item,function(cd){
+				                        	main_item.push(cd);
+				                        })
+				                        $timeout(function(){
+					                        $scope.form_items = main_item;
+				                        },1)
+										//将总金额显示在申请金额里
+//								 		_.each(filed, function(_filed) {
+//									 		if(_filed.busCode == "applyMoney") {
+//									 			_.each($scope.form_items, function(_form) {
+//									 				if(_form.gcMeCode == _filed.mdCode) {
+//									 					$timeout(function(){
+//									 						_form.render_value = allcost;
+//									 						_form.gcDefVal = allcost;
+//									 					},1)
+//									 				}
+//									 			})
+//									 		}
+//									 	});
+				                    }, 1);
+		                    	}else if(formtype == 30){//报销单计算费用
+		                    		var form_list = _.cloneDeep($scope.form_list);
+		                    		var err_list = [];
+		                    		if(journel_budget_list.noJoinBill != undefined){
+		                    			$scope.unjoin_bill = journel_budget_list.noJoinBill;
+		                    			if(journel_budget_list.noJoinBill.child.length != 0){
+		                    				$scope.unjoin_bill_show = true;
+		                    			}
+		                    			_.each(filed,function(_filed){
+		                    				if(_filed.busCode == "noJoinBill"){//无票据金额
+		                    					_.each($scope.form_items,function(item){
+		                    						if(item.gcMeCode == _filed.mdCode){
+		                    							if((item.render_value == "" || item.render_value == undefined) && journel_budget_list.noJoinBill.sum != 0){//(item.render_value == "" || parseInt(item.render_value) == 0)
+		                    								item.render_value = journel_budget_list.noJoinBill.sum;
+		                    							}
+		                    							item['expend_standard'] = journel_budget_list.noJoinBill.sum;
+		                    							item['billMoney'] = journel_budget_list.noJoinBill.sum;//无行程票据  的 票据金额
+		                    							item['expend_standard_sp'] = 0;
+//		                    							item['expend_standard_show'] = true;
+		                    							$scope.$watch(function(){//实时验证 
+		                    								return item.render_value;
+		                    							},function(){
+		                    								if(item.render_value != undefined && item.render_value != '' && item.render_value > 0){
+		                    									item['is_red'] = true;
+		                    								}else{
+		                    									item['is_red'] = false;
+		                    								}
+//		                    								var flag;
+//		                    								if(item.render_value == "" || parseInt(item.render_value) == 0){
+//		                    									flag = true;
+//		                    								}else{
+//		                    									flag = false;
+//		                    								}
+//		                    								if(flag && journel_budget_list.noJoinBill.sum <= 0){
+//		                    									item['is_red'] = false;
+//		                    								}else{
+//		                    									item['is_red'] = true;
+//		                    								}
+		                    							})
+		                    						}
+		                    					})
+		                    				}
+		                    			})
+		                    		}else{
+		                    			$scope.unjoin_bill_show = false;
+		                    		}
+		                    		
+		                    		var eachmonety_err = [];
+		                    		var child_item = [];
+		                    		var bill_type_code;
+		                    		_.each(cddata,function(_cd){//获取定额包干的code
+		                    			if(_cd.cdType == 90 && _cd.cdName == "0002"){
+		                    				bill_type_code = _cd.cdCode;
+		                    			}
+		                    		})
+				                        var main_item = [];
+				                        _.each($scope.form_items, function(_item){
+				                            if(_item.gcCpnType == 10){
+				                            	child_item.push(_item);
+				                            }else{
+				                            	main_item.push(_item);
+				                            }
+				                        });
+				                        var allcost = 0;
+				                        _.each(journel_budget_list.eachMoney,function(eachMoney,i){
+//				                        	var eachMoney = journel_budget_list.eachMoney[i];
+				                        	var eachmonety_err_child = [];
+				                        	if(child_item[i].budget_list&&child_item[i].budget_list.length!=0){
+				                        		child_item[i].budget_list[0].child = eachMoney.money;
+				                        	}else{
+				                        		_.extend(child_item[i],{"budget_list":[{"child":eachMoney.money}]});
+				                        	}
+				                        	var otherMoney = 0;
+				                        	var otherMoney_bill = 0;
+				                        	_.each(eachMoney.money,function(data){
+				                        		var find_item = false;
+//				                        		if(child_item[i] == undefined){
+//				                        			return false;
+//				                        		}
+													_.each(child_item[i].child,function(cd){
+														
+														if(data.jp_cd_code == cd.gcMeCode){
+															// 找到了
+															eachmonety_err_child.push(data);
+															if(data.billMoney != undefined){//票据金额
+																cd['billMoney'] = data.billMoney;
+															}else{
+																cd['billMoney'] = 0;
+															}
+															if(cd.gcEditFlag != 1){
+																cd.render_value = data.jp_amount;
+//																$scope.change_apmonut(cd);
+															}else if(cd.render_value == undefined || cd.render_value == "" || cd.render_value == 0){
+																cd.render_value = data.jp_amount;
+//																$scope.change_apmonut(cd);
+															}
+															cd.expend_standard = data.jp_amount;
+//															if(bill_type_code == data.expendWay){//暂时不做是否为定额包干判断
+//																cd.expend_standard ="标准:" + data.jp_amount;
+//															}else{
+//																cd.expend_standard ="票据:" + data.jp_amount;
+//															}
+															cd['expend_standard_show'] = true;
+															if(cd.render_value != undefined){
+																allcost += parseFloat(cd.render_value);
+															}
+															find_item = true;
+														}
+													});
+													// 未找到
+													if(!find_item){
+														otherMoney += data.jp_amount;
+														if(data.billMoney != undefined){//其他费用 票据金额
+															otherMoney_bill += data.billMoney;
+														}
+													}
+											});
+											//计算其他费用 将值显示到其它费用里
+											otherMoney += eachMoney.otherMoney;//增加其他费用
+											otherMoney_bill += eachMoney.otherMoney;//增加其他费用 票据金额
+						                    _.each(filed, function(_filed) {
+												if(_filed.busCode == "otherMoneyType") {
+													if(child_item[i] == undefined){
+					                        			return false;
+					                        		}
+													_.each(child_item[i].child, function(cd) {
+														if(cd.gcMeCode == _filed.mdCode) {
+															cd['billMoney'] = otherMoney_bill;
+															if((cd.render_value == "" || cd.render_value == undefined) && otherMoney != 0){//(cd.render_value == "" || parseInt(cd.render_value) == 0)
+																cd.render_value = otherMoney;
+															}
+															cd.expend_standard = otherMoney;
+//															cd['expend_standard_show'] = true;
+															cd['expend_standard_sp'] = 0;
+															$scope.$watch(function(){//实时验证
+																return cd.render_value;
+															},function(){
+																if(cd.render_value != '' && cd.render_value != undefined && cd.render_value > 0){//if(cd.render_value != otherMoney)修改前
+																	cd['is_red'] = true;
+																}else{
+																	cd['is_red'] = false;
+																}
+															})
+														}
+													})
+												}
+											})
+											eachmonety_err.push(eachmonety_err_child);
+											if(child_item[i]){
+				                        		child_item[i]['eachMoney'] = eachmonety_err_child;
+				                        	}
+				                        })
+				                        //存储错误信息
+				                        $scope.eachmonety_err = eachmonety_err;
+				                        _.each(child_item,function(cd){
+				                        	main_item.push(cd);
+				                        })
+				                        $timeout(function(){
+					                        $scope.form_items = main_item;
+				                        },1)
+										//将总金额显示在报销金额里
+//								 		_.each(filed, function(_filed) {
+//									 		if(_filed.busCode == "expendMoney") {
+//									 			_.each($scope.form_items, function(_form) {
+//									 				if(_form.gcMeCode == _filed.mdCode) {
+//									 					$timeout(function(){
+//									 						if(isfirst){
+//									 							if(_form.render_value == undefined || _form.render_value === ""){
+//									 								_form.render_value = allcost;
+//									 								_form.gcDefVal = allcost;
+//									 							}
+//									 						}else{
+//									 							_form.render_value = allcost;
+//									 							_form.gcDefVal = allcost;
+//									 						}
+//									 					},1)
+//									 				}
+//									 			})
+//									 		}
+//									 	});
+		                    		
+//		                    		显示费用类型错误信息
+									cost_err_check();
+		                    	}
+		                    	
+		                    	if(isfirst){//详情页 计算费用时才进行主数据验证
+		                    		$scope.maindata_isright_query = true;//计算费用 主数据检查状态 true 代表无错误
+			                    	$scope.maindata_err_query = [];//计算费用 主数据错误信息
+			                    	$scope.maindata_err_sys=[];//系统变量 主数据错误信息
+			                    	$scope.maindata_isright_sys= true;//系统变量 主数据错误状态 true 代表无错误
+			                    	_.each(journel_budget_list.eachMoney,function(list){//获得主数据错误数据
+			                    		_.each(list.money,function(money){
+			                    			if(money.defErr != undefined && money.defErr.length != 0){
+			                    				$scope.maindata_isright_query = false;
+			                    				_.each(money.defErr,function(err){
+			                    					$scope.maindata_err_query.push(err);
+			                    				})
+			                    			}
+			                    		})
+			                    	});
+		                    	}
+		                    	
+		                    	//匹配控件 并进行公式计算
+		                    	$timeout(function(){
+		                    		$scope.formula_num_check = 0;
+		                    		_.each($scope.formula,function(formula){
+	//					            	_.each(formula.child,function(_formula,i){
+	//					            		if(i > 0){
+	//					            			if(_formula.pMdCode == item.gcMeCode){
+						            				formula_computing(formula,$scope.form_items);
+	//						            		}
+	//					            		}
+						            		
+	//					            	});
+										_.each(formula.child, function(fcd){
+											if(fcd.pMeCode != undefined && fcd.pMeCode != '' && fcd.pMeCode != 'code'){
+												_.each($scope.form_items,function(form){
+													var break_flag = false;
+													if(form.gcCpnType != 10 && form.gcCpnType != 17){
+														if(form.gcMeCode == fcd.pMdCode){
+															$scope.formula_num_check++;
+															break_flag = true;
+															return false;
+														}
+													}else{
+														_.each(form.child,function(cd){
+															if(cd.gcMeCode == fcd.pMdCode){
+																$scope.formula_num_check++;
+																break_flag = true;
+																return false;
+															}
+														});
+													}
+													if(break_flag){
+														return false;
+													}
+												})
+											}
+										})
+						            })
+		                    		if(isfirst){
+		                    			$rootScope.update_speical_formula = $scope.$watch(function() {
+											return $rootScope.formula_num;
+										}, function() {
+											
+											
+											
+											
+											if(_.uniq($rootScope.formula_num_id).length >= $scope.formula_num_check) {
+												$rootScope.update_speical_formula();
+												//匹配控件 并进行系统变量公式计算
+				                    		  $scope.sys_num = 0;
+				                    		  $scope.sys_num_check = 0;
+				                    		  $scope.sys_begin = 0;
+								            _.each($scope.sys_formula, function(sformula) {
+												_.each($scope.form_items, function(form) {
+													if(form.gcCpnType != 10) {
+														if(form.gcMeCode == sformula.target) {
+															sys_formula_computing(sformula, undefined, true);
+															$scope.sys_num_check++;
+														}
+													} else {
+														_.each(form.child, function(cd) {
+															if(cd.gcMeCode == sformula.target) {
+																sys_formula_computing(sformula, form, true);
+																$scope.sys_num_check++;
+															}
+														})
+													}
+												})
+											})
+								            var save_form_uid = $rootScope.save_form_uid;
+				                    		$rootScope.update_speical =  $scope.$watch(function(){
+				                    			return $scope.sys_num;
+				                    		},function(){
+				                    			
+				                    			
+				                    			if(save_form_uid != $rootScope.save_form_uid){
+				                    				return false;
+				                    			}
+				                    			if($scope.sys_num == $scope.sys_num_check){
+				                    				
+				                    				if($rootScope.isfirst){
+				                    					var bill_state_update_flag = true;
+				                    					var check_data = auto_save();
+				                    					if($scope.sys_num_check == 0 && (check_data.child == undefined || check_data.child.length == 0)){
+				                    						bill_state_update_flag = false;
+				                    					}
+				                    					
+				                    					
+				                    					
+				                    					
+				                    					if($rootScope.close_lock == true){
+				                    						$rootScope.update_speical_formula();
+				                    						return false;
+				                    					}
+				                    					$scope.$parent.save_btn_flag= true;//自动更新前才可提交、保存
+				                    					$rootScope.save_post(auto_save());//报销单详情自动更新  暂时 去除自动更新
+						                    			//显示主数据错误信息
+						                    			$scope.maindata_err = [];
+						                    			_.each($scope.maindata_err_query,function(err){
+		//				                    				$scope.maindata_err.push(err);// 暂时不显示 主数据缺失
+						                    			})
+						                    			$scope.maindata_err_sys = _.uniqBy($scope.maindata_err_sys,"eViewMsg");
+						                    			_.each($scope.maindata_err_sys,function(err){
+		//				                    				$scope.maindata_err.push(err);// 暂时不显示 主数据缺失
+						                    			})
+						                    			if($scope.maindata_isright_query && $scope.select_isright && $scope.maindata_isright_sys && $scope.billState == 10 && $scope.exCouldNumber !='' && $scope.exCouldNumber != undefined){//如果报销单为自动审单中,且都不缺失主数据,向后端发送修改订单状态请求
+						                    				
+						                    				
+						                    				http_service.post("errmsg/update/updateBillStart",{"oCode":$scope.exCouldNumber},function(res){
+						                    					
+						                    				})
+						                    			}
+						                    		}
+				                    				 $timeout(function(){//前端公式并且系统变量公式算完后 再保存表单 李伟民 12-29
+										            	
+										            	if(isfirst == false){
+										            		callback($rootScope.version);
+										            	}
+										            },100);
+				                    				$timeout(function(){
+				                    					$rootScope.checkdata();//计算完费用且算完公式后 进行规则校验
+				                    				},10)
+						                    		$rootScope.update_speical();
+					                    		}
+				                    		})
+											}
+										});
+		                    		}else{
+		                    			//匹配控件 并进行系统变量公式计算
+				                    		  $scope.sys_num = 0;
+				                    		  $scope.sys_num_check = 0;
+				                    		  $scope.sys_begin = 0;
+								            _.each($scope.sys_formula, function(sformula) {
+												_.each($scope.form_items, function(form) {
+													if(form.gcCpnType != 10) {
+														if(form.gcMeCode == sformula.target) {
+															sys_formula_computing(sformula, undefined, true);
+															$scope.sys_num_check++;
+														}
+													} else {
+														_.each(form.child, function(cd) {
+															if(cd.gcMeCode == sformula.target) {
+																sys_formula_computing(sformula, form, true);
+																$scope.sys_num_check++;
+															}
+														})
+													}
+												})
+											})
+								            $rootScope.update_speical =  $scope.$watch(function(){
+				                    			return $scope.sys_num;
+				                    		},function(){
+				                    			if($scope.sys_num == $scope.sys_num_check){
+				                    				 $timeout(function(){//前端公式并且系统变量公式算完后 再保存表单 李伟民 12-29
+										            	
+										            	if(isfirst == false){
+										            		callback($rootScope.version);
+										            	}
+										            },100);
+				                    				$timeout(function(){
+				                    					$rootScope.checkdata();//计算完费用且算完公式后 进行规则校验
+				                    				},10)
+						                    		$rootScope.update_speical();
+					                    		}
+				                    		})
+		                    		}
+		                    		
+		                    		  
+//		                    		if(isfirst){
+//		                    			$rootScope.save_post(auto_save());//报销单详情自动更新
+//		                    		}
+//		                    		$rootScope.checkdata();//计算完费用且算完公式后 进行规则校验
+		                    	},100);
+					            show_other_cost()//其它费用提示
+					            if(isfirst != true){
+					            	$scope.$parent.save_btn_flag= true;//计算费用后才可提交、保存
+					            }
+		                	});
+						};
+						//自动更新获取控件数据
+						function auto_save(){
+							var auto_post_data = {};
+							var child_data = [];
+							var child_data_f = [];
+							_.each($scope.form_items,function(form){
+								if(form.child == undefined || form.child.length == 0){
+									if(form.gcColName != "ex_number"){// 自动更新 不传报销单号
+										auto_post_data[form.gcColName] = form.render_value;
+									}
+								}else if(form.gcCpnType == 10){
+									var single_child = {'child':[]};
+									_.each(form.child,function(cd){
+										single_child[cd.gcColName] = cd.render_value;
+									});
+									if(form.ej_id){
+										single_child['ej_id'] = form.ej_id;
+									}
+									child_data.push(single_child)
+								}else if(form.gcCpnType == 17){
+									var single_child_f = {'child':[]};
+									_.each(form.child,function(cd){
+										single_child_f[cd.gcColName] = cd.render_value;
+									});
+									if(form.ef_id){
+										single_child_f['ef_id'] = form.ef_id;
+									}
+									child_data_f.push(single_child_f)
+								}
+							})
+							_.extend(auto_post_data,{'child':child_data,'fchild':child_data_f});
+							if($scope.expned_id != undefined){
+								_.extend(auto_post_data,{'ex_id':$scope.expned_id});
+							}
+							
+							return auto_post_data;
+						}
+						//计算费用后 验证费用
+						function eachMoney_check(){
+							_.each($scope.form_items,function(form){
+								if(form.gcCpnType ==10){
+									if(form.eachMoney){
+										_.each(form.eachMoney,function(each){
+											_.each(form.child,function(cd){
+												if(each.jp_cd_code == cd.gcMeCode){
+//													cd['nobill_cd'] = true;//默认报红
+//													if(each.billMust && each.billMust == 0){//非票据必须的费用类型不进行无票据信息验证
+//														cd['nobill_cd'] = false;
+//													}
+//													if(each.billMust && each.billMust == 1 && each.jp_amount > 0){//票据必须且金额大于0的费用类型不进行无票据信息验证
+//														cd['nobill_cd'] = false;
+//													}
+													if(each.jp_amount != cd.render_value){
+														cd['is_red'] = true;
+													}else{
+														cd['is_red'] = false;
+													}
+												}
+											})
+										})
+									}
+									
+								}
+							});
+							$scope.have_err();
+						}
+//						$scope.$watch(function(){
+//							return $scope.form_items;
+//						},function(){
+//							eachMoney_check();
+//						});
+						
+						$scope.check_item = function(item, opt) {
+							if(opt == undefined){
+								return false;
+							}
+							if(_.isArray(item.render_value)) {
+								if(_.indexOf(item.render_value, opt.value) > -1) {
+									return true;
+								}
+							} else {
+								if(item.render_value === opt.value) {
+									return true;
+								}
+							}
+							return false;
+						};
+
+						$scope.goto_pre_page = function() {
+							window.history.go(-1);
+						};
+
+						$scope.item_column = function(item) {
+							var item_class = '';
+							if(item) {
+								if(item.gcCpnType == 10 || item.gcCpnType == 12 || item.gcCpnType == 0){
+									item_class = 'col-md-12';
+								}else{
+									switch(item.gcCpnInCol){
+										case 2:
+										item_class = 'col-md-12';
+										break;
+										case 1:
+										item_class = 'col-md-6 column_cfg';
+										break;
+										case 3:
+										item_class = 'col-md-3 column_cfg';
+										break;
+										case 4:
+										item_class = 'col-md-2 column_cfg';
+										break;
+									}
+								}
+							}
+							if(!$scope.form_show(item)){//被隐藏的子表单不占位
+								item_class += " null_form";
+							}
+							return item_class;
+//								if(item.gcCpnInCol == '1' && item.gcCpnType !== 10 && item.gcCpnType !== 12 && item.gcCpnType !== 0) {
+//									return 'col-md-6 column_cfg';
+//								} else {
+//									return 'col-md-12';
+//								}
+						};
+
+						$scope.redirect_to_args = function() {
+							$location.path([].slice.call(arguments).join('/'));
+						};
+						
+						//计算子表单序号
+						$scope.count_number = function(){
+							var num = 0;//子表单
+							_.each($scope.form_items,function(form){
+								if(form.gcCpnType == 10){
+									num++;
+									form['num'] = num;
+								}
+							});
+							if(num <= 1){
+								_.each($scope.form_items,function(form){
+									if(form.gcCpnType == 10){
+										form['num'] = "";
+									}
+								});
+							}
+							
+							var num_pay = 0;//支付方式子表单
+							_.each($scope.form_items,function(form){
+								if(form.gcCpnType == 17){
+									num_pay++;
+									form['num'] = num_pay;
+								}
+							});
+							if(num_pay <= 1){
+								_.each($scope.form_items,function(form){
+									if(form.gcCpnType == 17){
+										form['num'] = "";
+									}
+								});
+							}
+						}
+						//其他费用及无票据行程金额提示
+								function show_other_cost(){
+									var otherMoneyType_code;
+									var nobill_money_code;
+									$scope.other_cost = [];
+									$scope.nobill_money_hint = '';
+									_.each(filed,function(_filed){
+										if(_filed.busCode == 'otherMoneyType'){
+											otherMoneyType_code = _filed.mdCode;
+										}
+										if(_filed.busCode == 'noJoinBill'){
+											nobill_money_code = _filed.mdCode;
+										}
+									})
+									_.each($scope.form_items,function(form){
+										if(form.gcCpnType == 10){
+											_.each(form.child,function(cd){
+												if(cd.gcMeCode == otherMoneyType_code){
+														if(cd.render_value != undefined && cd.render_value != "" && (cd.render_value > 0 || cd.expend_standard > 0)){
+															if(form.num){
+																$scope.other_cost.push({"journame":form.gcCpnAlias+form.num,"bill_money":cd.render_value,"expend_money":cd.expend_standard})
+															}else{
+																$scope.other_cost.push({"journame":form.gcCpnAlias,"bill_money":cd.render_value,"expend_money":cd.expend_standard})
+															}
+														}
+												}
+											})
+										}else if(form.gcMeCode == nobill_money_code){
+											if(form.render_value != undefined && form.render_value != "" && (form.render_value > 0 || form.expend_standard > 0)){
+												$scope.nobill_money_hint = {"nobill_money":form.render_value,"expend_money":form.expend_standard}
+											}
+										}
+									})
+								}
+						//加子表单
+						var num = 2;
+						var onceflag = true;
+						$scope.duplicate_sub_form = function(item) {
+							if(item.gcCpnType == 10){
+								var form_items = [];
+								for(i in $scope.form_items) {
+									$scope.form_items[0].num = 1;
+									if($scope.form_items[i] && item.gcCpnAlias === $scope.form_items[i].gcCpnAlias) {
+										$scope.number = $scope.form_items[i].num;
+										$scope.form_items[i].num = num++;
+										var obj = _.cloneDeep($scope.form_items[i]);
+										obj.budget_list = [];
+										var newchild = [];
+										_.each(obj.child, function(_obj) {
+											_obj = _.omit(_obj, "render_value");
+											if(_obj != undefined) {
+												newchild.push(_obj);
+											}
+										})
+										obj.child = newchild;
+										obj['deleteflag_jour'] = false;
+										form_items.push(_.cloneDeep($scope.form_jour));//修改后的添加方式
+										$scope.form_items[i].num = $scope.number;
+										$scope.form_items.push(form_items[0]);
+										break;
+									}
+								};
+							}else if(item.gcCpnType == 17){
+								$scope.form_items.push(_.cloneDeep($scope.form_pay));
+							}
+							
+							$scope.count_number();
+							$scope.$parent.form_data['child'] = $scope.form_items;
+							cost_err_check()//增加完后重新调用显示费用类型错误信息方法
+							show_other_cost()//其它费用提示
+							
+							_.each($scope.formula,function(formula){
+								_.each($scope.form_items,function(form){
+									if(form.gcCpnType == 12 && formula.child[1].pMdCode == form.gcMeCode){
+										$rootScope.formula_computing_user(formula,form.render_value,form,form);
+									}
+								})
+							})
+							
+						};
+						//删除子表单
+						$scope.rm_sub_form = function(item) {
+							var form_items = [];
+							if(item.billInfos != undefined && item.billInfos.length != 0){//有票据信息时  不可删除子表单
+								$rootScope.twarning("不可删除有票据信息的行程");
+								return false;
+							}
+							_.remove($scope.form_items,function(form){
+								return form == item;
+							})
+//							_.each($scope.form_items, function(_item) {
+//								if(item !== _item) {
+//									form_items.push(_item);
+//								}
+//							});
+//							$scope.form_items = form_items;
+							//若无行程 则显示添加行程按钮 无支付方式 显示添加支付方式
+							var jour_num = 0;
+							var pay_num = 0;
+							_.each($scope.form_items,function(form){
+								if(form.gcCpnType == 10){
+									jour_num++;
+								}else if(form.gcCpnType == 17){
+									pay_num++;
+								}
+							})
+							if(jour_num == 0){
+								$scope.add_jour_show = true;
+							}
+							if(pay_num == 0){
+								$scope.add_pay_show = true;
+							}
+							$scope.count_number();
+							$scope.$parent.form_data['child'] = $scope.form_items;
+							//匹配控件 并进行公式计算
+							
+							$scope.$parent.save_btn_flag= false;
+							
+					            _.each($scope.formula,function(formula){
+					            	_.each(formula.child,function(_formula){
+//					            		if(formula.mathFormat != "select"){//排除下拉框联动的公式
+										if($scope.add_jour_show){//无行程时 公式计算
+											var new_form = _.cloneDeep($scope.form_items);
+											new_form.push($scope.form_jour);
+											formula_computing(formula,new_form);
+										}else{
+											formula_computing(formula,$scope.form_items);
+										}
+					            			
+//					            		}
+					            	});
+					            });
+					        $scope.$parent.save_btn_flag = true;
+					        sort_bytime();//子表单按时间排序
+					        cost_err_check()//删除完后重新调用显示费用类型错误信息方法
+					        show_other_cost()//其它费用提示
+						};
+						//添加行程按钮(支付方式)显示
+						$rootScope.show_add_jour = function(){
+							var jour_num = 0;
+							var pay_num = 0;
+							_.each($scope.form_items,function(form){
+								if(form.gcCpnType == 10){
+									jour_num++;
+								}else if(form.gcCpnType == 17){
+									pay_num++;
+								}
+							})
+							if(jour_num == 0){
+								$scope.add_jour_show = true;
+							}
+							if(pay_num == 0){
+								$scope.add_pay_show = true;
+							}
+						}
+						//添加行程按钮
+						$scope.add_jour = function(){//
+							$scope.form_items.push(_.cloneDeep($scope.form_jour));
+							$scope.$parent.form_data.child = $scope.form_items;
+							$scope.add_jour_show = false;
+						}
+						//添加支付方式按钮
+						$scope.add_pay = function(){//add_pay
+							$scope.form_items.push(_.cloneDeep($scope.form_pay));
+							$scope.$parent.form_data.child = $scope.form_items;
+							$scope.add_pay_show = false;
+						}
+						$scope.math_ceil = function(v) {
+							if(!v) {
+								return '';
+							}
+							return Math.ceil(v);
+						}
+			//获取分页及查询信息
+            function select_info(){
+            	var search = $("#apply_search").val();
+            	if(search!=undefined && search !== ""){
+            		return {
+	            		"num_per_page": $scope.page_number,
+						"page_num": $scope.pages,
+						"queryName": search
+	            	}
+            	}else{
+            		return {
+	            		"num_per_page": $scope.page_number,
+						"page_num": $scope.pages
+	            	}
+            	}
+            	
+            }
+            //获取选择预算横向信息
+            function get_budget_info(pages,page_num){
+            	var parameter = select_info();
+            	
+            	if ($scope.type === 10) {
+					orgCode = $scope.budgetOrgCode;
+				} else if ($scope.type === 20) {
+					orgCode = $scope.appleOrgCode;
+				}
+            	
+            	if (orgCode) {
+            		parameter.data = orgCode;
+            		parameter.type = $scope.type;
+            	}
+            	http_service.post('budget/pass/budgetInfo',parameter,function(res){
+            		$rootScope.search_hint(res.data.data,'arrary');
+//					$scope.budget_info = res.data.data;
+//					$scope.rows = res.data.rows;
+					$scope.rows = res.data.data.length;//前端分页
+					if(pages*parseInt(page_num)<= $scope.rows){
+						$scope.budget_info = res.data.data.slice((pages-1)*page_num,page_num*pages);
+					}else{
+						$scope.budget_info = res.data.data.slice((pages-1)*page_num);
+					}
+				});
+            }
+            //点击查询
+            $scope.apply_search_info = function(){
+            	$scope.pages = 1;
+            	$scope.page_number = "5";
+            	get_budget_info($scope.pages,$scope.page_number);
+            }
+            //按回车键则查询
+            $scope.apply_search_info_keydown = function(event){
+            	if(event.keyCode == 13){
+            		$scope.apply_search_info();
+            	}
+            }
+            //点击上一页
+			$scope.pre_page = function(){
+				if($scope.pages > 1){
+					$scope.pages = parseInt($scope.pages)-1;
+//					get_budget_info();
+					//前端分页
+					get_budget_info($scope.pages,$scope.page_number);
+				}
+			}
+			//点击下一页
+			$scope.next_page = function(){
+				if($scope.pages < Math.ceil($scope.rows/$scope.page_number)){
+					$scope.pages = parseInt($scope.pages)+1;
+//					get_budget_info();
+					//前端分页
+					get_budget_info($scope.pages,$scope.page_number);
+				}
+			}
+			//改变一页显示条数
+			$scope.change_page_number = function(){
+//				get_budget_info();
+				//前端分页
+				get_budget_info($scope.pages,$scope.page_number);
+			}
+            //显示申请单选择预算并获得数据
+            // TODO
+			$scope.show_apply_select = function(edit){
+				if($rootScope.close_user_selector){
+					$rootScope.close_user_selector();
+				}
+				if(!edit){
+					return false;
+				}
+				var orgCode = "";
+				var gcCpnAlias = "";
+				_.each(filed,function(_field){
+					if (_field.busCode === "orgCode") {
+						_.each($scope.form_items,function(_form_items){
+							if (_form_items.gcMeCode === _field.mdCode) {
+								//$('*[gccolname="' + _form_items.gcColName + '"]').val();
+								orgCode = $('*[gccolname="' + _form_items.gcColName + '"]').attr("value");
+								gcCpnAlias = _form_items.gcCpnAlias;
+								if ($scope.type === 10) {
+									$scope.budgetOrgCode = orgCode;
+								} else if ($scope.type === 20) {
+									$scope.appleOrgCode = orgCode;
+								}
+							}
+						})
+					}
+				})
+				if (!orgCode) {
+					if (edit) {
+						$scope.$parent.$parent.tinfo("请先选择"+gcCpnAlias+"!");
+					} else {
+						$scope.$parent.tinfo("请先选择"+gcCpnAlias+"!");
+					}
+					return false;
+				} 
+				$scope.apply_select_show = true;
+				$scope.pages = 1;
+            	$scope.page_number = "5";
+				//获取表头信息
+				http_service.post('form/search/showTables',{},function(res){
+					$rootScope.search_hint(res.data.data,'arrary');
+					$scope.heads = res.data.data;
+//					$scope.heads = res.data.data.cpnInfo;
+				})
+				//获取横向信息  前端分页
+				get_budget_info($scope.pages,$scope.page_number);
+			};
+			//将选择的数据保存到数组内
+			$scope.selected_budget = function(data){
+				$scope.thshow = true;
+				$scope.close_apply_select();
+				$rootScope.budget_selected = data.bu_number;
+				$rootScope['child_money'] = data.child_money;
+				$scope.selectinfo = [];
+				$scope.info = {};
+				$scope.sumMoney = "";
+				$scope.orgName = "";
+				var startTime,endTime;
+				_.each($scope.heads,function(hd){
+					_.each(filed,function(_filed){
+						if(hd.gcMeCode == _filed.mdCode){
+							if(data[hd.gcColName]){
+								$scope.info[hd.gcColName] = data[hd.gcColName]
+								switch(_filed.busCode){
+									case "sumMoney"://预算金额
+									$scope.sumMoney = "【"+hd.gcCpnAlias+"】 "+data[hd.gcColName]+" ";
+									$scope.info[hd.gcColName] = $scope.sumMoney;
+									break;
+									case "beginCalendar": 
+									startTime = data[hd.gcColName];
+									$scope.info[hd.gcColName] = startTime;
+									break;
+									case "endCalendar":
+									endTime = data[hd.gcColName];
+									$scope.info[hd.gcColName] = endTime;
+									break;
+									case "orgName"://组织机构
+									$scope.orgName = data[hd.gcColName];
+									$scope.info[hd.gcColName] = $scope.orgName;
+									break;
+								}
+							}
+						}
+					});
+				});
+				if(startTime&&endTime){
+					$scope.time = "【预算时间】"+startTime+"~"+endTime;
+					$rootScope.startTime = startTime;
+					$rootScope.endTime = endTime;
+				}
+				$rootScope.sumMoney_budget = data.bu_money;
+				$scope.info['bu_number'] = data.bu_number;
+				$scope.info['bu_money'] = data.bu_money;
+				$scope.selectinfo.push($scope.info);
+			}
+			//关闭申请单选择预算
+			$rootScope.close_apply_select = function(){
+				$scope.close_apply_select();
+			}
+			$scope.close_apply_select = function(){
+				$scope.apply_select_show = false;
+			}
+//			我是分割线----------------------------------------------------------------------
+			//人员选择下拉框
+			$scope.expend_search = {};
+	
+			_.each(filed,function(_filed){
+				if(_filed.busCode == "PersonalName"){
+					$scope.expend_search = {"gcMeCode":_filed.mdCode};
+				}
+			});
+			//获取申请单分页及查询信息
+            function expend_select_info(){
+            	var search = $(".expend_search").find(".select-container").attr('value');
+            	if(search==undefined){
+            		search="";
+            	}
+            	if(search == ""){
+            		return {
+	            		"num_per_page": $scope.expend_page_number,
+						"page_num": $scope.expend_pages
+	            	}
+            	}else{
+            		return {
+	            		"num_per_page": $scope.expend_page_number,
+						"page_num": $scope.expend_pages,
+						"queryName": search
+	            	}
+            	}
+            	
+            }
+			//申请单选择点击查询
+            $scope.expend_search_info = function(){
+            	$scope.expend_pages = 1;
+//          	$scope.page_number = "5";
+            	get_expend_info($scope.expend_pages,$scope.expend_page_number);
+            }
+             //点击上一页
+			$scope.expend_pre_page = function(){
+				if($scope.expend_pages > 1){
+					$scope.expend_pages = parseInt($scope.expend_pages)-1;
+//					get_expend_info();
+					//前端分页
+					get_expend_info($scope.expend_pages,$scope.expend_page_number);
+				}
+			}
+			//点击下一页
+			$scope.expend_next_page = function(){
+				if($scope.expend_pages < Math.ceil($scope.expend_rows/$scope.expend_page_number)){
+					$scope.expend_pages = parseInt($scope.expend_pages)+1;
+//					get_expend_info();
+					//前端分页
+					get_expend_info($scope.expend_pages,$scope.expend_page_number);
+				}
+			}
+			//改变一页显示条数
+			$scope.expend_change_page_number = function(){
+//				get_expend_info();
+				//前端分页
+				$timeout(function(){
+					get_expend_info($scope.expend_pages,$scope.expend_page_number);
+				},1);
+			}
+			//获取选择申请横向信息
+            function get_expend_info(pages,page_num){
+            	var parameter = expend_select_info();
+            	if ($scope.expendPersonCode) {
+            		parameter.type = $scope.type;
+            		parameter.queryName = $scope.expendPersonCode;
+            	}
+            	http_service.post('apply/pass/applyInfo',parameter,function(res){
+            		$rootScope.search_hint(res.data.data,'arrary');
+//					$scope.expend_info = res.data.data;
+//					$scope.expend_rows = res.data.rows;
+					$scope.expend_rows = res.data.data.length;//前端分页
+					if(pages*parseInt(page_num)<= $scope.expend_rows){
+						$scope.expend_info = res.data.data.slice((pages-1)*page_num,page_num*pages);
+					}else{
+						$scope.expend_info = res.data.data.slice((pages-1)*page_num);
+					}
+				});
+            }
+			
+			 //显示报销单选择申请并获得数据
+			$scope.show_expend_select = function(edit){
+				if($rootScope.close_user_selector){
+					$rootScope.close_user_selector();
+				}
+				if(!edit){
+					return false;
+				}
+				
+				var personCode = "";
+				var gcCpnAlias = "";
+				_.each(filed,function(_field){
+					if (_field.busCode === "personCode") {
+						_.each($scope.form_items,function(_form_items){
+							if (_form_items.gcMeCode === _field.mdCode) {
+								personCode = _form_items.render_value;
+								gcCpnAlias = _form_items.gcCpnAlias;
+								$scope.expendPersonCode = personCode;
+							}
+						})
+					}
+				})
+				if (!personCode) {
+					if (edit) {
+						$scope.$parent.$parent.tinfo("请先选择"+gcCpnAlias+"!");
+					} else {
+						$scope.$parent.tinfo("请先选择"+gcCpnAlias+"!");
+					}
+					return false;
+				} 
+				
+				$scope.expend_select_show = true;
+				$scope.expend_pages = 1;
+            	$scope.expend_page_number = "5";
+				//获取表头信息
+				http_service.post('form/search/apply/showTables',{},function(res){
+					$rootScope.search_hint(res.data.data,'arrary');
+					$scope.expend_heads = res.data.data;
+//					$scope.heads = res.data.data.cpnInfo;
+				})
+				//获取横向信息  前端分页
+				get_expend_info($scope.expend_pages,$scope.expend_page_number);
+			};
+			//关闭报销申请单选择申请
+			$rootScope.close_expend_select = function(){
+				$scope.close_expend_select();
+			}
+			$scope.close_expend_select = function(){
+				$scope.expend_select_show = false;
+			}
+			//点击空白关闭
+			$(".body").on("click",function(event){
+				event.preventDefault();
+				if($(".apply_control").has(event.target).length === 0){
+					$timeout(function(){
+						$scope.expend_select_show = false;
+						$scope.apply_select_show = false;
+					},1)
+				}
+			})
+			//匹配显示
+			function expend_reflect_bill(data){
+				var post_form_data;
+				if($scope.billid){
+					post_form_data = {"guTempType": 20,"cache_id":20,"tId":$scope.billid};
+				}else{
+					post_form_data = {"guTempType": 20,"cache_id":20};
+				}
+				http_service.post("form/list",post_form_data,function(res){
+					if(!res.data.opState){
+							return false;
+						}
+					var apply_form = res.data.data;
+					var expend_arr = [];
+					var expend_child = [];
+					var expend_child_arr = {
+						"child":[]
+					};
+					_.each(apply_form.child,function(_apply){
+						var id = _apply['gcColName'];
+						if(_apply.gcCpnType != 10){
+							if(data[id] != undefined){
+								expend_arr.push({"gcMeCode":_apply.gcMeCode,"render_value":data[id]});
+							}
+						}else{
+							_.each(data.child,function(_dcd){
+								expend_child = [];
+								_.each(_apply.child,function(_acd){
+									var cid = _acd['gcColName'];
+									if(_dcd[cid] != undefined){
+										expend_child.push({"gcMeCode":_acd.gcMeCode,"render_value":_dcd[cid]});
+									}
+								})
+								expend_child_arr.child.push(expend_child);
+							})
+						}
+					})
+					var FromCode,ToCode;
+					var new_expend_child_arr = [];
+					var new_expend_child_arr_yes = [];
+					_.each(filed,function(_filed){//找到出发地与结束地的主数据定义code
+								switch(_filed.busCode){
+									case "From":
+										FromCode = _filed.mdCode;
+									break;
+									case "To":
+										ToCode = _filed.mdCode;
+									break;
+								}
+							});
+					_.each($scope.form_items,function(form){
+						if(form.gcCpnType != 10){//非子表单
+							_.each(expend_arr,function(_earr){
+								if(form.gcMeCode == _earr.gcMeCode){
+									if(form['render_value'] == undefined || form['render_value'] == ""){
+										form['render_value'] = _earr.render_value;
+										_.extend(form,{"deleteflag_jour":true});//添加可删除状态
+									}
+								}
+							})
+						}else{//子表单
+//							var Fromland,Toland,Fromland_e,Toland_e;
+//							_.each(form.child,function(_fcd){
+//								if(_fcd.gcMeCode == FromCode){
+//									Fromland = _fcd['render_value'];
+//								}else if(_fcd.gcMeCode == ToCode){
+//									Toland = _fcd['render_value'];
+//								}
+//							})
+//							_.each(expend_child_arr.child,function(_eca){
+//								_.each(_eca,function(_ecd){
+//									if(_ecd.gcMeCode == FromCode){
+//										Fromland_e = _ecd.render_value;	
+//									}else if(_ecd.gcMeCode == ToCode){
+//										Toland_e = _ecd.render_value;
+//									}
+//								});
+//								if(Fromland==Fromland_e&&Toland==Toland_e&&Fromland!=undefined&&Toland!=undefined){
+//									_.each(form.child,function(_fcd){
+//										_.each(_eca,function(_ecd){
+//											if(_fcd.gcMeCode == _ecd.gcMeCode){
+//												if(_fcd['render_value'] == undefined || _fcd['render_value'] == ""){
+//													$timeout(function(){
+//														_fcd['render_value'] = _ecd.render_value;
+//													},1)
+//												}
+//											}
+//										});
+//									});
+//									new_expend_child_arr_yes.push(_eca);
+//								}
+////								else{
+////									new_expend_child_arr.push(_eca);
+////								}
+//							});
+						}
+					});
+//					function removeByValue(arr, val) {
+//					  for(var i=0; i<arr.length; i++) {
+//					    if(arr[i] == val) {
+//					      arr.splice(i, 1);
+//					      break;
+//					    }
+//					  }
+//					}
+//					
+//						_.each(new_expend_child_arr_yes,function(_new){
+//							removeByValue(expend_child_arr.child,_new);
+//						});
+//						new_expend_child_arr = expend_child_arr.child;
+//					var new_form_child;
+//					_.each($scope.form_list,function(_list){
+//						if(_list.gcCpnType == 10){
+//							new_form_child = _.cloneDeep(_list);
+//						}
+//					})
+//					var new_form_child_arr = [];
+//					_.each(new_expend_child_arr,function(_eca){
+//						_.each(new_form_child.child,function(_newcd){
+//							_.each(_eca,function(_ecd){
+//								if(_newcd.gcMeCode == _ecd.gcMeCode){
+//									_newcd['render_value'] = _ecd.render_value;
+//								}
+//							})
+//						})
+//						new_form_child_arr.push(_.cloneDeep(new_form_child));
+//					});
+//					var null_form = [];
+//					_.each($scope.form_items,function(form){
+//						if(form.gcCpnType == 10){
+//							var isnull = true;
+//							_.each(form.child,function(fcd){
+//								if(fcd['render_value'] != undefined && fcd['render_value'] != ""){
+//									isnull = false;
+//								}
+//							})
+//							if(isnull){
+//								null_form.push(form);
+//							}
+//						}
+//					})
+//					_.each(null_form,function(nform){
+//						removeByValue($scope.form_items,nform);
+//					})
+//					_.each(new_form_child_arr,function(newarr){
+//						_.extend(newarr,{"deleteflag_jour":true});//添加可删除状态
+//						$scope.form_items.push(newarr);
+//					});
+//					//添加行程按钮
+//					var jour_num = 0;
+//					_.each($scope.form_items, function(form) {
+//						if(form.gcCpnType == 10) {
+//							jour_num++;
+//						}
+//					});
+//					if(jour_num != 0) {
+//						$scope.add_jour_show = false;
+//					} else {
+//						$scope.add_jour_show = true;
+//					}
+//					new_form_child_arr = [];
+					$scope.expend_select_show = false;//关闭窗口
+					$scope.count_number();
+				})
+			}
+			//清空申请选择
+			$rootScope.clear_apply = function(){
+					_.each($scope.form_items,function(form){
+						if(form.gcCpnType == 14){//申请选择
+							$rootScope.expend_number_info = null;
+							form.render_value = "";
+							$scope.expend_heads = [];
+							$scope.expend_selectinfo = [];
+							$scope.expend_thshow = false;
+						}else if(form.gcCpnType != 10){
+							form.render_value = '';
+						}
+					});
+					_.remove($scope.form_items,function(form){
+						return form.gcCpnType == 10 && form.deleteflag_jour;
+					});
+					$scope.count_number();
+					//添加行程按钮显示
+					$rootScope.show_add_jour();
+			}
+			//点击选择按钮
+			$scope.selected_expend = function(data,thisitem){
+				$scope.expend_number = data.ap_number;
+				thisitem['render_value'] = data.ap_number;
+				$rootScope.expend_number_info = data.ap_number;
+				$scope.expend_selectinfo = [data];
+				$scope.expend_thshow = true;
+				http_service.post("apply/selectOne",{"apId":data.AP_ID},function(res){
+					expend_reflect_bill(res.data.data);
+					sort_bytime();//子表单按时间排序
+				});
+			}
+					},
+					post: function($scope, element, attrs) {
+						function get_user_budget_list(user_detail) {
+							var bugets_item = [];
+							_.each(user_detail, function(v) {
+								bugets_item.push({
+									'userId': v['an_user_id'],
+									'child': v['child']
+								});
+							});
+							return bugets_item;
+						}
+
+						if($scope.templateid) {
+							http_service.post('template/cpn/search', {
+								"gcTempId": $scope.templateid
+							}, function(res) {
+								complete(res.data);
+							});
+						} else {
+							var post_form_data;
+							if($scope.billid){
+								post_form_data = {
+									"guTempType":parseInt($scope.type),
+									"cache_id":parseInt($scope.type),
+									"tId":$scope.billid
+								}
+							}else{
+								post_form_data = {
+									"guTempType":parseInt($scope.type),
+									"cache_id":parseInt($scope.type)
+								}
+							}
+							http_service.post('form/list',post_form_data, function(res) {
+								if(!res.data.opState){
+									return false;
+								}
+								if($rootScope.close_lock == true){//页面关闭则不做后续操作
+									return false;
+								}
+								complete(res.data);
+								classify();
+							});
+						}
+						//判断预算分类
+						// TODO
+						function classify() {
+//							_.each(filed, function(item) {
+//								if(item.busCode == 'budgetType') {
+//									$scope.typecode = item.mdCode;
+//									_.each($scope.form_items, function(info) {
+//										_.each(filed,function(_filed){
+//											switch (_filed.busCode){
+//												case "project":
+//													if(_filed.mdCode == info.gcMeCode){
+//														info['typeshow'] = 1;
+//													}
+//												break;
+////												case "orgCode":
+////													if(_filed.mdCode == info.gcMeCode){
+////														info['typeshow'] = 1;
+////													}
+////												break;
+//											}
+//										})
+//										if(info.gcMeCode == $scope.typecode) {
+//											$scope.$watch(function() {
+//												return info.render_value;
+//											}, function() {
+////											http_service.post('base/data/search',{'code':$scope.typecode},function(res){
+////												var types = res.data.data.child;
+////												_.each(types,function(type){
+//													
+//													_.each(cddata,function(data){
+//														if(data.cdName == 'orgBudget'){
+//															if(info.render_value == data.cdCode){
+//																info.select_value = '预算部门';
+//																deptbudget();
+//															}
+//															if(!info.render_value){
+//																info.render_value = data.cdCode
+//																info.select_value = '预算部门';
+//																deptbudget();
+//															}
+//														}else if(data.cdName == 'projectBudget'){
+//															if(info.render_value == data.cdCode){
+//																info.select_value = '预算项目';
+//																programbudget();
+//															}
+//														}
+//													})
+//													
+////													if(info.render_value == '002') {
+////													info.select_value = '预算部门';
+////													deptbudget();
+////													} else if(info.render_value == '001') {
+////														info.select_value = '预算项目';
+////														programbudget();
+////													}else{
+////														info.render_value = '002';
+////														info.select_value = '预算部门';
+////														deptbudget();
+////	//													info.render_value = '001';
+////	//													info.select_value = '预算项目';
+////	//													programbudget();
+////													}
+//												$rootScope.select_value = info.render_value;
+//												})
+////											})
+////												
+////											})
+//										}
+//									})
+//								}
+//							})
+					}
+						//判断是否进行报销人验证
+						function is_check_bill_user(name,callback){
+							var post_data;
+							var moneyTypeValiPersion,moneyTypeName;
+							_.each(filed,function(_filed){
+								switch(_filed.busCode){
+									case "moneyTypeValiPersion":
+										moneyTypeValiPersion = _filed;
+									break;
+									case "moneyTypeName":
+										moneyTypeName = _filed;
+									break;
+								}
+							})
+							post_data = {
+								"code":moneyTypeValiPersion.mdCode,
+								"criteria":[{
+									"key":moneyTypeName.elIden,
+									"val":name
+								}],
+								"views":[moneyTypeValiPersion.elIden]
+							};
+							http_service.post("base/data/getVals",post_data,function(res){
+								var data = res.data.data[0];
+								if(data != undefined && data[moneyTypeValiPersion.elIden] != undefined && data[moneyTypeValiPersion.elIden] !== ""){
+									callback(true);
+								}else{
+									callback(false);
+								}
+							})
+						}
+						//提取表单错误数据
+						$rootScope.get_all_err_data = function(){
+							return $scope.get_all_err_data();
+						}
+						$scope.get_all_err_data = function(){
+							var all_err_data = {'form_err_data':[]};
+//							all_err_data.form_err_data = _.cloneDeep($scope.form_items);
+							_.each($scope.form_items,function(form){// 获取标签上红字
+								if(form.gcCpnType != 10 && form.gcCpnType != 17){
+									var new_form;
+									var expend_standard = form.expend_standard;
+									var expend_standard_sp = form.expend_standard_sp;
+									var billMoney = form.billMoney;
+									var bhName = form.bhName;
+									var bbName = form.bbName;
+									var sys_value = form.sys_value;
+									var standard_money = form.standard_money;
+									var is_red = form.is_red;
+									var nobill_cd = form.nobill_cd;
+									var sys_red = form.sys_red;
+									var gcShowFlag = form.gcShowFlag;//用以单据固化后隐藏控件
+									new_form = {'gcMeCode':form.gcMeCode};
+									//保存校验规则
+//									var rule_err = $('i[gcname="' + form.gcColName + '"]');
+//									if(rule_err.length != 0){
+//										_.extend(new_form,{'rule_err':rule_err.html()});
+//									}
+									//保存校验规则 end
+									//保存老数据
+									_.extend(new_form,{'render_value':form.render_value,'gcColName':form.gcColName});
+									if(form.gcCpnType == 12){
+										_.extend(new_form,{'old_users_selected':form.old_users_selected})
+									}else if(form.gcCpnType == 6){
+										_.extend(new_form,{'select_value':form.select_value});
+									}
+									//保存老数据 end
+									
+									if(expend_standard != undefined){
+										_.extend(new_form,{'expend_standard':expend_standard});
+									}
+									if(expend_standard_sp != undefined){
+										_.extend(new_form,{'expend_standard_sp':expend_standard_sp});
+									}
+									if(billMoney != undefined){
+										_.extend(new_form,{'billMoney':billMoney});
+									}
+									if(bhName != undefined){
+										_.extend(new_form,{'bhName':bhName});
+									}
+									if(bbName != undefined){
+										_.extend(new_form,{'bbName':bbName});
+									}
+									if(sys_value != undefined){
+										_.extend(new_form,{'sys_value':sys_value});
+									}
+									if(standard_money != undefined){
+										_.extend(new_form,{'standard_money':standard_money});
+									}
+									if(is_red != undefined){
+										_.extend(new_form,{'is_red':is_red});
+									}
+									if(nobill_cd != undefined){
+										_.extend(fonew_formrm,{'nobill_cd':nobill_cd});
+									}
+									if(sys_red != undefined){
+										_.extend(new_form,{'sys_red':sys_red});
+									}
+									if(gcShowFlag != undefined){//用以单据固化后隐藏控件
+										_.extend(new_form,{'gcShowFlag':gcShowFlag});
+									}
+									all_err_data.form_err_data.push(new_form);
+								}else{
+									var new_form;
+									var is_nobill = form.is_nobill;
+									var bill_user_err = form.bill_user_err;
+									if(form.num == undefined){
+										new_form = {'num':'','child':[],'gcCpnType':form.gcCpnType};
+									}else{
+										new_form = {'num':form.num,'child':[],'gcCpnType':form.gcCpnType};
+									}
+									if(is_nobill != undefined){
+										_.extend(new_form,{'is_nobill':is_nobill,'nobill_red':true});
+									}
+									if(bill_user_err != undefined && bill_user_err != ""){
+										_.extend(new_form,{'bill_user_err':bill_user_err,'nobill_red':true});
+									}
+									_.each(form.child,function(cd){
+										var new_cd;
+										var expend_standard = cd.expend_standard;
+										var expend_standard_sp = cd.expend_standard_sp;
+										var billMoney = cd.billMoney;
+										var bhName = cd.bhName;
+										var bbName = cd.bbName;
+										var sys_value = cd.sys_value;
+										var standard_money = cd.standard_money;
+										var is_red = cd.is_red;
+										var nobill_cd = cd.nobill_cd;
+										var sys_red = cd.sys_red;
+										var gcShowFlag = cd.gcShowFlag//用以单据固化后隐藏控件
+										new_cd = {'gcMeCode':cd.gcMeCode};
+										//保存校验规则
+//										if(form.num == undefined){
+//											var rule_err = $('i[gcname="' + cd.gcColName + '"][gcnum="0"]');
+//										}else{
+//											var rule_err = $('i[gcname="' + cd.gcColName + '"][gcnum="' + (form.num - 1) + '"]');
+//										}
+//										if(rule_err.length != 0){
+//											_.extend(new_cd,{'rule_err':rule_err.html()});
+//										}
+										//保存校验规则 end
+										//保存老数据
+										_.extend(new_cd,{'render_value':cd.render_value,'gcColName':cd.gcColName});
+										if(cd.gcCpnType == 12){
+											_.extend(new_cd,{'old_users_selected':cd.old_users_selected})
+										}else if(cd.gcCpnType == 6){
+											_.extend(new_cd,{'select_value':cd.select_value});
+										}
+										//保存老数据 end
+										
+										if(expend_standard != undefined){
+											_.extend(new_cd,{'expend_standard':expend_standard});
+										}
+										if(expend_standard_sp != undefined){
+											_.extend(new_cd,{'expend_standard_sp':expend_standard_sp});
+										}
+										if(billMoney != undefined){
+											_.extend(new_cd,{'billMoney':billMoney});
+										}
+										if(bhName != undefined){
+											_.extend(new_cd,{'bhName':bhName});
+										}
+										if(bbName != undefined){
+											_.extend(new_cd,{'bbName':bbName});
+										}
+										if(sys_value != undefined){
+											_.extend(new_cd,{'sys_value':sys_value});
+										}
+										if(standard_money != undefined){
+											_.extend(new_cd,{'standard_money':standard_money});
+										}
+										if(is_red != undefined){
+											_.extend(new_cd,{'is_red':is_red});
+										}
+										if(nobill_cd != undefined){
+											_.extend(new_cd,{'nobill_cd':nobill_cd});
+										}
+										if(sys_red != undefined){
+											_.extend(new_cd,{'sys_red':sys_red});
+										}
+										if(gcShowFlag != undefined){//用以单据固化后隐藏控件
+											_.extend(new_cd,{'gcShowFlag':gcShowFlag});
+										}
+										new_form.child.push(new_cd);
+									});
+									all_err_data.form_err_data.push(new_form);
+								}
+							});
+							//获取下方错误信息
+							if($scope.cost_err != undefined && $scope.cost_err.length > 0){// 获取费用不符合标准提示信息
+								_.extend(all_err_data,{"cost_err":_.cloneDeep($scope.cost_err)});
+							}
+							if($scope.rule_bill != undefined && $scope.rule_bill.length > 0){// 获取票据内容错误信息
+								_.extend(all_err_data,{"rule_bill":_.cloneDeep($scope.rule_bill)});
+							}
+							if($scope.unjoin_bill != undefined && $scope.unjoin_bill.child.length > 0){// 获取未关联到行程的票据错误信息
+								_.extend(all_err_data,{"unjoin_bill":_.cloneDeep($scope.unjoin_bill)});
+							}
+							if($scope.other_cost != undefined && $scope.other_cost.length > 0){// 获取其它费用提示
+								_.extend(all_err_data,{"other_cost":_.cloneDeep($scope.other_cost)});
+							}
+							if($scope.maindata_err != undefined && $scope.maindata_err.length > 0){// 获取主数据缺失信息
+								_.extend(all_err_data,{"maindata_err":_.cloneDeep($scope.maindata_err)});
+							}
+							_.extend(all_err_data,{"all_err_show":_.cloneDeep($scope.all_err_show)});
+							_.extend(all_err_data,{"show_cost_err":_.cloneDeep($scope.show_cost_err)});
+							_.extend(all_err_data,{"rule_bill_show":_.cloneDeep($scope.rule_bill_show)});
+							_.extend(all_err_data,{"unjoin_bill_show":_.cloneDeep($scope.unjoin_bill_show)});
+							_.extend(all_err_data,{"nobill_money_hint":_.cloneDeep($scope.nobill_money_hint)});
+//							
+							return all_err_data;
+						}
+						//reflect bill data
+						$rootScope.reflect_bill = function(){
+							reflect_bill();
+						}
+						//改变订单状态
+						$rootScope.change_orderstatus = function(orderstatus_text){
+							$scope.orderstatus = orderstatus_text;
+						}
+						function reflect_bill() {
+							if($rootScope.close_lock == true){
+		                    	return false;
+		                    }
+							$rootScope.formula_num = 0;
+							$rootScope.formula_num_id = [];//查询详情时初始化需要进行请求的前端公式 计数变量
+							var get_bill_data_url = '';
+							var post_data = {};
+							var order_number;
+							if($scope.type === 10) {
+								get_bill_data_url = 'budget/selectOne';
+								post_data = { "buId": $scope.billid };
+								order_number = "bu_number";
+							} else if($scope.type === 20) {
+								get_bill_data_url = 'apply/selectOne';
+								post_data = { "apId": $scope.billid };
+								order_number = "ap_number";
+							} else if($scope.type === 30) {
+								get_bill_data_url = 'expend/selectOne';
+								post_data = { "exId": $scope.billid };
+								order_number = "ex_number";
+							}
+
+							http_service.post(get_bill_data_url, post_data, function(res) {
+								var data = res.data.data;
+								var sub_frms_data = [];
+								var sub_frms = [];
+								var frm_items = [];
+								$scope.billState = data.billState;//报销单状态
+								$scope.exCouldNumber = data.exCouldNumber//云单编号
+								$scope.stepCode = data.stepCode;// 流程状态
+								$rootScope.stepCode = data.stepCode;
+								$rootScope.lock = data.lock//锁头
+								$rootScope.form_id = $scope.billid//表单ID
+								//云单编号
+								if(data.exCouldNumber){
+									$scope.$parent.exCouldNumber = data.exCouldNumber;
+								}
+
+								// 订单状态为审单成功 并且未提交流程的 显示重新审单
+								if ($scope.billState) {
+									if ((!data.stepCode || data.stepCode == 20) && ($scope.billState == 15 || $scope.billState == 19)){
+										$scope.$parent.restart_review_show = true;
+									}
+								}
+								
+
+								if(data.billState) {
+									$scope.$parent.billState = data.billState;//报销单状态
+								}
+								//重新纠偏按钮显示
+								if(data.stepCode == undefined || data.stepCode == ""){
+									$scope.$parent.rectification_show = true;
+								}
+								//票据内容错误信息
+								$scope.err_bill = res.data.data.errMsg;
+								if($scope.err_bill != undefined && $scope.err_bill.length != 0){
+									$scope.err_bill_show = true;
+								}else{
+									$scope.err_bill_show = false;
+								}
+//								if(data.stepCode != 30 && data.stepCode != 10){// 已完成/审核中 表单 不进行任何红字验证 和公式计算
+									//错误信息提示
+									$scope.rule_bill = res.data.data.ruleMsg;
+									$scope.$parent.submit_Pors=true;
+									if($scope.rule_bill != undefined && $scope.rule_bill.length != 0) {
+										$scope.rule_bill_show = true;
+										_.each($scope.rule_bill, function(rule) {
+											if(rule.ruLevel == 30) {
+												$scope.$parent.submit_Pors=false;	
+											} 
+										});
+									} else {
+										$scope.rule_bill_show = false;
+									}
+//								}
+								if(data.billState == 49){
+									$scope.$parent.re_account_show = true;
+									$scope.$parent.re_account_exid = data.ex_id;
+								}else{
+									$scope.$parent.re_account_show = false;
+								}
+								sub_frms_data = data.child;
+								//若无行程信息 则显示添加行程按钮
+								if(data.child == undefined || data.child.length == 0){
+									$scope.add_jour_show = true;
+								}
+								if(data.fchild == undefined || data.fchild.length == 0){
+									$scope.add_pay_show = true;
+								}
+								$scope.selectinfo = [];
+								$scope.createtime = data.insT;
+								//显示订单号
+								$scope.$parent.order_number = data[order_number];
+								var statuslist = [];
+								_.each(cddata,function(item){
+									if(item.cdType == 10){
+										statuslist.push(item)
+									}
+								})
+								_.each(statuslist,function(list){
+									if(list.cdCode == data.billState){
+										$scope.orderstatus = list.cdName
+									}
+								})
+								//自动审单中(票据处理中)不可编辑
+								if(data.billState == 10){
+									$scope.$parent.editflag = false;
+								}
+								//票据处理中或失败  不能提交
+								if(data.billState == 10 || data.billState == 19){
+									$scope.$parent.commitflag_bill = false;
+								}
+								//票据处理中或完成 不能删除
+								if(data.billState == 10 || data.billState == 15){
+									$scope.$parent.deleteflag = false;
+								}
+								if(data.billState == 19){//票据处理失败  显示重新上传按钮
+									$scope.$parent.re_upload = true;
+									$scope.$parent.bill_commit_text = "重新上传";
+								}else if(data.billState == 20){//无票据  显示票据上传按钮
+									$scope.$parent.re_upload = true;
+									$scope.$parent.bill_commit_text = "票据上传";
+								}else{
+									$scope.$parent.re_upload = false;
+								}
+								//assign plugin value
+								$rootScope.budget_back = true;
+								_.each($scope.form_items, function(item){
+	                                var id = item['gcColName'];
+	                                if(id && data[id]){
+	                                	if(item.gcCpnType == 0){//找到占用预算控件
+	                                		//占用预算控件回调
+	                                		$rootScope.budget_selected = data[id];
+				                            http_service.post('budget/pass/budgetInfo',{"buNumber":data[id],"type":$scope.type},function(res){
+				                            	$rootScope.search_hint(res.data.data,'arrary');
+				                            	if(!res.data.opState){
+													return false;
+														}
+												var budget_info = res.data.data[0];
+												//获取表头信息
+												
+												http_service.post('form/search/showTables',{},function(res){
+													$rootScope.search_hint(res.data.data,'arrary');
+													$scope.heads = res.data.data;
+													var startTime,endTime;
+													
+													$scope.info = {};
+													$scope.sumMoney = "";
+													startTime = "";
+													endTime = "";
+													$scope.orgName = "";
+													_.each($scope.heads,function(hd){
+														_.each(filed,function(_filed){
+															if(hd.gcMeCode == _filed.mdCode){
+																if(budget_info == undefined){
+																	return false;
+																}
+																if(budget_info[hd.gcColName]){
+																	$scope.info[hd.gcColName] = budget_info[hd.gcColName];
+																	switch(_filed.busCode){
+																		case "sumMoney"://预算金额
+																		$scope.sumMoney = "【"+hd.gcCpnAlias+"】 "+budget_info[hd.gcColName]+" ";
+									$scope.info[hd.gcColName] = $scope.sumMoney;
+																		break;
+																		case "beginCalendar":
+																		startTime = budget_info[hd.gcColName];
+									$scope.info[hd.gcColName] = startTime;
+																		break;
+																		case "endCalendar":
+																		endTime = budget_info[hd.gcColName];
+									$scope.info[hd.gcColName] = endTime;
+																		break;
+																		case "orgName"://组织机构
+																		$scope.orgName = budget_info[hd.gcColName];
+									$scope.info[hd.gcColName] = $scope.orgName;
+																		break;
+																	}
+																}
+															}
+														});
+													});
+													if(startTime&&endTime){
+														$scope.time = "【预算时间】"+startTime+"~"+endTime;
+														$rootScope.startTime = startTime;
+														$rootScope.endTime = endTime;
+													}
+													if(budget_info){
+														$rootScope.sumMoney_budget = budget_info.bu_money;
+														$rootScope['child_money'] = budget_info.child_money;
+														$scope.thshow = true;
+														$scope.info['bu_number'] = budget_info.bu_number;
+														$scope.info['bu_money'] = budget_info.bu_money;
+														$scope.selectinfo.push($scope.info);
+													}
+												})
+											});
+	                                	}else if(item.gcCpnType == 14){//选择申请回调
+	                                		item['render_value'] = data[id];
+	                                		$rootScope.expend_number_info = data[id];
+	                                		http_service.post('apply/pass/applyInfo',{"apNumber":data[id],"type":$scope.type},function(res){
+				                            	$rootScope.search_hint(res.data.data,'arrary');
+				                            	if(!res.data.opState){
+													return false;
+														}
+												$scope.expend_selectinfo = res.data.data;
+												//获取表头信息
+												
+												http_service.post('form/search/apply/showTables',{},function(res){
+													$rootScope.search_hint(res.data.data,'arrary');
+													$scope.expend_heads = res.data.data;
+													$scope.expend_thshow = true;
+												})
+											});
+	                                	}else{
+	                                		item['render_value'] = data[id];
+	                                	}
+		                            }
+	                            });
+	                            var pay_child = [];
+	                            _.each($scope.form_items, function(item){//支付方式子表单回调 step1
+	                            	 if(item.gcCpnType == 17){
+	                                	_.each(data.fchild,function(fcd){
+	                                		_.each(item.child,function(pay){
+	                                			var pay_id = pay['gcColName'];
+	                                			if(pay_id && fcd[pay_id]){
+	                                				pay.render_value = fcd[pay_id];
+	                                			}
+	                                		})
+	                                		_.extend(item,{"ef_id":fcd.ef_id});
+	                                		pay_child.push(_.cloneDeep(item));
+	                                	})
+	                                }
+	                            })
+	                            _.remove($scope.form_items,function(o){
+	                            	return o.gcCpnType == 17;
+	                            })
+	                            _.each(pay_child, function(item){//支付方式子表单回调 step3
+	                            	 $scope.form_items.push(item);
+	                            })
+	                            
+                            	_.each($scope.form_items, function(item) {//保存人员信息
+									if(item['gcCpnType'] == 12) {
+										var user = [{
+											"personCode":item.render_value
+										}];
+										myServeice.setuser(user);
+									} 
+								});
+                            	
+								_.each($scope.form_items, function(item) {
+									if(item['gcCpnType'] == 10) {
+										_.each(sub_frms_data, function(v, k) {
+											var _item = _.cloneDeep(item);
+											frm_items.push(_item);
+											sub_frms.push(_item);
+										})
+									} else {
+										frm_items.push(item);
+									}
+								});
+								_.each(sub_frms_data, function(sub_frm_data, k) {
+									
+									var bugets_item = get_user_budget_list(sub_frm_data['child']);
+									sub_frms[k]['budget_list'] = bugets_item;
+                                 sub_frms[k]['money'] = sub_frms_data[k]['money'];
+                                  sub_frms[k]['aj_id'] = sub_frms_data[k]['aj_id'];
+                                  sub_frms[k]['ej_id'] = sub_frms_data[k]['ej_id'];
+                                  sub_frms[k]['ej_days'] = sub_frms_data[k]['ej_days'];
+                                  sub_frms[k]['ej_hours'] = sub_frms_data[k]['ej_hours'];
+                                  sub_frms[k]['ej_kms'] = sub_frms_data[k]['ej_kms'];
+                                  sub_frms[k]['span_night'] = sub_frms_data[k]['span_night'];
+                                  if(sub_frms_data[k]['billInfos'] != undefined){
+                                  	sub_frms[k]['billInfos_str'] = sub_frms_data[k]['billInfos'];
+                                  	sub_frms[k]['billInfos'] = [JSON.parse(sub_frms_data[k]['billInfos'])];
+                                  }
+									var sub_frms_child = sub_frms[k].child;
+									_.each(sub_frms_child, function(child) {
+										var sfc_key = child['gcColName'];
+										if(sfc_key && sub_frm_data[sfc_key]) {
+											child['render_value'] = sub_frm_data[sfc_key];
+										}
+									});
+								});
+								$scope.form_items = frm_items;
+								
+								$scope.sysSearchFinsh = true;
+//                          
+								$scope.$parent.form_data['child'] = $scope.form_items;
+								if(data['ex_id'] != undefined){
+									$scope.expned_id = data['ex_id'];
+								}
+								$scope.$parent.form_data['ap_id'] = data['ap_id'] || data['bu_id'] || data['ex_id'];
+								
+								console.log($scope.form_items);
+									console.log(JSON.stringify($scope.form_items));
+								//监听显示是否完成
+								var inited_flag = $interval(function(){
+									
+									var fiished = true;
+									
+									_.each($scope.form_items,function(form){
+										if(form.gcCpnType == 12 || form.gcCpnType == 6){
+											// if(form.inited != true){
+												// console.log(form.inited);
+												fiished = true;
+											// }
+										}else if(form.gcCpnType == 10 || form.gcCpnType == 17){
+											_.each(form.child,function(cd){
+												if(cd.gcCpnType == 12 || cd.gcCpnType == 6){
+													if(cd.inited != true){
+														fiished = false;
+													}
+												}
+											})
+										}
+									});
+									// console.log('emmmmmmm');
+									if(fiished == true){
+										$scope.$parent.init_btn_flag = true; 
+										$interval.cancel(inited_flag);
+										inited_flag = undefined;
+									}else{
+										$scope.$parent.init_btn_flag = false;
+									}
+								},1000);
+								
+								//跨行程验证开始时间
+								$rootScope.check_data_cross();
+								//报销单计算费用
+								if($scope.type == 30){
+									if(data.stepCode != 30 && data.stepCode != 10){// 已完成/审核中 表单 不进行任何验证 和计算 
+										//格式化报销人验证 信息
+										_.each($scope.form_items,function(form){
+											if(form.gcCpnType == 10){
+												if(form.billInfos){
+													var bill_user_check = [];
+													var bill_user_info = [];
+													bill_user_check.push(bill_user_info);
+													_.each(form.billInfos,function(bill){
+														var fromDate_value = "";//出发日期特殊处理  = 出发日期加时间
+														_.each(bill.map,function(_map){
+															if(_map.bhKey == "FromDate"){
+																fromDate_value += _map.bhValue;
+															}
+														});
+														_.each(bill.map,function(_map){
+															if(_map.bhKey == "FromTime"){
+																fromDate_value += " " + _map.bhValue;
+															}
+														});
+														_.each(bill.map,function(_map){
+															if(_map.bhKey == "FromDate"){
+																_map.bhValue = fromDate_value;
+																_map.bhName = fromDate_value;
+															}
+														})//特殊处理结束
+//														var fromDate_value_cd = "";//出发日期特殊处理  = 出发日期加时间
+//														_.each(bill.child,function(bd){
+//															if(bd.bbKey == "FromDate"){
+//																fromDate_value_cd += bd.bbValue;
+//															}
+//														});
+//														_.each(bill.child,function(bd){
+//															if(bd.bbKey == "FromTime"){
+//																fromDate_value_cd += " " + bd.bbValue;
+//															}
+//														});
+//														_.each(bill.child,function(bd){
+//															if(bd.bbKey == "FromDate"){
+//																bd.bbValue = fromDate_value_cd;
+//																bd.bbName = fromDate_value_cd;
+//															}
+//														});//特殊处理结束
+														
+														var bill_info_data = {};
+														var PersonalName,persionCode
+															, billTypeName, billTypeCode;
+														_.each(bill.map,function(_bmap){
+															
+															if(_bmap.bhKey == "PersonalName"){
+																PersonalName = _bmap.bhName;
+																persionCode = _bmap.bhValue;
+															}
+															
+															if(_bmap.bhKey == "billType"){
+																billTypeName = _bmap.bhName;
+																billTypeCode = _bmap.bhValue;
+															}
+														});
+														if(PersonalName && persionCode && billTypeName && billTypeCode){
+															is_check_bill_user(billTypeName,function(flag){
+																	if(flag){
+																		 _.extend(bill_info_data,{
+																			"typeName":billTypeName,
+																			"typeCode":billTypeCode,
+																			"PersonalName":PersonalName,
+																			"persionCode":persionCode
+																		})
+																		bill_user_info.push(bill_info_data);
+																		form['bill_user_check'] = bill_user_check;
+																		$rootScope.check_bill_user();
+																	}
+															})
+															
+														}
+													});
+												}
+											}
+										});
+									}
+									
+									if(data.stepCode != 30 && data.stepCode != 10){// 已完成/审核中 表单 不进行任何验证 和计算 
+										$scope.bill_data_check();//获取详情数据后  验证
+									
+										if($scope.billState == 10){//报销单状态为自动审单中状态,则发送验证是否存在主数据缺失
+											if($scope.exCouldNumber != ""){//无云单编号 不进行主数据缺失验证
+												_.each($scope.formula,function(formula){//验证前先计算前端公式
+									            	$scope.formula_computing(formula,$scope.form_items);
+									            });
+									            
+									            http_service.post("errmsg/search/checkBillInfo",{"oCode":data.exCouldNumber},function(res){//发送验证请求
+									            	if(res.data.opState){
+									            		$scope.select_isright = res.data.data;//true 为没有主数据缺失  false为有缺失
+									            	}
+									            	$scope.query_journel_budget($scope.type,function(){},true);//验证完后计算 前端公式			            	},5000);
+									            })
+											}
+										}else{
+									    	$scope.query_journel_budget($scope.type,function(){},true);	
+										}
+									}
+									
+										
+									//若不是本人的报销单 则不能编辑和删除
+									if(data.insP != app_userinfo.userId){
+										$scope.$parent.editflag = false;
+										$scope.$parent.deleteflag = false;
+									}
+									
+									
+								}
+								//获取费用类型数据
+								http_service.post("supp/search/master", { "mdType": 1 }, function(res) {
+									$scope.cost_type = res.data.data;
+									_.each($scope.form_items, function(cd) {
+										if(cd.budget_list && cd.budget_list.length != 0) {
+											_.each($scope.cost_type, function(type) {
+												_.each(cd.budget_list[0].child, function(_list) {
+													if(_list.jp_cd_code == type.mdCode) {
+														_.extend(type, { "jp_amount": _list.jp_amount, "jp_cd_code": _list.jp_cd_code });
+													}
+												})
+											})
+											cd.budget_list[0].child = $scope.cost_type;
+										}
+									})
+								});
+								
+								
+								$scope.count_number();
+								
+								if(data.errInfo != undefined && JSON.parse(data.errInfo) != undefined && (data.stepCode != undefined && (data.stepCode == 30|| data.stepCode == 10))){// 显示 已完成/审核中 表单的错误信息
+//									
+									data.errInfo = JSON.parse(data.errInfo)
+									_.each($scope.form_items,function(form){
+										_.each(data.errInfo.form_err_data,function(form_err){
+											if(form.gcCpnType != 10 && form.gcCpnType != 17){
+												if(form.gcMeCode != undefined && form.gcMeCode == form_err.gcMeCode){
+													_.extend(form,form_err);
+												}
+											}else{
+												if(form.num == undefined){
+													form.num = "";
+												}
+												var fnum = form.num?(form.num - 1):0;
+												if(form.num == form_err.num && form.gcCpnType == form_err.gcCpnType){
+													if(form_err.is_nobill != undefined){
+														_.extend(form,{'is_nobill':form_err.is_nobill});
+													}
+													if(form_err.bill_user_err != undefined && form_err.bill_user_err != ""){
+														_.extend(form,{'bill_user_err':form_err.bill_user_err});
+													}
+													if(form_err.nobill_red != undefined){
+														_.extend(form,{'nobill_red':form_err.nobill_red});
+													}
+													_.each(form.child,function(cd){
+														_.each(form_err.child,function(e_cd){
+															if(cd.gcMeCode != undefined && cd.gcMeCode == e_cd.gcMeCode){
+																_.extend(cd,e_cd);
+//																if(e_cd.rule_err != undefined){
+//																	
+//																	
+//																	if(cd.gcCpnType == 6){
+//																		
+//																		$timeout(function(){
+//																			$('*[gccolname="' + cd.gcColName + '"]:eq(' + fnum + ')').closest('.select').append("<i class='errinfo_point' gcname="+cd.gcColName+" gcnum="+fnum+" style='position:absolute;margin-top:4px;'>" + e_cd.rule_err +"</i>");
+//																		},10)
+//																		
+//																	}else if(cd.gcCpnType == 5){
+//																		$timeout(function(){
+//																			$("<i class='errinfo_point' gcname="+cd.gcColName+" gcnum="+fnum+">" + e_cd.rule_err + "</i>").appendTo($('*[gccolname="' + cd.gcColName + '"]:eq(' + fnum + ')').closest(".timeinfo"));
+//																		},10)
+//																		
+//																	}else{
+//																		
+//																	}
+//																}
+															}
+														});
+													});
+												}
+											}
+										});
+									});
+									if(data.errInfo.all_err_show != undefined){
+										$scope.all_err_show = data.errInfo.all_err_show;
+									}
+									if(data.errInfo.show_cost_err != undefined){
+										$scope.show_cost_err = data.errInfo.show_cost_err;
+									}
+									if(data.errInfo.rule_bill_show != undefined){
+										$scope.rule_bill_show = data.errInfo.rule_bill_show;
+									}
+									if(data.errInfo.unjoin_bill_show != undefined){
+										$scope.unjoin_bill_show = data.errInfo.unjoin_bill_show;
+									}
+									if(data.errInfo.nobill_money_hint != undefined){
+										$scope.nobill_money_hint = data.errInfo.nobill_money_hint;
+									}
+									if(data.errInfo.maindata_err != undefined){
+										$scope.maindata_err = data.errInfo.maindata_err;
+									}
+									if(data.errInfo.other_cost != undefined){
+										$scope.other_cost = data.errInfo.other_cost;
+									}
+									if(data.errInfo.unjoin_bill != undefined){
+										$scope.unjoin_bill = data.errInfo.unjoin_bill;
+									}
+									if(data.errInfo.rule_bill != undefined){
+										$scope.rule_bill = data.errInfo.rule_bill;
+									}
+									if(data.errInfo.cost_err != undefined){
+										$scope.cost_err = data.errInfo.cost_err;
+									}
+									$timeout(function(){
+										$rootScope.checkdata();//已完成/审核中单子 进行规则校验
+									},10)
+								}
+								
+						});
+                   }
+					//验证报销人信息
+					$rootScope.check_bill_user = function(){
+						//找到人员控件
+						var now_user;
+						_.each($scope.form_items,function(item){
+							if(item.gcCpnType == 12){
+								now_user = item.render_value; 
+							}
+						});
+						_.each($scope.form_items,function(form){
+							if(form.gcCpnType == 10){
+								if(form.bill_user_check){
+									var bill_user_err = [];
+									_.each(form.bill_user_check,function(bill){
+										_.each(bill,function(info){
+											var err;
+											if(info.persionCode){
+												if(info.persionCode != now_user){
+													err = info.typeName + " '"+info.PersonalName + "' 与单据人员不符";
+													bill_user_err.push(err);
+												}
+											}else{
+												err = info.typeName + " '"+info.PersonalName + "' 与单据人员不符";
+												bill_user_err.push(err);
+											}
+										})
+									});
+									if(bill_user_err.length != 0){
+										form['is_red'] = true;
+										form['nobill_red'] = true;
+										form['bill_user_err'] = bill_user_err.join(",");
+									}else{
+										form['is_red'] = false;
+										form['nobill_red'] = false;
+										form['bill_user_err'] = "";
+									}
+								}
+							}
+						});
+						$scope.have_err();
+					}
+					//获取详情数据后  验证
+					$scope.bill_data_check = function(){
+						if($scope.stepCode == 30 || $scope.stepCode == 10){// 已完成/审核中 表单 不验证
+							return false;
+						}
+						if($scope.type != 30){
+							return false; // 非报销单 不进行票据信息验证
+						}
+						//将城市间交通费 放在最后
+//						_.each($scope.form_items, function(form){
+//							if(form.gcCpnType == 10){
+//								if(form.billInfos != undefined && form.billInfos.length != 0){
+//									var city_to_tity = [];
+//									_.each(form.billInfos, function(bill){
+//										_.each(bill.map, function(map){
+//											if(map.bhName == "城市间交通费" && map.bhKey == "billType"){
+//												city_to_tity.push(bill);
+//											}
+//										});
+//									});
+//									_.pullAllBy(form.billInfos,city_to_tity,"bhBillCode");
+//									form.billInfos.push(city_to_tity[0]);
+//								}
+//							}
+//						});
+						
+						//获取离开日期控件的主数据code 和要进行无票信息验证的控件的主数据code
+						var journeyEndDate_code;
+						var nobill_data_check = [];
+						_.each(filed,function(_filed){
+							if(_filed.busCode == 'journeyEndDate'){
+								journeyEndDate_code = _filed.mdCode;
+							}
+							if(_filed.mappingIden && _filed.mappingIden == 'billInfo'){
+								nobill_data_check.push(_filed.mdCode);
+							}
+						})
+						_.each($scope.form_items,function(form){
+							if(form.gcCpnType == 10){
+								if(form.billInfos){
+									if(form.billInfos.length == 0){
+										form['is_nobill'] = "无票据行程";
+										form['nobill_red'] = true;
+									}
+									_.each(form.billInfos,function(bill){
+										_.each(form.child,function(cd){
+											
+											if(cd.nobill_cd == undefined && _.indexOf(nobill_data_check,cd.gcMeCode) != -1){//无票据信息验证 只验证一次
+												if(cd.gcMeCode != journeyEndDate_code){//有票据信息的行程  控件 默认为红色 除了离开日期控件
+													cd['nobill_cd'] = true;
+												}
+												if(cd.joinMath.length > 0){//自动计算的控件 不进行无票据信息验证
+													cd['nobill_cd'] = false;
+												}
+											}
+											
+											_.each(bill.map,function(_map){
+												if(_map.bhName == undefined || _map.bhName == "" && _map.bhKey != "ToDate"){//若为空 则默认为无
+													_map['bhName'] = '无';
+												}
+												_.each(filed,function(_filed){
+													if(_map.bhKey == "ToDate" && _filed.busCode == _map.bhKey && cd.gcMeCode == _filed.mdCode){//到达日期 不验证
+//														
+														cd['nobill_cd'] = false;
+														cd['is_red'] = false;
+														return false;
+													}
+													if(_filed.busCode == _map.bhKey && cd.gcMeCode == _filed.mdCode){
+														cd['nobill_cd'] = false;
+														cd.bhName = _map.bhName;
+														cd.bhValue = _map.bhValue;
+														if(cd.render_value == "" || cd.render_value == undefined){
+															cd['is_red'] = true;
+														}else if(_map.bhValue != cd.render_value || _map.bhName == '无'){
+															cd['is_red'] = true;
+														}else{
+															cd['is_red'] = false;
+														}
+														return false;
+													}
+												})
+											});
+											
+//											_.each(bill.child,function(bd){
+//												if(bd.bbName == undefined || bd.bbName == "" && bd.bbKey != "ToDate"){//若为空 则默认为无
+//													bd['bbName'] = "无";
+//												}
+//												_.each(filed,function(_filed){
+//													if(bd.bbKey == "ToDate" && _filed.busCode == bd.bbKey && cd.gcMeCode == _filed.mdCode){//到达日期 不验证
+//														cd['nobill_cd'] = false;
+//														cd['is_red'] = false;
+//														return false;
+//													}
+//													if(_filed.busCode == bd.bbKey && cd.gcMeCode == _filed.mdCode){
+//														cd.bbName = bd.bbName;
+//														if(cd.render_value == "" || cd.render_value == undefined){
+//															cd['is_red'] = true;
+//														}else if(bd.bbValue != cd.render_value || bd.bbName == '无'){
+//															cd['is_red'] = true;
+//														}else{
+//															cd['is_red'] = false;
+//														}
+//														return false;
+//													}
+//												})
+//											});
+										})
+										
+									})
+								}else{
+									form['is_nobill'] = "无票据行程";
+									form['nobill_red'] = true;
+								}
+							}
+						});
+						$scope.have_err();
+					}
+					//判断是否显示错误提示
+					$scope.have_err = function(){
+						var err_flag = false;
+						_.each($scope.form_items,function(form){
+							if(form.gcCpnType == 10){
+								_.each(form.child,function(cd){
+									if(cd.is_red){
+										err_flag = true;
+									}
+								});
+							}else{
+								if(form.is_red){
+									err_flag = true;
+								}
+							}
+						})
+						$scope.all_err_show = err_flag;
+					}
+//						http_service.post('syscfg/search/budegtTypes', {}, function(res) {
+//							$scope.deptbudgetflag = res.data.data[0];
+//							$scope.programbudgetflag = res.data.data[1];
+//							//添加默认
+//							if($scope.type == 10 && $scope.deptbudgetflag && $scope.programbudgetflag) {
+//								$scope.classify = '部门预算';
+//								deptbudget();
+//							} else if($scope.type == 10 && $scope.deptbudgetflag) {
+//								$scope.classify = '部门预算';
+//								deptbudget();
+//							} else if($scope.type == 10 && $scope.programbudgetflag) {
+//								$scope.classify = "项目预算";
+//								programbudget();
+//							}
+//						})
+//						$scope.programbudget = function() {
+//							if($scope.type == 10) {
+//								programbudget();
+//							}
+//						}
+//						$scope.deptbudget = function() {
+//							if($scope.type == 10) {
+//								deptbudget();
+//							}
+//						}
+						$scope.checkshow = function(item) {
+							if(item.gcCpnType != 90) {
+								if($scope.type == 10){
+									if(item.typeshow){
+										if(item.typeshow == 0){
+											return true;
+										}else{
+											return false;
+										}
+									}else{
+										return true;
+									}
+								}else{
+									return true;
+								}
+								
+							}
+//							if($scope.type == 10 && $scope.isbill) {
+//								//判断是项目预算还是部门预算
+//								if($scope.select_value == '002'){
+//									deptbudget();
+//								}else{
+//									programbudget();
+//								}
+//								return true;
+//							}
+						}
+						
+//						for(i in filed) {
+//							if(filed[i].busCode == 'orgCode') {
+//								http_service.post('base/data/search', { code: filed[i].mdCode }, function(response) {
+//									$scope.options = response.data.data.child;
+//									programbudget();
+//								})
+//								break;
+//							}
+//						}
+//						for(i in filed) {
+//							if(filed[i].busCode == 'orgCode') {
+//								http_service.post('base/data/search', { code: filed[i].mdCode }, function(response) {
+//									$scope.sel_val_lst = response.data.data.child;
+//								})
+//								break;
+//							}
+//						}
+						//项目预算分类
+						function programbudget() {
+							//点击项目预算,展示部门(多选)及项目
+//							_.each(filed, function(item) {
+//								if(item.busCode == 'orgCode') {
+//									$scope.thecode = item.mdCode;
+//									_.each($scope.form_items, function(items) {
+//										if($rootScope.mustscode == items.gcMeCode) {
+//											items['typeshow'] = 1;
+//										}
+//										if(items.gcMeCode == $scope.thecode) {
+//											items['typeshow'] = 0;
+////											items.gcCpnMultiple = 1;
+////											$rootScope.multiple = true;
+//											$timeout(function(){
+//												items.ismultiple = true;
+//											},1)
+//											
+//										}
+//									})
+//								}
+//								if(item.busCode == 'project') {
+//									$scope.thepcode = item.mdCode;
+//									_.each($scope.form_items, function(iteminfo) {
+//										if($rootScope.mustscode == iteminfo.gcMeCode) {
+//											iteminfo['typeshow'] = 1;
+//										}
+//										if(iteminfo.gcMeCode == $scope.thepcode) {
+//											$rootScope.mustprocode = $scope.thepcode;
+//											iteminfo['typeshow'] = 0;
+//										}
+//									})
+//								}
+//								//上级管控
+//								if(item.busCode == 'superBudget') {
+//									$scope.thescode = item.mdCode;
+//									_.each($scope.form_items, function(itemsuper) {
+//										if(itemsuper.gcMeCode == $scope.thescode) {
+//											itemsuper['typeshow'] = 1;
+//										}
+//									})
+//								}
+//							})
+					}
+						
+						
+						
+						
+						// TODO
+						//部门预算分类
+						function deptbudget() {
+							//选择部门预算出现预算部门和上级预算管控控件,显示这两个控件
+//							_.each(filed, function(item) {
+//								if(item.busCode == 'orgCode') {
+//									$scope.thedcode = item.mdCode;
+//									_.each($scope.form_items, function(itemdept) {
+//										if(($rootScope.mustscode == itemdept.gcMeCode) || ($rootScope.mustprocode == itemdept.gcMeCode)) {
+//											itemdept['typeshow'] = 1;
+//										}
+//										if(itemdept.gcMeCode == $scope.thedcode) {
+//											$rootScope.mustccode = $scope.thecode;
+////											itemdept.gcCpnMultiple = 0;
+//											itemdept['typeshow'] = 0;
+////											$rootScope.multiple = false;
+//											itemdept.ismultiple = false;
+//										}
+//									})
+//								}
+//								//上级管控
+//								if(item.busCode == 'superBudget') {
+//									$scope.thescode = item.mdCode;
+//									_.each($scope.form_items, function(itemsuper) {
+//										if(itemsuper.gcMeCode == $scope.thescode) {
+//											$scope.mustscode = $scope.thescode;
+//											itemsuper['typeshow'] = 0;
+//										}
+//									})
+//								}
+//							})
+						}
+						
+						
+						function complete(res) {
+							var data = res.data;
+							var select_arr;
+							if(!data) {
+								return false;
+							}
+							//获取公式数据 、系统变量公式数据
+							$scope.formula = [];
+							$scope.sys_formula = [];
+							_.each(data.child,function(item){
+								if(item.gcCpnType != 10 && item.gcCpnType != 17){
+									if(item.gcDefVal != undefined && $scope.isbill == "false"){//新增时才添加默认值
+										if(item.gcCpnType == 5 && item.gcDefVal == '10'){//默认时间为当前时间
+											var now_date = $rootScope.getNewDate();
+											item.gcDefVal = now_date.getFullYear()+"-"+(now_date.getMonth()+1)+"-"+now_date.getDate();
+										}else if(item.gcCpnType == 5 && item.gcDefVal != '10'){
+											item.gcDefVal = '';
+										}
+										item['render_value'] = item.gcDefVal;
+									}
+									if(item.joinMath){
+										if(item.joinMath.length > 0){
+											_.each(item.joinMath,function(join){
+												if(join.cpnMath){
+													if(join.cpnMath.child.length > 1){
+														$scope.formula.push(join.cpnMath);
+													}
+												}
+											})
+										}
+									}
+									if(item.systemMathEntity != undefined){//系统变量公式
+										$scope.sys_formula.push({
+											"target":item.gcMeCode,
+											"formula":item.systemMathEntity,
+											"mathId":item.gcMathId
+										});
+									}
+								}else{
+									_.each(item.child,function(cd){
+										if(cd.gcDefVal != undefined && $scope.isbill == "false"){//新增时才添加默认值
+											if(cd.gcCpnType == 5 && cd.gcDefVal == '10'){//默认时间为当前时间
+												var now_date = $rootScope.getNewDate();
+												cd.gcDefVal = now_date.getFullYear()+"-"+(now_date.getMonth()+1)+"-"+now_date.getDate();
+											}else if(cd.gcCpnType == 5 && cd.gcDefVal != '10'){
+												cd.gcDefVal = '';
+											}
+											cd['render_value'] = cd.gcDefVal;
+										}
+										if(cd.joinMath){
+											if(cd.joinMath.length > 0){
+												_.each(cd.joinMath,function(join){
+													if(join.cpnMath){
+														if(join.cpnMath.child.length > 1){
+															$scope.formula.push(join.cpnMath);
+														}
+													}
+												})
+											}
+										}
+										if(cd.systemMathEntity != undefined){//系统变量公式
+											$scope.sys_formula.push({
+												"target":cd.gcMeCode,
+												"formula":cd.systemMathEntity,
+												"mathId":cd.gcMathId
+											});
+										}
+									});
+								}
+							});
+//							
+							//保存行程控件信息
+							_.each(data.child,function(item){
+								if(item.gcCpnType == 10){
+									$scope.form_jour = _.cloneDeep(item);
+								}
+								if(item.gcCpnType == 17){
+									$scope.form_pay = _.cloneDeep(item);
+								}
+							})
+							$scope.template_name = data.guTempName;
+							$scope.template_desc = data.guTempDisc;
+							$scope.form_items = data.child;
+							//新增时默认无行程
+							if($scope.isbill == "false"){
+								var new_form = [];
+								_.each($scope.form_items,function(form){
+									if(form.gcCpnType != 10){
+										new_form.push(form);
+									}
+								});
+								$scope.form_items = new_form;
+								$scope.add_jour_show = true;
+							}
+							$scope.form_list = _.cloneDeep(data.child);
+//							_.each($scope.form_items, function(_item) {
+//								if(_item.gcCpnType == 6) {
+//									http_service.post('base/data/search', { "code": _item.gcMeCode }, function(result) {
+//										var arr = [];
+//										_.each(result.data.data.child, function(_res) {
+////											if(_item.render_value) {
+////												if(_item.render_value.indexOf(",") > -1){
+////													select_arr = _item.render_value.split(",");
+////													if(select_arr.length > 1) {
+////														select_arr.pop();
+////													}
+////												}else{
+////													select_arr = _item.render_value.split("");
+////												}
+////												
+////												for(i in select_arr) {
+////													if(_res.code == select_arr[i]) {
+////														arr.push(_res.value);
+////													}
+////												}
+////												if(arr.length != 0) {
+////													_item = _.extend(_item, { "select_value": arr.join(",") });
+////												}
+////			
+////											}else {
+////												var timer = setInterval(function() {
+////													if(_item.render_value) {
+////														
+////														if(_res.code == _item.render_value) {
+////															
+////															_item = _.extend(_item, { "select_value": _res.value });
+////														}
+////														clearInterval(timer);
+////													}
+////												}, 1);
+////											}
+//											$scope.$watch(function(){
+//												return _item.render_value
+//											},function(){
+//												if(_item.render_value != undefined) {
+//													if(_item.render_value.indexOf(",") != -1){
+//														select_arr = _item.render_value.split(",");
+//														if(select_arr.length > 1) {
+//															select_arr.pop();
+//														}
+//													}else{
+//														select_arr = [_item.render_value];
+//													}
+//													for(i in select_arr) {
+//														if(_res.code == select_arr[i]) {
+//															arr.push(_res.value);
+//														}
+//													}
+//													if(arr.length != 0) {
+//														_item = _.extend(_item, { "select_value": arr.join(",") });
+//													}
+//				
+//												}else {
+//													var timer = setInterval(function() {
+//														if(_item.render_value) {
+//															
+//															if(_res.code == _item.render_value) {
+//																
+//																_item = _.extend(_item, { "select_value": _res.value });
+//															}
+//															clearInterval(timer);
+//														}
+//													}, 1);
+//												}
+//											})
+//										})
+//									});
+//								}
+//							});
+							$scope.guId = data.guId;
+							$scope.$parent.form_data = data;
+							$scope.$parent.form_data.child = $scope.form_items;
+							//新增时默认添加用户信息
+							if($scope.isbill == "false"){
+								_.each($scope.form_items,function(form){
+									if(form.gcCpnType == 12){
+										form.render_value = app_userinfo.empCode;
+										$rootScope.change_apmonut(form);
+									}
+								})
+							}
+							
+							
+							
+							if($scope.billid) {
+								reflect_bill();
+							}
+						}
+
+					}
+				}
+			}
+		}
+	}])
+	.filter("selected_flag", function() {
+		return function(input) {
+			if(input) {
+				return "+";
+			} else {
+				return "-";
+			}
+		}
+})
+.filter("getamount",function(){
+	return function(inputs,parmas){
+		var value;
+		_.each(inputs.money,function(money){
+			if(money.jp_cd_code == parmas.gcMeCode){
+				value = money.jp_amount;
+			}
+		})
+		return value;
+	}
+})
+.filter("getall", function() {
+		return function(input, params) {
+			var allcost = 0;
+			_.each(input, function(cost) {
+				if(cost != undefined) {
+					if("budget_list" in cost) {
+						if(cost.budget_list.length != 0) {
+							if('child' in cost.budget_list[0]) {
+								_.each(cost.budget_list[0].child, function(spell) {
+									if(params != 0) {
+										if(spell.jp_cd_code == params) {
+											allcost += spell.jp_amount;
+										}
+									} else {
+										allcost += spell.jp_amount;
+									}
+
+								});
+							}
+						}
+					}
+				}
+			});
+			return allcost;
+		}
+	});
\ No newline at end of file
diff --git a/src/static/js/system_config/module.js b/src/static/js/system_config/module.js
new file mode 100644
index 0000000..bfcea29
--- /dev/null
+++ b/src/static/js/system_config/module.js
@@ -0,0 +1,577 @@
+angular.module('system_cfg', [])
+	.controller('systemCfgCtrl', ['$scope', '$rootScope', 'http_service', '$compile', function($scope, $rootScope, http_service, $compile) {
+		_.extend($scope, {
+			"toggle": function(bool) {
+				var eval_str = '$scope';
+				_.each(bool.split('.'), function(key) {
+					eval_str += '["' + key + '"]';
+				});
+				var bool_value = eval(eval_str);
+				eval_str += '=' + (bool_value === '0' ? '"1"' : '"0"') + ';'
+				eval(eval_str);
+			},
+			"cfg_data": {
+				"budget": {
+					"budget_open": "0",
+					"budget_type": [false, false],
+					"budget_method": '0',
+					"budget_scale": "",
+					"budget_amount": ""
+				},
+				"apply": {
+					"apply_open": "0"
+						//							"apply_type": [false, false],
+						//							"apply_point": "1"
+				},
+				"expend": {
+					"expend_open": "0"
+						//							"expend_over": "1",
+						//							"expend_below": "1",
+						//							"expend_free": "1",
+						//							"expend_cross": "1",
+						//							"expend_supply": "1"
+				}
+			},
+			"budget_ctrl_value": {
+				"type": "ratio"
+			},
+			"parseInt": function(v) {
+				return parseInt(v);
+			},
+			"check_ratio_value": function() {
+				if(/(^\s*\d+\.?\d*)%\s*$/.test($scope.cfg_data.budget.budget_scale)) {
+					$scope.ratio_val_match = true;
+				} else {
+					$scope.ratio_val_match = false;
+				}
+			},
+			"check_finger_value": function() {
+				if(/^(0|[1-9][0-9]*)$/.test($scope.cfg_data.budget.budget_amount)) {
+					$scope.finger_val_match = true;
+				} else {
+					$scope.finger_val_match = false;
+				}
+			},
+			"save_system_cfg": function() {
+				var cfg_data = $scope.cfg_data;
+				var data = [];
+				_.each(cfg_data, function(k, v) {
+					_.each(k, function(_k, _v) {
+						if(_v==='apply_type'){
+						    _k = _.map(_k, function(n){
+						        return n?'1':'0';
+						    });
+						}
+
+						// if(_v==='budget_type'){
+						// 	
+						//     _k = _.map(_k, function(n){
+						// 		
+						//         return n?'1':'0';
+						//     });
+						// }
+						
+						data.push({
+							"scGroup": v,
+							"scValue": _k,
+							"scName": _v
+						});
+					});
+				});
+				http_service.post('syscfg/save', {
+					"data": data
+				}, function(res) {
+					if(res.data.errMsg) {
+						//alert(res.data.errMsg);
+						//									swal({
+						//											title: "错误",
+						//											text: res.data.errMsg,
+						//												type: "error",
+						//												confirmButtonText: "确定",
+						//											})
+						$scope.$parent.terro(res.data.errMsg)
+
+					} else {
+						//alert('系统设置保存成功。');
+						if(res.data.opState) {
+							$scope.$parent.tsuccess("系统保存设置成功!")
+							_.each(data, function(obj) {
+								switch(obj.scName) {
+									case "budget_open":
+										$rootScope.budget_open = obj.scValue;
+										break;
+									case "apply_open":
+										$rootScope.apply_open = obj.scValue;
+										break;
+									case "expend_open":
+										$rootScope.expend_open = obj.scValue;
+										break;
+								}
+							});
+						} else {
+							$scope.$parent.terro("系统保存失败!")
+						}
+					}
+				});
+			}
+		});
+		$scope.check_ratio_value();
+		$scope.check_finger_value();
+		$scope.show_flag = 0;
+		
+		$scope.chang_show_flag = function(flag) {
+			$scope.show_flag = flag;
+		}
+
+		http_service.post('syscfg/list', {}, function(res) {
+			var data = res.data.data;
+			_.each(data, function(obj, v) {
+				var val_txt = obj['scValue'];
+				if(_.isNumber(val_txt)) {
+					val_txt = _.toString(val_txt);
+				}
+				$scope.cfg_data[obj['scGroup']][obj['scName']] = val_txt;
+				$scope.check_ratio_value();
+				$scope.check_finger_value();
+			});
+		});
+
+		//				$http({
+		//					url:"./static/js/formula.json",//假数据
+		//					method:"GET",
+		//					data:{}
+		//				}).then(function(res){
+		//					var formulaList = res.data.data;
+		//					$scope.formulaList = formulaList; 
+		//				},function(err){
+		//					//弹窗
+		//				});
+
+		http_service.post('template/cpn/masDataEleList', {}, function(res) {
+			$scope.form_data_choose = res.data.data.rows;
+		});
+
+
+		http_service.post('systemMath/search/functionInfo', {}, function(res) {
+			$scope.fx_data = res.data.data;
+
+			//					$scope.fx_data=[{
+			//						"fx_name":"日期函数",
+			//						"fx_value":"Date()",
+			//						"fx_str":"Date",
+			//						"fx_formula_str":"(1/(24*60*60*1000))*"
+			//					}]
+
+		});
+
+        function refres_sysMath(){
+        	http_service.post('systemMath/search/mathList', {}, function(res) {
+				var referenceFormula = res.data.data;
+				$scope.referenceFormula = referenceFormula;
+			});
+        	http_service.post('systemMath/search/list', {}, function(res) {
+				var formulaList = res.data.data;
+				$scope.formulaList = formulaList;
+			});
+        }
+		refres_sysMath();
+
+		//系统变量编辑
+		$scope.add_formula = function(formula) {
+			if (!formula) {
+				formula={};
+			}else if(formula.child != undefined && formula.child.length != 0){
+				var back_data = [];
+				_.each(formula.child,function(cd){
+					back_data.push(cd);
+				});
+				back_data = _.uniqBy(back_data,'mdCode');
+			}
+			formula.resultFromat = formula.resultFromat == undefined ? 10 : formula.resultFromat;
+//			formula.type = formula['type'] == undefined ? 10 : formula.type;
+			$scope.formula = formula;
+			$scope.formula_content = "";
+			$('.el_form').find('div[name="form_el_row"]').each(function(index, el) {
+					var el_data = $(el).data('data');
+				})
+
+			var edl_arr = [];
+
+			if(formula.view) {
+				$scope.formula_content = formula.view;
+			}
+			//					$scope.value_type = "";
+			////							if($scope.data.joinMath){
+			//						if( $scope.data.joinMath && $scope.data.joinMath.length > 0){
+			//							if($scope.data.joinMath[0].cpnMath.mView){
+			//								$scope.formula_content = $scope.data.joinMath[0].cpnMath.mView;//显示公式回调
+			//							}
+			//							_.each($scope.mResultFromat,function(_result){
+			//								if(_result.value == $scope.data.joinMath[0].cpnMath.mResultFromat){
+			//									$scope.value_type = _result.code;
+			//								}
+			//							})
+			//							_.each($scope.data.joinMath[0].cpnMath.child,function(cpn){
+			//								if(cpn.pIndex != 0){
+			//									edl_arr.push(cpn);
+			//								}
+			//							})
+			//						}
+			//							}
+
+			_.each($scope.form_data_choose, function(data) {
+				//						data['edl'] = "";
+				//						_.each(edl_arr,function(edl){
+				//							if(data.gcMeCode == edl.pMdCode && edl.meName != undefined){
+				//								data['edl'] = {"meCode":edl.pMeCode,"meName":edl.meName};//元素选择回调
+				//							}
+				//						})
+			});
+			var $pop = $('<div class="bg-modal"><div ng-click="close_edl($event)" class="pop_panel_formula" onMouseOver ="$(this).draggable();event.stopPropagation()" ;>' +
+						'<div class="custom_validate_formula">' +
+						'<div class="cv_title_formula">系统变量编辑 <div class="close" ><img src="./static/img/close.png" style="width:60%;margin-top:5px;"></div></div>' +
+						'<div class="col-md-3 formula_left">'+
+							'<p>主元素定义</p>'+
+							'<ul>'+
+								'<li ng-repeat="item in form_data_choose">'+
+									'<span ng-click="add_item(item)" class="btn choose_item" style=" -webkit-box-orient: vertical;-webkit-line-clamp: 1;overflow: hidden;text-overflow: ellipsis;display: inline-block;line-height: 8px;width: 40%;padding: 5px 0px;" title="{{item.masDataDefineName}}">{{item.masDataDefineName}}</span>'+
+									'<span class="btn choose_edl"  ng-click="add_mecode(item,$event)" style="width:40%">元素选择</span>'+
+									'<ul ng-show="item.show_edl" class="fromula_edl" style="width:34%">'+
+										'<li ng-click="add_edl(item,data)" ng-repeat="data in item.edl_data" title="{{data.meName}}">{{data.meName}}</li>'+
+									'</ul>'+
+//									'<span class="edl" ng-show="item.edl">{{item.edl.meName}}</span>'+
+								'</li>'+
+							'</ul>'+
+						'</div>'+
+						'<div class="cv_fields_formula col-md-6">' +
+							'<div class="field_name_father">' +
+								'<span style="width: 75px;">'+'系统变量'+'</span>'+
+								'<div class="field_name" style="width:10%;margin-right:22%;"><input type="text" ng-model="formula.name" placeholder="变量名称">' +
+//									 formula.name+ ""+
+								'</div>' +
+//								'<div class="formula_type">'+
+//										'变量类型'+
+//										'<select ng-model="formula.type">' +
+//											'<option ng-value="10"> 计算</option>' +
+//											'<option ng-value="20"> 取值</option>' +
+//										'</select>' +
+//								'</div>'+
+								'<div class="formula_type">'+
+										'结果格式'+
+										'<select ng-model="formula.resultFromat">' +
+											'<option ng-value="10"> 整数 </option>' +
+											'<option ng-value="20"> 比较 </option>' +
+											'<option ng-value="30"> 字符 </option>' +
+										'</select>' +
+								'</div>'+
+							'</div>' +
+//									'<div class="col-md-12">'+
+//										'<div>'+
+									'<textarea id="formula_content" ng-model="formula_content">'+
+									'</textarea>'+
+//										'</div>'+
+//									'</div>'+
+						'</div>' +
+						'<div class="col-md-3 formula_right">'+
+							'<p class="sys_formula_choose"><span ng-class="{'+'sys_formula_choose_active'+':formula_type == 1}" ng-click="togle_formula()">公式函数</span><span ng-class="{'+'sys_formula_choose_active'+':formula_type == 2}" ng-click="togle_formula()">引用公式</span></p>'+
+							'<ul ng-show="formula_type == 1">'+
+								'<li class="btn" ng-repeat="fx in fx_data" ng-click="add_fx(fx)">{{fx.showName}}</li>'+
+							'</ul>'+
+							'<ul ng-show="formula_type == 2">'+
+								'<li class="btn" ng-repeat="rf in referenceFormula" ng-click="add_rf(rf)">{{rf.name}}</li>'+
+							'</ul>'+
+						'</div>'+
+//						'<div class="col-md-2 formula_right">'+
+////							'<p>引用公式</p>'+
+//							'<ul>'+
+//								'<li class="btn" ng-repeat="rf in referenceFormula" ng-click="add_rf(rf)">{{rf.name}}</li>'+
+//							'</ul>'+
+//						'</div>'+
+						'<div class="formula_btn" style="justify-content:center">'+
+							'<button ng-click="formula_commit()" class="btn btn-action btn-success btn-favourite confirm" style="margin-right:105px;">确定</button>'+
+							'<button class="btn btn-action btn-success btn-favourite cancel" style="margin-left:105px;">取消</button>'+
+						'</div>'+
+						'</div>' +
+						'</div></div>');
+			var $popdiv = $compile($pop)($scope);
+			$('body').append($popdiv);
+			$pop.find('div.close, button.cancel').on('click', function() {
+				$(this).closest('div.bg-modal').remove();
+			});
+			//默认为公式函数
+			$scope.formula_type = 1;
+			//引用公式 选项卡
+			$scope.togle_formula = function(){
+				if($scope.formula_type == 1){
+					$scope.formula_type = 2;
+				}else{
+					$scope.formula_type = 1;
+				}
+			}
+			function insertAfterText(textDom, value) { //在光标后插入文本
+				var selectRange;
+				if(document.selection) {
+					// IE Support
+					textDom.focus();
+					selectRange = document.selection.createRange();
+					selectRange.text = value;
+					$scope.formula_content = selectRange.text;
+					textDom.focus();
+				} else if(textDom.selectionStart || textDom.selectionStart == '0') {
+					// Firefox support
+					var startPos = textDom.selectionStart;
+					var endPos = textDom.selectionEnd;
+					var scrollTop = textDom.scrollTop;
+					$scope.formula_content = $scope.formula_content.substring(0, startPos) + value + $scope.formula_content.substring(endPos, $scope.formula_content.length);
+					textDom.focus();
+					textDom.selectionStart = startPos + value.length;
+					textDom.selectionEnd = startPos + value.length;
+					textDom.scrollTop = scrollTop;
+				} else {
+					$scope.formula_content += value;
+					textDom.focus();
+				}
+			}
+			$scope.add_item = function(item) { //添加控件
+				var formula_str = "[" + item.masDataDefineName + "]";
+				insertAfterText(document.getElementById("formula_content"), formula_str);
+			}
+			$scope.add_mecode = function(item, event) {
+				http_service.post("base/data/element/info", {
+					"code": item.masDataDefineCode
+				}, function(res) {
+					_.each($scope.form_data_choose, function(_form) {
+						if(_form == item) {
+							_form['edl_data'] = res.data.data;
+							_form['show_edl'] = true;
+						} else {
+							_form['show_edl'] = false;
+						}
+					})
+				});
+
+				event.stopPropagation();
+			}
+			$scope.close_edl = function(event) {
+				_.each($scope.form_data_choose, function(_form) {
+					_form['show_edl'] = false;
+				});
+				event.stopPropagation();
+				event.preventDefault();
+			}
+			$scope.add_edl = function(item, data) {
+				insertAfterText(document.getElementById("formula_content"), '[' + item.masDataDefineName + '.' + data.meName + ']');
+				_.each($scope.form_data_choose, function(_form) {
+					if(_form == item) {
+						_form['edl'] = data;
+					}
+				});
+			}
+			$scope.add_fx = function(fx) {
+				insertAfterText(document.getElementById("formula_content"), fx.showTemplate);
+			}
+			$scope.add_rf = function(rf) {
+				var rf_str = "[公式:" + rf.name + "]";
+				insertAfterText(document.getElementById("formula_content"), rf_str);
+			}
+			
+			function formula_save(){ // 保存公式 数据
+				var formula_str = $scope.formula_content;
+				var str = $scope.formula_content,
+					reg = /\[(.*?)\]/g,
+					code_arr = [],
+					x = null;
+				while((x = reg.exec(str)) != null) {
+					code_arr.push(x[1]);
+				}
+				
+				var formula_code = [];
+				_.each(code_arr, function(code, i) {
+					var pType = 10,
+						item_code = code;
+					if(item_code) {
+						if(item_code.indexOf("公式:") >= 0) {
+							pType = 20;
+							item_code = item_code.replace("公式:", "");
+                              
+							_.each($scope.referenceFormula, function(item) {
+								if(item_code == item.name) {
+									formula_code.push({
+										"joinMathId": item.id,
+										"pType": pType,
+										"pIndex": (i + 1)
+									});
+									formula_str = formula_str.replace("[" + code + "]", "{" + (i + 1) + "}");
+								}
+
+							})
+						}
+
+						if(item_code.indexOf(".") >= 0) {
+							var arr = item_code.split('.');
+							_.each($scope.form_data_choose, function(item) {
+								if(arr[0] == item.masDataDefineName) {
+									_.each(item.edl_data, function(eldata) {
+										var arr_meName = _.split(arr[1],"(");
+										if(eldata.meName == arr_meName[0]) {
+											formula_code.push({
+												"mdCode": item.masDataDefineCode,
+												'mdName':item.masDataDefineName,
+												"pType": eldata.meType,
+												"pIndex": (i + 1),
+												"meCode": eldata.meCode,
+												"meName": eldata.meName,
+												"defVal":_.trim(arr_meName[1],")")
+											});
+										}
+									})
+									formula_str = formula_str.replace("[" + code + "]", "{" + (i + 1) + "}");
+								}
+							})
+						} else {
+							_.each($scope.form_data_choose, function(item) {
+								var item_def = _.split(item_code,"(");
+								if(item_def[0] == item.masDataDefineName) {
+									formula_code.push({
+										"mdCode": item.masDataDefineCode,
+										'mdName':item.masDataDefineName,
+										"pType": item.eleNameDataType,
+										"pIndex": (i + 1),
+										"meCode": item.eleCodeCode,
+										"defVal":_.trim(item_def[1],")")
+									});
+									formula_str = formula_str.replace("[" + code + "]", "{" + (i + 1) + "}");
+								}
+							})
+						}
+
+					}
+
+				});
+				_.each($scope.fx_data, function(fx) {
+						if(formula_str.indexOf(fx.fx_str) != -1) {
+							formula_str = formula_str.replace(fx.fx_str, fx.fx_formula_str);
+						}
+					})
+					//						var mResultFromat;
+					//						_.each($scope.mResultFromat,function(_result){
+					//							if(_result.code == $scope.value_type){
+					//								mResultFromat = _result.value;
+					//							}
+					//						});
+					//								var post_data = {
+					//									"child":formula_code,
+					//									"mCount":formula_str,
+					//									"mType":10,
+					//									"mView":$scope.formula_content,
+					//									"mResultFromat":mResultFromat
+					//								}
+					//								http_service.post("form/math/insert",post_data,function(res){
+				if($scope.formula_content == "" || $scope.formula_content == undefined) {
+					formula = [];
+				} else {
+					//							formula = [{
+					//												"mCount" : formula_str,
+					////														"mName" : "公式名称",
+					//												"mResultFromat" :mResultFromat,
+					//												"mType" : 10,
+					//												"mView" : $scope.formula_content,
+					//												"child" : formula_code
+					//										}] ;
+					formula.count = formula_str;
+					formula.resultFromat = $scope.formula.resultFromat;
+					formula.view = $scope.formula_content;
+					formula.child = formula_code;
+//					formula.type = $scope.formula.type;
+					if (formula.id) {
+						http_service.post('systemMath/update', formula, function(res) {
+							if(res.data.opState) {
+//								$scope.tsuccess("系统变量["+formula.name+"]更新成功!")
+								refres_sysMath();
+							} 
+						});
+					} else {
+						http_service.post('systemMath/insert', formula, function(res) {
+							if(res.data.opState) {
+								if(formula.name == undefined){
+									$scope.terro("请添加系统变量")
+								}else{
+									$scope.tsuccess("系统变量["+formula.name+"]新增成功!")
+									$scope.formulaList.push(formula);
+									refres_sysMath();
+								}
+							} else {
+								$scope.terro("系统变量["+formula.name+"]新增失败!")
+							}
+						});
+					}
+				}
+				$pop.find('div.close, button.cancel').closest('div.bg-modal').remove();
+				//								});
+			}
+			
+			$scope.formula_commit = function() { //保存公式
+				if(back_data != undefined && back_data.length > 0){
+					$scope.back_num = 0;
+					_.each(back_data,function(bd){
+						http_service.post("base/data/element/info", {
+							"code": bd.mdCode
+						}, function(res) {
+							_.each($scope.form_data_choose, function(_form) {
+								if(_form.masDataDefineCode == bd.mdCode) {
+									_form['edl_data'] = res.data.data;
+								} 
+							});
+							$scope.back_num++;
+						});
+					})
+					var back_data_check = $scope.$watch(function(){
+						return $scope.back_num;
+					},function(){
+						if($scope.back_num != 0 && $scope.back_num == back_data.length){
+							formula_save();
+							back_data_check();// 清除$watch
+						}
+					})
+				}else{
+					formula_save();
+				}
+			}
+		}
+		
+		
+		
+		
+		var deletefo =true;
+		$scope.del_formula = function(formula) {
+			$rootScope.swalWhether({ "title": "确定删除?", 'text': "若补助标准或表单中已使用此系统变量,可能会导致异常" },
+				function() {
+					if(deletefo){
+						deletefo =false;
+						
+						http_service.post('systemMath/delete', formula, function(res) {
+							if(res.data.opState) {
+								deletefo =true;
+								$rootScope.swalsuccess({ "text": "系统变量["+formula.name+"]删除成功!" },
+									refres_sysMath()
+								)
+							} else {
+								deletefo =true;
+								$rootScope.swalerror({ "text": "系统变量["+formula.name+"]删除失败!"})
+							}
+						});
+					}
+				});
+			
+		}
+
+		$scope.refdata = function(){
+			http_service.post('flow/syunOrganization', {}, function(res) {
+				if(res.data.opState){
+					$rootScope.tsuccess("同步成功");
+				}else{
+					$rootScope.terro("同步组织机构失败");
+				}
+			})
+		}
+	}]);
\ No newline at end of file
diff --git a/src/static/js/templates_center/module.js b/src/static/js/templates_center/module.js
new file mode 100644
index 0000000..630b2bd
--- /dev/null
+++ b/src/static/js/templates_center/module.js
@@ -0,0 +1,518 @@
+angular.module('templates_center', [])
+	.factory('fileReader', ["$q", "$log", function($q, $log) { //图片转换base64
+		var onLoad = function(reader, deferred, scope) {
+			return function() {
+				scope.$apply(function() {
+					deferred.resolve(reader.result);
+				});
+			};
+		};
+		var onError = function(reader, deferred, scope) {
+			return function() {
+				scope.$apply(function() {
+					deferred.reject(reader.result);
+				});
+			};
+		};
+		var getReader = function(deferred, scope) {
+			var reader = new FileReader();
+			reader.onload = onLoad(reader, deferred, scope);
+			reader.onerror = onError(reader, deferred, scope);
+			return reader;
+		};
+		var readAsDataURL = function(file, scope) {
+			var deferred = $q.defer();
+			var reader = getReader(deferred, scope);
+			reader.readAsDataURL(file);
+			return deferred.promise;
+		};
+		return {
+			readAsDataUrl: readAsDataURL
+		};
+	}])
+	.controller('templatesCenterCtrl', ['$scope', '$compile', 'http_service', '$routeParams', 'fileReader', '$http', '$rootScope',function($scope, $compile, http_service, $routeParams, fileReader, $http,$rootScope) {
+		$scope.step = $routeParams.step;
+		$scope.img_show_flag = false;
+		$scope.temp_show_falg = false;
+		$scope.$on('$viewContentLoaded', function() {
+			$('div.split_form').height($(document).height() - 52);
+			$(window).resize(function() {
+				$('div.split_form').height($(document).height() - 52);
+			});
+		});
+
+		/*
+		$(document).off('click').on('click', function() {
+		   if($('div.industry_menu_pane').is(':visible')){
+		        $('div.industry_menu_pane').remove();
+		   }
+		});
+		*/
+		http_service.post('indusExten/list', {}, function(res) {
+			$rootScope.search_hint(res.data.data,'arrary');
+			$scope.indus_templates = res.data.data;
+			_.each($scope.indus_templates, function(_temp) {
+				_temp.inBigIcon = "travel-web" + _temp.inBigIcon;
+				_temp.img_show_flag = false;
+			});
+		})
+		$scope.show_saved_form = function(business, type, action, templateid) {
+			$scope.business = business;
+			$scope.type = type;
+			$scope.action = action;
+			$scope.templateid = templateid;
+			var $form = $('<div saved-form business="business" type="type" unedit="1" action="action" templateid="templateid"  ></div>');
+			$('div.form_container').html($form);
+			$compile($form)($scope);
+		}
+		$scope.show_saved_form_insert = function(business, type, action) {
+			$scope.business = business;
+			$scope.type = type;
+			$scope.action = action;
+			var $form = $('<div saved-form business="business" type="type" action="action" ></div>');
+			$('div.form_container').html($form);
+			$compile($form)($scope);
+		}
+		$scope.update = function(e) {
+			http_service.post('indusExten/list', {}, function(res) {
+				$rootScope.search_hint(res.data.data,'arrary');
+				$scope.indus_templates = res.data.data;
+				_.each($scope.indus_templates, function(_temp) {
+					_temp.inBigIcon = "travel-web" + _temp.inBigIcon;
+					_temp.img_show_flag = false;
+				});
+			})
+		}
+
+		$scope.show_industry_menu_pane = function(e) {
+			$("div.industry_menu_pane").remove();
+			var $element = $('<div class="industry_menu_pane"><ul><li ng-click="add_industry()">新增行业</li><li>修改行业</li><li>删除行业</li></ul></div>');
+			$('body').append($element);
+			$compile($element)($scope);
+			$element.css({
+				'top': e.pageY + 10,
+				'left': e.pageX + 10
+			});
+			e.stopPropagation();
+		}
+
+		$scope.add_industry = function(e) {
+			$("div.industry_menu_pane").html('<div class="col-md-4"><label class="col-md-2">行业名称</label><input type="text" class="col-md-3"></div>');
+		}
+		//点击空白 隐藏标识符
+		$scope.show_sign_all = function() {
+			_.each($scope.indus_templates, function(_temp) {
+				_temp.o1 = {};
+				_temp.num1 = 0;
+				_temp.o1_budget = {};
+				_temp.num1_budget = 0;
+				_.each(_temp.budgets, function(_budgets) {
+					_budgets.o1_detail = {};
+					_budgets.num1_detail = 0;
+				});
+				_temp.o1_apply = {};
+				_temp.num1_apply = 0;
+				_.each(_temp.applys, function(_apply) {
+					_apply.o1_detail = {};
+					_apply.num1_detail = 0;
+				});
+				_temp.o1_reimbursement = {};
+				_temp.num1_reimbursement = 0;
+				_.each(_temp.expends, function(_expend) {
+					_expend.o1_detail = {};
+					_expend.num1_detail = 0;
+				})
+			})
+			$scope.temp_show_falg = false;
+			//			$(event).stopPropagation();
+			//			$(event).preventDefault();
+
+		}
+		//显示、隐藏标识符
+		$scope.show_sign = function(template) {
+			$scope.temp_show_falg = true;
+			$scope.images = '';
+			if(template.num1 == 1) {
+				template.num1 = 0;
+				template.o1 = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					_temp.o1 = {};
+					_temp.num1 = 0;
+					if(_temp == template) {
+						_temp.num1 = 0;
+						_temp.num2 = 0;
+						_temp.num3 = 0;
+						_temp.o1 = { opacity: 1 };
+					}
+				});
+				template.num1 = 1;
+			}
+
+			//  	$scope.o2={};
+			//  	$scope.inCode=1;
+		}
+		//获取图片信息
+		$scope.img_change = function(files) {
+			$scope.imgIcon = files;
+			fileReader.readAsDataUrl($scope.imgIcon[0], $scope).then(function(res) {
+				$scope.images = res;
+			});
+			$scope.img_change_flag = true;
+			$scope.indus_templates[this.$index].img_show_flag = true;
+		}
+		//添加、修改、删除行业信息表单
+		$scope.indus_change = function(template, type) {
+			var pd = {};
+			if(type == 1) { //添加
+				if(!/\.(jpg|jpeg|png)$/.test($scope.imgIcon[0].name.toLowerCase())) {
+							$scope.$parent.twarning("图片格式必须为jpg,jpeg,png中的一种");
+							return false;
+						} 
+//						else {
+//							var img = new Image();
+//							img.src = filepath;
+//							while(true) {
+//								if(img.fileSize > 0) {
+//									if(img.fileSize > 5 * 1024) {
+//										$scope.$parent.twarning("图片不大于5M。");
+//										return false;
+//									}
+//									break;
+//								}
+//
+//							}
+//						}
+					$http({
+					method: 'post',
+					url: './travel-web/upload',
+					headers: {
+						'Content-Type': undefined
+					},
+					data: {
+						fileName: $scope.imgIcon[0],
+						problemType: '3'
+					},
+					transformRequest: function(data, headersGetter) {
+						var formData = new FormData();
+						angular.forEach(data, function(value, key) {
+							formData.append(key, value);
+						});
+						return formData;
+					}
+				}).then(function(res) {
+					
+					if (res && res.data.opState === false) {
+						$scope.$parent.terro(res.data.errMsg + "(图片格式必须为jpg,jpeg,png中的一种)")
+						return false;
+					} else {
+						pd = {
+							"inName": $scope.template_title,
+							"inDesc": template.inDesc,
+							"inBigIcon": res.data.data,
+							"inSqu": template.inSqu,
+						};
+						http_service.post('indus/insert', pd, function(result) {
+							if(result.data.opState) {
+								$scope.$parent.tsuccess("添加成功!")
+								setTimeout(function() {
+									reload();
+								})
+							} else {
+								$scope.$parent.terro("添加失败")
+								reload()
+							}
+						});
+					}
+					
+				}, function(err) {
+					//alert("添加失败");
+					$scope.$parent.terro("添加失败!")
+
+				});
+				//  		fileReader.readAsDataUrl($scope.imgIcon[0],$s cope).then(function(res){
+				//  			var path = res;
+				//  		})
+				
+
+				
+
+			} else if(type == 2) { //修改
+					if(!/\.(jpg|jpeg|png)$/.test($scope.imgIcon[0].name.toLowerCase())) {
+							$scope.$parent.twarning("图片格式必须为jpg,jpeg,png中的一种");
+							return false;
+						} 
+//						else {
+//							var img = new Image();
+//							img.src = filepath;
+//							while(true) {
+//								if(img.fileSize > 0) {
+//									if(img.fileSize > 5 * 1024) {
+//										$scope.$parent.twarning("图片不大于5M。");
+//										return false;
+//									}
+//									break;
+//								}
+//
+//							}
+//						}
+				if($scope.img_change_flag) {
+					$http({
+						method: 'post',
+						url: './travel-web/upload',
+						headers: {
+							'Content-Type': undefined
+						},
+						data: {
+							fileName: $scope.imgIcon[0],
+							problemType: '3'
+						},
+						transformRequest: function(data, headersGetter) {
+							var formData = new FormData();
+							angular.forEach(data, function(value, key) {
+								formData.append(key, value);
+							});
+							return formData;
+						}
+					}).then(function(res) {
+						if (res && res.data.opState === false) {
+							$scope.$parent.terro(res.data.errMsg + "(图片格式必须为jpg,jpeg,png中的一种)")
+							return false;
+						} else {
+							pd = {
+								"inName": $scope.template_title,
+								"inCode": template.inCode,
+								"inBigIcon": res.data.data
+							};
+							http_service.post('indus/update', pd, function(result) {
+								//alert("修改成功");
+								if(result.data.opState) {
+									$scope.$parent.tsuccess("修改成功!")
+									reload()
+									setTimeout("window.location.reload()")
+								} else {
+									$scope.$parent.terro("修改失败!")
+								}
+							});
+						}
+					}, function(err) {
+						//alert(false);
+						//						swal({
+						//								title: "错误",
+						//								text:false,
+						//								type: "error",
+						//								confirmButtonText: "确定",
+						//							})
+						$scope.$parent.terro(false)
+
+					});
+				} else {
+					pd = {
+						"inName": $scope.template_title,
+						"inCode": template.inCode
+					};
+					http_service.post('indus/update', pd, function(result) {
+						//alert("修改成功");
+						if(result.data.opState) {
+							$scope.$parent.tsuccess("修改成功!")
+							reload()
+						} else {
+							$scope.$parent.terro("修改失败!")
+
+						}
+					});
+				}
+
+			} else {
+
+			}
+			template.num1 = 0;
+			template.num2 = 0;
+			template.num3 = 0;
+			template.o1 = {};
+		}
+		//显示、隐藏预算单
+		$scope.show_sign_budget = function(template) {
+			$scope.temp_show_falg = true;
+			if(template.num1_budget == 1) {
+				template.num1_budget = 0;
+				template.o1_budget = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					if(_temp == template) {
+						_temp.num1_budget = 0;
+						_temp.o1_budget = { opacity: 1 };
+					}
+				});
+				template.num1_budget = 1;
+			}
+
+		}
+		//显示、隐藏申请单
+		$scope.show_sign_apply = function(template) {
+			$scope.temp_show_falg = true;
+			if(template.num1_apply == 1) {
+				template.num1_apply = 0;
+				template.o1_apply = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					if(_temp == template) {
+						_temp.num1_apply = 0;
+						_temp.o1_apply = { opacity: 1 };
+					}
+				});
+				template.num1_apply = 1;
+			}
+
+		}
+		//显示、隐藏报销单
+		$scope.show_sign_reimbursement = function(template) {
+			$scope.temp_show_falg = true;
+			if(template.num1_reimbursement == 1) {
+				template.num1_reimbursement = 0;
+				template.o1_reimbursement = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					if(_temp == template) {
+						_temp.num1_reimbursement = 0;
+						_temp.o1_reimbursement = { opacity: 1 };
+					}
+				});
+				template.num1_reimbursement = 1;
+			}
+
+		}
+		//显示、隐藏预算详细单
+		$scope.show_sign_budget_detail = function(template, budget) {
+			$scope.temp_show_falg = true;
+			if(budget.num1_detail == 1) {
+				budget.num1_detail = 0;
+				budget.o1_detail = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					if(_temp == template) {
+						_.each(_temp.budgets, function(_budget) {
+							if(budget == _budget) {
+								_budget.num1_detail = 0;
+								_budget.num2 = 0;
+								_budget.num3 = 0;
+								_budget.o1_detail = { opacity: 1 };
+							}
+						})
+					}
+				});
+				budget.num1_detail = 1;
+			}
+
+		}
+		//显示、隐藏申请详细单
+		$scope.show_sign_apply_budget_detail = function(template, apply) {
+			$scope.temp_show_falg = true;
+			if(apply.num1_detail == 1) {
+				apply.num1_detail = 0;
+				apply.o1_detail = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					if(_temp == template) {
+						_.each(_temp.applys, function(_apply) {
+							if(apply == _apply) {
+								_apply.num1_detail = 0;
+								_apply.num2 = 0;
+								_apply.num3 = 0;
+								_apply.o1_detail = { opacity: 1 };
+							}
+						})
+					}
+				});
+				apply.num1_detail = 1;
+			}
+
+		}
+		//显示、隐藏报销详细单
+		$scope.show_sign_extend_detail = function(template, extend) {
+			$scope.temp_show_falg = true;
+			if(extend.num1_detail == 1) {
+				extend.num1_detail = 0;
+				extend.o1_detail = {};
+			} else {
+				_.each($scope.indus_templates, function(_temp) {
+					if(_temp == template) {
+						_.each(_temp.expends, function(_extend) {
+							if(extend == _extend) {
+								_extend.num1_detail = 0;
+								_extend.num2 = 0;
+								_extend.num3 = 0;
+								_extend.o1_detail = { opacity: 1 };
+							}
+						})
+					}
+				});
+				extend.num1_detail = 1;
+			}
+
+		}
+		//设置删除弹窗按钮颜色
+		//		function getBackgroundColor() {
+		//			var rgb = $('#top').css('background-color');
+		//			rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+		//			function hex(x) {
+		//				return("0" + parseInt(x).toString(16)).slice(-2);
+		//			}
+		//			rgb = "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
+		//			return rgb;
+		//		};
+		//		$scope.btncolor = getBackgroundColor();
+
+		function reload() {
+			$scope.update();
+		}
+		//删除表单模版
+		$scope.delete_form = function(form) {
+			//			swal({
+			//					title: "确定删除?",
+			//					text: "您将无法恢复这些文件!",
+			//					type: "warning",
+			//					showCancelButton: true,
+			//					confirmButtonColor: $scope.btncolor,
+			//					confirmButtonText: "确定",
+			//					cancelButtonText: "取消",
+			//					closeOnConfirm: false
+			//				},
+			var deletefo =true;
+			$rootScope.swalWhether({ "title": "确定删除?", 'text': "" },
+				function() {
+					if(deletefo){
+						deletefo =false;
+					http_service.post("template/delete", { "guId": form.guId }, function(res) {
+						if(res.data.opState) {
+							$rootScope.swalsuccess({ "text": "成功删除!" },
+								reload()
+							)
+
+						} else {
+							$rootScope.swalerror({ "text": "删除失败" })
+						}
+					});
+				}
+				});
+		}
+		//删除行业
+		$scope.delete_indus = function(template) {
+			var deleteind=true;
+			$rootScope.swalWhether({ "title": "确定删除?", 'text': "" },
+				function() {
+						if(deleteind){
+						deleteind=false;
+					http_service.post("indus/delete", { "inCode": template.inCode }, function(res) {
+						if(res.data.opState) {
+							$rootScope.swalsuccess({ "text": "成功删除!" },
+								reload()
+							)
+						} else {
+							$rootScope.swalerror({ "text": res.data.errMsg })
+						}
+					});
+				}
+				});
+		}
+	}]);
\ No newline at end of file
diff --git a/src/static/js/travel_expense/module.js b/src/static/js/travel_expense/module.js
new file mode 100644
index 0000000..2d37779
--- /dev/null
+++ b/src/static/js/travel_expense/module.js
@@ -0,0 +1,4195 @@
+angular.module('travel_expense', ['ngDraggable'])
+	.directive('dropDownSelector', ['$rootScope', 'http_service', function($rootScope, http_service) {
+		return {
+			restrict: 'EACM',
+			scope: {
+				'filterlist': '=',
+				'refreshdata': '&'
+			},
+			templateUrl: './static/templates/drop_down_selector.html',
+			link: function($scope, element, attrs) {
+				$(document).off('click').on('click', function() {
+					if($('div.drop_down_sel').is(':visible')) {
+						$('div.drop_down_sel').remove();
+					}
+				});
+				$(element).on('click', function(e) {
+					$scope.save();
+					e.stopPropagation();
+				})
+				//				$scope.listfilter = function(list){
+				//					var arr = [];
+				//					_.each(list,function(_list){
+				//						if(_list.gc_cpn_type != 10){
+				//							arr.push(_list);
+				//						}
+				//					});
+				//					return arr;
+				//				}
+				$scope.save = function() {
+					var cfg_list = _.filter($scope.filterlist, function(o) {
+						return o.selected;
+					});
+					var cfg = [];
+					_.each(cfg_list, function(cfg_item) {
+						cfg.push(_.pick(cfg_item, ['sfCfgType', 'sfFieldName']));
+					});
+					http_service.post('showFieldCfg/update', {
+						"child": cfg
+					}, function(res) {
+						if(res.status === 200) {
+							$scope.refreshdata();
+						} else {
+							//alert('查询内容更新失败。');
+							$scope.$parent.terro("查询内容更新失败!")
+						}
+					});
+				}
+			}
+		}
+	}])
+	.directive('detailPopup', ['$rootScope', 'http_service', '$timeout', function($rootScope, http_service, $timeout) {
+		return {
+			restrict: 'EACM',
+			scope: {
+				type: "=",
+				billid: "@",
+				edit: '=',
+				iscreate: "@"
+			},
+			templateUrl: './static/templates/travel_expense_detail_popup.html?v=12292330',
+			link: function($scope, element, attrs) {
+				$scope.init_btn_flag = true;
+				$rootScope.form_id = undefined;//初始化表单ID
+				$rootScope.lock_key = undefined;//初始化钥匙
+				$scope.save_btn_flag = true;
+				$rootScope.startTime = undefined;
+				$rootScope.endTime = undefined;
+				$rootScope.sumMoney_budget = undefined;
+				$scope.couldNumber = undefined;
+				$scope.exCouldNumber = undefined;
+				$scope.bill_commit_permission = "bill_commit_detail";
+				$scope.rectification_show = false;
+				$scope.restart_review_show = false;
+				$scope.commitflag_bill = true; //提交按钮根据票据状态判断  初始值为true
+				//若无票据上传权限 则无票据上传按钮
+				//				if(app_userinfo.expendAllPermiss){
+				//					$scope.bill_commit_flag = true;				
+				//				}else{
+				//					$scope.bill_commit_flag = false;					
+				//				}
+
+
+				//打开查看图片新页面并且传值
+				$scope.show_pic = function() {
+					if($scope.exCouldNumber) {
+						http_service.post("expend/get/order/pic", { 'orderCode': $scope.exCouldNumber }, function(res) {
+							var pic_data = res.data.data;
+							if(pic_data == undefined || pic_data.length == 0) {
+								$rootScope.twarning("无票据图片");
+								return false;
+							}
+							//							var pic_data = [{ 'picUrl':'http://localhost:8070/static/img/pic.png','picName':"aaaa"},{ 'picUrl':'http://localhost:8070/static/img/continue.png','picName':"bbbb"},{ 'picUrl':'http://localhost:8070/static/img/pic.png','picName':"aaaa"},{ 'picUrl':'http://localhost:8070/static/img/continue.png','picName':"bbbb"},{ 'picUrl':'http://localhost:8070/static/img/pic.png','picName':"aaaa"},{ 'picUrl':'http://localhost:8070/static/img/continue.png','picName':"bbbb"},{ 'picUrl':'http://localhost:8070/static/img/pic.png','picName':"aaaa"},{ 'picUrl':'http://localhost:8070/static/img/continue.png','picName':"bbbb"}];
+							pic_data = JSON.stringify(pic_data);
+							$("#pic").attr('value', pic_data);
+							window.open('./static/templates/pic.html');
+						})
+
+					}
+
+				}
+				$scope.restart_review = function() {
+					if($scope.exCouldNumber) {
+						http_service.post("expend/order/backrule", { 'orderCode': $scope.exCouldNumber }, function(res) {
+							res.data.opState;
+							if (res.data.opState) {
+								$scope.$parent.tsuccess("单据已进入重新审单流程,请耐心等待!");
+								$scope.restart_review_show = false;
+								$rootScope.reflect_bill();
+							} else {
+								$scope.$parent.terro("订单来源必须是差旅费或费用云!");
+								$rootScope.reflect_bill();
+							}
+						})
+					}
+				}
+				$scope.rectification = function(){
+					if($scope.exCouldNumber != undefined){
+						
+						$rootScope.swalWhether({ "title": "确认重新纠偏?", 'text': "重新纠偏将删除行程,可能造成数据损失,请谨慎操作!" }, function(res) {
+							
+							if(res == true){
+								http_service.post("expend/backCorrect",{'orderCode':$scope.exCouldNumber},function(res){
+									if(res.data.opState == true){
+										$scope.edit = false;
+										$scope.editflag = false;
+										$rootScope.change_orderstatus("自动审单中");
+										swal.close();
+									}
+								});
+							}
+						});
+					}
+				}
+				var re_account_flag = true;
+				$scope.re_account = function() {
+					if(re_account_flag) {
+						re_account_flag = false;
+						http_service.post("flow/expend/add/order", { "tId": $scope.re_account_exid }, function(res) {
+							if(res.data.opState) {
+								$scope.$parent.tsuccess("重新记账成功");
+								$scope.re_account_show = false;
+								if($rootScope.reflect_bill) { //刷新详情页面
+									$rootScope.reflect_bill();
+								}
+							} else {
+								$scope.$parent.terro("重新记账失败");
+								re_account_flag = true;
+								if($rootScope.reflect_bill) { //刷新详情页面
+									$rootScope.reflect_bill();
+								}
+							}
+						});
+					}
+
+				}
+				if($scope.iscreate) {
+					$scope.btnflag = true;
+				} else {
+					$scope.btnflag = false;
+				}
+
+				var update_url = '';
+				if($scope.type === 10) {
+					update_url = 'budget/update';
+				} else if($scope.type === 20) {
+					update_url = 'apply/update';
+				} else if($scope.type === 30) {
+					update_url = 'expend/update';
+				}
+
+				function get_bill_data(form, data,cd_num,cd_type) {
+					var flag = !!data;
+					var bill_data = data || {
+						'child': [],
+						'fchild':[]
+					};
+					if(!flag) {
+						var children = form.child;
+						if(children && children.length) {
+							var num = 0;
+							var pay_num = 0;
+							_.each(children, function(cd) {
+								var col_name = cd['gcColName'];
+								var _children = cd['child'];
+								if(col_name) {
+									var item_cus = $('*[gcColName="' + col_name + '"]');
+									if(item_cus.is(':radio')) {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]:checked').val();
+									} else if(item_cus.attr("class") == "getDateTime ng-scope flatpickr-input") {
+										bill_data[col_name] = cd['render_value'];
+									} else if(item_cus.attr("class") == "select-container") {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]:last').attr('value');
+									} else if(item_cus.attr("choose_budget")) { //判断是否为预算选择控件
+										bill_data[col_name] = $rootScope.budget_selected;
+										bill_data['buNumber'] = $rootScope.budget_selected;
+									} else if(item_cus.attr("choose_apply")) { //判断是否为申请选择控件
+										bill_data[col_name] = $rootScope.expend_number_info;
+										bill_data['apNumber'] = $rootScope.expend_number_info;
+									} else if(item_cus.attr("user_selected")) { //判断是否为人员选择控件
+										$rootScope.userId = $('*[gcColName="' + col_name + '"]').attr("user_selected");
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').attr("user_selected");
+									} else if(item_cus.attr("org_selected")) { //判断是否为组织机构选择控件
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').attr("org_selected");
+									} else if(item_cus.attr("selected_city")) {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').attr("selected_city");
+									} else {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').val();
+									}
+								}
+								if(_children && _children.length) {
+									if(cd.gcCpnType == 10){
+										get_bill_data(cd, bill_data,num,1);
+										num++;
+									}else if(cd.gcCpnType == 17){
+										get_bill_data(cd, bill_data,pay_num,2);
+										pay_num++;
+									}
+								}
+							});
+						}
+					} else {
+						var children = form.child;
+						var num;
+						
+						
+						if(data.child == undefined) {
+							num = 0;
+						} else {
+							num = data.child.length;
+						}
+						if(children && children.length) {
+							var sub_form = {
+								'child': []
+							};
+							if(form.billInfos != undefined){// 存储票据信息
+								sub_form['billInfos'] = form.billInfos_str;
+							}
+							
+							_.each(children, function(cd) {
+								var col_name = cd['gcColName'];
+								var _children = cd['child'];
+								var type = cd['gcCpnType'];
+								
+								if(type === 12) {
+									sub_form[col_name] = $('*[gcColName="' + col_name + '"]:eq(' + cd_num + ')').attr("user_selected");
+//									var budget_list = form['budget_list'];
+//									var user_id, _budget_list = [];
+//									_.each(budget_list, function(budget) {
+//										sub_form['child'].push({
+//											"an_user_id": budget.userId,
+//											"child": _.map(budget.child, function(cld) {
+//												return {
+//													"jp_cd_code": cld['jp_cd_code'],
+//													"jp_amount": cld['jp_amount']
+//												}
+//											})
+//										});
+//									});
+
+								} else {
+									if(col_name) {
+										if(cd.gcCpnType == 6) {
+											sub_form[col_name] = $('*[gcColName="' + col_name + '"]:eq(' + cd_num + ')').attr('value');
+										} else {
+											sub_form[col_name] = $('*[gcColname="' + col_name + '"]:eq(' + cd_num + ')').val();
+										}
+									}
+								}
+
+							});
+							if(form.ej_id) {
+								sub_form["ej_id"] = form.ej_id;
+							}
+
+							//							if(form.budget_list&&form.budget_list.length!=0){
+							//								var budget_list = form.budget_list[0].child;
+							//										sub_form['child'].push({
+							//											"an_user_id":$rootScope.userId,
+							//											"child": _.map(budget_list, function(cld) {
+							//												return {
+							//													"jp_cd_code": cld['jp_cd_code'],
+							//													"jp_amount": cld['jp_amount']
+							//												}
+							//											})
+							//										});
+							//							}
+
+						}
+						if(cd_type == 1){
+							bill_data['child'].push(sub_form);
+						}else if(cd_type == 2){
+							bill_data['fchild'].push(sub_form);
+						}
+					}
+					var new_jour_arr = $rootScope.new_jour;
+					if (bill_data.child && new_jour_arr) {
+						if (bill_data.child.length == new_jour_arr.length) {
+							for (var i=0; i < bill_data.child.length; i++) {
+								bill_data.child[i].billInfos = new_jour_arr[i].jour.billInfos_str;
+							}
+						}
+					}
+					return bill_data;
+
+				}
+				$scope.cancel = function() {
+					$(element).remove();
+					$scope.close_lock();
+				};
+				$scope.close_lock = function(){
+					
+					$rootScope.close_lock = true;
+					$rootScope.formula_num = 0;
+					$rootScope.formula_num_id = [];//页面关闭 则将前端公式计数清零
+					if($rootScope.update_speical != undefined){//系统变量公式监听初始化
+							$rootScope.update_speical();
+						}
+						$rootScope.update_speical = undefined;
+						if($rootScope.update_speical_formula != undefined){//前端公式监听初始化
+							$rootScope.update_speical_formula();
+						}
+						$rootScope.update_speical_formula = undefined;
+					var key_data = {
+						"id":$rootScope.form_id,
+						"type":$scope.type,
+						"key":$rootScope.lock_key != undefined?$rootScope.lock_key:""
+					}
+					http_service.post("form/closeForm",key_data,function(res){})
+				}
+				//校验数字
+				function numbercheck(form, child_item) {
+					var val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').val();
+					if(val != "") {
+						if(textcheck(form, val, child_item)) { //文本长度校验
+							var reg0 = new RegExp("^([-]){0,1}([0-9]){1,}([.]){0,1}([0-9]){0,}$"); //校验是否为数字
+							var reg1 = new RegExp("^-?\\d+$"); //校验是否为整数
+							var reg2 = new RegExp("^-?\\d+(.[0-9]{0," + form.gcDmlLeng + "})?$"); //校验是否为n位小数
+							if(!reg0.test(val)) {
+								$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>请输入数字</i>");
+								return false;
+							} else {
+								if(form.gcCpnFormat == 20) { //当条件为整数时
+									if(!reg1.test(val)) { //不为整数
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>必须为整数</i>");
+										return false;
+									} else if(val.length > form.gcElLeng) { //长度超过限制
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>长度不能超过" + form.gcElLeng + "</i>");
+										return false;
+									} else {
+										return true;
+									}
+								} else { //当条件为允许小数时
+									if(form.gcDmlLeng == undefined || _.trim(form.gcDmlLeng) == ''){
+										return true;
+									}else if(!reg2.test(val)) { //超过n位小数
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>小数位数不能超过" + form.gcDmlLeng + "位</i>");
+										return false;
+									} else if(val.length > form.gcElLeng) { //长度超过限制
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>长度不能超过" + form.gcElLeng + "</i>");
+										return false;
+									} else {
+										return true;
+									}
+								}
+							}
+						}
+
+					} else {
+						return true;
+					}
+				}
+				//判断并显示校验信息
+				function showcheck(form, sValue, nValue, child_item) {
+					if(nValue != undefined) {
+						if(form.gcInputMust == 1) { //判断是否必填  必填
+							var val;
+							if(form.gcCpnType == 6) {
+								val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').attr("value");
+							} else if(form.gcCpnType == 12) {
+								val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').attr("user_selected");
+							} else if(form.gcCpnType == 0) {
+								val = $rootScope.budget_selected
+							} else if(form.gcCpnType == 14) {
+								val = $rootScope.expend_number_info;
+							} else {
+								val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').val();
+							}
+							if(_.isNull(val) == false){
+								val = val.replace(/\s/gi,'');
+							}
+							if(val == "" || _.isNull(val)) {
+								
+								if(form.gcCpnType == 5) {
+									$("<i class='errinfo'>" + form.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+								} else {
+									$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcCpnAlias + "不能为空</i>");
+								}
+								return false;
+							} else {
+								switch(form.gcCheckOp) {
+									case "<":
+										if(sValue < nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case "<=":
+										if(sValue <= nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case ">":
+										if(sValue > nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case ">=":
+										if(sValue >= nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case "==":
+										if(sValue == nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:last').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case "<>":
+										if(sValue != nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+								}
+							}
+						} else { //判断是否必填  可为空
+							switch(form.gcCheckOp) {
+								case "<":
+									if(sValue < nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case "<=":
+									if(sValue <= nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]::eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case ">":
+									if(sValue > nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case ">=":
+									if(sValue >= nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case "==":
+									if(sValue == nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case "<>":
+									if(sValue != nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+							}
+						}
+					}
+				}
+				//文本长度校验
+				function textcheck(form, value, child_item) {
+					if(value.length <= form.gcElLeng) {
+						return true;
+					} else {
+						$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>长度不能超过" + form.gcElLeng + "</i>");
+						return false;
+					}
+				}
+				//获取占用预算控件内的日期
+				function get_date() {
+					//					$scope.str = "【预算部门】销售部、媒体部【预算日期】2017-01-01~2017-03-31【预算金额】RMB:30,000元【可用余额】RMB:25,000元";
+					//					$scope.str =$('.apply_control_input:last').val();
+					var arr = [];
+					if(check_budget()) {
+						$scope.datestart = $rootScope.startTime;
+						$scope.dateend = $rootScope.endTime;
+						if($scope.datestart == undefined || $scope.dateend == undefined) {
+							return false;
+						} else {
+							arr = [$scope.datestart, $scope.dateend];
+						}
+					}
+					return arr;
+				}
+				//判断是否为部门预算并判断是否为预算单
+				function check_budget() {
+					if($scope.type != 10) {
+						if($scope.type == 20) {
+							return true;
+						} else {
+							return false;
+						}
+					} else {
+						return true;
+					}
+				}
+				//转化日期格式
+				function replace_date(date) {
+					var y = date.getFullYear();
+					var m = date.getMonth() + 1;
+					m = m < 10 ? '0' + m : m;
+					var d = date.getDate();
+					d = d < 10 ? ('0' + d) : d;
+					return y + '-' + m + '-' + d;
+				}
+
+				function addDate(dd, dadd) {
+					var a = $rootScope.getNewDate(dd)
+					a = a.valueOf()
+					a = a + dadd * 24 * 60 * 60 * 1000
+					a = $rootScope.getNewDate(a)
+					return a;
+				}
+
+				//验证申请单 出发日期+出差天数 是否在预算起始于截至日期范围内
+				function applyDateCheck(form) {
+					var budget_date = get_date();
+					if(budget_date) {
+						if(budget_date.length == 0) {
+							return false;
+						}
+						var start = $rootScope.getNewDate(budget_date[0].replace(/-/g, "/"));
+						var end = $rootScope.getNewDate(budget_date[1].replace(/-/g, "/"));
+						var mdCode_arr = [];
+
+						_.each(filed, function(_filed) {
+							switch(_filed.busCode) {
+								case "FromDate":
+									mdCode_arr.push(_filed.mdCode);
+									break;
+								case "travelDays":
+									mdCode_arr.push(_filed.mdCode);
+									break;
+							}
+						});
+
+						var item_form = [];
+						_.each(mdCode_arr, function(_mdCode_arr) {
+							if(form && form.child !== undefined) {
+								_.each(form.child, function(_form) {
+									if(_form.gcMeCode == _mdCode_arr) {
+										item_form.push(_form);
+									}
+								})
+							}
+						});
+
+						if(item_form && item_form.length > 0) {
+							if(item_form[0].render_value) {
+								var fromDate = $rootScope.getNewDate(item_form[0].render_value.replace(/-/g, "/"));
+
+								if(fromDate < start || fromDate > end) {
+									$("<i class='errinfo'>" + item_form[0].gcCpnAlias + "不在选择的预算时间范围内</i>").appendTo($('*[gccolname="' + item_form[0].gcColName + '"]:last').closest(".timeinfo"));
+								}
+
+								if(item_form[1].render_value) {
+									var travelDays = addDate(item_form[0].render_value, item_form[1].render_value);
+									if(travelDays < start || travelDays > end) {
+										$('*[gccolname="' + item_form[1].gcColName + '"]:last').after("<i class='errinfo'>" + item_form[0].gcCpnAlias + ' 和 ' + item_form[1].gcCpnAlias + "不在上级预算可用余额范围内</i>");
+									}
+								}
+							}
+						}
+
+					}
+				}
+
+				//根据占用预算控件内的日期校验时间
+				function datecheck(sDate, form) {
+					var datearr = get_date();
+					var checkflag = false;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "beginCalendar":
+								if(_filed.mdCode == form.gcMeCode) {
+									checkflag = true;
+								}
+								break;
+							case "endCalendar":
+								if(_filed.mdCode == form.gcMeCode) {
+									checkflag = true;
+								}
+								break;
+						}
+					})
+					if(datearr != false && checkflag) {
+						datearr[0] = datearr[0].slice(0, 10);
+						datearr[1] = datearr[1].slice(0, 10);
+						var start = $rootScope.getNewDate(datearr[0].replace(/-/g, "/"));
+						var end = $rootScope.getNewDate(datearr[1].replace(/-/g, "/"));
+						if(start <= sDate && sDate <= end) {
+							return true;
+						} else {
+							$("<i class='errinfo'>" + form.gcCpnAlias + "不在选择的预算时间范围内</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:last').closest(".timeinfo"));
+							return false;
+						}
+					} else {
+						return true;
+					}
+				}
+				//申请时间校验
+				function check_applyDate() {
+					var datearr = get_date();
+					var checkflag = false;
+					var apply_date_code, sDate, err_str;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "applyDate":
+								apply_date_code = _filed.mdCode;
+								break;
+						}
+					});
+					_.each($scope.form_data.child, function(form) {
+						if(form.gcMeCode == apply_date_code && form.gcMeCode != undefined) {
+							
+							sDate = $rootScope.getNewDate($('*[gccolname="' + form.gcColName + '"]').val().replace(/-/g, "/"));
+							checkflag = true;
+							err_str = form.gcCpnAlias + "不在选择的预算时间范围内";
+						}
+					});
+					if(datearr != false && checkflag && sDate) {
+						var start = $rootScope.getNewDate(datearr[0].replace(/-/g, "/"));
+						var end = $rootScope.getNewDate(datearr[1].replace(/-/g, "/"));
+						if(start <= sDate && sDate <= end) {
+							return true;
+						} else {
+							$rootScope.terro(err_str);
+							return false;
+						}
+					} else {
+						return true;
+					}
+
+				}
+				//验证预算金额、申请金额 是否在上级预算范围内
+				function check_sumMoney() {
+					if(check_budget() == false) {
+						return false;
+					}
+					var mdCode_arr = [];
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "budgetMoney":
+								mdCode_arr.push(_filed.mdCode);
+								break;
+							case "applyMoney":
+								mdCode_arr.push(_filed.mdCode);
+								break;
+						}
+					});
+					_.each($scope.form_data.child, function(form) {
+						_.each(mdCode_arr, function(code) {
+							if(form.gcMeCode == code) {
+								if(form.render_value != undefined && form.render_value !== "") {
+									if(form.render_value > $rootScope.sumMoney_budget && $rootScope.sumMoney_budget != undefined) {
+										$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcCpnAlias + "不在上级预算可用余额范围内</i>");
+									}
+								}
+							}
+						})
+					})
+				}
+				//日期加天数
+				function addDate(dd, dadd) {
+					var a = $rootScope.getNewDate(dd);
+					a = a.valueOf();
+					a = a + dadd * 24 * 60 * 60 * 1000;
+					a = $rootScope.getNewDate(a);
+					return a;
+				}
+				//跨行程验证 开始时间
+				function check_data_cross(type) {
+					if($scope.type == 10) {
+						return false;
+					}
+					if($scope.form_data == undefined){
+						return false;
+					}
+					var jour_data = [];
+					_.each($scope.form_data.child, function(form) {
+						if(form.gcCpnType == 10) {
+							jour_data.push(form);
+						}
+					});
+					var form_date = [];
+					var businessDays = [];
+					var leaveDate = [];
+					var form_date_code, businessDays_code, leaveDate_code;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "FromDate":
+								form_date_code = _filed.mdCode;
+								break;
+							case "travelDays":
+								businessDays_code = _filed.mdCode;
+								break;
+							case "journeyEndDate":
+								leaveDate_code = _filed.mdCode;
+								break;
+						}
+					})
+					if(jour_data.length > 1) { //当有一个以上行程才验证
+						_.each(jour_data, function(_jour, i) {
+							_.each(_jour.child, function(cd) {
+								switch(cd.gcMeCode) {
+									case form_date_code:
+										if(type) {
+											form_date.push({
+												"value": cd.render_value,
+												"item": cd
+											});
+										} else {
+											form_date.push({
+												"value": $('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').val(),
+												"item": cd
+											});
+										}
+										break;
+									case businessDays_code:
+										if(type) {
+											businessDays.push(cd.render_value);
+										} else {
+											businessDays.push($('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').val());
+										}
+										break;
+									case leaveDate_code:
+										if(type) {
+											leaveDate.push(cd.render_value);
+										} else {
+											leaveDate.push($('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').val());
+										}
+										break;
+								}
+							});
+						});
+						_.each(form_date, function(fdate, k) {
+							if($scope.type == 20) {
+								if(k > 0 && fdate.value != "" && fdate.value && form_date[k - 1].value != "" && form_date[k - 1].value && businessDays[k - 1] != "" && businessDays) {
+									var sDate = $rootScope.getNewDate(fdate.value);
+									var nDate = addDate(form_date[k - 1].value, businessDays[k - 1]);
+									if(sDate < nDate) {
+										if(type) {
+											$timeout(function() {
+												$('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').attr('color', 'red');
+												$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "与上一行程未衔接</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+											}, 1)
+										} else {
+											$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "与上一行程未衔接</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									} else if((sDate - nDate) != 0) {
+										if(type) {
+											$timeout(function() {
+												$('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').attr('color', 'red');
+												$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+											}, 1)
+										} else {
+											$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									}
+								}
+							} else if($scope.type == 30) {
+								if(k > 0 && fdate.value != "" && fdate.value && leaveDate[k - 1] != "" && leaveDate[k - 1]) {
+									var sDate = $rootScope.getNewDate(fdate.value);
+									var nDate = $rootScope.getNewDate(leaveDate[k - 1]);
+									if(sDate < nDate) {
+										if(type) {
+											$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "不可小于上一行程离开日期</i>").appendTo($('span[value="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										} else {
+											$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "不可小于上一行程离开日期</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									} else if((sDate - nDate) != 0) {
+										if(type) {
+											$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('span[value="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										} else {
+											$("<i class='errinfo_point' gcname="+fdate.item.gcColName+" gcnum="+k+">" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									}
+								}
+							}
+						})
+					}
+				}
+				$rootScope.check_data_cross = function() {
+					check_data_cross(true);
+				}
+				//跨行程 验证 出发地
+				function check_land_cross() {
+					if($scope.type == 10) {
+						return false;
+					}
+					if($scope.form_data == undefined){
+						return false;
+					}
+					var jour_data = [];
+					_.each($scope.form_data.child, function(form) {
+						if(form.gcCpnType == 10) {
+							jour_data.push(form);
+						}
+					});
+					var from_land = [];
+					var to_land = [];
+					var from_land_code, to_land_code;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "journey_from":
+								from_land_code = _filed.mdCode;
+								break;
+							case "journey_to":
+								to_land_code = _filed.mdCode;
+								break;
+						}
+					});
+					if(jour_data.length > 1) { //当有一个以上行程才验证
+						_.each(jour_data, function(_jour, i) {
+							_.each(_jour.child, function(cd) {
+								switch(cd.gcMeCode) {
+									case from_land_code:
+										from_land.push({
+											"value": $('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').attr('value'),
+											"item": cd
+										});
+										break;
+									case to_land_code:
+										to_land.push($('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').attr('value'));
+										break;
+								}
+							});
+						});
+						_.each(from_land, function(fland, k) {
+							if(k > 0 && fland.value != "" && fland.value && to_land[k - 1] != "" && to_land[k - 1]) {
+								var sLand = fland.value;
+								var nLand = to_land[k - 1];
+								if(sLand != nLand) {
+//									$('*[gccolname="' + fland.item.gcColName + '"]:eq(' + k + ')').after("<i class='errinfo_point' style='position:absolute'>" + fland.item.gcCpnAlias + "与上一行程的到达地不同</i>");
+									$('*[gccolname="' + fland.item.gcColName + '"]:eq(' + k + ')').closest('.select').append("<i class='errinfo_point' gcname="+fland.item.gcColName+" gcnum="+k+" style='position:absolute;margin-top:4px;'>" + fland.item.gcCpnAlias + "与上一行程的到达地不同</i>");
+								}
+							}
+						})
+					}
+				}
+				//数据校验
+				$rootScope.checkdata = function() {
+					$scope.checkdata();
+				}
+				$scope.checkdata = function() {
+					var child_item = -1; //子表单索引
+					var child_item_pay = -1;//支付方式子表单索引
+					var form = $scope.form_data;
+					$(".errinfo").remove();
+					$(".errinfo_point").remove();
+					check_sumMoney();
+					check_data_cross(false);
+					check_land_cross()
+					if($scope.type == 20) {
+						applyDateCheck(form);
+					}
+					_.each(form.child, function(_form) {
+						if(_form.gcCpnType !== 10 && _form.gcCpnType !== 17) { //判断是否为子表单 否
+							if(_form.gcShowFlag != 0){//被隐藏的控件 不验证
+								if(_form.gcCheckOp !== "" && _form.gcCheckOp != undefined) { //判断是否有校验规则 有
+									if(_form.gcCheckCpnCode == "-1") { //判断是否根据固定值进行校验 是
+										if(_form.gcCpnType == 5) { //判断是否为日期、时间 是
+											var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+											if(datecheck(sDtate, _form)) {
+												var nDate = $rootScope.getNewDate(_form.gcCheckValue.replace(/-/g, "/"));
+												showcheck(_form, sDtate, nDate, 0);
+											}
+										} else {
+											if(_form.gcCpnType == 7) { //判断是否为数字 是
+												var numberflag = numbercheck(_form, 0);
+												if(numberflag) {
+													var sValue = parseFloat($('*[gccolname="' + _form.gcColName + '"]').val());
+													var nValue = parseFloat(_form.gcCheckValue);
+													showcheck(_form, sValue, nValue, 0);
+												}
+											} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本 是
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												if(textcheck(_form, sValue, 0)) {
+													var nValue = _form.gcCheckValue;
+													showcheck(_form, sValue, nValue, 0);
+												}
+											} else {
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												var nValue = _form.gcCheckValue;
+												showcheck(_form, sValue, nValue, 0);
+											}
+										}
+									} else { //判断是否根据固定值进行校验 否
+										if(_form.gcCpnType == 5) { //判断是否为日期时间 是
+											var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+											var nDate;
+											if(datecheck(sDtate, _form)) {
+												_.each(form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+														nDate = $rootScope.getNewDate($('*[gccolname="' + _formchild.gcColName + '"]').val().replace(/-/g, "/"));
+													}
+												});
+												showcheck(_form, sDtate, nDate, 0);
+											}
+	
+										} else { //判断是否为日期时间 否
+											if(_form.gcCpnType == 7) { //判断是否为数字
+												var numberflag = numbercheck(_form, 0);
+												if(numberflag) {
+													var sValue = parseFloat($('*[gccolname="' + _form.gcColName + '"]').val());
+													var nValue;
+													_.each(form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+															nValue = parseFloat($('*[gccolname="' + _formchild.gcColName + '"]').val());
+														}
+													});
+													showcheck(_form, sValue, nValue, 0);
+												}
+	
+											} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本 是
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												var nValue;
+												if(textcheck(_form, sValue, 0)) {
+													_.each(form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+															nValue = $('*[gccolname="' + _formchild.gcColName + '"]').val();
+														}
+													});
+													showcheck(_form, sValue, nValue, 0);
+												}
+											} else {
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												var nValue;
+												_.each(form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+														nValue = $('*[gccolname="' + _formchild.gcColName + '"]').val();
+													}
+												});
+												showcheck(_form, sValue, nValue, 0);
+											}
+										}
+									}
+								} else { //判断是否有校验规则 没有
+									if(_form.gcInputMust == 1) { //判断是否必填  必填
+										var val;
+										if(_form.gcCpnType == 6) {
+											val = $('*[gccolname="' + _form.gcColName + '"]:last').attr("value");
+										} else if(_form.gcCpnType == 12) {
+											val = $('*[gccolname="' + _form.gcColName + '"]:last').attr("user_selected");
+										} else if(_form.gcCpnType == 0) {
+											val = $rootScope.budget_selected;
+										} else if(_form.gcCpnType == 14) {
+											val = $rootScope.expend_number_info;
+										} else {
+											val = $('*[gccolname="' + _form.gcColName + '"]:last').val();
+										}
+										if(_.isNull(val) == false){
+											val = val.replace(/\s/gi,'');
+										}
+										if(val == "" || _.isNull(val)) {
+										    
+											if(_form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + _form.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + _form.gcColName + '"]:last').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + _form.gcColName + '"]:last').after("<i class='errinfo'>" + _form.gcCpnAlias + "不能为空</i>");
+											}
+										} else {
+											if(_form.gcCpnType == 7) { //判断是否为数字 是
+												numbercheck(_form, 0);
+											} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												textcheck(_form, sValue, 0);
+											} else if(_form.gcCpnType == 5) { //判断是否为时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+												datecheck(sDtate, _form);
+											}
+										}
+									} else { //判断是否必填  可为空
+										if(_form.gcCpnType == 7) { //判断是否为数字 是
+											numbercheck(_form, 0);
+										} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本
+											var sValue = $('*[gccolname="' + _form.gcColName + '"]').val().trim(val);;
+											textcheck(_form, sValue, 0);
+										} else if(_form.gcCpnType == 5) { //判断是否为时间 是
+											var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+											datecheck(sDtate, _form);
+										}
+									}
+								}
+							}
+						} else if(_form.gcCpnType == 10) { //判断是否为子表单 是
+							child_item++;
+							_.each(_form.child, function(cd) {
+								if(cd.gcShowFlag != 0){//被隐藏的控件 不验证
+									if(cd.gcCheckOp !== "" && cd.gcCheckOp != undefined) { //判断是否有校验规则 有
+										if(cd.gcCheckCpnCode == "-1") { //判断是否根据固定值进行校验 是
+											if(cd.gcCpnType == 5) { //判断是否为日期、时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val().replace(/-/g, "/"));
+												var nDate = $rootScope.getNewDate(cd.gcCheckValue.replace(/-/g, "/"));
+												showcheck(cd, sDtate, nDate, child_item);
+	
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													var numberflag = numbercheck(cd, child_item);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val());
+														var nValue = parseFloat(cd.gcCheckValue);
+														showcheck(cd, sValue, nValue, child_item);
+													}
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													if(textcheck(cd, sValue, child_item)) {
+														var nValue = cd.gcCheckValue;
+														showcheck(cd, sValue, nValue, child_item);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													var nValue = cd.gcCheckValue;
+													showcheck(cd, sValue, nValue, child_item);
+												}
+											}
+	
+										} else { //判断是否根据固定值进行校验 否
+	
+											if(cd.gcCpnType == 5) { //判断是否为日期时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val().replace(/-/g, "/"));
+												var nDate;
+												_.each(_form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+														nDate = $rootScope.getNewDate($('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val().replace(/-/g, "/"))
+													}
+												});
+												showcheck(cd, sDtate, nDate, child_item);
+											} else { //判断是否为日期时间 否
+												if(cd.gcCpnType == 7) { //判断是否为数字
+													var numberflag = numbercheck(cd, child_item);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val());
+														var nValue;
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = parseFloat($('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val());
+															}
+														});
+														showcheck(cd, sValue, nValue, child_item);
+													}
+	
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													var nValue;
+													if(textcheck(cd, sValue, child_item)) {
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val();
+															}
+														});
+														showcheck(cd, sValue, nValue, child_item);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													var nValue;
+													_.each(_form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+															nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val();
+														}
+													});
+													showcheck(cd, sValue, nValue, child_item);
+												}
+											}
+										}
+									} else { //判断是否有校验规则  没有
+										if(cd.gcInputMust == 1) { //判断是否必填  必填
+											var val;
+											if(cd.gcCpnType == 6) {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').attr("value");
+											}else if(cd.gcCpnType == 12) {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item+')').attr("user_selected");
+											}
+											else {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+											}
+											if(_.isNull(val) == false){
+												val = val.replace(/\s/gi,'');
+											}
+											if(val == "" || _.isNull(val)) {
+												if(cd.gcCpnType == 5) {
+													$("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + cd.gcColName + '"]:eq(' + ((child_item + 1) * 2 - 1) + ')').closest(".timeinfo"));
+												} else {
+													$('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>");
+												}
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													numbercheck(cd, child_item);
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													textcheck(cd, sValue, child_item);
+												}
+											}
+										} else { //判断是否必填  可为空
+											if(cd.gcCpnType == 7) { //判断是否为数字 是
+												numbercheck(cd, child_item);
+											} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+												var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+												textcheck(cd, sValue, child_item);
+											}
+										}
+									}
+								}
+							})
+						}else if(_form.gcCpnType == 17){//判断是否为支付方式子表单 是
+							child_item_pay++;
+							_.each(_form.child, function(cd) {
+								if(cd.gcShowFlag != 0){//被隐藏的控件 不验证
+									if(cd.gcCheckOp !== "" && cd.gcCheckOp != undefined) { //判断是否有校验规则 有
+										if(cd.gcCheckCpnCode == "-1") { //判断是否根据固定值进行校验 是
+											if(cd.gcCpnType == 5) { //判断是否为日期、时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val().replace(/-/g, "/"));
+												var nDate = $rootScope.getNewDate(cd.gcCheckValue.replace(/-/g, "/"));
+												showcheck(cd, sDtate, nDate,child_item_pay);
+	
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													var numberflag = numbercheck(cd,child_item_pay);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val());
+														var nValue = parseFloat(cd.gcCheckValue);
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													if(textcheck(cd, sValue,child_item_pay)) {
+														var nValue = cd.gcCheckValue;
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													var nValue = cd.gcCheckValue;
+													showcheck(cd, sValue, nValue,child_item_pay);
+												}
+											}
+	
+										} else { //判断是否根据固定值进行校验 否
+	
+											if(cd.gcCpnType == 5) { //判断是否为日期时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val().replace(/-/g, "/"));
+												var nDate;
+												_.each(_form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+														nDate = $rootScope.getNewDate($('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val().replace(/-/g, "/"))
+													}
+												});
+												showcheck(cd, sDtate, nDate,child_item_pay);
+											} else { //判断是否为日期时间 否
+												if(cd.gcCpnType == 7) { //判断是否为数字
+													var numberflag = numbercheck(cd,child_item_pay);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val());
+														var nValue;
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = parseFloat($('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val());
+															}
+														});
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+	
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													var nValue;
+													if(textcheck(cd, sValue,child_item_pay)) {
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val();
+															}
+														});
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													var nValue;
+													_.each(_form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+															nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val();
+														}
+													});
+													showcheck(cd, sValue, nValue,child_item_pay);
+												}
+											}
+										}
+									} else { //判断是否有校验规则  没有
+										if(cd.gcInputMust == 1) { //判断是否必填  必填
+											var val;
+											if(cd.gcCpnType == 6){
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').attr("value");
+											}else if(cd.gcCpnType == 12) {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').attr("user_selected");
+											}
+											else{
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+											}
+											if(_.isNull(val) == false){
+												val = val.replace(/\s/gi,'');
+											}
+											if(val == ""|| _.isNull(val)) {
+												
+												if(cd.gcCpnType == 5) {
+													$("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + cd.gcColName + '"]:eq('+((child_item_pay+1)*2-1)+')').closest(".timeinfo"));
+												} else {
+													$('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').after("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>");
+												}
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													numbercheck(cd,child_item_pay);
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													textcheck(cd, sValue,child_item_pay);
+												}
+											}
+										} else { //判断是否必填  可为空
+											if(cd.gcCpnType == 7) { //判断是否为数字 是
+												numbercheck(cd,child_item_pay);
+											} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+												var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+												textcheck(cd, sValue,child_item_pay);
+											}
+										}
+									}
+								}
+							})
+						}
+					})
+				}
+				//保存发送请求
+				function save_post(form_data, bill_type, auto_flag, auto_data,version) {
+					
+					var auto_post_flag = true;
+					if(auto_flag) {
+						var data = auto_data;
+					} else {
+						var data = get_bill_data(form_data);
+					}
+					var allcost = 0;
+					if($scope.form_data == undefined){
+						is_click = true;
+						return false;
+					}
+					_.each($scope.form_data.child, function(cost) {
+						if(cost.gcCpnType == 10) {
+							if(cost.budget_list != undefined) {
+								if(cost.budget_list.length != 0) {
+									_.each(cost.budget_list, function(spell) {
+										allcost += parseFloat(spell.jp_amount);
+									});
+								}
+							}
+						}
+					});
+					data = _.extend(data, { "total": allcost });
+					if($scope.type == 10) {
+						data['bu_temp_id'] = form_data.guId;
+						data['bu_id'] = form_data.ap_id;
+					} else if($scope.type == 20) {
+						data['ap_temp_id'] = form_data.guId;
+						data['ap_id'] = form_data.ap_id;
+					} else if($scope.type == 30) {
+						data['ex_temp_id'] = form_data.guId;
+						if(auto_flag){// 自动 更新 对比 报销单ID
+							if(auto_data.ex_id != undefined && form_data.ap_id != undefined && auto_data.ex_id != form_data.ap_id){
+								auto_post_flag = false;
+							}
+						}else{// 非自动 更新不对比
+							data['ex_id'] = form_data.ap_id;
+						}
+					}
+					// 报销单——订单编号字段
+					if($scope.couldNumber) {
+						data['couldNumber'] = $scope.couldNumber;
+					}
+					// 报销单——公司代码字段
+					if(getCookie("csc_comp_code")) {
+						data['ex_company'] = getCookie("csc_comp_code");
+					}
+					var post_url;
+					if(auto_flag) { //自动更新时  接口不同
+						post_url = 'expend/update/special';
+					} else {
+						post_url = update_url;
+					}
+					
+					if($rootScope.get_all_err_data){
+						var form_err = $rootScope.get_all_err_data();// 保存错误 信息
+						
+						if(form_err != undefined){
+							_.extend(data,{'errInfo':JSON.stringify(form_err)});
+						}
+					}
+					
+					if(!auto_flag || (auto_flag && auto_post_flag)){
+						if(version != undefined){//添加版本号
+							_.extend(data,{"version":version});
+						}
+						if($rootScope.lock_key != undefined){//添加钥匙
+							_.extend(data,{"key":$rootScope.lock_key});
+						}
+						http_service.post(post_url, data, function(res) {
+							if(!auto_flag) {
+								is_click = true;
+								$scope.couldNumber = undefined;
+								if(res.status === 200) {
+									//alert('成功更新'+bill_type+'。');
+									//									$scope.$parent.refreshdata();
+									if(res.data.opState) {
+										$scope.$parent.tsuccess("成功更新" + bill_type + "")
+										$scope.$parent.refreshdata();
+										$(element).remove();
+									} else {
+//										$scope.$parent.terro("更新失败")
+										if(res.data.errMsg != undefined){
+											$rootScope.twarning(res.data.errMsg);
+										}else{
+											$scope.$parent.terro("更新失败")
+										}
+									}
+								} else {
+									//alert('更新'+bill_type+'失败。');
+									$scope.$parent.terro("更新" + bill_type + "失败");
+//									$rootScope.twarning(res.data.errMsg);
+								}
+								$(element).remove();
+							}
+						});
+					}else{
+						is_click = true;
+					}
+				}
+				//详情页自动计算并计算完公式后自动更新
+				$rootScope.save_post = function(auto_data) {
+					save_post($scope.form_data, "报销单", true, auto_data)
+				}
+				//修改确定
+				var is_click = true;
+				$scope.create_bill = function() {
+					var form_data = $scope.form_data;
+					var bill_type = "";
+					if($scope.type == 10) {
+						bill_type = "预算单";
+					} else if($scope.type == 20) {
+						bill_type = "申请单";
+					} else if($scope.type == 30) {
+						bill_type = "报销单";
+					}
+					$timeout(function() {
+						if(is_click == false) {
+							return false;
+						}
+						is_click = false;
+						if($scope.type != 10) {// 申请单、报销单 详情保存时  计算费用
+							$rootScope.query_journel_budget($scope.type, function(version) {
+								$timeout(function(){
+									create_bill_save(form_data,bill_type,version);
+								});
+							}, false);
+						} else {
+							create_bill_save(form_data,bill_type);
+						}
+//						$scope.checkdata();
+//						if($(".errinfo").length == 0 && check_applyDate()) {
+//							if($scope.type == 10 && $rootScope.budget_selected != "") {
+//								http_service.post("budget/search/balance", { "buNumber": $rootScope.budget_selected }, function(result) {
+//									var budgetMoney_code;
+//									var save_flag = true;
+//									_.each(filed, function(_filed) {
+//										if(_filed.busCode == "budgetMoney") {
+//											budgetMoney_code = _filed.mdCode;
+//										}
+//									})
+//									_.each($scope.form_data, function(form) {
+//										if(form.gcMeCode == budgetMoney_code) {
+//											if(form.render_value > result.data.data) {
+//												save_flag = false;
+//												is_click = true;
+//												$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcCpnAlias + "不在上级预算可用余额范围内</i>");
+//											}
+//										}
+//									})
+//									if(save_flag) {
+//										save_post(form_data, bill_type, false);
+//									}
+//								});
+//							} else {
+//								// 判断如果有错误提示  弹出确认框
+//								if($(".errinfo_point").length > 0) {
+//									$rootScope.swalWhether({ "title": "确认保存?", 'text': "<p style='color:red'>提示:" + bill_type + "数据不符合标准</p><p style='color:red'>点击取消可查看</p>" }, function(res) {
+//										if(!res) {
+//											is_click = true;
+//											return false;
+//										} else {
+//											swal.close();
+//											save_post(form_data, bill_type, false);
+//										}
+//									});
+//								} else {
+//									save_post(form_data, bill_type, false);
+//								}
+//							}
+//
+//						} else {
+//							is_click = true;
+//						}
+					}, 10);
+				};
+				//详情保存
+				function create_bill_save(form_data,bill_type,version){
+					$scope.checkdata();
+						if($(".errinfo").length == 0 && check_applyDate()) {
+							if($scope.type == 10 && $rootScope.budget_selected != "") {
+								http_service.post("budget/search/balance", { "buNumber": $rootScope.budget_selected }, function(result) {
+									var budgetMoney_code;
+									var save_flag = true;
+									_.each(filed, function(_filed) {
+										if(_filed.busCode == "budgetMoney") {
+											budgetMoney_code = _filed.mdCode;
+										}
+									})
+									_.each($scope.form_data, function(form) {
+										if(form.gcMeCode == budgetMoney_code) {
+											if(form.render_value > result.data.data) {
+												save_flag = false;
+												is_click = true;
+												$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcCpnAlias + "不在上级预算可用余额范围内</i>");
+											}
+										}
+									})
+									if(save_flag) {
+										save_post(form_data, bill_type, false,"",version);
+									}
+								});
+							} else {
+								// 判断如果有错误提示  弹出确认框
+								if($(".errinfo_point").length > 0) {
+									$rootScope.swalWhether({ "title": "确认保存?", 'text': "<p style='color:red'>提示:" + bill_type + "数据不符合标准</p><p style='color:red'>点击取消可查看</p>" }, function(res) {
+										if(!res) {
+											is_click = true;
+											return false;
+										} else {
+											swal.close();
+											save_post(form_data, bill_type, false,"",version);
+										}
+									});
+								} else {
+									save_post(form_data, bill_type, false,"",version);
+								}
+							}
+
+						} else {
+							$rootScope.terro("存在未通过校验规则的控件,请检查",true);
+							is_click = true;
+						}
+				}
+				//显示iframe页面
+				function getCookie(cname) {
+					var name = cname + "=";
+					var ca = document.cookie.split(';');
+					for(var i = 0; i < ca.length; i++) {
+						var c = ca[i].trim();
+						if(c.indexOf(name) == 0) return c.substring(name.length, c.length);
+					}
+					return "";
+				}
+				var tokens = getCookie('token');
+				var compid = getCookie("csc_compid");
+				var tenantId = getCookie("tenantId");
+				$scope.iframe_src = iframe_url + "views/order_create_visit.html?token="+tokens+"&compid="+compid+"&tenantId="+tenantId;
+//				$scope.iframe_src = "./static/templates/iframe_test.html";
+				$scope.show_iframe = function() {
+					$scope.iframe_show = true;
+					var thisHeight = $(".bill_create_pop").height();
+					$('#iframeId').height(thisHeight);
+					//					var iframeHeight=document.getElementById("iframeId").contentWindow.document.body.offsetHeight;
+				}
+				$scope.close_iframe = function() {
+					$scope.iframe_show = false;
+				}
+				window.addEventListener("message", function(event) {
+					if(event.data != undefined && event.data.indexOf('=') != -1) {
+						var arr = event.data.split('=');
+						// 报销单 上传票据后 接收订单号
+						$scope.couldNumber = arr[1];
+						//						if (arr[1]) {
+						//							$scope.tsuccess("票据上传成功!");
+						//						} else {
+						//							$scope.terro("票据上传失败!");
+						//						}
+						$scope.exCouldNumber = $scope.couldNumber;
+
+						if($(".tool_icon").length != 0) {
+							//接收到订单号后  更新报销单
+							http_service.post("expend/update/cloudNumber", { "ex_id": $rootScope.billid, "couldNumber": $scope.couldNumber }, function(res) {
+								if(res.status === 200) {
+									if(res.data.opState) {
+										//									$scope.$parent.tsuccess("成功更新" + bill_type + "");
+										if($rootScope.reflect_bill) {
+											$rootScope.reflect_bill();
+										}
+										$scope.$parent.refreshdata();
+										if($rootScope.refres_table_data){//审核成功后刷新列表  修改后
+											$rootScope.refres_table_data();
+										}
+										if($rootScope.refer_data_all) { //审核成功后刷新列表
+											$rootScope.refer_data_all();
+										}
+										if($rootScope.refer_data_budget) { //审核成功后刷新列表
+											$rootScope.refer_data_budget();
+										}
+										if($rootScope.refer_data_apply) { //审核成功后刷新列表
+											$rootScope.refer_data_apply();
+										}
+										if($rootScope.refer_data_expend) { //审核成功后刷新列表
+											$rootScope.refer_data_expend();
+										}
+									} else {
+										$scope.$parent.terro("更新失败")
+									}
+								}
+							})
+						}
+					}
+					$timeout(function() {
+						$scope.iframe_show = false;
+					}, 1)
+				}, false);
+
+				//关闭iframe页面并获取iframe页面的值
+				window.getdata_iframe = function(couldNumber) {
+					$timeout(function() {
+						$scope.iframe_show = false;
+					}, 1)
+				}
+				//判断是否可以编辑和删除
+				switch($scope.type) {
+					case 10:
+						$scope.editurl = 'flow/budget/can/edit';
+						break;
+					case 20:
+						$scope.editurl = 'flow/apply/can/edit';
+						break;
+					case 30:
+						$scope.editurl = 'flow/expend/can/edit';
+						break;
+				}
+				//获取流程状态详情
+				http_service.post($scope.editurl, {
+					"tId": $rootScope.billid
+				}, function(response) {
+					//获取预算,申请,报销记录
+					switch($scope.type) {
+						case 10:
+							$scope.url = 'flow/budget/log';
+							$scope.typeword = '预算流程';
+							break;
+						case 20:
+							$scope.url = 'flow/apply/log';
+							$scope.typeword = '申请流程';
+							break;
+						case 30:
+							$scope.url = 'flow/expend/log';
+							$scope.typeword = '报销流程';
+							break;
+					}
+					http_service.post($scope.url, {
+						"tId": $rootScope.billid
+					}, function(res) {
+						$scope.res = res.data.data;
+						$scope.response = response.data.data;
+						$scope.editflag = $scope.response.edit;
+						$scope.deleteflag = $scope.response.edit;
+						$scope.commitflag = $scope.response.submit;
+						$scope.check = $scope.response.submit && $scope.response.edit ? "提交" : "审核";
+						$scope.backflag = $scope.response.back;
+						$scope.data = $scope.response.data;
+						$scope.expendAllPermiss = app_userinfo.expendAllPermiss;
+						if($scope.res && $scope.res.length > 0) {
+							var flow_data = $scope.res[$scope.res.length - 1];
+							if(flow_data.flStepCode == undefined) {
+								flow_data = $scope.res[$scope.res.length - 2];
+							}
+							if(flow_data.flStepCode == 20) {
+								$scope.flow_back = true;
+							}
+						}
+
+						//流程表单提交按钮响应事件
+						$scope.commit_bill = function() {
+							if( !$scope.save_btn_flag || !$scope.init_btn_flag){// 计算完费用且显示完全后才可提交
+								return false;
+							}
+							var cost_err;
+							if($scope.cost_err != undefined) {
+								if($scope.cost_err.length != 0) {
+									cost_err = "警告!费用不符合标准"
+								} else {
+									cost_err = "";
+								}
+							} else if($('.errinfo').length > 0 || $('.errinfo_point').length > 0 || $('.is_red').length > 0 || $('.nobill_red').length > 0) {
+								cost_err = "警告!存在不符合标准信息";
+							} else {
+								cost_err = "";
+							}
+							if($scope.check == "提交") {
+								if($scope.type == 30) { //报销单中必须有行程且报销金额大于0才可提交
+									var expendMoney_code;
+									var jour_flag = false;
+									var money_flag = true;
+									_.each(filed, function(_filed) {
+										if(_filed.busCode == "expendMoney") {
+											expendMoney_code = _filed.mdCode;
+										}
+									});
+									_.each($scope.form_data.child, function(form) {
+										if(form.gcMeCode == expendMoney_code) {
+											var val = form.render_value;
+											if(val && val > 0) {
+												money_flag = true
+											} else {
+												money_flag = false;
+											}
+										}
+										if(form.gcCpnType == 10) {
+											jour_flag = true;
+										}
+									});
+									if(!jour_flag) {
+										$rootScope.terro("必须有行程才可提交");
+										return false;
+									}
+									if(!money_flag) {
+										$rootScope.terro("报销金额大于0才可提交");
+										return false;
+									}
+								}
+								var approval = true;
+								$scope.checkdata(); //提交前校验规则
+								if($('.errinfo').length > 0) {
+									return false;
+								}
+								$rootScope.swalWhether({ "title": "确认" + $scope.check + "?", 'text': cost_err },
+									function() {
+										if(approval) {
+											approval = false;
+											$scope.param = _.extend({
+												"tId": $rootScope.billid
+											}, $scope.data);
+											//判断表单类型
+											switch($scope.type) {
+												case 10:
+													$scope.submiturl = 'flow/budget/submit';
+													break;
+												case 20:
+													$scope.submiturl = 'flow/apply/submit';
+													break;
+												case 30:
+													$scope.submiturl = 'flow/expend/submit';
+													break;
+											}
+											
+											if($rootScope.get_all_err_data){
+												var form_err = $rootScope.get_all_err_data();// 保存错误 信息
+												
+												if(form_err != undefined){
+													_.extend($scope.param,{'errInfo':JSON.stringify(form_err)});
+												}
+											}
+											
+											if($rootScope.lock != undefined){//提交时  传锁头
+												_.extend($scope.param,{'lock':$rootScope.lock});
+											}
+											http_service.post($scope.submiturl, $scope.param, function(response) {
+												if(response.data.opState) {
+													$rootScope.swalsuccess({ "text": "流程表单" + $scope.check + "成功!" })
+													$(element).remove();
+													if($scope.$parent.refreshdata) {
+														$scope.$parent.refreshdata();
+													}
+													if($rootScope.refres_table_data){//提交成功后刷新列表  修改后
+														$rootScope.refres_table_data();
+													}
+													if($rootScope.refer_data_all) { //提交成功后刷新列表
+														$rootScope.refer_data_all();
+													}
+													if($rootScope.refer_data_budget) { //提交成功后刷新列表
+														$rootScope.refer_data_budget();
+													}
+													if($rootScope.refer_data_apply) { //提交成功后刷新列表
+														$rootScope.refer_data_apply();
+													}
+													if($rootScope.refer_data_expend) { //提交成功后刷新列表
+														$rootScope.refer_data_expend();
+													}
+												} else {
+													//												$rootScope.swalerror({ "text": "流程表单" + $scope.check + "失败!" })
+													$rootScope.swalerror({ "text": response.data.errMsg });
+												}
+												//$scope.$parent.tsuccess()
+												http_service.post($scope.editurl, {
+													"tId": $rootScope.billid
+												}, function(result) {
+													$scope.response = result.data.data;
+													$scope.editflag = $scope.response.edit;
+													$scope.deleteflag = $scope.response.edit;
+													$scope.commitflag = $scope.response.submit;
+													$scope.check = $scope.response.submit && $scope.response.edit ? "提交" : "审核";
+													$scope.backflag = $scope.response.back;
+												});
+											})
+										}
+									});
+							} else {
+								$scope.audit_commit_show = true;
+								$scope.back_commit_show = false;
+							}
+						};
+						//关闭审核弹窗
+						$scope.audit_commit_close = function() {
+							$scope.audit_commit_show = false;
+							$("#audit_commit_content_textarea").val("");
+						}
+						//审核确定
+						var audit_commit_wait = true;
+						$scope.audit_commit = function() {
+							if(audit_commit_wait) {
+								audit_commit_wait = false;
+								$scope.param = _.extend({
+									"tId": $rootScope.billid,
+									"info": $("#audit_commit_content_textarea").val()
+								}, $scope.data);
+								var form_err = $rootScope.get_all_err_data();// 保存错误 信息
+								if(form_err != undefined){
+									_.extend($scope.param,{'errInfo':JSON.stringify(form_err)});
+								}
+								
+								//判断表单类型
+								switch($scope.type) {
+									case 10:
+										$scope.submiturl = 'flow/budget/submit';
+										break;
+									case 20:
+										$scope.submiturl = 'flow/apply/submit';
+										break;
+									case 30:
+										$scope.submiturl = 'flow/expend/submit';
+										break;
+								}
+								http_service.post($scope.submiturl, $scope.param, function(response) {
+									audit_commit_wait = true;
+									if(response.data.opState) {
+										$rootScope.swalsuccess({ "text": "流程表单" + $scope.check + "成功!" })
+										$(element).remove();
+										if($rootScope.refres_table_data){//审核成功后刷新列表  修改后
+											$rootScope.refres_table_data();
+										}
+										if($rootScope.refer_data_all) { //审核成功后刷新列表
+											$rootScope.refer_data_all();
+										}
+										if($rootScope.refer_data_budget) { //审核成功后刷新列表
+											$rootScope.refer_data_budget();
+										}
+										if($rootScope.refer_data_apply) { //审核成功后刷新列表
+											$rootScope.refer_data_apply();
+										}
+										if($rootScope.refer_data_expend) { //审核成功后刷新列表
+											$rootScope.refer_data_expend();
+										}
+									} else {
+										//												$rootScope.swalerror({ "text": "流程表单" + $scope.check + "失败!" })
+										$rootScope.swalerror({ "text": response.data.errMsg });
+									}
+									//$scope.$parent.tsuccess()
+									http_service.post($scope.editurl, {
+										"tId": $rootScope.billid
+									}, function(result) {
+										$scope.response = result.data.data;
+										$scope.editflag = $scope.response.edit;
+										$scope.deleteflag = $scope.response.edit;
+										$scope.commitflag = $scope.response.submit;
+										$scope.check = $scope.response.submit && $scope.response.edit ? "提交" : "审核";
+										$scope.backflag = $scope.response.back;
+									});
+								})
+							}
+						}
+						//流程表单退回按钮响应事件
+						$scope.back_bill = function() {
+							$scope.audit_commit_show = false;
+							$scope.back_commit_show = true;
+							//								var disagree = true;
+							////						$rootScope.swalWhether({ "title": "确认退回表单?", 'text': "" },
+							////							function() {
+							//								if(disagree){
+							//									disagree = false;
+							//								$scope.param = _.extend({
+							//									"tId": $rootScope.billid
+							//								}, $scope.data);
+							//								http_service.post('flow/budget/back', $scope.param, function(response) {
+							//									if(response.data.opState) {
+							//										$rootScope.swalsuccess({ "text": "退回成功!" })
+							//									} else {
+							//										$rootScope.swalerror({ 'text': "退回失败!" },
+							//											function() {
+							//												childDel();
+							//											})
+							//									}
+							//									http_service.post($scope.editurl, {
+							//										"tId": $rootScope.billid
+							//									}, function(result) {
+							//										$scope.response = result.data.data;
+							//										$scope.editflag = $scope.response.edit;
+							//										$scope.deleteflag = $scope.response.edit;
+							//										$scope.commitflag = $scope.response.submit;
+							//										$scope.check = $scope.response.submit && $scope.response.edit ? "提交" : "审核";
+							//										$scope.backflag = $scope.response.back;
+							//									});
+							//									$(element).remove();
+							//								})
+							//								//								swal({
+							//								//									title: "完成",
+							//								//									text: "流程表单成功退回!",
+							//								//									type: "success",
+							//								//									confirmButtonText: "确定",
+							//								//								});
+							//								//
+							//
+							//								$(element).remove();
+							//								}
+							//							})
+						};
+						//退回确定
+						var back_commit_wait = true;
+						$scope.back_commit = function() {
+							if(back_commit_wait) {
+								back_commit_wait = false;
+								$scope.param = _.extend({
+									"tId": $rootScope.billid,
+									"info": $("#back_commit_content_textarea").val()
+								}, $scope.data);
+								var back_url;
+								switch($scope.type) {
+									case 10:
+										back_url = "flow/budget/back";
+										break;
+									case 20:
+										back_url = 'flow/apply/back';
+										break;
+									case 30:
+										back_url = 'flow/expend/back';
+										break;
+								}
+								http_service.post(back_url, $scope.param, function(response) {
+									back_commit_wait = true;
+									if(response.data.opState) {
+										$rootScope.swalsuccess({ "text": "退回成功!" })
+										if($rootScope.refres_table_data){//退回成功后刷新列表  修改后
+											$rootScope.refres_table_data();
+										}
+										if($rootScope.refer_data_all) { //退回成功后刷新列表
+											$rootScope.refer_data_all();
+										}
+										if($rootScope.refer_data_budget) { //退回成功后刷新列表
+											$rootScope.refer_data_budget();
+										}
+										if($rootScope.refer_data_apply) { //退回成功后刷新列表
+											$rootScope.refer_data_apply();
+										}
+										if($rootScope.refer_data_expend) { //退回成功后刷新列表
+											$rootScope.refer_data_expend();
+										}
+									} else {
+										//										$rootScope.swalerror({ 'text': "退回失败!" },
+										//											function() {
+										//												childDel();
+										//											})
+										$rootScope.swalerror({ 'text': response.data.errMsg },
+											function() {
+												childDel();
+											})
+									}
+									http_service.post($scope.editurl, {
+										"tId": $rootScope.billid
+									}, function(result) {
+										$scope.response = result.data.data;
+										$scope.editflag = $scope.response.edit;
+										$scope.deleteflag = $scope.response.edit;
+										$scope.commitflag = $scope.response.submit;
+										$scope.check = $scope.response.submit && $scope.response.edit ? "提交" : "审核";
+										$scope.backflag = $scope.response.back;
+									});
+									$(element).remove();
+								})
+							}
+						}
+						//关闭退回弹窗
+						$scope.back_commit_close = function() {
+							$("#back_commit_content_textarea").val("");
+							$scope.back_commit_show = false;
+						}
+						//判断是否有流程记录
+						$scope.flowflag = $scope.response.flowStart;
+						//显示流程状态详情
+						$scope.flowstatus = function() {
+							//存储流程信息
+							$scope.flowDetail = [];
+							$scope.flow_status_show = $scope.flowflag;
+
+						}
+					})
+
+				})
+
+				//删除按钮响应事件
+				$scope.rm_bill = function() {
+					function childDel() {
+						var form_data = $scope.form_data;
+						var ap_id = form_data.ap_id;
+						var del_url = '';
+						if($scope.type == 10) {
+							del_url = "budget/deletebudgets";
+							var data = {
+								"child": [{
+									"buId": ap_id,
+									"key":$rootScope.lock_key != undefined?$rootScope.lock_key:""
+								}],
+								"insP": 1 //单个删除  用于后端权限判断
+							};
+						} else if($scope.type == 20) {
+							del_url = "apply/deleteApplys";
+							var data = {
+								"child": [{
+									"apId": ap_id,
+									"key":$rootScope.lock_key != undefined?$rootScope.lock_key:""
+								}],
+								"insP": 1 //单个删除  用于后端权限判断
+							};
+						} else if($scope.type == 30) {
+							del_url = "expend/deleteExpends";
+							var data = {
+								"child": [{
+									"exId": ap_id,
+									"key":$rootScope.lock_key != undefined?$rootScope.lock_key:""
+								}],
+								"insP": 1 //单个删除  用于后端权限判断
+							};
+						}
+						http_service.post(del_url, data, function(res) {
+							if(res.status == 200) {
+								$(element).remove();
+								$scope.$parent.refreshdata();
+								//								swal({
+								//									title: "完成",
+								//									text: "成功删除!",
+								//									type: "success",
+								//									confirmButtonText: "确定",
+								//								})
+								if(res.data.opState) {
+									$rootScope.swalsuccess({ "text": "成功删除!" })
+								} else {
+									if(res.data.errMsg != undefined){
+										$rootScope.swalerror({ "text": res.data.errMsg })
+									}else{
+										$rootScope.swalerror({ "text": "删除失败!" })
+									}
+									
+
+								}
+
+							}
+						});
+					};
+					var deleteall = true;
+					$rootScope.swalWhether({ "title": "确定删除?", 'text': "" },
+						function() {
+							if(deleteall) {
+								deleteall = false;
+								childDel();
+							}
+
+						});
+
+				};
+				//删除单项项结束
+				$(element).find('.close').on('click', function() {
+					$(element).remove();
+
+				});
+				var edit_bill_flag = true;
+				$scope.edit_bill = function() {
+					if( !$scope.save_btn_flag){// 计算完费用后才可编辑
+						return false;
+					}
+					if(!edit_bill_flag){
+						return false;
+					}
+					var lock_key_url;
+					if($scope.type == "10"){//编辑验证锁
+						lock_key_url = "budget/edit";
+					}else if($scope.type == "20"){
+						lock_key_url = "apply/edit";
+					}else if($scope.type == "30"){
+						lock_key_url = "expend/edit";
+					}
+					lock_data = {
+						"type":$scope.type,
+						"id":$rootScope.form_id
+					};
+					if($rootScope.lock != undefined){
+						_.extend(lock_data,{"lock":$rootScope.lock});
+					}
+					http_service.post(lock_key_url,lock_data,function(res){
+						edit_bill_flag = true;
+						if(res.data.opState == true){
+							$rootScope.lock_key = res.data.data;
+							$scope.edit = true;
+							$scope.bill_commit_permission = "bill_commit_update";
+							$timeout(function() {
+								$scope.btnflag = true;
+							}, 10)
+						}else{
+							$rootScope.twarning(res.data.errMsg);
+						}
+					});
+				}
+			}
+
+		}
+	}])
+	.directive('billCreator', ['$rootScope', 'http_service', '$timeout', function($rootScope, http_service, $timeout) {
+		return {
+			restrict: 'EACM',
+			templateUrl: './static/templates/bill_create_popup.html?v=10211439',
+			link: function($scope, element, attrs) {
+				$scope.save_btn_flag = true;
+				$scope.init_btn_flag = false;
+				$rootScope.startTime = undefined;
+				$rootScope.endTime = undefined;
+				$rootScope.sumMoney_budget = undefined;
+				$scope.couldNumber = undefined;
+				$scope.exCouldNumber = undefined;
+				$scope.edit = true;
+				//若无票据上传权限 则无票据上传按钮
+				//				if(app_userinfo.expendAllPermiss){
+				//					$scope.bill_commit_flag = true;				
+				//				}else{
+				//					$scope.bill_commit_flag = false;					
+				//				}
+				function select_arr(select_arr) {
+					var str = '';
+					if(select_arr && $.isArray(select_arr)) {
+						for(var i = 0; i < select_arr.length; i++) {
+							if(str != '') { str = str + ',' }
+							str = str + select_arr[i];
+						}
+						return str;
+					} else {
+						return select_arr;
+					}
+
+				}
+
+				function get_bill_data(form, data,cd_num,cd_type) {
+					var flag = !!data;
+					var bill_data = data || {
+						'child': [],
+						'fchild':[]
+					};
+					if(!flag) {
+						var children = form.child;
+						if(children && children.length) {
+							var num = 0;
+							var pay_num = 0;
+							_.each(children, function(cd) {
+								var col_name = cd['gcColName'];
+								var _children = cd['child'];
+								if(col_name) {
+									var item_cus = $('*[gcColName="' + col_name + '"]');
+									if(item_cus.is(':radio')) {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]:checked').val();
+									} else if(item_cus.attr("class") == "getDateTime ng-scope flatpickr-input") {
+										bill_data[col_name] = cd['render_value'];
+									} else if(item_cus.attr("class") == "select-container") {
+										bill_data[col_name] = select_arr(cd['render_value']);
+									} else if(item_cus.attr("choose_budget")) { //判断是否为预算选择控件
+										bill_data[col_name] = $rootScope.budget_selected;
+										bill_data['buNumber'] = $rootScope.budget_selected;
+									} else if(item_cus.attr("choose_apply")) { //判断是否为申请选择控件
+										bill_data[col_name] = $rootScope.expend_number_info;
+										bill_data['apNumber'] = $rootScope.expend_number_info;
+									} else if(item_cus.attr("user_selected")) { //判断是否为人员选择控件
+										$rootScope.userId = $('*[gcColName="' + col_name + '"]').attr("user_selected");
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').attr("user_selected");
+									} else if(item_cus.attr("org_selected")) { //判断是否为组织机构选择控件
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').attr("org_selected");
+									} else if(item_cus.attr("selected_city")) {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').attr("selected_city");
+									} else {
+										bill_data[col_name] = $('*[gcColName="' + col_name + '"]').val();
+									}
+								}
+								if(_children && _children.length) {
+									if(cd.gcCpnType == 10){
+										get_bill_data(cd, bill_data,num,1);
+										num++;
+									}else if(cd.gcCpnType == 17){
+										get_bill_data(cd, bill_data,pay_num,2);
+										pay_num++;
+									}
+								}
+							});
+						}
+					} else{
+						var children = form.child;
+						if(children && children.length) {
+							var sub_form = {
+								'child': []
+							};
+							_.each(children, function(cd) {
+								var col_name = cd['gcColName'];
+								var _children = cd['child'];
+								var type = cd['gcCpnType'];
+								if(type === 12) {
+									sub_form[col_name] = $('*[gcColName="' + col_name + '"]:eq(' + cd_num + ')').attr("user_selected");
+//									var budget_list = form['budget_list'];
+//									var user_id, _budget_list = [];
+//									_.each(budget_list, function(budget) {
+//										sub_form['child'].push({
+//											"an_user_id": budget.userId,
+//											"child": _.map(budget.child, function(cld) {
+//												return {
+//													"jp_cd_code": cld['jp_cd_code'],
+//													"jp_amount": cld['jp_amount']
+//												}
+//											})
+//										});
+//									});
+
+								} else {
+									if(col_name) {
+										if(cd.gcCpnType == 6) {
+											sub_form[col_name] = $('*[gcColName="' + col_name + '"]:eq(' + cd_num + ')').attr('value');
+										} else {
+											sub_form[col_name] = $('*[gcColname="' + col_name + '"]:eq(' + cd_num + ')').val();
+										}
+									}
+								}
+
+							});
+							//							if(form.budget_list&&form.budget_list.length!=0){
+							//								var budget_list = form.budget_list[0].child;
+							//										sub_form['child'].push({
+							//											"an_user_id":$rootScope.userId,
+							//											"child": _.map(budget_list, function(cld) {
+							//												return {
+							//													"jp_cd_code": cld['jp_cd_code'],
+							//													"jp_amount": cld['jp_amount']
+							//												}
+							//											})
+							//										});
+							//							}
+
+						}
+						if(cd_type == 1){
+							bill_data['child'].push(sub_form);
+						}else if(cd_type == 2){
+							bill_data['fchild'].push(sub_form);
+						}
+					}
+					return bill_data;
+
+				}
+
+				$scope.cancel = function() {
+					$(element).remove();
+				};
+				
+				//校验数字
+				function numbercheck(form, child_item) {
+					var val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').val();
+					
+					
+					if(val != "") {
+						if(textcheck(form, val, child_item)) { //文本长度校验
+							var reg0 = new RegExp("^([-]){0,1}([0-9]){1,}([.]){0,1}([0-9]){0,}$"); //校验是否为数字
+							var reg1 = new RegExp("^-?\\d+$"); //校验是否为整数
+							var reg2 = new RegExp("^-?\\d+(.[0-9]{0," + form.gcDmlLeng + "})?$"); //校验是否为n位小数
+							if(!reg0.test(val)) {
+								$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>请输入数字</i>");
+								return false;
+							} else {
+								if(form.gcCpnFormat == 20) { //当条件为整数时
+									if(!reg1.test(val)) { //不为整数
+										
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>必须为整数</i>");
+										return false;
+									} else if(val.length > form.gcElLeng) { //长度超过限制
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>长度不能超过" + form.gcElLeng + "</i>");
+										return false;
+									} else {
+										return true;
+									}
+								} else { //当条件为允许小数时
+									if(form.gcDmlLeng == undefined || _.trim(form.gcDmlLeng) == ''){
+										return true;
+									}else if(!reg2.test(val)) { //超过n位小数
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>小数位数不能超过" + form.gcDmlLeng + "位</i>");
+										return false;
+									} else if(val.length > form.gcElLeng) { //长度超过限制
+										$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>长度不能超过" + form.gcElLeng + "</i>");
+										return false;
+									} else {
+										return true;
+									}
+								}
+							}
+						}
+
+					} else {
+						return true;
+					}
+				}
+				//判断并显示校验信息
+				function showcheck(form, sValue, nValue, child_item) {
+					if(nValue != undefined) {
+						if(form.gcInputMust == 1) { //判断是否必填  必填
+							var val;
+							if(form.gcCpnType == 6) {
+								val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').attr("value");
+							} else if(form.gcCpnType == 12) {
+								val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').attr("user_selected");
+							} else if(form.gcCpnType == 0) {
+								val = $rootScope.budget_selected
+							} else if(form.gcCpnType == 14) {
+								val = $rootScope.expend_number_info;
+							} else {
+								val = $('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').val();
+							}
+							if(_.isNull(val) == false){
+								val = val.replace(/\s/gi,'');
+							}
+							if(val == "" || _.isNull(val)) {
+								
+								if(form.gcCpnType == 5) {
+									$("<i class='errinfo'>" + form.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+								} else {
+									$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcCpnAlias + "不能为空</i>");
+								}
+								return false;
+							} else {
+								switch(form.gcCheckOp) {
+									case "<":
+										if(sValue < nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case "<=":
+										if(sValue <= nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case ">":
+										if(sValue > nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case ">=":
+										if(sValue >= nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case "==":
+										if(sValue == nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:last').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+									case "<>":
+										if(sValue != nValue) {
+											if(form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+											}
+											return false;
+										}
+										break;
+								}
+							}
+						} else { //判断是否必填  可为空
+							switch(form.gcCheckOp) {
+								case "<":
+									if(sValue < nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case "<=":
+									if(sValue <= nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]::eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case ">":
+									if(sValue > nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case ">=":
+									if(sValue >= nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case "==":
+									if(sValue == nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+								case "<>":
+									if(sValue != nValue) {
+										if(form.gcCpnType == 5) {
+											$("<i class='errinfo'>" + form.gcErrorMsg + "</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').closest(".timeinfo"));
+										} else {
+											$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + form.gcErrorMsg + "</i>");
+										}
+										return false;
+									}
+									break;
+							}
+						}
+					}
+				}
+				//文本长度校验
+				function textcheck(form, value, child_item) {
+					
+					if(value.length <= form.gcElLeng) {
+						return true;
+					} else {
+						$('*[gccolname="' + form.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>长度不能超过" + form.gcElLeng + "</i>");
+						return false;
+					}
+				}
+				//获取占用预算控件内的日期
+				function get_date() {
+					//					$scope.str = "【预算部门】销售部、媒体部【预算日期】2017-01-01~2017-03-31【预算金额】RMB:30,000元【可用余额】RMB:25,000元";
+					//					$scope.str =$('.apply_control_input:last').val();
+					var arr = [];
+					if(check_budget()) {
+						$scope.datestart = $rootScope.startTime;
+						$scope.dateend = $rootScope.endTime;
+						if($scope.datestart == undefined || $scope.dateend == undefined) {
+							return false;
+						} else {
+							arr = [$scope.datestart, $scope.dateend];
+						}
+					}
+					return arr;
+				}
+				//判断是否为部门预算并判断是否为预算单
+				function check_budget() {
+					if($scope.type != 10) {
+						if($scope.type == 20) {
+							return true;
+						} else {
+							return false;
+						}
+					} else {
+						return true;
+					}
+				}
+
+				function addDate(dd, dadd) {
+					var a = $rootScope.getNewDate(dd)
+					a = a.valueOf()
+					a = a + dadd * 24 * 60 * 60 * 1000
+					a = $rootScope.getNewDate(a)
+					return a;
+				}
+
+				//验证申请单 出发日期+出差天数 是否在预算起始于截至日期范围内
+				function applyDateCheck(form) {
+					var budget_date = get_date();
+					if(budget_date) {
+						if(budget_date.length == 0) {
+							return false;
+						}
+						var start = $rootScope.getNewDate(budget_date[0].replace(/-/g, "/"));
+						var end = $rootScope.getNewDate(budget_date[1].replace(/-/g, "/"));
+						var mdCode_arr = [];
+
+						_.each(filed, function(_filed) {
+							switch(_filed.busCode) {
+								case "FromDate":
+									mdCode_arr.push(_filed.mdCode);
+									break;
+								case "travelDays":
+									mdCode_arr.push(_filed.mdCode);
+									break;
+							}
+						});
+
+						var item_form = [];
+						_.each(mdCode_arr, function(_mdCode_arr) {
+							if(form && form.child !== undefined) {
+								_.each(form.child, function(_form) {
+									if(_form.gcMeCode == _mdCode_arr) {
+										item_form.push(_form);
+									}
+								})
+							}
+						});
+
+						if(item_form && item_form.length > 0) {
+							if(item_form[0].render_value) {
+								var fromDate = $rootScope.getNewDate(item_form[0].render_value.replace(/-/g, "/"));
+
+								if(fromDate < start || fromDate > end) {
+									$("<i class='errinfo'>" + item_form[0].gcCpnAlias + "不在选择的预算时间范围内</i>").appendTo($('*[gccolname="' + item_form[0].gcColName + '"]:last').closest(".timeinfo"));
+								}
+
+								if(item_form[1].render_value) {
+									var travelDays = addDate(item_form[0].render_value, item_form[1].render_value);
+									if(travelDays < start || travelDays > end) {
+										$('*[gccolname="' + item_form[1].gcColName + '"]:last').after("<i class='errinfo'>" + item_form[0].gcCpnAlias + ' 和 ' + item_form[1].gcCpnAlias + "不在上级预算可用余额范围内</i>");
+									}
+								}
+							}
+						}
+
+					}
+				}
+
+				//根据占用预算控件内的日期校验时间
+				function datecheck(sDate, form) {
+					var datearr = get_date();
+					var checkflag = false;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "beginCalendar":
+								if(_filed.mdCode == form.gcMeCode) {
+									checkflag = true;
+								}
+								break;
+							case "endCalendar":
+								if(_filed.mdCode == form.gcMeCode) {
+									checkflag = true;
+								}
+								break;
+						}
+					})
+					if(datearr != false && checkflag) {
+						var start = $rootScope.getNewDate(datearr[0].replace(/-/g, "/"));
+						var end = $rootScope.getNewDate(datearr[1].replace(/-/g, "/"));
+						if(start <= sDate && sDate <= end) {
+							return true;
+						} else {
+							$("<i class='errinfo'>" + form.gcCpnAlias + "不在选择的预算时间范围内</i>").appendTo($('*[gccolname="' + form.gcColName + '"]:last').closest(".timeinfo"));
+							return false;
+						}
+					} else {
+						return true;
+					}
+				}
+				//申请时间校验
+				function check_applyDate() {
+					var datearr = get_date();
+					var checkflag = false;
+					var apply_date_code, sDate, err_str;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "applyDate":
+								apply_date_code = _filed.mdCode;
+								break;
+						}
+					});
+					_.each($scope.form_data.child, function(form) {
+						if(form.gcMeCode == apply_date_code && form.gcMeCode != undefined) {
+							sDate = $rootScope.getNewDate($('*[gccolname="' + form.gcColName + '"]').val().replace(/-/g, "/"));
+							checkflag = true;
+							err_str = form.gcCpnAlias + "不在选择的预算时间范围内";
+						}
+					});
+					if(datearr != false && checkflag && sDate) {
+						var start = $rootScope.getNewDate(datearr[0].replace(/-/g, "/"));
+						var end = $rootScope.getNewDate(datearr[1].replace(/-/g, "/"));
+						if(start <= sDate && sDate <= end) {
+							return true;
+						} else {
+							$rootScope.terro(err_str);
+							return false;
+						}
+					} else {
+						return true;
+					}
+
+				}
+				//验证预算金额、申请金额 是否在上级预算范围内
+				function check_sumMoney() {
+					if(check_budget() == false) {
+						return false;
+					}
+					var mdCode_arr = [];
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "budgetMoney":
+								mdCode_arr.push(_filed.mdCode);
+								break;
+							case "applyMoney":
+								mdCode_arr.push(_filed.mdCode);
+								break;
+						}
+					});
+					if($scope.form_data) {
+						_.each($scope.form_data.child, function(form) {
+							_.each(mdCode_arr, function(code) {
+								if(form.gcMeCode == code) {
+									if(form.render_value != undefined && form.render_value !== "") {
+										if(form.render_value > $rootScope.sumMoney_budget && $rootScope.sumMoney_budget != undefined) {
+											$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcCpnAlias + "不在上级预算可用余额范围内</i>");
+										}
+									}
+								}
+							})
+						})
+					}
+
+				}
+				//日期加天数
+				function addDate(dd, dadd) {
+					var a = $rootScope.getNewDate(dd);
+					a = a.valueOf();
+					a = a + dadd * 24 * 60 * 60 * 1000;
+					a = $rootScope.getNewDate(a);
+					return a;
+				}
+				//跨行程验证 开始时间
+				function check_data_cross(type) {
+					if($scope.type == 10) {
+						return false;
+					}
+					var jour_data = [];
+					if($scope.form_data == undefined) {
+						return false;
+					}
+					_.each($scope.form_data.child, function(form) {
+						if(form.gcCpnType == 10) {
+							jour_data.push(form);
+						}
+					});
+					var form_date = [];
+					var businessDays = [];
+					var leaveDate = [];
+					var form_date_code, businessDays_code, leaveDate_code;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "FromDate":
+								form_date_code = _filed.mdCode;
+								break;
+							case "travelDays":
+								businessDays_code = _filed.mdCode;
+								break;
+							case "journeyEndDate":
+								leaveDate_code = _filed.mdCode;
+								break;
+						}
+					})
+					if(jour_data.length > 1) { //当有一个以上行程才验证
+						_.each(jour_data, function(_jour, i) {
+							_.each(_jour.child, function(cd) {
+								switch(cd.gcMeCode) {
+									case form_date_code:
+										form_date.push({
+											"value": $('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').val(),
+											"item": cd
+										});
+										break;
+									case businessDays_code:
+										businessDays.push($('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').val());
+										break;
+									case leaveDate_code:
+										leaveDate.push($('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').val());
+										break;
+								}
+							});
+						});
+						_.each(form_date, function(fdate, k) {
+							if($scope.type == 20) {
+								if(k > 0 && fdate.value != "" && fdate.value && form_date[k - 1].value != "" && form_date[k - 1].value && businessDays[k - 1] != "" && businessDays) {
+									var sDate = $rootScope.getNewDate(fdate.value);
+									var nDate = addDate(form_date[k - 1].value, businessDays[k - 1]);
+									if(sDate < nDate) {
+										if(type) {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "与上一行程未衔接</i>").appendTo($('*[gccolname_date="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										} else {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "与上一行程未衔接</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									} else if((sDate - nDate) != 0) {
+										if(type) {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('*[gccolname_date="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										} else {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									}
+								}
+							} else if($scope.type == 30) {
+								if(k > 0 && fdate.value != "" && fdate.value && leaveDate[k - 1] != "" && leaveDate[k - 1]) {
+									var sDate = $rootScope.getNewDate(fdate.value);
+									var nDate = $rootScope.getNewDate(leaveDate[k - 1]);
+									if(sDate < nDate) {
+										if(type) {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "不可小于上一行程离开日期</i>").appendTo($('*[gccolname_date="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										} else {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "不可小于上一行程离开日期</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									} else if((sDate - nDate) != 0) {
+										if(type) {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('span[value="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										} else {
+											$("<i class='errinfo_point'>" + fdate.item.gcCpnAlias + "与上一行程不连续</i>").appendTo($('*[gccolname="' + fdate.item.gcColName + '"]:eq(' + k + ')').closest(".timeinfo"));
+										}
+									}
+								}
+							}
+						})
+					}
+				}
+				//跨行程 验证 出发地
+				function check_land_cross() {
+					if($scope.type == 10) {
+						return false;
+					}
+					var jour_data = [];
+					if($scope.form_data == undefined) {
+						return false;
+					}
+					_.each($scope.form_data.child, function(form) {
+						if(form.gcCpnType == 10) {
+							jour_data.push(form);
+						}
+					});
+					var from_land = [];
+					var to_land = [];
+					var from_land_code, to_land_code;
+					_.each(filed, function(_filed) {
+						switch(_filed.busCode) {
+							case "journey_from":
+								from_land_code = _filed.mdCode;
+								break;
+							case "journey_to":
+								to_land_code = _filed.mdCode;
+								break;
+						}
+					});
+					if(jour_data.length > 1) { //当有一个以上行程才验证
+						_.each(jour_data, function(_jour, i) {
+							_.each(_jour.child, function(cd) {
+								switch(cd.gcMeCode) {
+									case from_land_code:
+										from_land.push({
+											"value": $('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').attr('value'),
+											"item": cd
+										});
+										break;
+									case to_land_code:
+										to_land.push($('*[gccolname="' + cd.gcColName + '"]:eq(' + i + ')').attr('value'));
+										break;
+								}
+							});
+						});
+						_.each(from_land, function(fland, k) {
+							if(k > 0 && fland.value != "" && fland.value && to_land[k - 1] != "" && to_land[k - 1]) {
+								var sLand = fland.value;
+								var nLand = to_land[k - 1];
+								if(sLand != nLand) {
+									$('*[gccolname="' + fland.item.gcColName + '"]:eq(' + k + ')').after("<i class='errinfo_point'>" + fland.item.gcCpnAlias + "与上一行程的到达地不同</i>");
+								}
+							}
+						})
+					}
+				}
+				//数据校验
+				$rootScope.checkdata = function() {
+					$scope.checkdata();
+				}
+				$scope.checkdata = function() {
+					var child_item = -1; //子表单索引
+					var child_item_pay = -1//支付方式子表单索引
+					var form = $scope.form_data;
+					$(".errinfo").remove();
+					$(".errinfo_point").remove();
+					check_sumMoney();
+					check_data_cross(false);
+					check_land_cross();
+					if($scope.type == 20) {
+						applyDateCheck(form);
+					}
+					if(form == undefined) {
+						return false;
+					}
+					_.each(form.child, function(_form) {
+						if(_form.gcCpnType !== 10 && _form.gcCpnType !== 17) {//判断是否为子表单 否
+							if(_form.gcShowFlag != 0){//被隐藏的控件 不验证
+								if(_form.gcCheckOp !== "" && _form.gcCheckOp != undefined) { //判断是否有校验规则 有
+									if(_form.gcCheckCpnCode == "-1") { //判断是否根据固定值进行校验 是
+										if(_form.gcCpnType == 5) { //判断是否为日期、时间 是
+											var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+											if(datecheck(sDtate, _form)) {
+												var nDate = $rootScope.getNewDate(_form.gcCheckValue.replace(/-/g, "/"));
+												showcheck(_form, sDtate, nDate, 0);
+											}
+										} else {
+											if(_form.gcCpnType == 7) { //判断是否为数字 是
+												var numberflag = numbercheck(_form, 0);
+												if(numberflag) {
+													var sValue = parseFloat($('*[gccolname="' + _form.gcColName + '"]').val());
+													var nValue = parseFloat(_form.gcCheckValue);
+													showcheck(_form, sValue, nValue, 0);
+												}
+											} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本 是
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												if(textcheck(_form, sValue, 0)) {
+													var nValue = _form.gcCheckValue;
+													showcheck(_form, sValue, nValue, 0);
+												}
+											} else {
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												var nValue = _form.gcCheckValue;
+												showcheck(_form, sValue, nValue, 0);
+											}
+										}
+									} else { //判断是否根据固定值进行校验 否
+										if(_form.gcCpnType == 5) { //判断是否为日期时间 是
+											var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+											var nDate;
+											if(datecheck(sDtate, _form)) {
+												_.each(form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+														nDate = $rootScope.getNewDate($('*[gccolname="' + _formchild.gcColName + '"]').val().replace(/-/g, "/"));
+													}
+												});
+												showcheck(_form, sDtate, nDate, 0);
+											}
+	
+										} else { //判断是否为日期时间 否
+											if(_form.gcCpnType == 7) { //判断是否为数字
+												var numberflag = numbercheck(_form, 0);
+												if(numberflag) {
+													var sValue = parseFloat($('*[gccolname="' + _form.gcColName + '"]').val());
+													var nValue;
+													_.each(form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+															nValue = parseFloat($('*[gccolname="' + _formchild.gcColName + '"]').val());
+														}
+													});
+													showcheck(_form, sValue, nValue, 0);
+												}
+	
+											} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本 是
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												var nValue;
+												if(textcheck(_form, sValue, 0)) {
+													_.each(form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+															nValue = $('*[gccolname="' + _formchild.gcColName + '"]').val();
+														}
+													});
+													showcheck(_form, sValue, nValue, 0);
+												}
+											} else {
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												var nValue;
+												_.each(form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == _form.gcCheckCpnCode) {
+														nValue = $('*[gccolname="' + _formchild.gcColName + '"]').val();
+													}
+												});
+												showcheck(_form, sValue, nValue, 0);
+											}
+										}
+									}
+								} else { //判断是否有校验规则 没有
+									if(_form.gcInputMust == 1) { //判断是否必填  必填
+										var val;
+										if(_form.gcCpnType == 6) {
+											val = $('*[gccolname="' + _form.gcColName + '"]:last').attr("value");
+										} else if(_form.gcCpnType == 12) {
+											val = $('*[gccolname="' + _form.gcColName + '"]:last').attr("user_selected");
+										} else if(_form.gcCpnType == 0) {
+											val = $rootScope.budget_selected;
+										} else if(_form.gcCpnType == 14) {
+											val = $rootScope.expend_number_info;
+										} else {
+											val = $('*[gccolname="' + _form.gcColName + '"]:last').val();
+										}
+//										
+//										
+										if(_.isNull(val) == false){
+											val = val.replace(/\s/gi,'');
+										}
+										if(val == "" || val == undefined || _.isNull(val)) {
+											
+											if(_form.gcCpnType == 5) {
+												$("<i class='errinfo'>" + _form.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + _form.gcColName + '"]:last').closest(".timeinfo"));
+											} else {
+												$('*[gccolname="' + _form.gcColName + '"]:last').after("<i class='errinfo'>" + _form.gcCpnAlias + "不能为空</i>");
+											}
+										} else {
+											if(_form.gcCpnType == 7) { //判断是否为数字 是
+												numbercheck(_form, 0);
+											} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本
+												var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+												textcheck(_form, sValue, 0);
+											} else if(_form.gcCpnType == 5) { //判断是否为时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+												datecheck(sDtate, _form);
+											}
+										}
+									} else { //判断是否必填  可为空
+										if(_form.gcCpnType == 7) { //判断是否为数字 是
+											numbercheck(_form, 0);
+										} else if(_form.gcCpnType == 1 || _form.gcCpnType == 2) { //判断是否为文本
+											var sValue = $('*[gccolname="' + _form.gcColName + '"]').val();
+											textcheck(_form, sValue, 0);
+										} else if(_form.gcCpnType == 5) { //判断是否为时间 是
+											var sDtate = $rootScope.getNewDate($('*[gccolname="' + _form.gcColName + '"]').val().replace(/-/g, "/"));
+											datecheck(sDtate, _form);
+										}
+									}
+								}
+							}
+						} else if(_form.gcCpnType == 10) { //判断是否为子表单 是
+							child_item++;
+							_.each(_form.child, function(cd) {
+								if(cd.gcShowFlag != 0){//被隐藏的控件 不验证
+									if(cd.gcCheckOp !== "" && cd.gcCheckOp != undefined) { //判断是否有校验规则 有  
+										if(cd.gcCheckCpnCode == "-1") { //判断是否根据固定值进行校验 是
+											if(cd.gcCpnType == 5) { //判断是否为日期、时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val().replace(/-/g, "/"));
+												var nDate = $rootScope.getNewDate(cd.gcCheckValue.replace(/-/g, "/"));
+												showcheck(cd, sDtate, nDate, child_item);
+	
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													var numberflag = numbercheck(cd, child_item);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val());
+														var nValue = parseFloat(cd.gcCheckValue);
+														showcheck(cd, sValue, nValue, child_item);
+													}
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													if(textcheck(cd, sValue, child_item)) {
+														var nValue = cd.gcCheckValue;
+														showcheck(cd, sValue, nValue, child_item);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													var nValue = cd.gcCheckValue;
+													showcheck(cd, sValue, nValue, child_item);
+												}
+											}
+	
+										} else { //判断是否根据固定值进行校验 否
+	
+											if(cd.gcCpnType == 5) { //判断是否为日期时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val().replace(/-/g, "/"));
+												var nDate;
+												_.each(_form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+														nDate = $rootScope.getNewDate($('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val().replace(/-/g, "/"))
+													}
+												});
+												showcheck(cd, sDtate, nDate, child_item);
+											} else { //判断是否为日期时间 否
+												if(cd.gcCpnType == 7) { //判断是否为数字
+													var numberflag = numbercheck(cd, child_item);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val());
+														var nValue;
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = parseFloat($('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val());
+															}
+														});
+														showcheck(cd, sValue, nValue, child_item);
+													}
+	
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													var nValue;
+													if(textcheck(cd, sValue, child_item)) {
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val();
+															}
+														});
+														showcheck(cd, sValue, nValue, child_item);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													var nValue;
+													_.each(_form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+															nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq(' + child_item + ')').val();
+														}
+													});
+													showcheck(cd, sValue, nValue, child_item);
+												}
+											}
+										}
+									} else{ //判断是否有校验规则  没有
+										if(cd.gcInputMust == 1) { //判断是否必填  必填
+											var val;
+											
+											if(cd.gcCpnType == 6) {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').attr("value");
+											}else if(cd.gcCpnType == 12) {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item+')').attr("user_selected");
+											}
+											else {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+											}
+											if(_.isNull(val) == false){
+												val = val.replace(/\s/gi,'');
+											}
+											if(val == "" || _.isNull(val)) {
+												
+												if(cd.gcCpnType == 5) {
+													$("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + cd.gcColName + '"]:eq(' + ((child_item + 1) * 2 - 1) + ')').closest(".timeinfo"));
+												} else {
+													$('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').after("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>");
+												}
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													numbercheck(cd, child_item);
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+													textcheck(cd, sValue, child_item);
+												}
+											}
+										} else { //判断是否必填  可为空
+											if(cd.gcCpnType == 7) { //判断是否为数字 是
+												numbercheck(cd, child_item);
+											} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+												var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq(' + child_item + ')').val();
+												textcheck(cd, sValue, child_item);
+											}
+										}
+									}
+								}
+							})
+						}else if(_form.gcCpnType == 17){//判断是否为支付方式子表单
+							child_item_pay++;
+							_.each(_form.child, function(cd) {
+								if(cd.gcShowFlag != 0){//被隐藏的控件 不验证
+									if(cd.gcCheckOp !== "" && cd.gcCheckOp != undefined) { //判断是否有校验规则 有
+										if(cd.gcCheckCpnCode == "-1") { //判断是否根据固定值进行校验 是
+											if(cd.gcCpnType == 5) { //判断是否为日期、时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val().replace(/-/g, "/"));
+												var nDate = $rootScope.getNewDate(cd.gcCheckValue.replace(/-/g, "/"));
+												showcheck(cd, sDtate, nDate,child_item_pay);
+	
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													var numberflag = numbercheck(cd,child_item_pay);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val());
+														var nValue = parseFloat(cd.gcCheckValue);
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													if(textcheck(cd, sValue,child_item_pay)) {
+														var nValue = cd.gcCheckValue;
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													var nValue = cd.gcCheckValue;
+													showcheck(cd, sValue, nValue,child_item_pay);
+												}
+											}
+	
+										} else { //判断是否根据固定值进行校验 否
+	
+											if(cd.gcCpnType == 5) { //判断是否为日期时间 是
+												var sDtate = $rootScope.getNewDate($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val().replace(/-/g, "/"));
+												var nDate;
+												_.each(_form.child, function(_formchild) { //找到与之比较的控件
+													if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+														nDate = $rootScope.getNewDate($('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val().replace(/-/g, "/"))
+													}
+												});
+												showcheck(cd, sDtate, nDate,child_item_pay);
+											} else { //判断是否为日期时间 否
+												if(cd.gcCpnType == 7) { //判断是否为数字
+													var numberflag = numbercheck(cd,child_item_pay);
+													if(numberflag) {
+														var sValue = parseFloat($('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val());
+														var nValue;
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = parseFloat($('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val());
+															}
+														});
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+	
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) { //判断是否为文本 是
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													var nValue;
+													if(textcheck(cd, sValue,child_item_pay)) {
+														_.each(_form.child, function(_formchild) { //找到与之比较的控件
+															if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+																nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val();
+															}
+														});
+														showcheck(cd, sValue, nValue,child_item_pay);
+													}
+												} else {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													var nValue;
+													_.each(_form.child, function(_formchild) { //找到与之比较的控件
+														if(_formchild.gcMeCode == cd.gcCheckCpnCode) {
+															nValue = $('*[gccolname="' + _formchild.gcColName + '"]:eq('+child_item_pay+')').val();
+														}
+													});
+													showcheck(cd, sValue, nValue,child_item_pay);
+												}
+											}
+										}
+									} else { //判断是否有校验规则  没有
+										if(cd.gcInputMust == 1) { //判断是否必填  必填
+											var val;
+//											
+//											
+											if(cd.gcCpnType == 6){
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').attr("value");
+											}else if(cd.gcCpnType == 12) {
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').attr("user_selected");
+											} 
+											else{
+												val = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+											}
+											if(_.isNull(val) == false){
+												val = val.replace(/\s/gi,'');
+											}
+//											
+											if(val == "" || _.isNull(val)) {
+												
+												if(cd.gcCpnType == 5) {
+													$("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>").appendTo($('*[gccolname="' + cd.gcColName + '"]:eq('+((child_item_pay+1)*2-1)+')').closest(".timeinfo"));
+												} else {
+													$('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').after("<i class='errinfo'>" + cd.gcCpnAlias + "不能为空</i>");
+												}
+											} else {
+												if(cd.gcCpnType == 7) { //判断是否为数字 是
+													numbercheck(cd,child_item_pay);
+												} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+													var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+													textcheck(cd, sValue,child_item_pay);
+												}
+											}
+										} else { //判断是否必填  可为空
+											if(cd.gcCpnType == 7) { //判断是否为数字 是
+												numbercheck(cd,child_item_pay);
+											} else if(cd.gcCpnType == 1 || cd.gcCpnType == 2) {
+												var sValue = $('*[gccolname="' + cd.gcColName + '"]:eq('+child_item_pay+')').val();
+												textcheck(cd, sValue,child_item_pay);
+											}
+										}
+									}
+								}
+							})
+						}
+					})
+				}
+				//保存发送请求
+				function save_post(form_data) {
+					var data = get_bill_data(form_data);
+					if($scope.type == 10) {
+						data['bu_temp_id'] = form_data.guId;
+					} else if($scope.type == 20) {
+						data['ap_temp_id'] = form_data.guId;
+					} else if($scope.type == 30) {
+						data['ex_temp_id'] = form_data.guId;
+						// 报销单——订单编号字段
+						if($scope.couldNumber) {
+							data['couldNumber'] = $scope.couldNumber;
+						}
+						// 报销单——公司代码字段
+						if(getCookie("csc_comp_code")) {
+							data['ex_company'] = getCookie("csc_comp_code");
+						}
+						//								if($rootScope.expend_number_info) {
+						//									data['apNumber'] = $rootScope.expend_number_info;
+						//								}
+					}
+					http_service.post($scope.bill_data_create_url, data, function(res) {
+						$scope.is_click = true;
+						$scope.couldNumber = undefined;
+						var bill_type = "";
+						if($scope.type == 10) {
+							bill_type = "预算单";
+						} else if($scope.type == 20) {
+							bill_type = "申请单";
+						} else if($scope.type == 30) {
+							bill_type = "报销单";
+						}
+						if(res.status === 200) {
+
+							//alert('成功保存'+bill_type+'。');
+							if(res.data.opState) {
+								$scope.$parent.tsuccess("成功保存" + bill_type + "。")
+								$scope.refreshdata()
+								$(element).remove();
+							} else {
+								$scope.$parent.terro("保存" + bill_type + "失败。")
+							}
+						} else {
+							//alert('保存'+bill_type+'失败。');
+							$scope.$parent.terro("保存" + bill_type + "失败")
+						}
+						$(element).remove();
+					})
+				}
+				//新建保存
+				function create_bill_save(form_data) {
+					$scope.checkdata();
+					if(check_applyDate() == false) {
+						$scope.is_click = true;
+						return false;
+					}
+					if($(".errinfo").length == 0) {
+						if($scope.type == 10 && $rootScope.budget_selected != "") {
+							http_service.post("budget/search/balance", { "buNumber": $rootScope.budget_selected }, function(res) {
+								var budgetMoney_code;
+								var save_flag = true;
+								_.each(filed, function(_filed) {
+									if(_filed.busCode == "budgetMoney") {
+										budgetMoney_code = _filed.mdCode;
+									}
+								})
+								_.each($scope.form_data, function(form) {
+									if(form.gcMeCode == budgetMoney_code) {
+										if(form.render_value > res.data.data) {
+											save_flag = false;
+											is_click = true;
+											$('*[gccolname="' + form.gcColName + '"]:last').after("<i class='errinfo'>" + form.gcCpnAlias + "不在上级预算可用余额范围内</i>");
+										}
+									}
+								})
+								if(save_flag) {
+									save_post(form_data);
+								}
+							})
+						} else {
+							var bill_type = "";
+							if($scope.type == 10) {
+								bill_type = "预算单";
+							} else if($scope.type == 20) {
+								bill_type = "申请单";
+							} else if($scope.type == 30) {
+								bill_type = "报销单";
+							}
+							// 判断如果有错误提示  弹出确认框
+							if($(".errinfo_point").length > 0) {
+								$rootScope.swalWhether({ "title": "确认保存?", 'text': "<p style='color:red'>提示:" + bill_type + "数据不符合标准</p><p style='color:red'>点击取消可查看</p>" }, function(res) {
+									if(!res) {
+										$scope.is_click = true;
+										return false;
+									} else {
+										swal.close();
+										save_post(form_data);
+									}
+								});
+							} else {
+								save_post(form_data);
+							}
+
+						}
+					} else {
+						$rootScope.terro("存在未通过校验规则的控件,请检查",true);
+						$scope.is_click = true;
+					}
+				}
+				//新建确定
+				$scope.is_click = true;
+				$scope.create_bill = function() {
+					var form_data = $scope.form_data;
+					$timeout(function() {
+						if($scope.is_click == false) {
+							return false;
+						}
+						$scope.is_click = false;
+						if($scope.type != 10) {// 申请单、报销单 新建保存时  计算费用
+							$rootScope.query_journel_budget($scope.type, function(version) {
+								$timeout(function(){
+									create_bill_save(form_data);
+								},10)
+							}, false);
+						} else {
+							create_bill_save(form_data);
+						}
+					}, 10);
+				}
+				//document.domain = "";//iframe 同顶级域名的不同二级域名之间的调用解决办法
+				//显示iframe页面
+				function getCookie(cname) {
+					var name = cname + "=";
+					var ca = document.cookie.split(';');
+					for(var i = 0; i < ca.length; i++) {
+						var c = ca[i].trim();
+						if(c.indexOf(name) == 0) return c.substring(name.length, c.length);
+					}
+					return "";
+				}
+				var tokens = getCookie('token');
+				var compid = getCookie("csc_compid");
+				var tenantId = getCookie("tenantId");
+				$scope.iframe_src = iframe_url + "views/order_create_visit.html?token="+tokens+"&compid="+compid+"&tenantId="+tenantId;
+//				$scope.iframe_src = "./static/templates/iframe_test.html";
+				$scope.show_iframe = function() {
+					$scope.iframe_show = true;
+					var thisHeight = $(".bill_create_pop").height();
+					$('#iframeId').height(thisHeight);
+					//					var iframeHeight=document.getElementById("iframeId").contentWindow.document.body.offsetHeight;
+				}
+				$scope.close_iframe = function() {
+					$scope.iframe_show = false;
+				}
+				// TODO
+				window.addEventListener("message", function(event) {
+					if(event.data != undefined && event.data.indexOf('=') != -1) {
+						var arr = event.data.split('=');
+						// 报销单 上传票据后 接收订单号
+						$scope.couldNumber = arr[1];
+						//						if (arr[1]) {
+						//							$scope.tsuccess("票据上传成功!");
+						//						} else {
+						//							$scope.terro("票据上传失败!");
+						//						}
+						$scope.exCouldNumber = $scope.couldNumber;
+					}
+					$timeout(function() {
+						$scope.iframe_show = false;
+					}, 1)
+				}, false);
+
+				//关闭iframe页面并获取iframe页面的值
+				window.getdata_iframe = function(couldNumber) {
+					$timeout(function() {
+						$scope.iframe_show = false;
+					}, 1)
+				}
+				//关闭iframe页面并获取iframe页面的值
+				//				window.close_iframe = function() {
+				//					$timeout(function() {
+				//						$scope.iframe_show = false;
+				//					}, 1)
+				//
+				//				}
+			}
+		}
+	}])
+
+	//点击查看表详情
+	.directive('clickDetailTd', ['$rootScope', '$compile', function($rootScope, $compile) {
+		return function(scope, element, attrs) {
+			$(element).css({
+				'cursor': 'pointer'
+			});
+			$(element).on('click', function() {
+				var billid = $(element).find('input[type="checkbox"]').attr('bind_value');
+				$rootScope.billid = billid;
+				$('#detailPopup').remove();
+				//默认不可编辑
+				scope.edit = false;
+				var $el = $('<div detail-popup id="detailPopup" type="type" billid="' + billid + '" edit="edit" iscreate=1 ></div>');
+				$('body').append($el);
+				$compile($el)(scope);
+			});
+		}
+	}])
+	//上级预算管控:点击选择弹出预算单列表
+	.directive('clickBudgetDetail', [function() {
+		return {
+			restrict: "EACM",
+			templateUrl: './static/templates/completed_order.html'
+		}
+	}])
+	.directive('clickDetailTdAll', ['$rootScope', '$compile', 'http_service', function($rootScope, $compile, http_service) {
+		return {
+			scope: {
+				index: "@",
+				type: "@",
+				mold: "@" //								editurl:"@"
+			},
+			link: function(scope, element, attrs) {
+
+				$(element).css({
+					'cursor': 'pointer'
+				});
+				$(element).on('click', function() {
+					var urls = "flow/" + scope.mold + "/wait/handle";
+					//					http_service.post(urls, {}, function(res) {
+					var billid = scope.$parent.data[scope.index].id;
+					//						if(res.data.data[scope.index].bu_id) {
+					//							billid = res.data.data[scope.index].bu_id;
+					//						} else if(res.data.data[scope.index].ap_id) {
+					//							billid = res.data.data[scope.index].ap_id;
+					//						} else {
+					//							billid = res.data.data[scope.index].ex_id;
+					//						}
+
+					$rootScope.billid = billid;
+					$('#detailPopup').remove();
+					scope.edit = false;
+					var $el = $('<div detail-popup id="detailPopup" type="' + scope.type + '" billid="' + billid + '" edit="edit" iscreate=1 ></div>');
+					$('body').append($el);
+					$compile($el)(scope);
+					//					});
+
+				});
+			}
+		}
+	}])
+	.controller('travelExpenseCtrl', ['$scope', '$routeParams', '$route', '$compile', 'http_service', '$rootScope', function($scope, $routeParams, $route, $compile, http_service, $rootScope) {
+		$scope.type = $routeParams.type;
+		if($rootScope.my_form_type == undefined){
+			$rootScope.my_form_type = 1;
+		}
+		switch($scope.type){
+			case "1":
+				$scope.my_form = '我的预算单';
+				$scope.my_check_form = '我审核的预算单';
+			break;
+			case "2":
+				$scope.my_form = '我的申请单';
+				$scope.my_check_form = '我审核的申请单';
+			break;
+			case "3":
+				$scope.my_form = '我的报销单';
+				$scope.my_check_form = '我审核的报销单';
+			break;
+		}
+		$scope.toggle_form = function(type){
+			$rootScope.my_form_type = type;
+			$scope.refreshdata();
+		}
+		var get_headers = function(cfg, form_list) {
+				var headers = [];
+				var headers_label_key = [];
+				if(form_list) {
+					_.each(form_list.child, function(form_item) {
+						_.each(cfg, function(cfg_item) {
+							if(form_item['gcColName'] === cfg_item) {
+								headers_label_key.push({
+									'label': form_item['gcCpnAlias'],
+									'gcColName': cfg_item
+								});
+								headers.push(form_item['gcCpnAlias']);
+							}
+						});
+						if(form_item.child) {
+							if(form_item.child.length > 0) {
+								_.each(cfg, function(_cfg_item) {
+									_.each(form_item.child, function(_form_item) {
+										if(_form_item['gcColName'] === _cfg_item) {
+											headers_label_key.push({
+												'label': _form_item['gcCpnAlias'],
+												'gcColName': _cfg_item
+											});
+											headers.push(_form_item['gcCpnAlias']);
+										}
+									})
+								});
+							}
+						}
+					});
+				}
+				return {
+					'headers': headers,
+					'headers_label_key': headers_label_key
+				};
+			},
+			get_search_items = function(cfg, form_list, cfgType) {
+				var search_items = [];
+				if(form_list) {
+					_.each(form_list.child, function(form_item) {
+						// 如果控件非分割线时
+						if(form_item['gcCpnType'] !== 9 && form_item['gcCpnType'] !== 10 &&form_item['gcCpnType'] !== 0 && form_item['gcCpnType'] !== 14  && form_item['gcCpnType'] != 17 && form_item['gcShowFlag'] != 0) {
+
+							var item = {
+								'gc_cpn_alias': form_item['gcCpnAlias'],
+								'sfCfgType': cfgType,
+								'sfFieldName': form_item['gcColName'],
+								'gc_cpn_type': form_item['gcCpnType'],
+								'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+								'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+								'selected': true
+							};
+							item.selected = _.includes(cfg, form_item['gcColName']);
+							search_items.push(item);
+							if(form_item.child) {
+								if(form_item.child.length > 0) {
+									_.each(form_item.child, function(form_item) {
+
+										var _item = {
+											'sfCfgType': cfgType,
+											'gc_cpn_alias': form_item['gcCpnAlias'],
+											'sfFieldName': form_item['gcColName'],
+											'gc_cpn_type': form_item['gcCpnType'],
+											'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+											'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+											'selected': true
+										}
+										_item.selected = _.includes(cfg, form_item['gcColName']);
+										search_items.push(_item);
+									});
+								}
+							}
+						}
+					});
+				}
+				return {
+					'search_items': search_items
+				};
+			},
+			get_data = function(headers_label_key, bill_data) {
+				var data = [];
+
+				_.each(bill_data, function(data_item, i) {
+					var _data = [];
+					var len = headers_label_key.length;
+					_.each(headers_label_key, function(cfg_item, n) {
+
+						_data.push(_.get(data_item, cfg_item.gcColName));
+						if(n === len - 1) {
+							var doc_id = _.get(data_item, 'bu_id') || _.get(data_item, 'ap_id') || _.get(data_item, 'ex_id');
+
+							_data.push(doc_id);
+						}
+					});
+					if($rootScope.my_form_type == 2){
+						var id = $scope.doc_id(_data);
+						
+						var wait_data = _.slice(_data,0,(_data.length-1));
+						 switch(parseInt(_.get(data_item,"flowStart"))){
+						 	case 10:
+								wait_data.push("已审核");
+							break;
+							case 20:
+								wait_data.push("驳回");
+								break;
+							case 30:
+								wait_data.push("已通过");
+								break;
+							case 50:
+								wait_data.push("待审核");
+								break;
+						 }
+						wait_data.push(id);
+						_data = wait_data;
+					}
+					data.push(_data);
+					
+				});
+				return data;
+			},
+			search_select = function() {
+				var search_list = [];
+				_.each($scope.searchlist, function(n, key) {
+					if(n.selected == true && (n.valueLeft || n.valueRight)) {
+						search_list.push({
+							"sfFieldName": n.sfFieldName,
+							"gc_cpn_type": n.gc_cpn_type,
+							"valueLeft": n.valueLeft,
+							"valueRight": n.valueRight
+						});
+					}
+				});
+				if($rootScope.my_form_type == 1){
+					if($scope.searchlist.length == 0){
+						var data = _.assign({
+							'num_per_page': $scope.num_per_page
+						}, {
+							'page_num': $scope.page_num
+						});
+					}else{
+						var data = _.assign({
+							'num_per_page': $scope.num_per_page
+						}, {
+							'page_num': $scope.page_num
+						}, {
+							'search': search_list
+						});
+					}
+				} else {
+					
+					
+					if($scope.searchlist.length == 0){
+						var data = _.assign({
+							'num_per_page': $scope.num_per_page
+						}, {
+							'page_num': $scope.page_num
+						},{
+							'flowStart':$rootScope.my_status
+						});
+					}else{
+						var data = _.assign({
+							'num_per_page': $scope.num_per_page
+						}, {
+							'page_num': $scope.page_num
+						}, {
+							'search': search_list
+						},{
+							'flowStart':$rootScope.my_status
+						});
+					}
+				}
+				
+				
+
+				return data;
+			},
+			list_lock = function(list_data,type){//列表单据固化
+				var errInfo = '';
+				if(type === 10) {
+					errInfo = 'buErrInfo';
+				} else if(type === 20) {
+					errInfo = 'apErrInfo';
+				} else if(type === 30) {
+					errInfo = 'exErrInfo';
+				}
+				
+				_.each(list_data,function(ldata){
+					if(ldata.canDel == 0 && ldata[errInfo] != undefined && ldata[errInfo] != ''){
+						var errInfo_data = JSON.parse(ldata[errInfo]).form_err_data;
+						var new_data = {};
+						_.each(errInfo_data,function(itemdata){
+							if(itemdata.gcColName != undefined && itemdata.gcColName != ''){
+								if(itemdata.old_users_selected != undefined){
+									new_data[itemdata.gcColName] = itemdata.old_users_selected[0].personName;
+								}else if(itemdata.select_value != undefined){
+									new_data[itemdata.gcColName] = itemdata.select_value;
+								}else if(itemdata.render_value != undefined){
+									new_data[itemdata.gcColName] = itemdata.render_value;
+								}
+							}
+						});
+						
+						_.extend(ldata,new_data);
+					}
+				});
+				
+				return list_data;
+			},
+			search_data = function(cfgColumnType, tempType) {
+				$scope.wait = true;
+				var url = '';
+				$scope.bill_data_create_url = '';
+				$scope.bill_data_update_url = '';
+				if($rootScope.my_form_type == 1){
+					if(tempType === 10) {
+						url = 'budget/search/myData';
+						$scope.bill_data_create_url = 'budget/insert';
+						$scope.bill_data_update_url = 'budget/update';
+					} else if(tempType === 20) {
+						url = 'apply/search/myData';
+						$scope.bill_data_create_url = 'apply/insert';
+						$scope.bill_data_update_url = 'apply/update';
+					} else if(tempType === 30) {
+						url = 'expend/search/myData';
+						$scope.bill_data_create_url = 'expend/insert';
+						$scope.bill_data_update_url = 'expend/update';
+					}
+				}else{
+					if(tempType === 10) {
+						url = 'budget/search/waitHandle';
+						$scope.bill_data_create_url = 'budget/insert';
+						$scope.bill_data_update_url = 'budget/update';
+					} else if(tempType === 20) {
+						url = 'apply/search/waitHandle';
+						$scope.bill_data_create_url = 'apply/insert';
+						$scope.bill_data_update_url = 'apply/update';
+					} else if(tempType === 30) {
+						url = 'expend/search/waitHandle';
+						$scope.bill_data_create_url = 'expend/insert';
+						$scope.bill_data_update_url = 'expend/update';
+					}
+				}
+				
+				http_service.post(url, search_select(), function(res) {
+					var bill_data = list_lock(res.data.data,tempType);//列表单据固化
+//					var bill_data = res.data.data;
+					$rootScope.search_hint(res.data.data, 'arrary', "无列表数据");
+					$scope.handle_data = res.data.data;
+					$scope.rows = res.data.rows;
+					var headers = [];
+					http_service.post('showFieldCfg/list', {
+						"sfCfgType": cfgColumnType
+					}, function(res) {
+						var cfg;
+						if(res.data.data) {
+							if(res.data.data.length == 0) {
+								cfg = [];
+								if($scope.form_list_first.data.data != undefined && $scope.form_list_first.data.data.child.length > 0) {
+									_.each($scope.form_list_first.data.data.child, function(form_list) {
+										if(form_list.gcCpnType != 9 && form_list.gcCpnType != 10 && form_list.gcCpnType != 0 && form_list.gcCpnType != 14 && form_list.gcCpnType != 17 && form_list.gcShowFlag != 0) {
+											cfg.push(form_list.gcColName);
+										}
+									})
+								}
+								
+							} else {
+								cfg = _.map(res.data.data, function(res) {
+									return res['sfFieldName'];
+								});
+							}
+						}
+
+						//						var cfg= [];
+						//						_.each($scope.showFieldCfg_data.data.data, function(res) {
+						//							if(res['sfCfgType'] == cfgColumnType){
+						//								cfg.push(res['sfFieldName']);
+						//							}
+						//							
+						//						});
+
+						//						http_service.post('form/list', {
+						//							"guTempType": tempType
+						//						}, function(res) {
+						if(!$scope.form_list_first.data.opState) {
+							return false;
+						}
+						$scope.wait = false;
+						var form_list = $scope.form_list_first.data.data;
+						headers = get_headers(cfg, form_list);
+						$scope.data = get_data(headers.headers_label_key, bill_data);
+						$scope.id_list = {};
+						$scope.budget_data = {
+							headers: headers.headers_label_key,
+							data: $scope.data
+						};
+						//						});
+
+					});
+				});
+			};
+		//实现排序方法
+		$scope.content_ordering = function() {
+
+		}
+		//判断是否显示删除复选框
+		$scope.delete_checkbox = function(data_list) {
+			if(data_list == undefined){
+				return false;
+			}
+			var form_type;
+			var delteflag = false;
+			switch($scope.type) {
+				case 10:
+					form_type = "bu_id";
+					break;
+				case 20:
+					form_type = "ap_id";
+					break;
+				case 30:
+					form_type = "ex_id";
+					break;
+			}
+			var doc_id = $scope.doc_id(data_list);
+			_.each($scope.handle_data, function(handle) {
+				if(handle[form_type] == doc_id && handle.canDel == 1 && handle.ins_p == app_userinfo.userId) {
+					delteflag = true;
+				}
+			});
+			return delteflag;
+		}
+		$scope.doc_id = function(data_list) {
+			return _.slice(data_list, data_list.length - 1, data_list.length)[0];
+		}
+
+		$scope.sub_data = function(data_list) {
+			return _.slice(data_list, 0, data_list.length - 1);
+		}
+
+		$scope.select_bill = function(event) {
+			event.stopPropagation();
+		}
+
+		// pager
+		$scope.num_per_page = "20";
+		$scope.page_num = "1";
+
+		$scope.math_ceil = function(v) {
+			if(!v) {
+				return '';
+			}
+			return Math.ceil(v);
+		}
+
+		$scope.pre_page = function() {
+			if($scope.page_num > 1) {
+				$scope.page_num = $scope.page_num - 1;
+			}
+			search_data(cfgColumnType, tempType);
+			//			$scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num - 1), $scope.num_per_page * $scope.page_num - 1);
+		}
+
+		$scope.next_page = function() {
+			if($scope.page_num < Math.ceil($scope.rows / $scope.num_per_page)) {
+				$scope.page_num = (parseInt($scope.page_num) + 1).toString();
+			}
+			search_data(cfgColumnType, tempType);
+			//			$scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num - 1), $scope.num_per_page * $scope.page_num - 1);
+		}
+		$scope.change_page_num = function() {
+			$scope.page_num = 1;
+			search_data(cfgColumnType, tempType);
+			//			$scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num - 1), $scope.num_per_page * $scope.page_num - 1);
+		}
+		//pagenum键盘触发事件
+		check_number = function(strings){
+			//_.each(strings,function(string){
+			//	if(strings.indexOf(string) == -1){
+			//		return true;
+			//	}
+			//})
+			//return false;
+			var patrn = /^[0-9]*$/;
+			if (patrn.exec(strings) == null) {
+				return false
+			} else {
+				return true
+			}
+		}
+		$scope.change_keycode = function(pageNumber){
+			if(check_number(pageNumber)){
+				$scope.page_num = parseInt(pageNumber);
+				if($scope.page_num > Math.ceil($scope.rows/$scope.num_per_page)){
+					$scope.page_num = Math.ceil($scope.rows/$scope.num_per_page);
+				}else if($scope.page_num < 1){
+					$scope.page_num = 1;
+				}
+			}else if(!check_number(pageNumber) && check_number(pageNumber.charAt(0))){
+					//遍历pagenumber字符
+					var pageNum = '';
+					_.each(pageNumber,function(pageCode){
+						if(check_number(pageCode)){
+							pageNum = pageNum + pageCode;
+						}else{
+							return false;
+						}
+					})
+					$scope.page_num = pageNum;
+			}else{
+				$scope.page_num = 1;
+			}
+		}
+
+		$scope.change_page = function() {
+			
+			if($scope.page_num > Math.ceil($scope.rows / $scope.num_per_page)) {
+				$scope.page_num = Math.ceil($scope.rows / $scope.num_per_page);
+			} else if($scope.page_num < 1) {
+				$scope.page_num = 1;
+			}else if(_.isNaN($scope.page_num)){
+				$scope.page_num = 1;
+			}
+			search_data(cfgColumnType, tempType);
+		}
+		$scope.data = [];
+
+		var cfgSearchType, tempType, cfgColumnType;
+		switch($scope.type) {
+			case "1":
+				tempType = 10;
+				$scope.type = 10;
+				cfgSearchType = 11;
+				cfgColumnType = 12;
+				break;
+			case "2":
+				tempType = 20;
+				$scope.type = 20;
+				cfgSearchType = 21;
+				cfgColumnType = 22;
+				break;
+			case "3":
+				tempType = 30;
+				$scope.type = 30;
+				cfgSearchType = 31;
+				cfgColumnType = 32;
+				break;
+		}
+
+		//		search_data(cfgColumnType, tempType);
+		//按回车键则查询
+		$scope.search_keydown = function(event) {
+			if(event.keyCode == 13) {
+				$scope.refreshdata();
+			}
+		}
+		$rootScope.refres_table_data = function(){
+			$scope.refreshdata();
+		}
+		$scope.refreshdata = function() {
+			search_data(cfgColumnType, tempType);
+		};
+		//由于设置高度产生滚动条,注释之
+		//$scope.$on('$viewContentLoaded', function() {
+		//    $('div.split_form').height($(document).height() - 52);
+		//    $(window).resize(function(){
+		//        $('div.split_form').height($(document).height() - 52);
+		//    });
+		//});
+		_.extend($scope, {
+			"searchlist": [],
+			"visiblecolumns": []
+		});
+
+		http_service.post('form/list', {
+			"guTempType": tempType,
+			"cache_id": tempType
+		}, function(result) {
+			$scope.form_list_first = result;
+
+			http_service.post('showFieldCfg/list/type', {
+				"type": $scope.type
+			}, function(res) {
+				$scope.showFieldCfg_data = res;
+				search_data(cfgColumnType, tempType);
+				var cfg_search = [];
+				var cfg_show = [];
+				_.each(res.data.data, function(res) {
+					if(res['sfCfgType'] == cfgSearchType) {
+						cfg_search.push(res['sfFieldName']);
+					}
+					if(res['sfCfgType'] == cfgColumnType) {
+						cfg_show.push(res['sfFieldName']);
+					}
+				});
+				if(!result.data.opState) {
+					return false;
+				}
+				var form_list = result.data.data;
+				var search_items_search = get_search_items(cfg_search, form_list, cfgSearchType);
+				$scope.searchlist = search_items_search.search_items;
+				var search_items_show = get_search_items(cfg_show, form_list, cfgColumnType);
+				$scope.visiblecolumns = search_items_show.search_items;
+
+			});
+
+			//				http_service.post('showFieldCfg/list',{
+			//					"sfCfgType": cfgSearchType
+			//				},function(res){
+			//					var cfg = _.map(res.data.data, function(res) {
+			//						return res['sfFieldName'];
+			//					});
+			//					if(!result.data.opState){
+			//							return false;
+			//						}
+			//					var form_list = result.data.data;
+			//					var search_items = get_search_items(cfg, form_list, cfgSearchType);
+			//					$scope.searchlist = search_items.search_items;
+			//				});
+			//				
+			//				http_service.post('showFieldCfg/list',{
+			//					"sfCfgType": cfgColumnType
+			//				},function(res){
+			//					var cfg = _.map(res.data.data, function(res) {
+			//						return res['sfFieldName'];
+			//					});
+			//					if(!result.data.opState){
+			//							return false;
+			//						}
+			//					var form_list = result.data.data;
+			//					var search_items = get_search_items(cfg, form_list, cfgColumnType);
+			//					$scope.visiblecolumns = search_items.search_items;
+			//				});
+
+		}, true);
+
+		//		http_service.post('showFieldCfg/list', {
+		//			"sfCfgType": cfgSearchType
+		//		}, function(res) {
+		//			var cfg = _.map(res.data.data, function(res) {
+		//				return res['sfFieldName'];
+		//			});
+		//			http_service.post('form/list', {
+		//				"guTempType": tempType
+		//			}, function(res) {
+		//				if(!res.data.opState){
+		//							return false;
+		//						}
+		//				var form_list = res.data.data;
+		//				var search_items = get_search_items(cfg, form_list, cfgSearchType);
+		//				$scope.searchlist = search_items.search_items;
+		//			});
+		//		});
+		//
+		//		http_service.post('showFieldCfg/list', {
+		//			"sfCfgType": cfgColumnType
+		//		}, function(res) {
+		//			var cfg = _.map(res.data.data, function(res) {
+		//				return res['sfFieldName'];
+		//			});
+		//			http_service.post('form/list', {
+		//				"guTempType": tempType
+		//			}, function(res) {
+		//				if(!res.data.opState){
+		//							return false;
+		//						}
+		//				var form_list = res.data.data;
+		//				var search_items = get_search_items(cfg, form_list, cfgColumnType);
+		//				$scope.visiblecolumns = search_items.search_items;
+		//			});
+		//		});
+
+		$scope.show_search_dropdown = function(e) {
+			$('div.drop_down_sel').remove();
+			var $element = $('<div drop-down-selector filterlist="searchlist"  class="drop_down_sel" refreshdata="refreshdata()" ></div>');
+			$('body').append($element);
+			$compile($element)($scope);
+			$element.css({
+				'top': e.pageY + 5,
+				'right': 80
+			});
+			e.stopPropagation();
+		};
+
+		$scope.searchcol = function() {
+			http_service.post('showFieldCfg/list', {
+				"flowStart": 100
+			}, function(res) {
+				if(res.data.data.length == 0) {
+					return false;
+				}
+			})
+		}
+
+		$scope.selectli = function() {
+			alert(1);
+			for(i in $("input[name='status']")) {
+				if($("input[name='status']")[i].checked) {
+					$scope.status = $("input[name='status']")[i].val();
+				}
+			}
+		}
+
+		$scope.showstatus = function(e) {
+			$('div.drop_down_sel').remove();
+			var $element = $('<div drop-down-selector filterlist="searchlist"  class="drop_down_sel" refreshdata="refreshdata()" ></div>');
+			$('body').append($element);
+			$compile($element)($scope);
+			$element.css({
+				'top': e.pageY + 5,
+				'right': 80
+			});
+			e.stopPropagation();
+		};
+
+		$scope.show_conent_dropdown = function(e) {
+			$('div.drop_down_sel').remove();
+			var $element = $('<div drop-down-selector filterlist="visiblecolumns"  class="drop_down_sel" refreshdata="refreshdata()" ></div>');
+			$('body').append($element);
+			$compile($element)($scope);
+			$element.css({
+				'top': e.pageY + 5,
+				'right': 80
+			});
+			e.stopPropagation();
+		};
+
+		$scope.new = function() {
+			var bill_creator = $('<div bill-creator></div>');
+			$('body').append(bill_creator);
+			$compile(bill_creator)($scope);
+		};
+
+		$scope.delete_batch = function() {
+
+			if(!$('input[type="checkbox"]:checked').length) {
+				//$scope.swalwarning({"text": "请选择要删除的内容!"})
+				$scope.$parent.twarning("请选择要删除的内容")
+				return;
+			}
+
+			function childDel() {
+				var del_url = '';
+				if(tempType === 10) {
+					del_url = 'budget/deletebudgets';
+				} else if(tempType === 20) {
+					del_url = 'apply/deleteApplys';
+				} else if(tempType === 30) {
+					del_url = 'expend/deleteExpends';
+				}
+				var data = {
+					"child": []
+				};
+				$('input[type="checkbox"]:checked').each(function() {
+					var id = $(this).attr('bind_value');
+					if(tempType === 10) {
+						data['child'].push({
+							'buId': parseInt(id)
+						});
+					} else if(tempType === 20) {
+						data['child'].push({
+							'apId': parseInt(id)
+						});
+					} else if(tempType === 30) {
+						data['child'].push({
+							'exId': parseInt(id)
+						});
+					};
+				});
+				http_service.post(del_url, data, function(res) {
+					if(res.status != 200) {
+						var msg = '';
+						if(tempType === 10) {
+							msg = '批量删除预算订单失败。';
+						} else if(tempType === 20) {
+							msg = '批量删除申请订单失败。';
+						} else if(tempType === 30) {
+							msg = '批量删除报销订单失败.';
+						}
+						$('input[type="checkbox"]:checked').prop()
+						$rootScope.swalerror({ "text": msg })
+						//alert(msg);
+					} else {
+						if(Math.ceil(($scope.rows - res.data.rows) / $scope.num_per_page) < $scope.page_num) {
+							$scope.page_num = 1;
+						}
+						search_data(cfgColumnType, tempType);
+						//swal("删除", "成功删除", "success");
+						if(res.data.opState) {
+							$rootScope.swalsuccess({ "text": "成功删除!" })
+						} else {
+							$rootScope.swalerror({ "text": "操作失败!" })
+						}
+						$('input[type="checkbox"]').prop("checked", false);
+
+					}
+				});
+			}
+			var deletecon = true;
+			$rootScope.swalWhether({ "title": "确定删除?", "text": "" },
+				function() {
+					if(deletecon) {
+						deletecon = false;
+						childDel();
+					}
+				});
+
+		};
+
+		//  取消 列表页总金额查询  
+		//		var sum_url;
+		//		if(tempType == 10) {
+		//			sum_url = 'budget/countPro';
+		//		} else if(tempType == 20) {
+		//			sum_url = 'apply/countPro';
+		//		} else if(tempType == 30) {
+		//			sum_url = 'expend/countPro';
+		//		}
+		//		http_service.post(sum_url, {}, function(res) {
+		//			if(res.data.opState) {
+		//				$scope.sum_money = res.data.data.sum;
+		//			}
+		//		})
+
+		$scope.import = function() {
+
+		};
+
+		$scope.export = function() {
+
+		};
+	}]);
\ No newline at end of file
diff --git a/src/static/js/travel_expense_todos/module.js b/src/static/js/travel_expense_todos/module.js
new file mode 100644
index 0000000..e00ee8c
--- /dev/null
+++ b/src/static/js/travel_expense_todos/module.js
@@ -0,0 +1,1326 @@
+angular.module('travel_expense_todos', [])
+.directive('travelExpenseTodosAll', ['http_service', '$compile','$rootScope', function(http_service, $compile,$rootScope){
+    return {
+        restrict: "EACM",
+        templateUrl: './static/templates/travel_expense_todos_all.html',
+        scope: {
+            todos: '='
+        },
+        link: function($scope, elemnet, attrs){
+            _.each($scope.todos, function(n, m){
+                $scope.todos[m] = (m==='all');
+            });
+            var get_headers = function(cfg, form_list){
+                var headers = [];
+                var headers_label_key = [];
+                if(form_list){
+                	_.each(form_list.child, function(form_item){
+                    _.each(cfg, function(cfg_item){
+                        if(form_item['gcColName'] === cfg_item) {
+                            headers_label_key.push({'label': form_item['gcCpnAlias'], 'gcColName': cfg_item});
+                            headers.push(form_item['gcCpnAlias']);
+                        }
+                    });
+                    if(form_item.child){
+                    	if(form_item.child.length > 0) {
+	                        _.each(cfg, function(_cfg_item){
+	                            _.each(form_item.child, function(_form_item){
+	                                if(_form_item['gcColName'] === _cfg_item) {
+	                                    headers_label_key.push({'label': _form_item['gcCpnAlias'], 'gcColName': _cfg_item});
+	                                    headers.push(_form_item['gcCpnAlias']);
+	                                }
+	                            })
+	                        });
+	                    }
+                    }
+                    
+                });
+                }
+                
+                return {'headers': headers, 'headers_label_key': headers_label_key};
+            },
+            get_data = function(headers_label_key, bill_data,type){
+                var data = [];
+                var len = headers_label_key.length;
+                var type_id;
+                switch(type){
+                	case 1:
+                	type_id = "bu_id";
+                	break;
+                	case 2:
+                	type_id = "ap_id";
+                	break;
+                	case 3:
+                	type_id = "ex_id";
+                	break;
+                }
+                _.each(bill_data, function(data_item, i){
+                    var _data = [];
+                    _.each(headers_label_key, function(cfg_item, n){
+                        _data.push({"name":_.get(data_item, cfg_item.gcColName),"id":data_item[type_id]});
+//                      if(n === len-1){
+//                          var doc_id = _.get(data_item, 'bu_id') || _.get(data_item, 'ap_id') || _.get(data_item, 'ex_id');
+//                          _data.push(doc_id);
+//                      }
+                    });
+                    switch(parseInt(_.get(data_item,"flowStart"))){
+//                  	case 10:
+//							_data.push({"name":"待提交","id":data_item[type_id]});
+//							break;
+//						case 20:
+//							_data.push({"name":"已提交","id":data_item[type_id]});
+//							break;
+//                  	case 30:
+//                  		_data.push({"name":"待审核","id":data_item[type_id]});
+//							break;
+//						case 40:
+//							_data.push({"name":"审核完成","id":data_item[type_id]});
+//							break;
+//						case -1:
+//							_data.push({"name":"驳回","id":data_item[type_id]});
+//							break;
+//						case 100:
+//							_data.push({"name":"已完成","id":data_item[type_id]});
+//							break;
+						case 10:
+							_data.push({"name":"已审核","id":data_item[type_id]});
+							break;
+						case 20:
+							_data.push({"name":"驳回","id":data_item[type_id]});
+							break;
+						case 30:
+							_data.push({"name":"已通过","id":data_item[type_id]});
+							break;
+						case 50:
+							_data.push({"name":"待审核","id":data_item[type_id]});
+							break;
+					}
+                    data.push(_data);
+                });
+                return data;
+            };
+            $scope.budget_data = {
+                "headers": [],
+                "data": []
+            }
+            function list_lock(list_data,type){//列表单据固化
+				var errInfo = '';
+				if(type === 10) {
+					errInfo = 'buErrInfo';
+				} else if(type === 20) {
+					errInfo = 'apErrInfo';
+				} else if(type === 30) {
+					errInfo = 'exErrInfo';
+				}
+				
+				_.each(list_data,function(ldata){
+					if(ldata.canDel == 0 && ldata[errInfo] != undefined && ldata[errInfo] != ''){
+						var errInfo_data = JSON.parse(ldata[errInfo]).form_err_data;
+						var new_data = {};
+						_.each(errInfo_data,function(itemdata){
+							if(itemdata.gcColName != undefined && itemdata.gcColName != ''){
+								if(itemdata.old_users_selected != undefined){
+									new_data[itemdata.gcColName] = itemdata.old_users_selected[0].personName;
+								}else if(itemdata.select_value != undefined){
+									new_data[itemdata.gcColName] = itemdata.select_value;
+								}else if(itemdata.render_value != undefined){
+									new_data[itemdata.gcColName] = itemdata.render_value;
+								}
+							}
+						});
+						
+						_.extend(ldata,new_data);
+					}
+				});
+				
+				return list_data;
+			}
+            function get_budget_data() {
+                // get budget bill data
+                http_service.post('budget/search/waitHandle', {"num_per_page":20,"page_num":1}, function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                	$scope.$parent.$parent.budget_temp_num = res.data.rows;
+                	$scope.$parent.$parent.budget_temp_num_show = false;
+                    var bill_data = _.slice(res.data.data, 0, 3);
+                    bill_data = list_lock(bill_data,10);//列表单据固化
+                    var headers = [];
+                    var data = [];
+                    http_service.post('showFieldCfg/list', {
+                        "sfCfgType":12
+                    }, function(res){
+                    	
+                    if(!res.data.opState){
+							return false;
+						}
+                        var cfg = _.map(res.data.data, function(res){
+                            return res['sfFieldName'];
+                        });
+                        http_service.post('form/list', {
+                            "guTempType":10,
+                            "cache_id":10
+                        }, function(res){
+                        	if(!res.data.opState){
+							return false;
+						}
+                            var form_list = res.data.data;
+                            
+                            if(cfg.length == 0){
+                            	_.each(form_list.child,function(list){
+                            		if(list.gcCpnType != 10 && list.gcCpnType != 14 && list.gcCpnType != 9 && list.gcCpnType != 17 && list.gcCpnType != 0){
+                            			cfg.push(list.gcColName);
+                            		}
+                            	})
+                            }
+                            headers = get_headers(cfg, form_list);
+//                          headers.headers.push("状态");
+                            data = get_data(headers.headers_label_key, bill_data,1);
+                            $scope.budget_data = {
+                                headers: headers.headers,
+                                data: data
+                            };
+                        },true);
+                    });
+                });
+            }
+            function get_apply_data() {
+                // get apply bill data
+                http_service.post('apply/search/waitHandle', {
+					"num_per_page":20,"page_num":1
+                }, function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                	$scope.$parent.$parent.apply_temp_num = res.data.rows;
+                	$scope.$parent.$parent.apply_temp_num_show = false;
+                    var bill_data = _.slice(res.data.data, 0, 3);
+                    bill_data = list_lock(bill_data,10);//列表单据固化
+                    http_service.post('showFieldCfg/list', {
+                        "sfCfgType": 22
+                    }, function(res){
+                        var cfg = _.map(res.data.data, function(res){
+                            return res['sfFieldName'];
+                        });
+                        http_service.post('form/list', {
+                            "guTempType": 20,
+                            "cache_id":20
+                        }, function(res){
+                        	if(!res.data.opState){
+							return false;
+						}
+                            var form_list = res.data.data;
+                            if(cfg.length == 0){
+                            	_.each(form_list.child,function(list){
+                            		if(list.gcCpnType != 10 && list.gcCpnType != 14 && list.gcCpnType != 9 && list.gcCpnType != 17 && list.gcCpnType != 0){
+                            			cfg.push(list.gcColName);
+                            		}
+                            	})
+                            }
+                            headers = get_headers(cfg, form_list);
+//                          headers.headers.push("状态");
+                            data = get_data(headers.headers_label_key, bill_data,2);
+                            $scope.apply_data = {
+                                headers: headers.headers,
+                                data: data
+                            };
+
+                        },true);
+                    });
+                });
+            }
+            function get_expend_data() {
+                // get expend bill data
+                http_service.post('expend/search/waitHandle', {
+					"num_per_page":20,"page_num":1
+                }, function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                	$scope.$parent.$parent.expend_temp_num = res.data.rows;
+                	$scope.$parent.$parent.expend_temp_num_show = false;
+                    var bill_data = _.slice(res.data.data, 0, 3);
+                    bill_data = list_lock(bill_data,10);//列表单据固化
+                    http_service.post('showFieldCfg/list', {
+                        "sfCfgType":32
+                    }, function(res){
+                        var cfg = _.map(res.data.data, function(res){
+                            return res['sfFieldName'];
+                        });
+                        http_service.post('form/list', {
+                            "guTempType":30,
+                            "cache_id":30
+                        }, function(res){
+                        	if(!res.data.opState){
+							return false;
+						}
+                            var form_list = res.data.data;
+                            if(cfg.length == 0){
+                            	_.each(form_list.child,function(list){
+                            		if(list.gcCpnType != 10 && list.gcCpnType != 14 && list.gcCpnType != 9 && list.gcCpnType != 17 && list.gcCpnType != 0){
+                            			cfg.push(list.gcColName);
+                            		}
+                            	})
+                            }
+                            headers = get_headers(cfg, form_list);
+//                          headers.headers.push("状态");
+                            data = get_data(headers.headers_label_key, bill_data,3);
+                            $scope.expend_data = {
+                                headers: headers.headers,
+                                data: data
+                            };
+                        },true);
+                    });
+                });
+            }
+
+//          $scope.doc_id = function(data_list){
+//              return _.slice(data_list, data_list.length - 1, data_list.length)[0];
+//          }
+//
+//          $scope.sub_data = function(data_list){
+//              return _.slice(data_list, 0, data_list.length - 1);
+//          }
+
+
+            get_budget_data();
+            get_apply_data();
+            get_expend_data();
+            $rootScope.refer_data_all = function(){
+            	get_budget_data();
+	            get_apply_data();
+	            get_expend_data();
+            }
+            
+        }
+    }
+}])
+.directive('travelExpenseTodosBudget', ['http_service', '$compile','$rootScope', function(http_service, $compile,$rootScope){
+    return {
+        restrict: "EACM",
+        templateUrl: './static/templates/travel_expense_todos_budget.html',
+        scope: {
+            todos: '='
+        },
+        link: function($scope, elemnet, attrs){
+            $scope.type = 10;
+            _.each($scope.todos, function(n, m){
+                $scope.todos[m] = (m==='budget');
+            });
+			
+//			$scope.selectstatus = function(){
+//				var statusobj = {};
+//				var statuscode = [];
+//				if($scope.status){
+//					statusobj.selected = true;
+//					statusobj.valueLeft = [];
+//					statuscode.push($scope.code);
+//					statusobj.valueLeft.push(statuscode);
+//				}
+//				$scope.searchlist.push(statusobj);
+//			}
+			
+            var get_headers = function(cfg, form_list){
+                var headers = [];
+                var headers_label_key = [];
+                _.each(form_list.child, function(form_item){
+                    _.each(cfg, function(cfg_item){
+                        if(form_item['gcColName'] === cfg_item) {
+                            headers_label_key.push({'label': form_item['gcCpnAlias'], 'gcColName': cfg_item});
+                            headers.push(form_item['gcCpnAlias']);
+                        }
+                    });
+                    if(form_item.child != undefined){
+                    	if(form_item.child.length > 0) {
+	                        _.each(cfg, function(_cfg_item){
+	                            _.each(form_item.child, function(_form_item){
+	                                if(_form_item['gcColName'] === _cfg_item) {
+	                                    headers_label_key.push({'label': _form_item['gcCpnAlias'], 'gcColName': _cfg_item});
+	                                    headers.push(_form_item['gcCpnAlias']);
+	                                }
+	                            })
+	                        });
+	                    }
+		            }
+                    
+                });
+                return {'headers': headers, 'headers_label_key': headers_label_key};
+            },
+            get_search_items = function(cfg, form_list){
+                var search_items = [];
+                if(form_list){
+                	_.each(form_list.child, function(form_item){
+                		// 如果控件非分割线时
+						if(form_item['gcCpnType'] !== 9 && form_item['gcCpnType'] !== 10 &&form_item['gcCpnType'] !== 0 &&form_item['gcCpnType'] !== 14){
+							var item = {
+		                        'gc_cpn_alias': form_item['gcCpnAlias'],
+		                        'sfCfgType': 11,
+		                        'sfFieldName': form_item['gcColName'], 
+		                        'gc_cpn_type': form_item['gcCpnType'],
+		                        'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+								'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+		                        'selected': true
+		                    };
+		                    item.selected = _.includes(cfg, form_item['gcColName']);
+		                    search_items.push(item);
+		                    if(form_item.child != undefined){
+		                    	if(form_item.child.length > 0) {
+			                        _.each(form_item.child, function(form_item){
+			                            var _item = {
+			                                'sfCfgType': 11,
+			                                'gc_cpn_alias': form_item['gcCpnAlias'], 
+			                                'sfFieldName': form_item['gcColName'], 
+			                                'gc_cpn_type': form_item['gcCpnType'],  
+			                                'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+											'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+			                                'selected': true
+			                            }
+			                            _item.selected = _.includes(cfg, form_item['gcColName']);
+			                            search_items.push(_item);
+			                        });
+			                    }
+		                    }
+						}
+	                });
+                }
+                
+                return {'search_items': search_items};
+            },
+           search_select = function() {
+				var search_list = [];
+				_.each($scope.searchlist, function(n, key) {
+					if(n.selected == true && (n.valueLeft || n.valueRight)) {
+						search_list.push({
+							"sfFieldName": n.sfFieldName,
+							"gc_cpn_type": n.gc_cpn_type,
+							"valueLeft": n.valueLeft,
+							"valueRight": n.valueRight
+						});
+					}
+				});
+				if($scope.searchlist){
+					var data = _.assign({
+						'num_per_page': $scope.num_per_page
+					}, {
+						'page_num': $scope.page_num
+					}, {
+						'search': search_list
+					},{
+						'flowStart':$scope.status
+					});
+				}else{
+					var data = _.assign({
+						'num_per_page': $scope.num_per_page
+					}, {
+						'page_num': $scope.page_num
+					},{
+						'flowStart':$scope.status
+					});
+				}
+				
+
+				return data;
+			},
+            get_data = function(headers_label_key, bill_data){
+                var data = [];
+                var len = headers_label_key.length;
+                _.each(bill_data, function(data_item, i){
+                    var _data = [];
+                    _.each(headers_label_key, function(cfg_item, n){
+                        _data.push({"name":_.get(data_item, cfg_item.gcColName),"id":data_item.bu_id});
+//                      if(n === len-1){
+//                          var doc_id = _.get(data_item, 'bu_id') || _.get(data_item, 'ap_id') || _.get(data_item, 'ex_id');
+//                          _data.push(doc_id);
+//                      }
+                    });
+                    switch(parseInt(_.get(data_item,"flowStart"))){
+                    	case 10:
+							_data.push({"name":"待提交","id":data_item.bu_id});
+							break;
+						case 20:
+							_data.push({"name":"已提交","id":data_item.bu_id});
+							break;
+                    	case 30:
+                    		_data.push({"name":"待审核","id":data_item.bu_id});
+							break;
+						case 40:
+							_data.push({"name":"审核完成","id":data_item.bu_id});
+							break;
+						case -1:
+							_data.push({"name":"驳回","id":data_item.bu_id});
+							break;
+						case 100:
+							_data.push({"name":"已完成","id":data_item.bu_id});
+							break;
+					}
+                    data.push(_data);
+                });
+                return data;
+            };
+
+            // pager
+            $scope.num_per_page = "20";
+            $scope.page_num = "1";
+            
+
+            $scope.math_ceil = function(v){
+            	if(v == 0){
+            		$scope.page_num = 1;
+            		return 0;
+            	}
+                if(!v){
+                    return '';
+                }
+               
+                return Math.ceil(v);
+            }
+
+            $scope.pre_page = function(){
+                if($scope.page_num > 1){
+                    $scope.page_num = $scope.page_num - 1;
+                }
+               search_budget_data();
+            }
+
+            $scope.next_page = function(){
+                if($scope.page_num < Math.ceil($scope.budget_rows/ $scope.num_per_page)){
+                    $scope.page_num = (parseInt($scope.page_num) + 1).toString();
+                }
+                search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.change_page_num = function(){
+            	search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.doc_id = function(data_list){
+                return _.slice(data_list, data_list.length - 1, data_list.length)[0];
+            }
+
+            $scope.sub_data = function(data_list){
+                return _.slice(data_list, 0, data_list.length - 1);
+            }
+
+            $scope.data = [];
+
+            function search_budget_data() {
+                
+                http_service.post('flow/budget/wait/handle', search_select(), function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                	$rootScope.search_hint(res.data.data,'arrary');
+//              	$scope.$parent.$parent.budget_temp_num = res.data.rows;
+                	$scope.budget_rows = res.data.rows;
+//              	$scope.$parent.$parent.budget_temp_num_show = false;
+                    var bill_data = res.data.data;
+                    var headers = [];
+                    http_service.post('showFieldCfg/list', {
+                        "sfCfgType":12
+                    }, function(res){
+//                  	if(res.data.data.length==0){
+//							return false;
+//						}
+                        var cfg = _.map(res.data.data, function(res){
+                            return res['sfFieldName'];
+                        });
+                        http_service.post('form/list', {
+                            "guTempType":10,
+                            "cache_id":10
+                        }, function(res){
+                        	if(!res.data.opState){
+							return false;
+						}
+                            var form_list = res.data.data;
+                            if(form_list == undefined){
+	                        	return false;
+	                        }
+                            headers = get_headers(cfg, form_list);
+                            $scope.data = get_data(headers.headers_label_key, bill_data);
+                            $scope.budget_data = {
+                                headers: headers.headers,
+                                data: _.slice($scope.data, 0, $scope.num_per_page * $scope.page_num - 1)
+                            };
+                        },true);
+                    });
+                });
+            }
+
+            search_budget_data();
+
+            _.extend($scope, {
+                "searchlist": [],
+                "visiblecolumns": []
+            });
+
+            http_service.post('showFieldCfg/list', {
+                "sfCfgType":11
+            }, function(res){
+//          	if(res.data.data.length==0){
+//							return false;
+//						}
+                var cfg = _.map(res.data.data, function(res){
+                    return res['sfFieldName'];
+                });
+                http_service.post('form/list', {
+                    "guTempType":10,
+                    "cache_id":10
+                }, function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                    var form_list = res.data.data;
+                    var search_items = get_search_items(cfg, form_list);
+                    $scope.searchlist = search_items.search_items;
+                },true);
+            });
+            /*
+            http_service.get('./static/js/data/travel_expense_list.json', function(res){
+                var data = res.data;
+                $scope.searchlist = _.filter(res.data.data, function(t){
+                    var type = t.sfCfgType, len = t.sfCfgType.length;
+                    return type.substring(len-1, len) === '1';
+                });
+
+                $scope.visiblecolumns = _.filter(res.data.data, function(t){
+                    var type = t.sfCfgType, len = t.sfCfgType.length;
+                    return type.substring(len-1, len) === '2';
+                });
+            });
+            */
+			$scope.refreshdata = function(){
+				search_budget_data();
+			}
+			$rootScope.refer_data_budget = function(){
+				$scope.refreshdata();
+			}
+            $scope.show_search_dropdown = function(e){
+                $('div.drop_down_sel').remove();
+                var $element = $('<div drop-down-selector filterlist="searchlist"  class="drop_down_sel" ></div>');
+                $('body').append($element);
+                $compile($element)($scope);
+                $element.css({
+                    'top': e.pageY + 5,
+                    'right': 80
+                });
+                e.stopPropagation();
+            };
+
+            $scope.show_conent_dropdown = function(e){
+                $('div.drop_down_sel').remove();
+                var $element = $('<div drop-down-selector filterlist="visiblecolumns"  class="drop_down_sel" ></div>');
+                $('body').append($element);
+                $compile($element)($scope);
+                $element.css({
+                    'top': e.pageY + 5,
+                    'right': 80
+                });
+                e.stopPropagation();
+            };
+            
+        }
+    }
+
+}])
+.directive('travelExpenseTodosRequest', ['http_service', '$compile','$rootScope', function(http_service, $compile,$rootScope){
+    return {
+        restrict: "EACM",
+        templateUrl: './static/templates/travel_expense_todos_request.html',
+        scope: {
+            todos: '='
+        },
+        link: function($scope, elemnet, attrs){
+            $scope.type = 20;
+            _.each($scope.todos, function(n, m){
+                $scope.todos[m] = (m==='request');
+            });
+
+            var get_headers = function(cfg, form_list){
+                var headers = [];
+                var headers_label_key = [];
+                _.each(form_list.child, function(form_item){
+                    _.each(cfg, function(cfg_item){
+                        if(form_item['gcColName'] === cfg_item) {
+                            headers_label_key.push({'label': form_item['gcCpnAlias'], 'gcColName': cfg_item});
+                            headers.push(form_item['gcCpnAlias']);
+                        }
+                    });
+                    if(form_item.child != undefined){
+                    	if(form_item.child.length > 0) {
+	                        _.each(cfg, function(_cfg_item){
+	                            _.each(form_item.child, function(_form_item){
+	                                if(_form_item['gcColName'] === _cfg_item) {
+	                                    headers_label_key.push({'label': _form_item['gcCpnAlias'], 'gcColName': _cfg_item});
+	                                    headers.push(_form_item['gcCpnAlias']);
+	                                }
+	                            })
+	                        });
+	                    }
+                    }
+                    
+                });
+                return {'headers': headers, 'headers_label_key': headers_label_key};
+            },
+            get_search_items = function(cfg, form_list){
+                var search_items = [];
+                if(form_list){
+                	_.each(form_list.child, function(form_item){
+                		// 如果控件非分割线时
+						if(form_item['gcCpnType'] !== 9 && form_item['gcCpnType'] !== 10 &&form_item['gcCpnType'] !== 0 &&form_item['gcCpnType'] !== 14){
+							var item = {
+		                        'gc_cpn_alias': form_item['gcCpnAlias'],
+		                        'sfCfgType': 21,
+		                        'sfFieldName': form_item['gcColName'], 
+		                        'gc_cpn_type': form_item['gcCpnType'],
+		                        'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+								'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+		                        'selected': true
+		                    };
+		                    item.selected = _.includes(cfg, form_item['gcColName']);
+		                    search_items.push(item);
+		                    if(form_item.child != undefined){
+		                    	if(form_item.child.length > 0) {
+			                        _.each(form_item.child, function(form_item){
+			                            var _item = {
+			                                'sfCfgType': 21,
+			                                'gc_cpn_alias': form_item['gcCpnAlias'], 
+			                                'sfFieldName': form_item['gcColName'], 
+			                                'gc_cpn_type': form_item['gcCpnType'],  
+			                                'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+											'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+			                                'selected': true
+			                            }
+			                            _item.selected = _.includes(cfg, form_item['gcColName']);
+			                            search_items.push(_item);
+			                        });
+			                    }
+		                    }
+		                    
+						}
+	                });
+                }
+                
+                return {'search_items': search_items};
+            },
+            search_select = function() {
+				var search_list = [];
+
+				_.each($scope.searchlist, function(n, key) {
+					if(n.selected == true && (n.valueLeft || n.valueRight)) {
+						search_list.push({
+							"sfFieldName": n.sfFieldName,
+							"gc_cpn_type": n.gc_cpn_type,
+							"valueLeft": n.valueLeft,
+							"valueRight": n.valueRight
+						});
+					}
+				});
+				if($scope.searchlist){
+					var data = _.assign({
+						'num_per_page': $scope.num_per_page
+					}, {
+						'page_num': $scope.page_num
+					}, {
+						'search': search_list
+					},{
+						'flowStart':$scope.status
+					});
+				}else{
+					var data = _.assign({
+						'num_per_page': $scope.num_per_page
+					}, {
+						'page_num': $scope.page_num
+					},{
+						'flowStart':$scope.status
+					});
+				}
+				return data;
+			},
+            get_data = function(headers_label_key, bill_data){
+                var data = [];
+                var len = headers_label_key.length;
+                _.each(bill_data, function(data_item, i){
+                    var _data = [];
+                    _.each(headers_label_key, function(cfg_item, n){
+                        _data.push({"name":_.get(data_item, cfg_item.gcColName),"id":data_item.ap_id});
+//                      if(n === len-1){
+//                          var doc_id = _.get(data_item, 'bu_id') || _.get(data_item, 'ap_id') || _.get(data_item, 'ex_id');
+//                          _data.push(doc_id);
+//                      }
+                    });
+                    switch(parseInt(_.get(data_item,"flowStart"))){
+                    	case 10:
+							_data.push({"name":"待提交","id":data_item.ap_id});
+							break;
+						case 20:
+							_data.push({"name":"已提交","id":data_item.ap_id});
+							break;
+                    	case 30:
+                    		_data.push({"name":"待审核","id":data_item.ap_id});
+							break;
+						case 40:
+							_data.push({"name":"审核完成","id":data_item.ap_id});
+							break;
+						case -1:
+							_data.push({"name":"驳回","id":data_item.ap_id});
+							break;
+						case 100:
+							_data.push({"name":"已完成","id":data_item.ap_id});
+							break;
+					}
+                    data.push(_data);
+                });
+                return data;
+            };
+
+
+            // pager
+            $scope.num_per_page = "20";
+            $scope.page_num = "1";
+            
+
+            $scope.math_ceil = function(v){
+            	if(v == 0){
+            		$scope.page_num = 1;
+            		return 0;
+            	}
+                if(!v){
+                    return '';
+                }
+                return Math.ceil(v);
+            }
+
+            $scope.pre_page = function(){
+                if($scope.page_num > 1){
+                    $scope.page_num = $scope.page_num - 1;
+                }
+                search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.next_page = function(){
+                if($scope.page_num < Math.ceil($scope.apply_rows / $scope.num_per_page)){
+                    $scope.page_num = (parseInt($scope.page_num) + 1).toString();
+                }
+                search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.change_page_num = function(){
+            	search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.doc_id = function(data_list){
+                return _.slice(data_list, data_list.length - 1, data_list.length)[0];
+            }
+
+            $scope.sub_data = function(data_list){
+                return _.slice(data_list, 0, data_list.length - 1);
+            }
+
+            $scope.data = [];
+
+			function search_budget_data(){
+				http_service.post('flow/apply/wait/handle', search_select(), function(res){
+//	            	$scope.$parent.$parent.apply_temp_num = res.data.rows;
+//	                $scope.$parent.$parent.apply_temp_num_show = false;
+					$rootScope.search_hint(res.data.data,'arrary');
+					$scope.apply_rows = res.data.rows;
+	                var bill_data = res.data.data;
+	                var headers = [];
+	                http_service.post('showFieldCfg/list', {
+	                    "sfCfgType":22
+	                }, function(res){
+//	                	if(res.data.data.length==0){
+//							return false;
+//						}
+	                    var cfg = _.map(res.data.data, function(res){
+	                        return res['sfFieldName'];
+	                    });
+	                    http_service.post('form/list', {
+	                        "guTempType":20,
+	                        "cache_id":20
+	                    }, function(res){
+	                    	if(!res.data.opState){
+							return false;
+						}
+	                        var form_list = res.data.data;
+	                        if(form_list == undefined){
+	                        	return false;
+	                        }
+	                        headers = get_headers(cfg, form_list);
+	                        $scope.data = get_data(headers.headers_label_key, bill_data);
+	                        $scope.budget_data = {
+	                            headers: headers.headers,
+	                            data: _.slice($scope.data, 0, $scope.num_per_page * $scope.page_num - 1)
+	                        };
+	                    },true);
+	                });
+	            });
+			}
+            search_budget_data();
+
+
+            _.extend($scope, {
+                "searchlist": [],
+                "visiblecolumns": []
+            });
+
+            http_service.post('showFieldCfg/list', {
+                "sfCfgType":21
+            }, function(res){
+//          	if(res.data.data.length==0){
+//							return false;
+//						}
+                var cfg = _.map(res.data.data, function(res){
+                    return res['sfFieldName'];
+                });
+                http_service.post('form/list', {
+                    "guTempType":20,
+                    "cache_id":20
+                }, function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                    var form_list = res.data.data;
+                    var search_items = get_search_items(cfg, form_list);
+                    $scope.searchlist = search_items.search_items;
+                },true);
+            });
+            /*
+            http_service.get('./static/js/data/travel_expense_list.json', function(res){
+                var data = res.data;
+                $scope.searchlist = _.filter(res.data.data, function(t){
+                    var type = t.sfCfgType, len = t.sfCfgType.length;
+                    return type.substring(len-1, len) === '1';
+                });
+
+                $scope.visiblecolumns = _.filter(res.data.data, function(t){
+                    var type = t.sfCfgType, len = t.sfCfgType.length;
+                    return type.substring(len-1, len) === '2';
+                });
+            });
+            */
+           $scope.refreshdata = function(){
+				search_budget_data();
+			}
+           $rootScope.refer_data_apply = function(){
+				$scope.refreshdata();
+			}
+            $scope.show_search_dropdown = function(e){
+                $('div.drop_down_sel').remove();
+                var $element = $('<div drop-down-selector filterlist="searchlist"  class="drop_down_sel" ></div>');
+                $('body').append($element);
+                $compile($element)($scope);
+                $element.css({
+                    'top': e.pageY + 5,
+                    'right': 80
+                });
+                e.stopPropagation();
+            };
+
+            $scope.show_conent_dropdown = function(e){
+                $('div.drop_down_sel').remove();
+                var $element = $('<div drop-down-selector filterlist="visiblecolumns"  class="drop_down_sel" ></div>');
+                $('body').append($element);
+                $compile($element)($scope);
+                $element.css({
+                    'top': e.pageY + 5,
+                    'right': 80
+                });
+                e.stopPropagation();
+            };
+        }
+    }
+
+}])
+.directive('travelExpenseTodosRebuise', ['http_service', '$compile','$rootScope', function(http_service, $compile,$rootScope){
+    return {
+        restrict: "EACM",
+        templateUrl: './static/templates/travel_expense_todos_rebuise.html',
+        scope: {
+            todos: '='
+        },
+        link: function($scope, elemnet, attrs){
+            $scope.type = 30;
+             _.each($scope.todos, function(n, m){
+                $scope.todos[m] = (m==='rebuise');
+            });
+            var get_headers = function(cfg, form_list){
+                var headers = [];
+                var headers_label_key = [];
+                _.each(cfg, function(cfg_item){
+                    _.each(form_list.child, function(form_item){
+                        if(form_item['gcColName'] === cfg_item) {
+                            headers_label_key.push({'label': form_item['gcCpnAlias'], 'gcColName': cfg_item});
+                            headers.push(form_item['gcCpnAlias']);
+                        }
+                        if(form_item.child != undefined){
+		                    if(form_item.child.length > 0) {
+	                            _.each(cfg, function(_cfg_item){
+	                                _.each(form_item.child, function(form_item){
+	                                    if(form_item['gcColName'] === _cfg_item) {
+	                                        headers_label_key.push({'label': form_item['gcCpnAlias'], 'gcColName': _cfg_item});
+	                                        headers.push(form_item['gcCpnAlias']);
+	                                    }
+	                                })
+	                            });
+	                        }
+		                }
+                        
+                    });
+                });
+                return {'headers': headers, 'headers_label_key': headers_label_key};
+            },
+            get_search_items = function(cfg, form_list){
+                var search_items = [];
+                if(form_list){
+                	_.each(form_list.child, function(form_item){
+                		// 如果控件非分割线时
+						if(form_item['gcCpnType'] !== 9 && form_item['gcCpnType'] !== 10 &&form_item['gcCpnType'] !== 0 &&form_item['gcCpnType'] !== 14){
+							var item = {
+		                        'gc_cpn_alias': form_item['gcCpnAlias'],
+		                        'sfCfgType': 31,
+		                        'sfFieldName': form_item['gcColName'], 
+		                        'gc_cpn_type': form_item['gcCpnType'],
+		                        'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+								'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+		                        'selected': true
+		                    };
+		                    item.selected = _.includes(cfg, form_item['gcColName']);
+		                    search_items.push(item);
+		                    if(form_item.child != undefined){
+		                    	if(form_item.child.length > 0) {
+			                        _.each(form_item.child, function(form_item){
+			                            var _item = {
+			                                'sfCfgType': 31,
+			                                'gc_cpn_alias': form_item['gcCpnAlias'], 
+			                                'sfFieldName': form_item['gcColName'], 
+			                                'gc_cpn_type': form_item['gcCpnType'],  
+			                                'gcMeCode': form_item['gcMeCode'], // 关联查询页下拉框
+											'gcCpnMultiple': form_item['gcCpnMultiple'], // 关联查询页下拉框
+			                                'selected': true
+			                            }
+			                            _item.selected = _.includes(cfg, form_item['gcColName']);
+			                            search_items.push(_item);
+			                        });
+			                    }
+		                    }
+						}
+	                });
+                }
+                
+                return {'search_items': search_items};
+            },
+            search_select = function() {
+				var search_list = [];
+
+				_.each($scope.searchlist, function(n, key) {
+					if(n.selected == true && (n.valueLeft || n.valueRight)) {
+						search_list.push({
+							"sfFieldName": n.sfFieldName,
+							"gc_cpn_type": n.gc_cpn_type,
+							"valueLeft": n.valueLeft,
+							"valueRight": n.valueRight
+						});
+					}
+				});
+
+				if($scope.searchlist){
+					var data = _.assign({
+						'num_per_page': $scope.num_per_page
+					}, {
+						'page_num': $scope.page_num
+					}, {
+						'search': search_list
+					},{
+						'flowStart':$scope.status
+					});
+				}else{
+					var data = _.assign({
+						'num_per_page': $scope.num_per_page
+					}, {
+						'page_num': $scope.page_num
+					},{
+						'flowStart':$scope.status
+					});
+				}
+				return data;
+			},
+            get_data = function(headers_label_key, bill_data){
+                var data = [];
+                var len = headers_label_key.length;
+                _.each(bill_data, function(data_item, i){
+                    var _data = [];
+                    _.each(headers_label_key, function(cfg_item, n){
+                        _data.push({"name":_.get(data_item, cfg_item.gcColName),"id":data_item.ex_id});
+//                      if(n === len-1){
+//                          var doc_id = _.get(data_item, 'bu_id') || _.get(data_item, 'ap_id') || _.get(data_item, 'ex_id');
+//                          _data.push(doc_id);
+//                      }
+                    });
+                    switch(parseInt(_.get(data_item,"flowStart"))){
+                    	case 10:
+							_data.push({"name":"待提交","id":data_item.ex_id});
+							break;
+						case 20:
+							_data.push({"name":"已提交","id":data_item.ex_id});
+							break;
+                    	case 30:
+                    		_data.push({"name":"待审核","id":data_item.ex_id});
+							break;
+						case 40:
+							_data.push({"name":"审核完成","id":data_item.ex_id});
+							break;
+						case -1:
+							_data.push({"name":"驳回","id":data_item.ex_id});
+							break;
+						case 100:
+							_data.push({"name":"已完成","id":data_item.ex_id});
+							break;
+					}
+                    data.push(_data);
+                });
+                return data;
+            };
+
+
+            // pager
+            $scope.num_per_page = "20";
+            $scope.page_num = "1";
+            
+
+            $scope.math_ceil = function(v){
+            	if(v == 0){
+            		$scope.page_num = 1;
+            		return 0;
+            	}
+                if(!v){
+                    return '';
+                }
+                return Math.ceil(v);
+            }
+
+            $scope.pre_page = function(){
+                if($scope.page_num > 1){
+                    $scope.page_num = $scope.page_num - 1;
+                }
+                search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.next_page = function(){
+                if($scope.page_num < Math.ceil($scope.expend_rows / $scope.num_per_page)){
+                    $scope.page_num = (parseInt($scope.page_num) + 1).toString();
+                }
+                search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.change_page_num = function(){
+            	search_budget_data();
+//              $scope.budget_data['data'] = _.slice($scope.data, $scope.num_per_page * ($scope.page_num-1), $scope.num_per_page * $scope.page_num - 1);
+            }
+
+            $scope.doc_id = function(data_list){
+                return _.slice(data_list, data_list.length - 1, data_list.length)[0];
+            }
+
+            $scope.sub_data = function(data_list){
+                return _.slice(data_list, 0, data_list.length - 1);
+            }
+
+            $scope.data = [];
+
+			function search_budget_data(){
+				http_service.post('flow/expend/wait/handle', search_select(), function(res){
+//	            	$scope.$parent.$parent.expend_temp_num = res.data.rows;
+//	                $scope.$parent.$parent.expend_temp_num_show = false;	
+					$rootScope.search_hint(res.data.data,'arrary');
+					$scope.expend_rows = res.data.rows;
+	                var bill_data = res.data.data;
+	                var headers = [];
+	                http_service.post('showFieldCfg/list', {
+	                    "sfCfgType":32
+	                }, function(res){
+//	                	if(res.data.data.length==0){
+//							return false;
+//						}
+	                    var cfg = _.map(res.data.data, function(res){
+	                        return res['sfFieldName'];
+	                    });
+	                    http_service.post('form/list', {
+	                        "guTempType":30,
+	                        "cache_id":30
+	                    }, function(res){
+	                    	if(!res.data.opState){
+							return false;
+						}
+	                        var form_list = res.data.data;
+	                        if(form_list == undefined){
+	                        	return false;
+	                        }
+	                        headers = get_headers(cfg, form_list);
+	                        $scope.data = get_data(headers.headers_label_key, bill_data);
+	                        $scope.budget_data = {
+	                            headers: headers.headers,
+	                            data: _.slice($scope.data, 0, $scope.num_per_page * $scope.page_num - 1)
+	                        };
+	                    },true);
+	                });
+	            });
+			}
+            search_budget_data();
+            
+            _.extend($scope, {
+                "searchlist": [],
+                "visiblecolumns": []
+            });
+
+            http_service.post('showFieldCfg/list', {
+                "sfCfgType":31
+            }, function(res){
+//          	if(res.data.data.length==0){
+//							return false;
+//						}
+                var cfg = _.map(res.data.data, function(res){
+                    return res['sfFieldName'];
+                });
+                http_service.post('form/list', {
+                    "guTempType":30,
+                    "cache_id":30
+                }, function(res){
+                	if(!res.data.opState){
+							return false;
+						}
+                    var form_list = res.data.data;
+                    var search_items = get_search_items(cfg, form_list);
+                    $scope.searchlist = search_items.search_items;
+                },true);
+            });
+
+            /*
+            http_service.get('./static/js/data/travel_expense_list.json', function(res){
+                var data = res.data;
+                $scope.searchlist = _.filter(res.data.data, function(t){
+                    var type = t.sfCfgType, len = t.sfCfgType.length;
+                    return type.substring(len-1, len) === '1';
+                });
+
+                $scope.visiblecolumns = _.filter(res.data.data, function(t){
+                    var type = t.sfCfgType, len = t.sfCfgType.length;
+                    return type.substring(len-1, len) === '2';
+                });
+            });
+            */
+            $scope.refreshdata = function(){
+				search_budget_data();
+			}
+            $rootScope.refer_data_expend = function(){
+				$scope.refreshdata();
+			}
+            $scope.show_search_dropdown = function(e){
+                $('div.drop_down_sel').remove();
+                var $element = $('<div drop-down-selector filterlist="searchlist"  class="drop_down_sel" ></div>');
+                $('body').append($element);
+                $compile($element)($scope);
+                $element.css({
+                    'top': e.pageY + 5,
+                    'right': 80
+                });
+                e.stopPropagation();
+            };
+
+            $scope.show_conent_dropdown = function(e){
+                $('div.drop_down_sel').remove();
+                var $element = $('<div drop-down-selector filterlist="visiblecolumns"  class="drop_down_sel" ></div>');
+                $('body').append($element);
+                $compile($element)($scope);
+                $element.css({
+                    'top': e.pageY + 5,
+                    'right': 80
+                });
+                e.stopPropagation();
+            };
+        }
+    }
+
+}])
+
+.controller('travelExpenseTodosCtrl', ['$scope','$routeParams', '$route', '$compile', 'http_service',"$rootScope","$location", function($scope, $routeParams, $route, $compile, http_service,$rootScope,$location){
+    //由于设置高度产生滚动条,注释之
+    //$scope.$on('$viewContentLoaded', function() {
+    //    $('div.split_form').height($(document).height() - 52);
+    //    $(window).resize(function(){
+    //        $('div.split_form').height($(document).height() - 52);
+    //    });
+    //});
+    $scope.type = $routeParams.type;
+    _.extend($scope, {
+        "searchlist": [],
+        "visiblecolumns": []
+    });
+    $scope.expend_code = 20;
+    $scope.apply_code = 30;
+    $scope.budget_code = 10;
+//  $scope.budget_temp_num = "";
+//  $scope.expend_temp_num = "";
+//  $scope.apply_temp_num = "";
+    $scope.budget_temp_num_show = true;
+    $scope.expend_temp_num_show = true;
+    $scope.apply_temp_num_show = true;
+     
+    /*
+    http_service.get('./static/js/data/travel_expense_list.json', function(res){
+        var data = res.data;
+        $scope.searchlist = _.filter(res.data.data, function(t){
+            var type = t.sfCfgType, len = t.sfCfgType.length;
+            return type.substring(len-1, len) === '1';
+        });
+
+        $scope.visiblecolumns = _.filter(res.data.data, function(t){
+            var type = t.sfCfgType, len = t.sfCfgType.length;
+            return type.substring(len-1, len) === '2';
+        });
+    });
+    */
+   
+   $scope.more_form = function(url){
+   		$rootScope.my_form_type = 2;
+   		$location.path(url);
+   }
+    $scope.show_search_dropdown = function(e){
+        $('div.drop_down_sel').remove();
+        var $element = $('<div drop-down-selector filterlist="searchlist"  class="drop_down_sel" ></div>');
+        $('body').append($element);
+        $compile($element)($scope);
+        $element.css({
+            'top': e.pageY + 5,
+            'right': 80
+        });
+        e.stopPropagation();
+    };
+
+    $scope.show_conent_dropdown = function(e){
+        $('div.drop_down_sel').remove();
+        var $element = $('<div drop-down-selector filterlist="visiblecolumns"  class="drop_down_sel" ></div>');
+        $('body').append($element);
+        $compile($element)($scope);
+        $element.css({
+            'top': e.pageY + 5,
+            'right': 80
+        });
+        e.stopPropagation();
+    };
+
+    $scope.todos = {
+        'all': true,
+        'budget': false,
+        'request': false,
+        'rebuise': false
+    }
+	
+}]);
diff --git a/src/static/js/userPermission.json b/src/static/js/userPermission.json
new file mode 100644
index 0000000..97262ee
--- /dev/null
+++ b/src/static/js/userPermission.json
@@ -0,0 +1,134 @@
+{
+    "opState":true,
+    "rows":137,
+    "data":[           	
+{"name":"差旅费","id":1,"url":"travel_reimbursement","parentId":1},
+{"name":"预算单","id":2,"url":"budgetorder","parentId":1},
+{"name":"预算单查询列表页面","id":3,"url":"travel_expense/1","parentId":2},
+{"name":"查询按钮","id":4,"url":"search_condition","parentId":3},
+{"name":"更改查询内容","id":5,"url":"change_search_condition","parentId":3},
+{"name":"更改显示内容","id":6,"url":"show_condition","parentId":3},
+{"name":"新建按钮","id":7,"url":"new_order","parentId":3},
+{"name":"删除按钮(批量)","id":8,"url":"delete_order","parentId":3},
+{"name":"预算单流程状态","id":12,"url":"flow_content","parentId":3},
+{"name":"删除按钮","id":13,"url":"deletebtn","parentId":3},
+{"name":"提交按钮","id":14,"url":"commitbtn","parentId":3},
+{"name":"审核按钮","id":15,"url":"auditbtn","parentId":3},
+{"name":"保存按钮","id":16,"url":"savebtn","parentId":3},
+{"name":"编辑按钮","id":18,"url":"editbtn","parentId":3},
+{"name":"驳回按钮","id":19,"url":"backbtn","parentId":3},
+{"name":"申请单","id":20,"url":"applyorder","parentId":1},
+{"name":"申请单查询列表页面","id":21,"url":"travel_expense/2","parentId":20},
+{"name":"查询按钮","id":22,"url":"search_condition","parentId":21},
+{"name":"更改查询内容","id":23,"url":"change_search_condition","parentId":21},
+{"name":"更改显示内容","id":24,"url":"show_condition","parentId":21},
+{"name":"新建按钮","id":25,"url":"new_order","parentId":21},
+{"name":"删除按钮(批量)","id":26,"url":"delete_order","parentId":21},
+{"name":"申请单流程状态","id":30,"url":"flow_content","parentId":21},
+{"name":"删除按钮","id":31,"url":"deletebtn","parentId":21},
+{"name":"提交按钮","id":32,"url":"commitbtn","parentId":21},
+{"name":"审核按钮","id":33,"url":"auditbtn","parentId":21},
+{"name":"保存按钮","id":34,"url":"savebtn","parentId":21},
+{"name":"编辑按钮","id":36,"url":"editbtn","parentId":21},
+{"name":"驳回按钮","id":37,"url":"backbtn","parentId":21},
+{"name":"报销单","id":38,"url":"expendorder","parentId":1},
+{"name":"报销单查询列表页面","id":39,"url":"travel_expense/3","parentId":38},
+{"name":"查询按钮","id":40,"url":"search_condition","parentId":39},
+{"name":"更改查询内容","id":41,"url":"change_search_condition","parentId":39},
+{"name":"更改显示内容","id":42,"url":"show_condition","parentId":39},
+{"name":"新建按钮","id":43,"url":"new_order","parentId":39},
+{"name":"删除按钮(批量)","id":44,"url":"delete_order","parentId":39},
+{"name":"报销单流程状态","id":48,"url":"flow_content","parentId":39},
+{"name":"删除按钮","id":49,"url":"deletebtn","parentId":39},
+{"name":"提交按钮","id":50,"url":"commitbtn","parentId":39},
+{"name":"审核按钮","id":51,"url":"auditbtn","parentId":39},
+{"name":"保存按钮","id":52,"url":"savebtn","parentId":39},
+{"name":"编辑按钮","id":54,"url":"editbtn","parentId":39},
+{"name":"驳回按钮","id":55,"url":"backbtn","parentId":39},
+{"name":"待办事项","id":56,"url":"termination","parentId":1},
+{"name":"我的待办","id":57,"url":"mytodos","parentId":58},
+{"name":"待办事项页面","id":58,"url":"/travel_expense_todos","parentId":56},
+{"name":"待办预算查看页面","id":59,"url":"termination_budget","parentId":56},
+{"name":"查询按钮","id":60,"url":"search_budget","parentId":59},
+{"name":"更改查询内容","id":61,"url":"termination_budget_search","parentId":59},
+{"name":"待办申请查看页面","id":62,"url":"termination_apply","parentId":56},
+{"name":"查询按钮","id":63,"url":"search_apply","parentId":62},
+{"name":"更改查询内容","id":64,"url":"termination_apply_search","parentId":62},
+{"name":"待办报销查看页面","id":65,"url":"termination_expend","parentId":56},
+{"name":"查询按钮","id":66,"url":"search_expend","parentId":65},
+{"name":"更改查询内容","id":67,"url":"termination_expend_search","parentId":65},
+{"name":"配置中心","id":68,"url":"config_center","parentId":1},
+{"name":"配置中心","id":69,"url":"/cfg_center","parentId":68},
+{"name":"预算单配置","id":70,"url":"budget_template","parentId":69},
+{"name":"预算单配置页面","id":71,"url":"/budget_froms/10","parentId":70},
+{"name":"使用空白的预算单","id":72,"url":"/budget_form_customize/10","parentId":71},
+{"name":"我创建的预算单","id":73,"url":"myform","parentId":71},
+{"name":"行业精选预算单","id":74,"url":"bussiness_template","parentId":71},
+{"name":"行业精选预算单","id":75,"url":"/budget_froms/*/10","parentId":70},
+{"name":"保存按钮","id":76,"url":"save_create_form","parentId":72},
+{"name":"编辑按钮","id":77,"url":"edit_template","parentId":71},
+{"name":"启用模板按钮","id":79,"url":"start_template","parentId":75},
+{"name":"从该模板创建按钮","id":80,"url":"create_form_template","parentId":75},
+{"name":"申请单配置","id":81,"url":"apply_template","parentId":69},
+{"name":"申请单配置页面","id":82,"url":"/budget_froms/20","parentId":81},
+{"name":"使用空白的申请单","id":83,"url":"/budget_form_customize/20","parentId":82},
+{"name":"我创建的申请单","id":84,"url":"myform","parentId":82},
+{"name":"行业精选申请单","id":85,"url":"bussiness_template","parentId":82},
+{"name":"行业精选申请单","id":86,"url":"/budget_froms/*/20","parentId":81},
+{"name":"保存按钮","id":87,"url":"save_create_form","parentId":83},
+{"name":"编辑按钮","id":88,"url":"edit_template","parentId":82},
+{"name":"启用模板按钮","id":90,"url":"start_template","parentId":86},
+{"name":"从该模板创建按钮","id":91,"url":"create_form_template","parentId":86},
+{"name":"报销单配置","id":92,"url":"expend_template","parentId":90},
+{"name":"报销单配置页面","id":93,"url":"/budget_froms/30","parentId":92},
+{"name":"使用空白的报销单","id":94,"url":"/budget_form_customize/30","parentId":93},
+{"name":"我创建的报销单","id":95,"url":"myform","parentId":93},
+{"name":"行业精选报销单","id":96,"url":"bussiness_template","parentId":93},
+{"name":"行业精选报销单","id":97,"url":"/budget_froms/*/30","parentId":92},
+{"name":"保存按钮","id":98,"url":"save_create_form","parentId":94},
+{"name":"编辑按钮","id":99,"url":"edit_template","parentId":93},
+{"name":"启用模板按钮","id":101,"url":"start_template","parentId":97},
+{"name":"从该模板创建按钮","id":102,"url":"create_form_template","parentId":97},
+{"name":"系统设置","id":103,"url":"system","parentId":69},
+{"name":"系统设置页面","id":104,"url":"/system_config","parentId":103},
+{"name":"完成按钮","id":105,"url":"save_system","parentId":104},
+{"name":"报销标准","id":106,"url":"standard","parentId":69},
+{"name":"报销标准配置页面","id":107,"url":"/expend_standard","parentId":106},
+{"name":"新建按钮","id":108,"url":"new_standard","parentId":107},
+{"name":"保存按钮","id":109,"url":"save_standard","parentId":107},
+{"name":"复制按钮","id":110,"url":"copy_standard","parentId":107},
+{"name":"删除按钮","id":111,"url":"delete_standard","parentId":107},
+{"name":"添加数据按钮","id":114,"url":"add_standard_data","parentId":107},
+{"name":"工作流配置","id":115,"url":"flow","parentId":69},
+{"name":"工作流配置页面","id":116,"url":"/work_flow","parentId":116},
+{"name":"配置流程按钮(预算)","id":117,"url":"config_budget","parentId":116},
+{"name":"配置流程按钮(申请)","id":118,"url":"config_apply","parentId":116},
+{"name":"配置流程按钮(报销)","id":119,"url":"config_expend","parentId":116},
+{"name":"部署按钮(预算)","id":120,"url":"econfig_budget","parentId":116},
+{"name":"部署按钮(申请)","id":121,"url":"econfig_apply","parentId":116},
+{"name":"部署按钮(报销)","id":122,"url":"econfig_expend","parentId":116},
+{"name":"云中心","id":123,"url":"cloud_center","parentId":1},
+{"name":"模板中心","id":124,"url":"template_center","parentId":123},
+ {"name":"消息中心","id":145,"url":"message_center","parentId":123},
+{"name":"模板管理页面","id":125,"url":"/templates_center","parentId":125},
+{"name":"添加预算单模板按钮","id":126,"url":"add_budget_template","parentId":125},
+{"name":"删除预算单模板按钮","id":127,"url":"delete_budget_template","parentId":125},
+{"name":"添加申请单模板按钮","id":128,"url":"add_apply_template","parentId":125},
+{"name":"删除申请单模板按钮","id":129,"url":"delete_apply_template","parentId":125},
+{"name":"添加报销单模板按钮","id":130,"url":"add_expend_template","parentId":125},
+{"name":"删除报销单模板按钮","id":131,"url":"delete_expend_template","parentId":125},
+{"name":"添加行业按钮","id":132,"url":"add_bussiness","parentId":125},
+{"name":"修改行业按钮","id":133,"url":"edit_bussiness","parentId":125},
+{"name":"删除行业按钮","id":134,"url":"delete_bussiness","parentId":125},
+{"name":"上传模板按钮","id":135,"url":"template_pass","parentId":125},
+{"name":"初始化向导页面","id":137,"url":"/guide","parentId":137},
+{"name":"选择行业向导页面","id":138,"url":"/business","parentId":137},
+{"name":"设置向导页面","id":139,"url":"/billing_cfg_guide","parentId":137},
+{"name":"登录","id":140,"url":"/registry","parentId":1},
+{"name":"模版中心编辑按钮","id":141,"url":"edit_template_center","parentId":125},
+{"name":"票据上传按钮(新增报销单)","id":142,"url":"bill_commit_create","parentId":39},
+{"name":"票据上传按钮(修改报销单)","id":143,"url":"bill_commit_update","parentId":39},
+{"name":"票据上传按钮(报销单详情)","id":144,"url":"bill_commit_detail","parentId":39}
+
+    ]
+}
\ No newline at end of file
diff --git a/src/static/js/utils/bootstrap-wysiwyg.min.js b/src/static/js/utils/bootstrap-wysiwyg.min.js
new file mode 100644
index 0000000..6211a3e
--- /dev/null
+++ b/src/static/js/utils/bootstrap-wysiwyg.min.js
@@ -0,0 +1,10 @@
+/* @fileoverview 
+ * Provides full Bootstrap based, multi-instance WYSIWYG editor.
+ *
+ * Name     = bootstrap-wysiwyg
+ * Author   = Various, see LICENCE
+ * Version  = v2.0.1
+ * About    = A tiny Bootstrap and jQuery based WYSIWYG rich text editor based on the browser function execCommand.
+*/
+
+!function(a,b){"use strict";function c(c,d){this.selectedRange=null,this.editor=b(c);var e=b(c),f={hotKeys:{"Ctrl+b meta+b":"bold","Ctrl+i meta+i":"italic","Ctrl+u meta+u":"underline","Ctrl+z":"undo","Ctrl+y meta+y meta+shift+z":"redo","Ctrl+l meta+l":"justifyleft","Ctrl+r meta+r":"justifyright","Ctrl+e meta+e":"justifycenter","Ctrl+j meta+j":"justifyfull","Shift+tab":"outdent",tab:"indent"},toolbarSelector:"[data-role=editor-toolbar]",commandRole:"edit",activeToolbarClass:"btn-info",selectionMarker:"edit-focus-marker",selectionColor:"darkgrey",dragAndDropImages:!0,keypressTimeout:200,fileUploadError:function(a,b){console.log("File upload error",a,b)}},g=b.extend(!0,{},f,d),h="a[data-"+g.commandRole+"],button[data-"+g.commandRole+"],input[type=button][data-"+g.commandRole+"]";this.bindHotkeys(e,g,h),g.dragAndDropImages&&this.initFileDrops(e,g,h),this.bindToolbar(e,b(g.toolbarSelector),g,h),e.attr("contenteditable",!0).on("mouseup keyup mouseout",function(){this.saveSelection(),this.updateToolbar(e,h,g)}.bind(this)),b(a).bind("touchend",function(a){var b=e.is(a.target)||e.has(a.target).length>0,c=this.getCurrentRange(),d=c&&c.startContainer===c.endContainer&&c.startOffset===c.endOffset;(!d||b)&&(this.saveSelection(),this.updateToolbar(e,h,g))})}c.prototype.readFileIntoDataUrl=function(a){var c=b.Deferred(),d=new FileReader;return d.onload=function(a){c.resolve(a.target.result)},d.onerror=c.reject,d.onprogress=c.notify,d.readAsDataURL(a),c.promise()},c.prototype.cleanHtml=function(a){var c=this;if(b(c).data("wysiwyg-html-mode")===!0&&(b(c).html(b(c).text()),b(c).attr("contenteditable",!0),b(c).data("wysiwyg-html-mode",!1)),a===!0&&b(c).parent().is("form")){var d=b(c).html;if(b(d).has("img").length){var e=b("img",b(d)),f=[],g=b(c).parent();b.each(e,function(a,c){b(c).attr("src").match(/^data:image\/.*$/)&&(f.push(e[a]),b(g).prepend("<input value='"+b(c).attr("src")+"' type='hidden' name='postedimage/"+a+"' />"),b(c).attr("src","postedimage/"+a))})}}var h=b(c).html();return h&&h.replace(/(<br>|\s|<div><br><\/div>|&nbsp;)*$/,"")},c.prototype.updateToolbar=function(a,c,d){d.activeToolbarClass&&b(d.toolbarSelector).find(c).each(function(){var a=b(this),c=a.data(d.commandRole).split(" "),e=c[0];c.length>1&&document.queryCommandEnabled(e)&&document.queryCommandValue(e)===c[1]?a.addClass(d.activeToolbarClass):1===c.length&&document.queryCommandEnabled(e)&&document.queryCommandState(e)?a.addClass(d.activeToolbarClass):a.removeClass(d.activeToolbarClass)})},c.prototype.execCommand=function(a,b,c,d,e){var f=a.split(" "),g=f.shift(),h=f.join(" ")+(b||""),i=a.split("-");1===i.length?document.execCommand(g,!1,h):"format"===i[0]&&2===i.length&&document.execCommand("formatBlock",!1,i[1]),c.trigger("change"),this.updateToolbar(c,e,d)},c.prototype.bindHotkeys=function(a,c,d){var e=this;b.each(c.hotKeys,function(f,g){b(a).keydown(f,function(f){a.attr("contenteditable")&&b(a).is(":visible")&&(f.preventDefault(),f.stopPropagation(),e.execCommand(g,null,a,c,d))}).keyup(f,function(c){a.attr("contenteditable")&&b(a).is(":visible")&&(c.preventDefault(),c.stopPropagation())})}),a.keyup(function(){a.trigger("change")})},c.prototype.getCurrentRange=function(){var b,c;return a.getSelection?(b=a.getSelection(),b.getRangeAt&&b.rangeCount&&(c=b.getRangeAt(0))):document.selection&&(c=document.selection.createRange()),c},c.prototype.saveSelection=function(){this.selectedRange=this.getCurrentRange()},c.prototype.restoreSelection=function(){var b;if(a.getSelection||document.createRange){if(b=a.getSelection(),this.selectedRange){try{b.removeAllRanges()}catch(c){document.body.createTextRange().select(),document.selection.empty()}b.addRange(this.selectedRange)}}else document.selection&&this.selectedRange&&this.selectedRange.select()},c.prototype.toggleHtmlEdit=function(a){if(a.data("wysiwyg-html-mode")!==!0){var c=a.html(),d=b("<pre />");b(d).append(document.createTextNode(c)),b(d).attr("contenteditable",!0),b(a).html(" "),b(a).append(b(d)),b(a).attr("contenteditable",!1),b(a).data("wysiwyg-html-mode",!0),b(d).focus()}else b(a).html(b(a).text()),b(a).attr("contenteditable",!0),b(a).data("wysiwyg-html-mode",!1),b(a).focus()},c.prototype.insertFiles=function(a,c,d,e){var f=this;d.focus(),b.each(a,function(a,g){/^image\//.test(g.type)?b.when(f.readFileIntoDataUrl(g)).done(function(a){f.execCommand("insertimage",a,d,c,e),d.trigger("image-inserted")}).fail(function(a){c.fileUploadError("file-reader",a)}):c.fileUploadError("unsupported-file-type",g.type)})},c.prototype.markSelection=function(a,b,c){this.restoreSelection(),document.queryCommandSupported("hiliteColor")&&document.execCommand("hiliteColor",!1,b||"transparent"),this.saveSelection(),a.data(c.selectionMarker,b)},c.prototype.bindToolbar=function(a,c,d,e){var f=this;c.find(e).click(function(){f.restoreSelection(),a.focus(),"html"===a.data(d.commandRole)?f.toggleHtmlEdit(a):f.execCommand(b(this).data(d.commandRole),null,a,d,e),f.saveSelection()}),c.find("[data-toggle=dropdown]").click(this.restoreSelection()),c.find("input[type=text][data-"+d.commandRole+"]").on("webkitspeechchange change",function(){var c=this.value;this.value="",f.restoreSelection(),c&&(a.focus(),f.execCommand(b(this).data(d.commandRole),c,a,d,e)),f.saveSelection()}).on("focus",function(){var a=b(this);a.data(d.selectionMarker)||(f.markSelection(a,d.selectionColor,d),a.focus())}).on("blur",function(){var a=b(this);a.data(d.selectionMarker)&&f.markSelection(a,!1,d)}),c.find("input[type=file][data-"+d.commandRole+"]").change(function(){f.restoreSelection(),"file"===this.type&&this.files&&this.files.length>0&&f.insertFiles(this.files,d,a,e),f.saveSelection(),this.value=""})},c.prototype.initFileDrops=function(a,b,c){var d=this;a.on("dragenter dragover",!1).on("drop",function(e){var f=e.originalEvent.dataTransfer;e.stopPropagation(),e.preventDefault(),f&&f.files&&f.files.length>0&&d.insertFiles(f.files,b,a,c)})},b.fn.wysiwyg=function(a){new c(this,a)}}(window,window.jQuery);
\ No newline at end of file
diff --git a/src/static/js/utils/des.js b/src/static/js/utils/des.js
new file mode 100644
index 0000000..b914a99
--- /dev/null
+++ b/src/static/js/utils/des.js
@@ -0,0 +1,867 @@
+
+/** 
+* DES加密/解密 
+* @Copyright Copyright (c) 2015 
+* @author liuyazhuang 
+* @see DESCore 
+*/  
+  
+/* 
+* encrypt the string to string made up of hex 
+* return the encrypted string 
+*/  
+function strEnc(data,firstKey,secondKey,thirdKey){  
+ var leng = data.length;  
+ var encData = "";  
+ var firstKeyBt,secondKeyBt,thirdKeyBt,firstLength,secondLength,thirdLength;  
+ if(firstKey != null && firstKey != ""){      
+   firstKeyBt = getKeyBytes(firstKey);  
+   firstLength = firstKeyBt.length;  
+ }  
+ if(secondKey != null && secondKey != ""){  
+   secondKeyBt = getKeyBytes(secondKey);  
+   secondLength = secondKeyBt.length;  
+ }  
+ if(thirdKey != null && thirdKey != ""){  
+   thirdKeyBt = getKeyBytes(thirdKey);  
+   thirdLength = thirdKeyBt.length;  
+ }    
+   
+ if(leng > 0){  
+   if(leng < 4){  
+     var bt = strToBt(data);        
+     var encByte ;  
+     if(firstKey != null && firstKey !="" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != ""){  
+       var tempBt;  
+       var x,y,z;  
+       tempBt = bt;          
+       for(x = 0;x < firstLength ;x ++){  
+         tempBt = enc(tempBt,firstKeyBt[x]);  
+       }  
+       for(y = 0;y < secondLength ;y ++){  
+         tempBt = enc(tempBt,secondKeyBt[y]);  
+       }  
+       for(z = 0;z < thirdLength ;z ++){  
+         tempBt = enc(tempBt,thirdKeyBt[z]);  
+       }          
+       encByte = tempBt;          
+     }else{  
+       if(firstKey != null && firstKey !="" && secondKey != null && secondKey != ""){  
+         var tempBt;  
+         var x,y;  
+         tempBt = bt;  
+         for(x = 0;x < firstLength ;x ++){  
+           tempBt = enc(tempBt,firstKeyBt[x]);  
+         }  
+         for(y = 0;y < secondLength ;y ++){  
+           tempBt = enc(tempBt,secondKeyBt[y]);  
+         }  
+         encByte = tempBt;  
+       }else{  
+         if(firstKey != null && firstKey !=""){              
+           var tempBt;  
+           var x = 0;  
+           tempBt = bt;              
+           for(x = 0;x < firstLength ;x ++){  
+             tempBt = enc(tempBt,firstKeyBt[x]);  
+           }  
+           encByte = tempBt;  
+         }  
+       }          
+     }  
+     encData = bt64ToHex(encByte);  
+   }else{  
+     var iterator = parseInt(leng/4);  
+     var remainder = leng%4;  
+     var i=0;        
+     for(i = 0;i < iterator;i++){  
+       var tempData = data.substring(i*4+0,i*4+4);  
+       var tempByte = strToBt(tempData);  
+       var encByte ;  
+       if(firstKey != null && firstKey !="" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != ""){  
+         var tempBt;  
+         var x,y,z;  
+         tempBt = tempByte;  
+         for(x = 0;x < firstLength ;x ++){  
+           tempBt = enc(tempBt,firstKeyBt[x]);  
+         }  
+         for(y = 0;y < secondLength ;y ++){  
+           tempBt = enc(tempBt,secondKeyBt[y]);  
+         }  
+         for(z = 0;z < thirdLength ;z ++){  
+           tempBt = enc(tempBt,thirdKeyBt[z]);  
+         }  
+         encByte = tempBt;  
+       }else{  
+         if(firstKey != null && firstKey !="" && secondKey != null && secondKey != ""){  
+           var tempBt;  
+           var x,y;  
+           tempBt = tempByte;  
+           for(x = 0;x < firstLength ;x ++){  
+             tempBt = enc(tempBt,firstKeyBt[x]);  
+           }  
+           for(y = 0;y < secondLength ;y ++){  
+             tempBt = enc(tempBt,secondKeyBt[y]);  
+           }  
+           encByte = tempBt;  
+         }else{  
+           if(firstKey != null && firstKey !=""){                        
+             var tempBt;  
+             var x;  
+             tempBt = tempByte;  
+             for(x = 0;x < firstLength ;x ++){                  
+               tempBt = enc(tempBt,firstKeyBt[x]);  
+             }  
+             encByte = tempBt;                
+           }  
+         }  
+       }  
+       encData += bt64ToHex(encByte);  
+     }        
+     if(remainder > 0){  
+       var remainderData = data.substring(iterator*4+0,leng);  
+       var tempByte = strToBt(remainderData);  
+       var encByte ;  
+       if(firstKey != null && firstKey !="" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != ""){  
+         var tempBt;  
+         var x,y,z;  
+         tempBt = tempByte;  
+         for(x = 0;x < firstLength ;x ++){  
+           tempBt = enc(tempBt,firstKeyBt[x]);  
+         }  
+         for(y = 0;y < secondLength ;y ++){  
+           tempBt = enc(tempBt,secondKeyBt[y]);  
+         }  
+         for(z = 0;z < thirdLength ;z ++){  
+           tempBt = enc(tempBt,thirdKeyBt[z]);  
+         }  
+         encByte = tempBt;  
+       }else{  
+         if(firstKey != null && firstKey !="" && secondKey != null && secondKey != ""){  
+           var tempBt;  
+           var x,y;  
+           tempBt = tempByte;  
+           for(x = 0;x < firstLength ;x ++){  
+             tempBt = enc(tempBt,firstKeyBt[x]);  
+           }  
+           for(y = 0;y < secondLength ;y ++){  
+             tempBt = enc(tempBt,secondKeyBt[y]);  
+           }  
+           encByte = tempBt;  
+         }else{  
+           if(firstKey != null && firstKey !=""){              
+             var tempBt;  
+             var x;  
+             tempBt = tempByte;  
+             for(x = 0;x < firstLength ;x ++){  
+               tempBt = enc(tempBt,firstKeyBt[x]);  
+             }  
+             encByte = tempBt;  
+           }  
+         }  
+       }  
+       encData += bt64ToHex(encByte);  
+     }                  
+   }  
+ }  
+ return encData;  
+}  
+  
+/* 
+* decrypt the encrypted string to the original string  
+* 
+* return  the original string   
+*/  
+function strDec(data,firstKey,secondKey,thirdKey){  
+ var leng = data.length;  
+ var decStr = "";  
+ var firstKeyBt,secondKeyBt,thirdKeyBt,firstLength,secondLength,thirdLength;  
+ if(firstKey != null && firstKey != ""){      
+   firstKeyBt = getKeyBytes(firstKey);  
+   firstLength = firstKeyBt.length;  
+ }  
+ if(secondKey != null && secondKey != ""){  
+   secondKeyBt = getKeyBytes(secondKey);  
+   secondLength = secondKeyBt.length;  
+ }  
+ if(thirdKey != null && thirdKey != ""){  
+   thirdKeyBt = getKeyBytes(thirdKey);  
+   thirdLength = thirdKeyBt.length;  
+ }  
+   
+ var iterator = parseInt(leng/16);  
+ var i=0;    
+ for(i = 0;i < iterator;i++){  
+   var tempData = data.substring(i*16+0,i*16+16);      
+   var strByte = hexToBt64(tempData);      
+   var intByte = new Array(64);  
+   var j = 0;  
+   for(j = 0;j < 64; j++){  
+     intByte[j] = parseInt(strByte.substring(j,j+1));  
+   }      
+   var decByte;  
+   if(firstKey != null && firstKey !="" && secondKey != null && secondKey != "" && thirdKey != null && thirdKey != ""){  
+     var tempBt;  
+     var x,y,z;  
+     tempBt = intByte;  
+     for(x = thirdLength - 1;x >= 0;x --){  
+       tempBt = dec(tempBt,thirdKeyBt[x]);  
+     }  
+     for(y = secondLength - 1;y >= 0;y --){  
+       tempBt = dec(tempBt,secondKeyBt[y]);  
+     }  
+     for(z = firstLength - 1;z >= 0 ;z --){  
+       tempBt = dec(tempBt,firstKeyBt[z]);  
+     }  
+     decByte = tempBt;  
+   }else{  
+     if(firstKey != null && firstKey !="" && secondKey != null && secondKey != ""){  
+       var tempBt;  
+       var x,y,z;  
+       tempBt = intByte;  
+       for(x = secondLength - 1;x >= 0 ;x --){  
+         tempBt = dec(tempBt,secondKeyBt[x]);  
+       }  
+       for(y = firstLength - 1;y >= 0 ;y --){  
+         tempBt = dec(tempBt,firstKeyBt[y]);  
+       }  
+       decByte = tempBt;  
+     }else{  
+       if(firstKey != null && firstKey !=""){  
+         var tempBt;  
+         var x,y,z;  
+         tempBt = intByte;  
+         for(x = firstLength - 1;x >= 0 ;x --){  
+           tempBt = dec(tempBt,firstKeyBt[x]);  
+         }  
+         decByte = tempBt;  
+       }  
+     }  
+   }  
+   decStr += byteToString(decByte);  
+ }        
+ return decStr;  
+}  
+/* 
+* chang the string into the bit array 
+*  
+* return bit array(it's length % 64 = 0) 
+*/  
+function getKeyBytes(key){  
+ var keyBytes = new Array();  
+ var leng = key.length;  
+ var iterator = parseInt(leng/4);  
+ var remainder = leng%4;  
+ var i = 0;  
+ for(i = 0;i < iterator; i ++){  
+   keyBytes[i] = strToBt(key.substring(i*4+0,i*4+4));  
+ }  
+ if(remainder > 0){  
+   keyBytes[i] = strToBt(key.substring(i*4+0,leng));  
+ }      
+ return keyBytes;  
+}  
+  
+/* 
+* chang the string(it's length <= 4) into the bit array 
+*  
+* return bit array(it's length = 64) 
+*/  
+function strToBt(str){    
+ var leng = str.length;  
+ var bt = new Array(64);  
+ if(leng < 4){  
+   var i=0,j=0,p=0,q=0;  
+   for(i = 0;i<leng;i++){  
+     var k = str.charCodeAt(i);  
+     for(j=0;j<16;j++){        
+       var pow=1,m=0;  
+       for(m=15;m>j;m--){  
+         pow *= 2;  
+       }          
+       bt[16*i+j]=parseInt(k/pow)%2;  
+     }  
+   }  
+   for(p = leng;p<4;p++){  
+     var k = 0;  
+     for(q=0;q<16;q++){        
+       var pow=1,m=0;  
+       for(m=15;m>q;m--){  
+         pow *= 2;  
+       }          
+       bt[16*p+q]=parseInt(k/pow)%2;  
+     }  
+   }    
+ }else{  
+   for(i = 0;i<4;i++){  
+     var k = str.charCodeAt(i);  
+     for(j=0;j<16;j++){        
+       var pow=1;  
+       for(m=15;m>j;m--){  
+         pow *= 2;  
+       }          
+       bt[16*i+j]=parseInt(k/pow)%2;  
+     }  
+   }    
+ }  
+ return bt;  
+}  
+  
+/* 
+* chang the bit(it's length = 4) into the hex 
+*  
+* return hex 
+*/  
+function bt4ToHex(binary) {  
+ var hex;  
+ switch (binary) {  
+   case "0000" : hex = "0"; break;  
+   case "0001" : hex = "1"; break;  
+   case "0010" : hex = "2"; break;  
+   case "0011" : hex = "3"; break;  
+   case "0100" : hex = "4"; break;  
+   case "0101" : hex = "5"; break;  
+   case "0110" : hex = "6"; break;  
+   case "0111" : hex = "7"; break;  
+   case "1000" : hex = "8"; break;  
+   case "1001" : hex = "9"; break;  
+   case "1010" : hex = "A"; break;  
+   case "1011" : hex = "B"; break;  
+   case "1100" : hex = "C"; break;  
+   case "1101" : hex = "D"; break;  
+   case "1110" : hex = "E"; break;  
+   case "1111" : hex = "F"; break;  
+ }  
+ return hex;  
+}  
+  
+/* 
+* chang the hex into the bit(it's length = 4) 
+*  
+* return the bit(it's length = 4) 
+*/  
+function hexToBt4(hex) {  
+ var binary;  
+ switch (hex) {  
+   case "0" : binary = "0000"; break;  
+   case "1" : binary = "0001"; break;  
+   case "2" : binary = "0010"; break;  
+   case "3" : binary = "0011"; break;  
+   case "4" : binary = "0100"; break;  
+   case "5" : binary = "0101"; break;  
+   case "6" : binary = "0110"; break;  
+   case "7" : binary = "0111"; break;  
+   case "8" : binary = "1000"; break;  
+   case "9" : binary = "1001"; break;  
+   case "A" : binary = "1010"; break;  
+   case "B" : binary = "1011"; break;  
+   case "C" : binary = "1100"; break;  
+   case "D" : binary = "1101"; break;  
+   case "E" : binary = "1110"; break;  
+   case "F" : binary = "1111"; break;  
+ }  
+ return binary;  
+}  
+  
+/* 
+* chang the bit(it's length = 64) into the string 
+*  
+* return string 
+*/  
+function byteToString(byteData){  
+ var str="";  
+ for(i = 0;i<4;i++){  
+   var count=0;  
+   for(j=0;j<16;j++){          
+     var pow=1;  
+     for(m=15;m>j;m--){  
+       pow*=2;  
+     }                
+     count+=byteData[16*i+j]*pow;  
+   }          
+   if(count != 0){  
+     str+=String.fromCharCode(count);  
+   }  
+ }  
+ return str;  
+}  
+  
+function bt64ToHex(byteData){  
+ var hex = "";  
+ for(i = 0;i<16;i++){  
+   var bt = "";  
+   for(j=0;j<4;j++){      
+     bt += byteData[i*4+j];  
+   }      
+   hex+=bt4ToHex(bt);  
+ }  
+ return hex;  
+}  
+  
+function hexToBt64(hex){  
+ var binary = "";  
+ for(i = 0;i<16;i++){  
+   binary+=hexToBt4(hex.substring(i,i+1));  
+ }  
+ return binary;  
+}  
+  
+/* 
+* the 64 bit des core arithmetic 
+*/  
+  
+function enc(dataByte,keyByte){    
+ var keys = generateKeys(keyByte);      
+ var ipByte   = initPermute(dataByte);    
+ var ipLeft   = new Array(32);  
+ var ipRight  = new Array(32);  
+ var tempLeft = new Array(32);  
+ var i = 0,j = 0,k = 0,m = 0, n = 0;  
+ for(k = 0;k < 32;k ++){  
+   ipLeft[k] = ipByte[k];  
+   ipRight[k] = ipByte[32+k];  
+ }      
+ for(i = 0;i < 16;i ++){  
+   for(j = 0;j < 32;j ++){  
+     tempLeft[j] = ipLeft[j];  
+     ipLeft[j] = ipRight[j];        
+   }    
+   var key = new Array(48);  
+   for(m = 0;m < 48;m ++){  
+     key[m] = keys[i][m];  
+   }  
+   var  tempRight = xor(pPermute(sBoxPermute(xor(expandPermute(ipRight),key))), tempLeft);        
+   for(n = 0;n < 32;n ++){  
+     ipRight[n] = tempRight[n];  
+   }    
+     
+ }    
+   
+   
+ var finalData =new Array(64);  
+ for(i = 0;i < 32;i ++){  
+   finalData[i] = ipRight[i];  
+   finalData[32+i] = ipLeft[i];  
+ }  
+ return finallyPermute(finalData);    
+}  
+  
+function dec(dataByte,keyByte){    
+ var keys = generateKeys(keyByte);      
+ var ipByte   = initPermute(dataByte);    
+ var ipLeft   = new Array(32);  
+ var ipRight  = new Array(32);  
+ var tempLeft = new Array(32);  
+ var i = 0,j = 0,k = 0,m = 0, n = 0;  
+ for(k = 0;k < 32;k ++){  
+   ipLeft[k] = ipByte[k];  
+   ipRight[k] = ipByte[32+k];  
+ }    
+ for(i = 15;i >= 0;i --){  
+   for(j = 0;j < 32;j ++){  
+     tempLeft[j] = ipLeft[j];  
+     ipLeft[j] = ipRight[j];        
+   }    
+   var key = new Array(48);  
+   for(m = 0;m < 48;m ++){  
+     key[m] = keys[i][m];  
+   }  
+     
+   var  tempRight = xor(pPermute(sBoxPermute(xor(expandPermute(ipRight),key))), tempLeft);        
+   for(n = 0;n < 32;n ++){  
+     ipRight[n] = tempRight[n];  
+   }    
+ }    
+   
+   
+ var finalData =new Array(64);  
+ for(i = 0;i < 32;i ++){  
+   finalData[i] = ipRight[i];  
+   finalData[32+i] = ipLeft[i];  
+ }  
+ return finallyPermute(finalData);    
+}  
+  
+function initPermute(originalData){  
+ var ipByte = new Array(64);  
+ for (i = 0, m = 1, n = 0; i < 4; i++, m += 2, n += 2) {  
+   for (j = 7, k = 0; j >= 0; j--, k++) {  
+     ipByte[i * 8 + k] = originalData[j * 8 + m];  
+     ipByte[i * 8 + k + 32] = originalData[j * 8 + n];  
+   }  
+ }      
+ return ipByte;  
+}  
+  
+function expandPermute(rightData){    
+ var epByte = new Array(48);  
+ for (i = 0; i < 8; i++) {  
+   if (i == 0) {  
+     epByte[i * 6 + 0] = rightData[31];  
+   } else {  
+     epByte[i * 6 + 0] = rightData[i * 4 - 1];  
+   }  
+   epByte[i * 6 + 1] = rightData[i * 4 + 0];  
+   epByte[i * 6 + 2] = rightData[i * 4 + 1];  
+   epByte[i * 6 + 3] = rightData[i * 4 + 2];  
+   epByte[i * 6 + 4] = rightData[i * 4 + 3];  
+   if (i == 7) {  
+     epByte[i * 6 + 5] = rightData[0];  
+   } else {  
+     epByte[i * 6 + 5] = rightData[i * 4 + 4];  
+   }  
+ }        
+ return epByte;  
+}  
+  
+function xor(byteOne,byteTwo){    
+ var xorByte = new Array(byteOne.length);  
+ for(i = 0;i < byteOne.length; i ++){        
+   xorByte[i] = byteOne[i] ^ byteTwo[i];  
+ }    
+ return xorByte;  
+}  
+  
+function sBoxPermute(expandByte){  
+   
+   var sBoxByte = new Array(32);  
+   var binary = "";  
+   var s1 = [  
+       [14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],  
+       [0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],  
+       [4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],  
+       [15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 ]];  
+  
+       /* Table - s2 */  
+   var s2 = [  
+       [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],  
+       [3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],  
+       [0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],  
+       [13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 ]];  
+  
+       /* Table - s3 */  
+   var s3= [  
+       [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],  
+       [13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],  
+       [13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7],  
+       [1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 ]];  
+       /* Table - s4 */  
+   var s4 = [  
+       [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15],  
+       [13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9],  
+       [10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4],  
+       [3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 ]];  
+  
+       /* Table - s5 */  
+   var s5 = [  
+       [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9],  
+       [14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6],  
+       [4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14],  
+       [11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 ]];  
+  
+       /* Table - s6 */  
+   var s6 = [  
+       [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11],  
+       [10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8],  
+       [9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6],  
+       [4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 ]];  
+  
+       /* Table - s7 */  
+   var s7 = [  
+       [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1],  
+       [13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6],  
+       [1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2],  
+       [6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]];  
+  
+       /* Table - s8 */  
+   var s8 = [  
+       [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7],  
+       [1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2],  
+       [7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8],  
+       [2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]];  
+     
+   for(m=0;m<8;m++){  
+   var i=0,j=0;  
+   i = expandByte[m*6+0]*2+expandByte[m*6+5];  
+   j = expandByte[m * 6 + 1] * 2 * 2 * 2   
+     + expandByte[m * 6 + 2] * 2* 2   
+     + expandByte[m * 6 + 3] * 2   
+     + expandByte[m * 6 + 4];  
+   switch (m) {  
+     case 0 :  
+       binary = getBoxBinary(s1[i][j]);  
+       break;  
+     case 1 :  
+       binary = getBoxBinary(s2[i][j]);  
+       break;  
+     case 2 :  
+       binary = getBoxBinary(s3[i][j]);  
+       break;  
+     case 3 :  
+       binary = getBoxBinary(s4[i][j]);  
+       break;  
+     case 4 :  
+       binary = getBoxBinary(s5[i][j]);  
+       break;  
+     case 5 :  
+       binary = getBoxBinary(s6[i][j]);  
+       break;  
+     case 6 :  
+       binary = getBoxBinary(s7[i][j]);  
+       break;  
+     case 7 :  
+       binary = getBoxBinary(s8[i][j]);  
+       break;  
+   }        
+   sBoxByte[m*4+0] = parseInt(binary.substring(0,1));  
+   sBoxByte[m*4+1] = parseInt(binary.substring(1,2));  
+   sBoxByte[m*4+2] = parseInt(binary.substring(2,3));  
+   sBoxByte[m*4+3] = parseInt(binary.substring(3,4));  
+ }  
+ return sBoxByte;  
+}  
+  
+function pPermute(sBoxByte){  
+ var pBoxPermute = new Array(32);  
+ pBoxPermute[ 0] = sBoxByte[15];   
+ pBoxPermute[ 1] = sBoxByte[ 6];   
+ pBoxPermute[ 2] = sBoxByte[19];   
+ pBoxPermute[ 3] = sBoxByte[20];   
+ pBoxPermute[ 4] = sBoxByte[28];   
+ pBoxPermute[ 5] = sBoxByte[11];   
+ pBoxPermute[ 6] = sBoxByte[27];   
+ pBoxPermute[ 7] = sBoxByte[16];   
+ pBoxPermute[ 8] = sBoxByte[ 0];   
+ pBoxPermute[ 9] = sBoxByte[14];   
+ pBoxPermute[10] = sBoxByte[22];   
+ pBoxPermute[11] = sBoxByte[25];   
+ pBoxPermute[12] = sBoxByte[ 4];   
+ pBoxPermute[13] = sBoxByte[17];   
+ pBoxPermute[14] = sBoxByte[30];   
+ pBoxPermute[15] = sBoxByte[ 9];   
+ pBoxPermute[16] = sBoxByte[ 1];   
+ pBoxPermute[17] = sBoxByte[ 7];   
+ pBoxPermute[18] = sBoxByte[23];   
+ pBoxPermute[19] = sBoxByte[13];   
+ pBoxPermute[20] = sBoxByte[31];   
+ pBoxPermute[21] = sBoxByte[26];   
+ pBoxPermute[22] = sBoxByte[ 2];   
+ pBoxPermute[23] = sBoxByte[ 8];   
+ pBoxPermute[24] = sBoxByte[18];   
+ pBoxPermute[25] = sBoxByte[12];   
+ pBoxPermute[26] = sBoxByte[29];   
+ pBoxPermute[27] = sBoxByte[ 5];   
+ pBoxPermute[28] = sBoxByte[21];   
+ pBoxPermute[29] = sBoxByte[10];   
+ pBoxPermute[30] = sBoxByte[ 3];   
+ pBoxPermute[31] = sBoxByte[24];      
+ return pBoxPermute;  
+}  
+  
+function finallyPermute(endByte){      
+ var fpByte = new Array(64);    
+ fpByte[ 0] = endByte[39];   
+ fpByte[ 1] = endByte[ 7];   
+ fpByte[ 2] = endByte[47];   
+ fpByte[ 3] = endByte[15];   
+ fpByte[ 4] = endByte[55];   
+ fpByte[ 5] = endByte[23];   
+ fpByte[ 6] = endByte[63];   
+ fpByte[ 7] = endByte[31];   
+ fpByte[ 8] = endByte[38];   
+ fpByte[ 9] = endByte[ 6];   
+ fpByte[10] = endByte[46];   
+ fpByte[11] = endByte[14];   
+ fpByte[12] = endByte[54];   
+ fpByte[13] = endByte[22];   
+ fpByte[14] = endByte[62];   
+ fpByte[15] = endByte[30];   
+ fpByte[16] = endByte[37];   
+ fpByte[17] = endByte[ 5];   
+ fpByte[18] = endByte[45];   
+ fpByte[19] = endByte[13];   
+ fpByte[20] = endByte[53];   
+ fpByte[21] = endByte[21];   
+ fpByte[22] = endByte[61];   
+ fpByte[23] = endByte[29];   
+ fpByte[24] = endByte[36];   
+ fpByte[25] = endByte[ 4];   
+ fpByte[26] = endByte[44];   
+ fpByte[27] = endByte[12];   
+ fpByte[28] = endByte[52];   
+ fpByte[29] = endByte[20];   
+ fpByte[30] = endByte[60];   
+ fpByte[31] = endByte[28];   
+ fpByte[32] = endByte[35];   
+ fpByte[33] = endByte[ 3];   
+ fpByte[34] = endByte[43];   
+ fpByte[35] = endByte[11];   
+ fpByte[36] = endByte[51];   
+ fpByte[37] = endByte[19];   
+ fpByte[38] = endByte[59];   
+ fpByte[39] = endByte[27];   
+ fpByte[40] = endByte[34];   
+ fpByte[41] = endByte[ 2];   
+ fpByte[42] = endByte[42];   
+ fpByte[43] = endByte[10];   
+ fpByte[44] = endByte[50];   
+ fpByte[45] = endByte[18];   
+ fpByte[46] = endByte[58];   
+ fpByte[47] = endByte[26];   
+ fpByte[48] = endByte[33];   
+ fpByte[49] = endByte[ 1];   
+ fpByte[50] = endByte[41];   
+ fpByte[51] = endByte[ 9];   
+ fpByte[52] = endByte[49];   
+ fpByte[53] = endByte[17];   
+ fpByte[54] = endByte[57];   
+ fpByte[55] = endByte[25];   
+ fpByte[56] = endByte[32];   
+ fpByte[57] = endByte[ 0];   
+ fpByte[58] = endByte[40];   
+ fpByte[59] = endByte[ 8];   
+ fpByte[60] = endByte[48];   
+ fpByte[61] = endByte[16];   
+ fpByte[62] = endByte[56];   
+ fpByte[63] = endByte[24];  
+ return fpByte;  
+}  
+  
+function getBoxBinary(i) {  
+ var binary = "";  
+ switch (i) {  
+   case 0 :binary = "0000";break;  
+   case 1 :binary = "0001";break;  
+   case 2 :binary = "0010";break;  
+   case 3 :binary = "0011";break;  
+   case 4 :binary = "0100";break;  
+   case 5 :binary = "0101";break;  
+   case 6 :binary = "0110";break;  
+   case 7 :binary = "0111";break;  
+   case 8 :binary = "1000";break;  
+   case 9 :binary = "1001";break;  
+   case 10 :binary = "1010";break;  
+   case 11 :binary = "1011";break;  
+   case 12 :binary = "1100";break;  
+   case 13 :binary = "1101";break;  
+   case 14 :binary = "1110";break;  
+   case 15 :binary = "1111";break;  
+ }  
+ return binary;  
+}  
+/* 
+* generate 16 keys for xor 
+* 
+*/  
+function generateKeys(keyByte){      
+ var key   = new Array(56);  
+ var keys = new Array();    
+   
+ keys[ 0] = new Array();  
+ keys[ 1] = new Array();  
+ keys[ 2] = new Array();  
+ keys[ 3] = new Array();  
+ keys[ 4] = new Array();  
+ keys[ 5] = new Array();  
+ keys[ 6] = new Array();  
+ keys[ 7] = new Array();  
+ keys[ 8] = new Array();  
+ keys[ 9] = new Array();  
+ keys[10] = new Array();  
+ keys[11] = new Array();  
+ keys[12] = new Array();  
+ keys[13] = new Array();  
+ keys[14] = new Array();  
+ keys[15] = new Array();    
+ var loop = [1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];  
+  
+ for(i=0;i<7;i++){  
+   for(j=0,k=7;j<8;j++,k--){  
+     key[i*8+j]=keyByte[8*k+i];  
+   }  
+ }      
+   
+ var i = 0;  
+ for(i = 0;i < 16;i ++){  
+   var tempLeft=0;  
+   var tempRight=0;  
+   for(j = 0; j < loop[i];j ++){            
+     tempLeft = key[0];  
+     tempRight = key[28];  
+     for(k = 0;k < 27 ;k ++){  
+       key[k] = key[k+1];  
+       key[28+k] = key[29+k];  
+     }    
+     key[27]=tempLeft;  
+     key[55]=tempRight;  
+   }  
+   var tempKey = new Array(48);  
+   tempKey[ 0] = key[13];  
+   tempKey[ 1] = key[16];  
+   tempKey[ 2] = key[10];  
+   tempKey[ 3] = key[23];  
+   tempKey[ 4] = key[ 0];  
+   tempKey[ 5] = key[ 4];  
+   tempKey[ 6] = key[ 2];  
+   tempKey[ 7] = key[27];  
+   tempKey[ 8] = key[14];  
+   tempKey[ 9] = key[ 5];  
+   tempKey[10] = key[20];  
+   tempKey[11] = key[ 9];  
+   tempKey[12] = key[22];  
+   tempKey[13] = key[18];  
+   tempKey[14] = key[11];  
+   tempKey[15] = key[ 3];  
+   tempKey[16] = key[25];  
+   tempKey[17] = key[ 7];  
+   tempKey[18] = key[15];  
+   tempKey[19] = key[ 6];  
+   tempKey[20] = key[26];  
+   tempKey[21] = key[19];  
+   tempKey[22] = key[12];  
+   tempKey[23] = key[ 1];  
+   tempKey[24] = key[40];  
+   tempKey[25] = key[51];  
+   tempKey[26] = key[30];  
+   tempKey[27] = key[36];  
+   tempKey[28] = key[46];  
+   tempKey[29] = key[54];  
+   tempKey[30] = key[29];  
+   tempKey[31] = key[39];  
+   tempKey[32] = key[50];  
+   tempKey[33] = key[44];  
+   tempKey[34] = key[32];  
+   tempKey[35] = key[47];  
+   tempKey[36] = key[43];  
+   tempKey[37] = key[48];  
+   tempKey[38] = key[38];  
+   tempKey[39] = key[55];  
+   tempKey[40] = key[33];  
+   tempKey[41] = key[52];  
+   tempKey[42] = key[45];  
+   tempKey[43] = key[41];  
+   tempKey[44] = key[49];  
+   tempKey[45] = key[35];  
+   tempKey[46] = key[28];  
+   tempKey[47] = key[31];  
+   switch(i){  
+     case 0: for(m=0;m < 48 ;m++){ keys[ 0][m] = tempKey[m]; } break;  
+     case 1: for(m=0;m < 48 ;m++){ keys[ 1][m] = tempKey[m]; } break;  
+     case 2: for(m=0;m < 48 ;m++){ keys[ 2][m] = tempKey[m]; } break;  
+     case 3: for(m=0;m < 48 ;m++){ keys[ 3][m] = tempKey[m]; } break;  
+     case 4: for(m=0;m < 48 ;m++){ keys[ 4][m] = tempKey[m]; } break;  
+     case 5: for(m=0;m < 48 ;m++){ keys[ 5][m] = tempKey[m]; } break;  
+     case 6: for(m=0;m < 48 ;m++){ keys[ 6][m] = tempKey[m]; } break;  
+     case 7: for(m=0;m < 48 ;m++){ keys[ 7][m] = tempKey[m]; } break;  
+     case 8: for(m=0;m < 48 ;m++){ keys[ 8][m] = tempKey[m]; } break;  
+     case 9: for(m=0;m < 48 ;m++){ keys[ 9][m] = tempKey[m]; } break;  
+     case 10: for(m=0;m < 48 ;m++){ keys[10][m] = tempKey[m]; } break;  
+     case 11: for(m=0;m < 48 ;m++){ keys[11][m] = tempKey[m]; } break;  
+     case 12: for(m=0;m < 48 ;m++){ keys[12][m] = tempKey[m]; } break;  
+     case 13: for(m=0;m < 48 ;m++){ keys[13][m] = tempKey[m]; } break;  
+     case 14: for(m=0;m < 48 ;m++){ keys[14][m] = tempKey[m]; } break;  
+     case 15: for(m=0;m < 48 ;m++){ keys[15][m] = tempKey[m]; } break;  
+   }  
+ }  
+ return keys;    
+}   
\ No newline at end of file
diff --git a/src/static/js/utils/form-builder.js b/src/static/js/utils/form-builder.js
new file mode 100644
index 0000000..63089b8
--- /dev/null
+++ b/src/static/js/utils/form-builder.js
@@ -0,0 +1,441 @@
+(function (define) {
+    "use strict";
+    define('form_builder', function (require, exports) {
+        var $ = require('$'),
+        _ = require('_');
+        var elements = [],
+        with_wrapper = true,
+        forms = [],
+        elements_boxes = [],
+        mouse_event = 'release',
+        dragging_el_btn = null,
+        mouse_in_form = null,
+        form_el_row = '<div class="form_el_row" name="form_el_row" ></div>',
+        place_holder = null,
+        form_data_recovering = null,
+        form_data_recovering_key = null;
+        function main(){
+            /**
+             * {
+             *   'btn': '单行文本',
+             *   'field': '<input />'
+             * }
+             */
+            elements = [];
+            forms = [];
+            elements_boxes = [];
+        }
+        var attrs = {
+            /**
+             * after function for element dropped to the form.
+             * */
+            element_appended_callback: function(after) {
+                this.element_appended = after;
+            },
+            element_appended_before_allback: function(before) {
+                this.element_before_append = before;
+            },
+            insert_element: function(data){
+                var uid = dragging_el_btn.attr('uid');
+                var element = _.filter(elements, function(element){
+                    return element.uid === uid;
+                });
+                if(this.element_before_append)
+                    this.element_before_append.apply(this, [element, place_holder, data])
+                var $el = $(element[0].field);
+                if(place_holder && place_holder.is(forms.join(' ,'))){
+                    place_holder.append($el);
+                }else{
+                    $el.insertAfter(place_holder);
+                }
+                if(with_wrapper){
+                    $el.wrap(form_el_row);
+                    $el.wrap('<div></div>');
+                }
+                $el.data('tag', element[0]);
+                this.element_appended.apply(this, [element, $el, place_holder, data]);
+                dragging_el_btn = null;
+                place_holder = null;
+                return $el;
+            },
+            highlight_place_holder: function(el){
+                var $el = $(el);
+                $el.addClass('place_holder_after');
+            },
+            rm_highlight_place_holder: function(){
+                $(forms.join(' ,')).find('div').removeClass('place_holder_after');
+            },
+            mouseover_element: function(event){
+                var $target = $(event.target);
+                var _forms = forms.join(' ,');
+                if($target.is(forms.join(' ,'))){
+                    if($target.children('div.form_el_row').length){
+                        place_holder = $target.children('div.form_el_row').last();
+                        this.highlight_place_holder(place_holder);
+                    }else{
+                        place_holder = $target;
+                    }
+                }else if($target.closest(forms.join(' ,')).length){
+                    if($target.is('div[name="form_el_row"]')){
+                        place_holder = $target;
+                    }else{
+                        place_holder = $target.closest('div[name="form_el_row"]');
+                    }
+                    this.highlight_place_holder(place_holder);
+                }
+                event.stopPropagation();
+            },
+            drag_add: function(){
+                var _this = this;
+                $(elements_boxes.join(' ,')).children().each(function(i, obj){
+                    $(obj).on('mousedown', function(event){
+                        mouse_event = 'dragging';
+                        dragging_el_btn = $(this).clone();
+                        dragging_el_btn.css({
+                            'top': event.pageY+12, 
+                            'left': event.pageX-80,
+                            'position': 'absolute',
+                            'z-index': 99999
+                        });
+                        $('body').append(dragging_el_btn);
+                        event.stopPropagation();
+                    });
+                });
+                
+                $(document).on('mousemove', function(event){
+                    if(mouse_event === 'dragging'){
+                        dragging_el_btn.css({
+                            'top': event.pageY+12, 
+                            'left': event.pageX-80,
+                            'position': 'absolute',
+                            'z-index': 99999
+                        });
+                        _this.rm_highlight_place_holder();
+                        _this.mouseover_element(event);
+                    }
+                });
+                
+                $(document).on('mouseup', function(){
+                    mouse_event = 'release';
+                    if(dragging_el_btn){
+                        dragging_el_btn.remove();
+                        _this.insert_element();
+                        _this.rm_highlight_place_holder();
+                    }
+                    //sort columns
+                    
+                    $( forms.join(' ,') ).sortable({
+                        connectWith: "div.main",
+                        stop: function(event, ui) {
+                            
+                        }
+                    });
+                });
+            },
+            init_els_box: function(){
+                var _this = this;
+                _.each(elements, function(el){
+                    var $el = $(el.btn);
+                    var uid = _.uniqueId(new Date().getTime());
+                    el.uid = uid;
+                    _.each(elements_boxes, function(el_box){
+                        $(el_box).append($el);
+                        $el.attr('uid', uid);
+                        $el.attr('type', el.type);
+                    })
+                });
+            },
+            recover_form_data: function(form_data, type_key){
+                form_data_recovering = form_data;
+                form_data_recovering_key = type_key;
+            },
+            recover: function(el_data, g_placeholder){
+                var _this = this;
+                var data_el_key = form_data_recovering_key;
+                var type = _.get(el_data, data_el_key),
+                    btn_el = $(elements_boxes.join(' ,')).find('button[type="'+type+'"]');
+                if(btn_el.length){
+                    dragging_el_btn = btn_el;
+                    place_holder = g_placeholder;
+                    return _this.insert_element(el_data);
+                }else{
+                    return false;
+                }
+            },
+            recover_form: function(){
+                if(!form_data_recovering) return false;
+                var _this = this, field,
+                _elements = form_data_recovering['child'];
+                _.each(_elements, function(el_data){
+                    var type = _.get(el_data, form_data_recovering_key),
+                    $el_appended = _this.recover(el_data, $(forms[0])),
+                    el_btn_data = _.filter(elements, function(el){
+                        return _.eq(_.get(el, 'type'), type);
+                    });
+                    if(el_btn_data.length){
+                        field = el_btn_data[0]['field'];
+                    }
+                    if($(field).is('div')){
+                        var sub_form_data = el_data['child'];
+                        _.each(sub_form_data, function(sub_form_el_data){
+                            _this.recover(sub_form_el_data, $el_appended);
+                        })
+                    }
+                });
+            },
+            bootstrap: function(){
+                this.init_els_box();
+                this.drag_add();
+                this.recover_form();
+            },
+            add_elements: function(els){
+                elements = _.concat(elements, els);
+            },
+            add_forms: function(form){
+            	
+                forms.push(form);
+            },
+            add_elements_box: function(el_box){
+                elements_boxes.push(el_box);
+            },
+            no_wrapper: function(bool){
+                with_wrapper = bool;
+            }
+
+        }
+        
+        _.extend(main.prototype, attrs);
+
+        $.extend(exports, {
+            create: main
+        })
+    });
+}(typeof define === 'function' && define.amd ? define : function (id, factory) {
+    if (typeof exports !== 'undefined') {
+        factory(require, exports);
+    } else {
+        factory(function(value) {
+            return window[value];
+        }, (window[id] = {}));
+    }
+}));
+(function (define) {
+    "use strict";
+    define('form_builder_s', function (require, exports) {
+        var $ = require('$'),
+        _ = require('_');
+        var elements = [],
+        with_wrapper = true,
+        forms = [],
+        elements_boxes = [],
+        mouse_event = 'release',
+        dragging_el_btn = null,
+        mouse_in_form = null,
+        form_el_row = '<div class="form_el_row" name="form_el_row" ></div>',
+        place_holder = null,
+        form_data_recovering = null,
+        form_data_recovering_key = null;
+        function main(){
+            /**
+             * {
+             *   'btn': '单行文本',
+             *   'field': '<input />'
+             * }
+             */
+            elements = [];
+            forms = [];
+            elements_boxes = [];
+        }
+        var attrs = {
+            /**
+             * after function for element dropped to the form.
+             * */
+            element_appended_callback: function(after) {
+                this.element_appended = after;
+            },
+            element_appended_before_allback: function(before) {
+                this.element_before_append = before;
+            },
+            insert_element: function(data){
+                var uid = dragging_el_btn.attr('uid');
+                var element = _.filter(elements, function(element){
+                    return element.uid === uid;
+                });
+                if(this.element_before_append)
+                    this.element_before_append.apply(this, [element, place_holder, data])
+                var $el = $(element[0].field);
+                if(place_holder && place_holder.is(forms.join(' ,'))){
+                    place_holder.append($el);
+                }else{
+                    $el.insertAfter(place_holder);
+                }
+                if(with_wrapper){
+                    $el.wrap(form_el_row);
+                    $el.wrap('<div></div>');
+                }
+                $el.data('tag', element[0]);
+                this.element_appended.apply(this, [element, $el, place_holder, data]);
+                dragging_el_btn = null;
+                place_holder = null;
+                return $el;
+            },
+            highlight_place_holder: function(el){
+                var $el = $(el);
+                $el.addClass('place_holder_after');
+            },
+            rm_highlight_place_holder: function(){
+                $(forms.join(' ,')).find('div').removeClass('place_holder_after');
+            },
+            mouseover_element: function(event){
+                var $target = $(event.target);
+                var _forms = forms.join(' ,');
+                if($target.is(forms.join(' ,'))){
+                    if($target.children('div.form_el_row').length){
+                        place_holder = $target.children('div.form_el_row').last();
+                        this.highlight_place_holder(place_holder);
+                    }else{
+                        place_holder = $target;
+                    }
+                }else if($target.closest(forms.join(' ,')).length){
+                    if($target.is('div[name="form_el_row"]')){
+                        place_holder = $target;
+                    }else{
+                        place_holder = $target.closest('div[name="form_el_row"]');
+                    }
+                    this.highlight_place_holder(place_holder);
+                }
+                event.stopPropagation();
+            },
+            drag_add: function(){
+                var _this = this;
+                $(elements_boxes.join(' ,')).children().each(function(i, obj){
+                    $(obj).on('mousedown', function(event){
+                        mouse_event = 'dragging';
+                        dragging_el_btn = $(this).clone();
+                        dragging_el_btn.css({
+                            'top': event.pageY+12, 
+                            'left': event.pageX-80,
+                            'position': 'absolute',
+                            'z-index': 99999
+                        });
+                        $('body').append(dragging_el_btn);
+                        event.stopPropagation();
+                    });
+                });
+                
+                $(document).on('mousemove', function(event){
+                    if(mouse_event === 'dragging'){
+                        dragging_el_btn.css({
+                            'top': event.pageY+12, 
+                            'left': event.pageX-80,
+                            'position': 'absolute',
+                            'z-index': 99999
+                        });
+                        _this.rm_highlight_place_holder();
+                        _this.mouseover_element(event);
+                    }
+                });
+                
+                $(document).on('mouseup', function(){
+                    mouse_event = 'release';
+                    if(dragging_el_btn){
+                        dragging_el_btn.remove();
+                        _this.insert_element();
+                        _this.rm_highlight_place_holder();
+                    }
+                    //sort columns
+                    $( forms.join(' ,') ).sortable({
+                        connectWith: "div.main",
+                        stop: function(event, ui) {
+                            
+                        }
+                    });
+                });
+            },
+            init_els_box: function(){
+                var _this = this;
+                _.each(elements, function(el){
+                    var $el = $(el.btn);
+                    var uid = _.uniqueId(new Date().getTime());
+                    el.uid = uid;
+                    _.each(elements_boxes, function(el_box){
+                        $(el_box).append($el);
+                        $el.attr('uid', uid);
+                        $el.attr('type', el.type);
+                    })
+                });
+            },
+            recover_form_data: function(form_data, type_key){
+                form_data_recovering = form_data;
+                form_data_recovering_key = type_key;
+            },
+            recover: function(el_data, g_placeholder){
+                var _this = this;
+                var data_el_key = form_data_recovering_key;
+                var type = _.get(el_data, data_el_key),
+                    btn_el = $(elements_boxes.join(' ,')).find('button[type="'+type+'"]');
+                if(btn_el.length){
+                    dragging_el_btn = btn_el;
+                    place_holder = g_placeholder;
+                    return _this.insert_element(el_data);
+                }else{
+                    return false;
+                }
+            },
+            recover_form: function(){
+                if(!form_data_recovering) return false;
+                var _this = this, field,
+                _elements = form_data_recovering['child'];
+                _.each(_elements, function(el_data){
+                    var type = _.get(el_data, form_data_recovering_key),
+                    $el_appended = _this.recover(el_data, $(forms[0])),
+                    el_btn_data = _.filter(elements, function(el){
+                        return _.eq(_.get(el, 'type'), type);
+                    });
+                    if(el_btn_data.length){
+                        field = el_btn_data[0]['field'];
+                    }
+                    if($(field).is('div')){
+                        var sub_form_data = el_data['child'];
+                        _.each(sub_form_data, function(sub_form_el_data){
+                            _this.recover(sub_form_el_data, $el_appended);
+                        })
+                    }
+                });
+            },
+            bootstrap: function(){
+                this.init_els_box();
+                this.drag_add();
+                this.recover_form();
+            },
+            add_elements: function(els){
+                elements = _.concat(elements, els);
+            },
+            add_forms: function(form){
+            	
+                forms.push(form);
+            },
+            add_elements_box: function(el_box){
+                elements_boxes.push(el_box);
+            },
+            no_wrapper: function(bool){
+                with_wrapper = bool;
+            }
+
+        }
+        
+        _.extend(main.prototype, attrs);
+
+        $.extend(exports, {
+            create: main
+        })
+    });
+}(typeof define === 'function' && define.amd ? define : function (id, factory) {
+    if (typeof exports !== 'undefined') {
+        factory(require, exports);
+    } else {
+        factory(function(value) {
+            return window[value];
+        }, (window[id] = {}));
+    }
+}));
\ No newline at end of file
diff --git a/src/static/js/utils/http.js b/src/static/js/utils/http.js
new file mode 100644
index 0000000..25c2cf5
--- /dev/null
+++ b/src/static/js/utils/http.js
@@ -0,0 +1,162 @@
+var http_module = angular.module("http_module", []);
+http_module.factory('http_service', ['$http','$rootScope','$timeout', function($http,$rootScope,$timeout) {   
+    var factory = {};
+	function getCookie(cname){
+		var name = cname + "=";
+		var ca = document.cookie.split(';');
+		for(var i=0; i<ca.length; i++) {
+			var c = ca[i].trim();
+			if (c.indexOf(name)==0) return c.substring(name.length,c.length);
+		}
+		return "";
+	}
+//	var token = {"token":getCookie("token")};
+//  var token = {"token": 868686};
+    var api_server = './travel-web/';
+    var success = function(complete,flg,url,data){
+        return function(res){
+        	if(res.data.invalidUser){
+        		var href_str = register_url + "index.html";
+        		$rootScope.terro("登录验证失效");
+        		$timeout(function(){
+        			window.location.href = register_url;
+        		},2000)
+        		return false;
+        	}
+        	if(res.data.power){
+        		$rootScope.terro("无权限操作");
+        		return false;
+        	}
+            if(res.status === 200){
+            	if (flg) {
+            		if (res.data.opState) {
+            			saveCache(url,data,res);
+            		}
+            	}
+                complete(res);
+            }else{
+				//alert('server error: ' + api_server + url);
+                sweetAlert('server error: ' + api_server + url);
+                
+            }
+        }
+    };
+    var list = function(complete){
+    	return function(res){
+            if(res.status === 200){
+            	permission_list = response.data.data;
+                complete(res);
+            }else{
+				//alert('server error: ' + api_server + url);
+                sweetAlert('server error: ' + "./travel-web/permission/search/userPermission");
+            }
+        }
+    }
+    factory.get = function(url, complete) {
+       $http({
+            url: api_server + url,
+            method: 'GET'
+        }).then(success(complete));
+    };
+    factory.post = function(url, data,complete,flg,errorCallback) {
+    	if (flg == true) {
+    		getCache(url,data,complete);
+    	} else {
+//  		data.token = getCookie("token");//暂时不加密
+    		
+//  		var prmData = {"data":getDes(data)};  //暂时不加密
+
+			var prmData = getDes(data);
+    		$http({
+	            url: api_server + url,
+	            method: 'POST',
+	            data: prmData,
+	        }).then(success(complete),errorCallback);
+    	}
+       
+    };
+    factory.delelte = function(url, complete) {
+        $http({
+            url: api_server + url,
+            method: 'DELETE'
+        }).then(success(complete));
+    };
+    factory.update = function(url, data, complete) {
+        $http({
+            url: api_server + url,
+            method: 'PUT',
+            data: _.extend(data, token)
+        }).then(success(complete));
+    };
+    var getCache = function(url,data,complete) {
+		var url_key = app_userinfo.tenantId + "_" + url + "_" + data["cache_id"];
+		
+		var cacheData = localStorage.getItem(url_key);
+		if (cacheData) {
+			cacheData = unescape($.base64.decode(cacheData));
+		}
+		// 验证缓存版本号
+    	if (cacheData && JSON.parse(cacheData).data.version) {
+    			$http({
+		            url: api_server + 'valid/version',
+		            method: 'POST',
+		            params: {"cacheKey":url,"cache_id":data.cache_id,"version":JSON.parse(cacheData).data.version},
+//		            cache: true
+		        }).then(function successCallback(res){
+		        	// 如果缓存版本号通过验证 直接返回缓存数据
+		        	if (res.data.start) {
+		        		success(complete(JSON.parse(cacheData)));
+		        	} else {
+		        		postCache(complete,true,url,data);
+		        	}
+		        })
+    	} else {
+    		// 取接口数据并添加到缓存
+	        postCache(complete,true,url,data);
+    	}
+    };
+    
+    var postCache = function (complete,flg,url,data) {
+//  	data.token = getCookie("token");//暂时不加密
+//  	var prmData = {"data":getDes(data)};//暂时不加密
+		var prmData = getDes(data);
+    	$http({
+            url: api_server + url,
+            method: 'POST',
+            data: prmData
+        }).then(success(complete,flg,url,data));
+    }
+    
+    
+    var saveCache = function(url,data,cacheData) {
+		var url_key = app_userinfo.tenantId + "_" + url + "_" + data["cache_id"];
+    	cacheData = JSON.stringify(cacheData);
+//  	localStorage.setItem(url_key,$.base64.encode(cacheData));
+		cacheData = $.base64.encode(escape(cacheData));
+    	localStorage.setItem(url_key,cacheData);
+    }
+    
+    
+    function getDes(data){  
+    	return data;//暂时不加密
+        //待加密字符串  
+//      var str = JSON.stringify(data);  
+//      //第一个参数必须;第二个、第三个参数可选  
+//      var key1 = $.md5(getCookie("token"));    
+//      var key2 = $.md5(getCookie("csc_compid"));   
+//      var key3 = $.md5(getCookie("tenantId"));
+//      //加密方法        
+//      var  enResult = strEnc(str,key1,key2,key3);  
+//      
+//		return enResult;
+
+
+        //解密方法  
+        //var deResult = strDec(enResult,key1,key2,key3);  
+        //展示结果  
+        //document.getElementById("enStr").innerHTML = enResult;   
+        //document.getElementById("dnStr").innerHTML = deResult;   
+    }  
+
+    return factory;
+}]); 
\ No newline at end of file
diff --git a/src/static/js/utils/jquery.base64.min.js b/src/static/js/utils/jquery.base64.min.js
new file mode 100644
index 0000000..2687c41
--- /dev/null
+++ b/src/static/js/utils/jquery.base64.min.js
@@ -0,0 +1 @@
+"use strict";jQuery.base64=(function($){var _PADCHAR="=",_ALPHA="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_VERSION="1.0";function _getbyte64(s,i){var idx=_ALPHA.indexOf(s.charAt(i));if(idx===-1){throw"Cannot decode base64"}return idx}function _decode(s){var pads=0,i,b10,imax=s.length,x=[];s=String(s);if(imax===0){return s}if(imax%4!==0){throw"Cannot decode base64"}if(s.charAt(imax-1)===_PADCHAR){pads=1;if(s.charAt(imax-2)===_PADCHAR){pads=2}imax-=4}for(i=0;i<imax;i+=4){b10=(_getbyte64(s,i)<<18)|(_getbyte64(s,i+1)<<12)|(_getbyte64(s,i+2)<<6)|_getbyte64(s,i+3);x.push(String.fromCharCode(b10>>16,(b10>>8)&255,b10&255))}switch(pads){case 1:b10=(_getbyte64(s,i)<<18)|(_getbyte64(s,i+1)<<12)|(_getbyte64(s,i+2)<<6);x.push(String.fromCharCode(b10>>16,(b10>>8)&255));break;case 2:b10=(_getbyte64(s,i)<<18)|(_getbyte64(s,i+1)<<12);x.push(String.fromCharCode(b10>>16));break}return x.join("")}function _getbyte(s,i){var x=s.charCodeAt(i);if(x>255){throw"INVALID_CHARACTER_ERR: DOM Exception 5"}return x}function _encode(s){if(arguments.length!==1){throw"SyntaxError: exactly one argument required"}s=String(s);var i,b10,x=[],imax=s.length-s.length%3;if(s.length===0){return s}for(i=0;i<imax;i+=3){b10=(_getbyte(s,i)<<16)|(_getbyte(s,i+1)<<8)|_getbyte(s,i+2);x.push(_ALPHA.charAt(b10>>18));x.push(_ALPHA.charAt((b10>>12)&63));x.push(_ALPHA.charAt((b10>>6)&63));x.push(_ALPHA.charAt(b10&63))}switch(s.length-imax){case 1:b10=_getbyte(s,i)<<16;x.push(_ALPHA.charAt(b10>>18)+_ALPHA.charAt((b10>>12)&63)+_PADCHAR+_PADCHAR);break;case 2:b10=(_getbyte(s,i)<<16)|(_getbyte(s,i+1)<<8);x.push(_ALPHA.charAt(b10>>18)+_ALPHA.charAt((b10>>12)&63)+_ALPHA.charAt((b10>>6)&63)+_PADCHAR);break}return x.join("")}return{decode:_decode,encode:_encode,VERSION:_VERSION}}(jQuery));
\ No newline at end of file
diff --git a/src/static/js/utils/jquery.md5.js b/src/static/js/utils/jquery.md5.js
new file mode 100644
index 0000000..5168575
--- /dev/null
+++ b/src/static/js/utils/jquery.md5.js
@@ -0,0 +1,229 @@
+	/**
+	 * jQuery MD5 hash algorithm function
+	 * 
+	 * 	<code>
+	 * 		Calculate the md5 hash of a String 
+	 * 		String $.md5 ( String str )
+	 * 	</code>
+	 * 
+	 * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. 
+	 * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data.
+	 * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1.
+	 * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). 
+	 * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
+	 * 
+	 * Example
+	 * 	Code
+	 * 		<code>
+	 * 			$.md5("I'm Persian."); 
+	 * 		</code>
+	 * 	Result
+	 * 		<code>
+	 * 			"b8c901d0f02223f9761016cfff9d68df"
+	 * 		</code>
+	 * 
+	 * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >
+	 * @link http://www.semnanweb.com/jquery-plugin/md5.html
+	 * @see http://www.webtoolkit.info/
+	 * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
+	 * @param {jQuery} {md5:function(string))
+	 * @return string
+	 */
+	
+	(function($){
+		
+		var rotateLeft = function(lValue, iShiftBits) {
+			return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
+		}
+		
+		var addUnsigned = function(lX, lY) {
+			var lX4, lY4, lX8, lY8, lResult;
+			lX8 = (lX & 0x80000000);
+			lY8 = (lY & 0x80000000);
+			lX4 = (lX & 0x40000000);
+			lY4 = (lY & 0x40000000);
+			lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
+			if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
+			if (lX4 | lY4) {
+				if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
+				else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
+			} else {
+				return (lResult ^ lX8 ^ lY8);
+			}
+		}
+		
+		var F = function(x, y, z) {
+			return (x & y) | ((~ x) & z);
+		}
+		
+		var G = function(x, y, z) {
+			return (x & z) | (y & (~ z));
+		}
+		
+		var H = function(x, y, z) {
+			return (x ^ y ^ z);
+		}
+		
+		var I = function(x, y, z) {
+			return (y ^ (x | (~ z)));
+		}
+		
+		var FF = function(a, b, c, d, x, s, ac) {
+			a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
+			return addUnsigned(rotateLeft(a, s), b);
+		};
+		
+		var GG = function(a, b, c, d, x, s, ac) {
+			a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));
+			return addUnsigned(rotateLeft(a, s), b);
+		};
+		
+		var HH = function(a, b, c, d, x, s, ac) {
+			a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
+			return addUnsigned(rotateLeft(a, s), b);
+		};
+		
+		var II = function(a, b, c, d, x, s, ac) {
+			a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
+			return addUnsigned(rotateLeft(a, s), b);
+		};
+		
+		var convertToWordArray = function(string) {
+			var lWordCount;
+			var lMessageLength = string.length;
+			var lNumberOfWordsTempOne = lMessageLength + 8;
+			var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64;
+			var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16;
+			var lWordArray = Array(lNumberOfWords - 1);
+			var lBytePosition = 0;
+			var lByteCount = 0;
+			while (lByteCount < lMessageLength) {
+				lWordCount = (lByteCount - (lByteCount % 4)) / 4;
+				lBytePosition = (lByteCount % 4) * 8;
+				lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
+				lByteCount++;
+			}
+			lWordCount = (lByteCount - (lByteCount % 4)) / 4;
+			lBytePosition = (lByteCount % 4) * 8;
+			lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
+			lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
+			lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
+			return lWordArray;
+		};
+		
+		var wordToHex = function(lValue) {
+			var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount;
+			for (lCount = 0; lCount <= 3; lCount++) {
+				lByte = (lValue >>> (lCount * 8)) & 255;
+				WordToHexValueTemp = "0" + lByte.toString(16);
+				WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2);
+			}
+			return WordToHexValue;
+		};
+		
+		var uTF8Encode = function(string) {
+			string = string.replace(/\x0d\x0a/g, "\x0a");
+			var output = "";
+			for (var n = 0; n < string.length; n++) {
+				var c = string.charCodeAt(n);
+				if (c < 128) {
+					output += String.fromCharCode(c);
+				} else if ((c > 127) && (c < 2048)) {
+					output += String.fromCharCode((c >> 6) | 192);
+					output += String.fromCharCode((c & 63) | 128);
+				} else {
+					output += String.fromCharCode((c >> 12) | 224);
+					output += String.fromCharCode(((c >> 6) & 63) | 128);
+					output += String.fromCharCode((c & 63) | 128);
+				}
+			}
+			return output;
+		};
+		
+		$.extend({
+			md5: function(string) {
+				var x = Array();
+				var k, AA, BB, CC, DD, a, b, c, d;
+				var S11=7, S12=12, S13=17, S14=22;
+				var S21=5, S22=9 , S23=14, S24=20;
+				var S31=4, S32=11, S33=16, S34=23;
+				var S41=6, S42=10, S43=15, S44=21;
+				string = uTF8Encode(string);
+				x = convertToWordArray(string);
+				a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
+				for (k = 0; k < x.length; k += 16) {
+					AA = a; BB = b; CC = c; DD = d;
+					a = FF(a, b, c, d, x[k+0],  S11, 0xD76AA478);
+					d = FF(d, a, b, c, x[k+1],  S12, 0xE8C7B756);
+					c = FF(c, d, a, b, x[k+2],  S13, 0x242070DB);
+					b = FF(b, c, d, a, x[k+3],  S14, 0xC1BDCEEE);
+					a = FF(a, b, c, d, x[k+4],  S11, 0xF57C0FAF);
+					d = FF(d, a, b, c, x[k+5],  S12, 0x4787C62A);
+					c = FF(c, d, a, b, x[k+6],  S13, 0xA8304613);
+					b = FF(b, c, d, a, x[k+7],  S14, 0xFD469501);
+					a = FF(a, b, c, d, x[k+8],  S11, 0x698098D8);
+					d = FF(d, a, b, c, x[k+9],  S12, 0x8B44F7AF);
+					c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1);
+					b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE);
+					a = FF(a, b, c, d, x[k+12], S11, 0x6B901122);
+					d = FF(d, a, b, c, x[k+13], S12, 0xFD987193);
+					c = FF(c, d, a, b, x[k+14], S13, 0xA679438E);
+					b = FF(b, c, d, a, x[k+15], S14, 0x49B40821);
+					a = GG(a, b, c, d, x[k+1],  S21, 0xF61E2562);
+					d = GG(d, a, b, c, x[k+6],  S22, 0xC040B340);
+					c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51);
+					b = GG(b, c, d, a, x[k+0],  S24, 0xE9B6C7AA);
+					a = GG(a, b, c, d, x[k+5],  S21, 0xD62F105D);
+					d = GG(d, a, b, c, x[k+10], S22, 0x2441453);
+					c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681);
+					b = GG(b, c, d, a, x[k+4],  S24, 0xE7D3FBC8);
+					a = GG(a, b, c, d, x[k+9],  S21, 0x21E1CDE6);
+					d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6);
+					c = GG(c, d, a, b, x[k+3],  S23, 0xF4D50D87);
+					b = GG(b, c, d, a, x[k+8],  S24, 0x455A14ED);
+					a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905);
+					d = GG(d, a, b, c, x[k+2],  S22, 0xFCEFA3F8);
+					c = GG(c, d, a, b, x[k+7],  S23, 0x676F02D9);
+					b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A);
+					a = HH(a, b, c, d, x[k+5],  S31, 0xFFFA3942);
+					d = HH(d, a, b, c, x[k+8],  S32, 0x8771F681);
+					c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122);
+					b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C);
+					a = HH(a, b, c, d, x[k+1],  S31, 0xA4BEEA44);
+					d = HH(d, a, b, c, x[k+4],  S32, 0x4BDECFA9);
+					c = HH(c, d, a, b, x[k+7],  S33, 0xF6BB4B60);
+					b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70);
+					a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6);
+					d = HH(d, a, b, c, x[k+0],  S32, 0xEAA127FA);
+					c = HH(c, d, a, b, x[k+3],  S33, 0xD4EF3085);
+					b = HH(b, c, d, a, x[k+6],  S34, 0x4881D05);
+					a = HH(a, b, c, d, x[k+9],  S31, 0xD9D4D039);
+					d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5);
+					c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8);
+					b = HH(b, c, d, a, x[k+2],  S34, 0xC4AC5665);
+					a = II(a, b, c, d, x[k+0],  S41, 0xF4292244);
+					d = II(d, a, b, c, x[k+7],  S42, 0x432AFF97);
+					c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7);
+					b = II(b, c, d, a, x[k+5],  S44, 0xFC93A039);
+					a = II(a, b, c, d, x[k+12], S41, 0x655B59C3);
+					d = II(d, a, b, c, x[k+3],  S42, 0x8F0CCC92);
+					c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D);
+					b = II(b, c, d, a, x[k+1],  S44, 0x85845DD1);
+					a = II(a, b, c, d, x[k+8],  S41, 0x6FA87E4F);
+					d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0);
+					c = II(c, d, a, b, x[k+6],  S43, 0xA3014314);
+					b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1);
+					a = II(a, b, c, d, x[k+4],  S41, 0xF7537E82);
+					d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235);
+					c = II(c, d, a, b, x[k+2],  S43, 0x2AD7D2BB);
+					b = II(b, c, d, a, x[k+9],  S44, 0xEB86D391);
+					a = addUnsigned(a, AA);
+					b = addUnsigned(b, BB);
+					c = addUnsigned(c, CC);
+					d = addUnsigned(d, DD);
+				}
+				var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
+				return tempValue.toLowerCase();
+			}
+		});
+	})(jQuery);
\ No newline at end of file
diff --git a/src/static/js/utils/uuid.js b/src/static/js/utils/uuid.js
new file mode 100644
index 0000000..67ab9f7
--- /dev/null
+++ b/src/static/js/utils/uuid.js
@@ -0,0 +1,109 @@
+(function () {
+    var isNode = typeof module !== 'undefined' &&
+            typeof module.exports !== 'undefined',
+        _;
+    if (isNode) {
+        _ = require('lodash').runInContext();
+    }
+    else {
+        // browser environment
+        _ = window._;
+    }
+
+    var mixins = (function () {
+        var extendWith = {};
+
+        /**
+         * _.uuid
+         *
+         * Usage:
+         *    _.uuid()
+         * Produces:
+         *    '9716498c-45df-47d2-8099-3f678446d776'
+         *
+         * Generates an RFC 4122 version 4 uuid
+         * @see http://stackoverflow.com/a/8809472
+         * @returns {String} the generated uuid
+         */
+        extendWith.uuid = function () {
+            var d = _.now();
+            return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+                var r = (d + _.random(16)) % 16 | 0;
+                d = Math.floor(d / 16);
+                return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
+            });
+        };
+
+        /**
+         * _.isUuid4
+         *
+         * Usage:
+         *    _.isUuid4(_.uuid())
+         * Produces:
+         *    true|false
+         *
+         * Validates a version 4 uuid string
+         * @param {String} uuid - the uuid under test
+         * @returns {Boolean} true if the uuid under test is a valid uuid
+         **/
+        extendWith.isUuid4 = function (uuid) {
+            var re = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
+            return re.test(uuid);
+        };
+
+        /**
+         * _.isUuid
+         *
+         * Usage:
+         *    _.isUuid(_.uuid())
+         * Produces:
+         *    true|false
+         *
+         * Validates any version uuid string
+         * @param {String} uuid - the uuid under test
+         * @returns {Boolean} true if the uuid under test is a valid uuid
+         **/
+        extendWith.isUuid = function (uuid) {
+            var re = /^([a-f\d]{8}(-[a-f\d]{4}){3}-[a-f\d]{12}?)$/i;
+            return re.test(uuid);
+        };
+
+        /**
+         * _.compactObject
+         *
+         * Usage:
+         *    var obj = {a: false, b: 3, c: ''};
+         *    _.compactObject(obj)
+         * Produces:
+         *    {b: 3}
+         *
+         * Removes properties from an object where the value is falsy.
+         * Like _.compact but for objects
+         * @param {Object} obj - the object to remove falsy properties from
+         * @returns {Object} the object with falsy properties removed
+         **/
+
+        return extendWith;
+    })();
+
+    /**
+     * bootstrap mixins for node and the browser
+     * For the browser: lodash must be explicitly included above
+     *    this library
+     * For node: this library will wrap lodash so there is no
+     *    need to include lodash
+     */
+    if (isNode) {
+        _.mixin(mixins, {'chain': true});
+        module.exports = _;
+    }
+    else {
+        // browser environment
+        if (typeof _ === 'function') {
+            _.mixin(mixins, {'chain': true});
+        }
+        else {
+            throw new Error('lodash must be included before lodash-extensions.');
+        }
+    }
+})();
\ No newline at end of file
diff --git a/src/static/js/work_flow/module.js b/src/static/js/work_flow/module.js
new file mode 100644
index 0000000..e023d42
--- /dev/null
+++ b/src/static/js/work_flow/module.js
@@ -0,0 +1,276 @@
+angular.module('work_flow_module', [])
+.controller('workflowCtrl',['http_service','$scope','$timeout',function(http_service,$scope,$timeout){
+		$scope.buDefFlag = false;//初始化配置流程、部署按钮  禁用状态
+		$scope.apDefFlag = false;
+		$scope.exDefFlag = false;
+		$scope.buDef_bushuFlag = false;
+		$scope.apDef_bushuFlag = false;
+		$scope.exDef_bushuFlag = false;
+		//保存ip
+		$scope.webip = work_flow_url;
+		//流程引擎 修改  11-27
+		function getCookie(cname) {
+			var name = cname + "=";
+			var ca = document.cookie.split(';');
+			for(var i = 0; i < ca.length; i++) {
+				var c = ca[i].trim();
+				if(c.indexOf(name) == 0) return c.substring(name.length, c.length);
+			}
+			return "";
+		}
+		
+//		$scope.openId = app_userinfo.openId;
+		$scope.tenantId  = getCookie("tenantId");
+		$scope.companyId = getCookie("companyRowId");
+//		$scope.companyId = 17;
+		$scope.appId = appId;
+		$scope.token  = getCookie("token");
+		//流程引擎 修改  11-27
+		//加载JS
+		function add_js(info,callback){
+//			var otherJScipt = document.createElement("script"); 
+//			otherJScipt.setAttribute("type", "text/javascript"); 
+//			otherJScipt.setAttribute("src", work_flow_url+"workspace/travel-info-min.js?info="+info); 
+//			document.getElementsByTagName("head")[0].appendChild(otherJScipt);
+//			otherJScipt.onload = function(){
+				callback();
+//			}
+//			$("<script>").attr({type:"text/javascript",src:work_flow_url+"workspace/travel-info-min.js?info="+info}).appendTo("head").onload= function(){
+//				callback();
+//			}
+			
+			
+		}
+			//创建流程定义之后查询
+			
+		$scope.createflow= function(type){
+			switch (type){
+				case 10:
+					$scope.workflow_flag = $scope.budget_flag;
+					if($scope.buDefFlag == false){
+						return false;
+					}
+					break;
+				case 20:
+					$scope.workflow_flag = $scope.apply_flag;
+					if($scope.apDefFlag == false){
+						return false;
+					}
+					break;
+				case 30:
+					$scope.workflow_flag = $scope.expend_flag;
+					if($scope.exDefFlag == false){
+						return false;
+					}
+					break;
+				}
+			if($scope.workflow_flag){
+				switch (type){
+				case 10:
+					$scope.workflow_url_now = $scope.workflow_url_budget;
+					break;
+				case 20:
+					$scope.workflow_url_now = $scope.workflow_url_apply;
+					break;
+				case 30:
+					$scope.workflow_url_now = $scope.workflow_url_expend;
+					break;
+				}
+				http_service.post('workflow/userInfo',{},function(res){
+					var info = res.data.data; 
+					add_js(info,function(){
+						$scope.skip($scope.workflow_url_now);
+					})
+//					$("<script>").attr({type:"text/javascript",src:work_flow_url+"workspace/travel-info-min.js?info="+info}).appendTo("head");
+					
+				})
+			}else{
+				switch (type){
+				case 10:
+					$scope.createurl = 'flow/budget/';
+					$scope.btnclass = ".budgetbtn";
+					break;
+				case 20:
+					$scope.createurl = 'flow/apply/';
+					$scope.btnclass = ".applybtn";
+					break;
+				case 30:
+					$scope.createurl = 'flow/expend/';
+					$scope.btnclass = ".expendbtn";
+					break;
+				}
+				http_service.post($scope.createurl+'create',{},function(response){
+					if(response.data.opState == false){// 流程定义创建失败 不可跳转工作流  李伟民12-30
+						$scope.$parent.terro('流程定义创建失败。')
+						return false;
+					}
+					$scope.id = response.data.data;
+					//修改流程定义,弹出子窗口
+					$scope.workflow_url_now = $scope.webip+"#/Iframe?token="+ $scope.token +"&openId="+ app_userinfo.openId +"&tenantId="+ $scope.tenantId +"&companyId="+ $scope.companyId +"&appId="+$scope.appId+"&processDefId="+$scope.id;
+//					$scope.workflow_url_now = $scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.id+'&author=&editType=custom&mdfState=9'
+					$scope.searchbuget();
+					http_service.post('workflow/userInfo',{},function(res){
+						var info = res.data.data;  
+						add_js(info,function(){
+							$scope.skip($scope.workflow_url_now);
+						})
+//						$("<script>").attr({type:"text/javascript",src:work_flow_url+"workspace/travel-info-min.js?info="+info}).appendTo("head");
+//						$scope.skip($scope.workflow_url_now);
+					})
+				});	
+					
+			}
+		}
+		
+		$scope.skip =function(url){
+			var openLink = window.open("_blank");
+			openLink.location = url;
+		}
+		
+		$scope.searchbuget = function(){
+			$scope.buDefFlag = false;//初始化配置流程、部署按钮  禁用状态
+			$scope.apDefFlag = false;
+			$scope.exDefFlag = false;
+			$scope.buDef_bushuFlag = false;
+			$scope.apDef_bushuFlag = false;
+			$scope.exDef_bushuFlag = false;
+			//查询预算流程定义
+			http_service.post('flow/budget/defInfo',{},function(response){
+				//若没有流程
+				if(!response.data.data){
+					$scope.budgetcreateflag = "未定义";
+					$scope.bconfigflag = false;
+					$scope.budgetcolor = "orange";
+					$scope.budget_flag = false;
+					$scope.buDefFlag = true;//未定义可配置流程  不可部署
+//					$scope.configbudget(10,false);
+				}else{
+					$scope.buDefFlag = true;//已定义可配置流程  也可部署
+					$scope.buDef_bushuFlag = true;
+					$scope.budget_flag = true;
+					$scope.budgetcreateflag = "使用中";
+					$scope.budgetcolor = "green";
+					$scope.bconfigflag = true;
+					//流程定义id
+					$scope.budgetflowid = response.data.data.flBizDefId;
+					$scope.skipbudgetid = response.data.data.flDefId;
+					//是否可提交
+					$scope.commitflag = response.data.data.update;
+					$scope.bname = response.data.data.flDefName;
+					//修改流程定义,弹出子窗口
+					$scope.workflow_url_budget = $scope.webip+"#/Iframe?token="+ $scope.token +"&openId="+ app_userinfo.openId +"&tenantId="+ $scope.tenantId +"&companyId="+ $scope.companyId +"&appId="+$scope.appId+"&processDefId="+$scope.budgetflowid;
+//					$scope.workflow_url_budget = $scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.budgetflowid+'&author=&editType=custom&mdfState=9';
+//						$scope.configbudget(10,true,workflow_url_budget);
+//					$(".budgetbtn").attr('href',$scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.budgetflowid+
+//						'&author=&editType=custom&mdfState=9');
+					//预算部署
+					$scope.configb = function(){
+						if($scope.buDef_bushuFlag == false){
+							return false;
+						}
+						http_service.post('flow/budget/submit/def',{'processDefName':$scope.bname,'processDefID':$scope.skipbudgetid},function(response){
+							if(response.data.opState){
+								$scope.$parent.tsuccess("预算流程部署成功")
+							}else{
+								$scope.$parent.terro( response.data.errMsg)
+							}
+						})
+					}
+				}
+			})
+			
+			//查询申请流程定义
+		http_service.post('flow/apply/defInfo',{},function(response){
+			if(!response.data.data){
+				$scope.applycreateflag = "未定义";
+				$scope.applycolor = "orange";
+				$scope.aconfigflag = false;
+				$scope.apply_flag = false;
+				$scope.apDefFlag = true;//未定义可配置流程  不可部署
+//				$scope.configapply = function(){
+//					$scope.createflow(20);
+//				}
+			}else{
+				$scope.apDefFlag = true;//已定义可配置流程  也可部署
+				$scope.apDef_bushuFlag = true;
+				$scope.apply_flag = true;
+				$scope.applycreateflag = "使用中";
+				$scope.aconfigflag = true;
+				$scope.applycolor = "green";
+				//流程定义id
+				$scope.applyflowid = response.data.data.flBizDefId;
+				$scope.skipapplyid = response.data.data.flDefId;
+				//是否可提交
+				$scope.commitflag = response.data.data.update;
+				$scope.aname = response.data.data.flDefName;
+				//修改流程定义,弹出子窗口
+				$scope.workflow_url_apply = $scope.webip+"#/Iframe?token="+ $scope.token +"&openId="+ app_userinfo.openId +"&tenantId="+ $scope.tenantId +"&companyId="+ $scope.companyId +"&appId="+$scope.appId+"&processDefId="+$scope.applyflowid;
+//				$scope.workflow_url_apply = $scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.applyflowid+'&author=&editType=custom&mdfState=9';
+//				$(".applybtn").attr('href',$scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.applyflowid+
+//					'&author=&editType=custom&mdfState=9');
+				//申请部署
+				$scope.configa = function(){
+					if($scope.apDef_bushuFlag == false){
+							return false;
+						}
+					http_service.post('flow/apply/submit/def',{'processDefName':$scope.aname,'processDefID':$scope.skipapplyid},function(response){
+						if(response.data.opState){
+							$scope.$parent.tsuccess("申请流程部署成功!")
+						}else{
+						$scope.$parent.terro(response.data.errMsg)
+						}
+					})
+				}
+			}
+		})
+		
+		
+		//查询报销流程定义
+		http_service.post('flow/expend/defInfo',{},function(response){
+			if(!response.data.data){
+				$scope.expendcreateflag = "未定义";
+				$scope.econfigflag = false;
+				$scope.expendcolor = "orange";
+				$scope.expend_flag = false;
+				$scope.exDefFlag = true;//未定义可配置流程  不可部署
+//				$scope.configexpend = function(){
+//					$scope.createflow(30);
+//				}
+			}else{
+				$scope.exDefFlag = true;//已定义可配置流程  也可部署
+				$scope.exDef_bushuFlag = true;
+				$scope.expend_flag = true;
+				$scope.expendcreateflag = "使用中";
+				$scope.expendcolor = "green";
+				$scope.econfigflag = true;
+				//流程定义id
+				$scope.expendflowid = response.data.data.flBizDefId;
+				$scope.skipexpendid = response.data.data.flDefId;
+				//是否可提交
+				$scope.commitflag = response.data.data.update;
+				$scope.ename = response.data.data.flDefName;
+				//修改流程定义,弹出子窗口
+				$scope.workflow_url_expend = $scope.webip+"#/Iframe?token="+ $scope.token +"&openId="+ app_userinfo.openId +"&tenantId="+ $scope.tenantId +"&companyId="+ $scope.companyId +"&appId="+$scope.appId+"&processDefId="+$scope.expendflowid;
+//				$scope.workflow_url_expend = $scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.expendflowid+'&author=&editType=custom&mdfState=9';
+//				$(".expendbtn").attr('href',$scope.webip+'workspace/workflow/bps_composer/flex/bizProcessCustomDg.jsp?hasForm=false&locale=zh_CN&processDefID='+$scope.expendflowid+
+//					'&author=&editType=custom&mdfState=9');
+				//报销部署
+				$scope.confige = function(){
+					if($scope.exDef_bushuFlag == false){
+							return false;
+						}
+					http_service.post('flow/expend/submit/def',{'processDefName':$scope.ename,'processDefID':$scope.skipexpendid},function(response){
+						if(response.data.opState){
+							$scope.$parent.tsuccess('报销流程部署成功。')
+						}else{
+						$scope.$parent.terro(response.data.errMsg)
+						}
+					})
+				}
+			}
+		})
+		}
+		
+		$scope.searchbuget();
+}])
+			 
diff --git a/src/static/sonar-project.json b/src/static/sonar-project.json
new file mode 100644
index 0000000..3268865
--- /dev/null
+++ b/src/static/sonar-project.json
@@ -0,0 +1,17 @@
+
+# must be unique in a given SonarQube instance
+sonar.projectKey=my:travel-js
+# this is the name displayed in the SonarQube UI
+sonar.projectName=travel-js
+sonar.projectVersion=1.0
+ 
+# Path is relative to the sonar-project.properties file. Replace "/" by "/" on Windows.
+# Since SonarQube 4.2, this property is optional if sonar.modules is set. 
+# If not set, SonarQube starts looking for source code from the directory containing 
+# the sonar-project.properties file.
+sonar.sources=F:/JSChangHong/item-iem
+
+sonar.language=js
+ 
+# Encoding of the source code. Default is default system encoding
+sonar.sourceEncoding=UTF-8
\ No newline at end of file
diff --git a/src/static/templates/apply_select.html b/src/static/templates/apply_select.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/static/templates/apply_select.html
diff --git a/src/static/templates/bill_create_popup.html b/src/static/templates/bill_create_popup.html
new file mode 100644
index 0000000..7624ea0
--- /dev/null
+++ b/src/static/templates/bill_create_popup.html
@@ -0,0 +1,42 @@
+<div class="bg-modal bill_create_pop">
+    <div class="pop_panel" ng-drop="true" ng-drag="$root.drag_flag" ng-mousedown="$root.drag_div($event)" ng-drag-start="$root.draging()" ng-drag-stop="$root.drag_div_end()" id="create_order">
+        <div class="heading creat_bill_heading"	>
+            {{type==10?"预算单":""}}
+            {{type==20?"申请单":""}}
+            {{type==30?"报销单":""}}
+            <div class="close close_create" ng-click="cancel()">
+                <img src="./static/img/close.png">
+            </div>
+        </div>
+        <div class="body">
+        	<div class="order_number" style="position: absolute;" ng-if="exCouldNumber != undefined"><span ng-if="type == 30">云单编</span>号:{{exCouldNumber}}</div>
+        	<div class="paper_upload" ng-if="type==30 && $root.permission_check('bill_commit_create')">
+        		<a ng-href="javascript:void(0);" ng-click="show_iframe();">
+				<img src="./static/img/update.png" title="票据上传" /> 票据上传
+				</a>
+        	</div>
+        	<div class="paper_iframe" ng-if="type==30 && iframe_show">
+        		<div class="paper_iframe_nav">
+	        		<span>
+	        			 票据上传
+	        		</span>
+					<div class="close" ng-click="close_iframe()">
+		                <img src="./static/img/close.png">
+		            </div>
+        		</div>
+        		<iframe id="iframeId" style="width: 100%;overflow: auto;" name='myiframe' ng-init="show_iframe()" ng-src='{{iframe_src}}'></iframe>
+        	</div>
+            <div class="form_container" style="padding-top:0px;">
+                <div saved-form type="type" isbill='false' edit="edit" btnflag="true"><!-- ng-show="classifypart"</div>-->
+            </div>
+            <div ng-if="type == 30" style="float: right;">
+			<!--<span>创建时间:  {{createtime}} </span>
+			<span>订单状态:  {{orderstatus}}</span>-->
+	</div>
+	        <div class="row btn-zone-center" style="padding-left:25px;">
+	            <button class="btn btn-success btn-favourite " ng-disabled="!save_btn_flag" ng-click="create_bill()" id="savebtn">保存</button>
+	            <button class="btn btn-success btn-favourite " ng-click="cancel();" id="cancelbtn">取消</button>
+	        </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/billing_cfg_guide.html b/src/static/templates/billing_cfg_guide.html
new file mode 100644
index 0000000..8b19718
--- /dev/null
+++ b/src/static/templates/billing_cfg_guide.html
@@ -0,0 +1,168 @@
+<title>
+    {{step==1?'预算向导':''}}
+    {{step==2?'申请向导':''}}
+    {{step==3?'报销向导':''}}
+    {{step==4?'报销标准向导页':''}}
+    {{step==5?'系统设置向导页':''}}
+    {{step==6?'工作流配置向导页':''}}
+    {{step==7?'云报销配置向导':''}}
+</title>
+<div class="content">
+    <h1>云报销配置向导</h1>
+    <br>
+    <div ng-show="step == 1">
+        <label class="text_label">选择式设计一款符合您公司业务的预算单,如果不需要预算单请跳过.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+                <div class="col-md-6">
+                    <a ng-click="redirect_to_budget_forms('/budget_froms/', business, '10')" ng-href="javascript:void(0);">
+                        <img src="./static/img/budget_settings_guid.jpg">
+                        <p><label>设置预算单</label></p>
+                    </a>
+                </div>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '2')">
+                        <img src="./static/img/next_step.jpg">
+                        <p><label>跳过</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to('/business')">上一步</button>
+    </div>
+
+    <div ng-show="step == 2">
+        <label class="text_label">选择式设计一款符合您公司业务的申请单,如果不需申请单请跳过.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+                <div class="col-md-6">
+                    <a ng-click="redirect_to_budget_forms('/budget_froms/', business, '20')" ng-href="javascript:void(0);">
+                        <img src="./static/img/request_billing_setting_guid.jpg">
+                        <p><label>设置申请单</label></p>
+                    </a>
+                </div>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '3')">
+                        <img src="./static/img/next_step.jpg">
+                        <p><label>跳过</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '1')">上一步</button>
+    </div>
+
+    <div ng-show="step == 3">
+        <label class="text_label">选择式设计一款符合您公司业务的报销单,如果不需报销单请跳过.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+                <div class="col-md-6">
+                    <a ng-click="redirect_to_budget_forms('/budget_froms/', business, '30')" ng-href="javascript:void(0);">
+                        <img src="./static/img/reimbursement_settings_guid.jpg">
+                        <p><label>设置报销单</label></p>
+                    </a>
+                </div>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '4')">
+                        <img src="./static/img/next_step.jpg">
+                        <p><label>稍后设置</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '2')">上一步</button>
+    </div>
+
+    <div ng-show="step == 4">
+        <label class="text_label">选择式设计一款符合您公司业务的补助标准,如果不需申补助标准请跳过.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+                <div class="col-md-6">
+                    <a ng-click="redirect_to('/expend_standard')" ng-href="javascript:void(0);">
+                        <img src="./static/img/reimbursement_standard_settings_guid.jpg">
+                        <p><label>报销标准</label></p>
+                    </a>
+                </div>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '5')">
+                        <img src="./static/img/next_step.jpg">
+                        <p><label>稍后设置</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '3')">上一步</button>
+    </div>
+    
+    <div ng-show="step == 5">
+        <label class="text_label">选择式设计一款符合您公司业务的系统设置,如果不需系统设置请跳过.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+                <a ng-href="javascript:void(0);" ng-click="redirect_to('/system_config');">
+                <div class="col-md-6">
+                    <img src="./static/img/system_settings.jpg">
+                    <p><label>系统设置</label></p>
+                </div>
+                </a>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '6')">
+                        <img src="./static/img/next_step.jpg">
+                        <p><label>跳过</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '4')">上一步</button>
+    </div>
+
+    <div ng-show="step == 6">
+        <label class="text_label">选择式设计一款符合您公司业务的系统设置,如果不需系统设置请跳过.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+            	<a ng-href="javascript:void(0);" ng-click="redirect_to('/work_flow');">
+                <div class="col-md-6">
+                    <img src="./static/img/workflowing_settins_guid.png">
+                    <p><label>工作流配置</label></p>
+                </div>
+                </a>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '7')">
+                        <img src="./static/img/next_step.jpg">
+                        <p><label>跳过</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '5')">上一步</button>
+    </div>
+
+    <div ng-show="step == 7">
+        <label class="text_label">下一秒您就会拥有属于自己的报销云平台.</label>
+        <br><br>
+        <div class="container">
+            <ul class="wizard_content">
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0)" ng-click="redirect_to('/cfg_center/');">
+                    <img src="./static/img/edit_saved_templates.jpg">
+                    <p><label>编辑已有模板</label></p>
+                    </a>
+                </div>
+                <div class="col-md-6">
+                    <a ng-href="javascript:void(0);" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '8')">
+                    <!--<a ng-href="javascript:void(0);" ng-click="redirect_to('/travel_expense_todos');">-->
+                        <img src="./static/img/system_entry.jpg">
+                        <p><label>进入云报销系统</label></p>
+                    </a>
+                </div>
+            </ul>
+        </div>
+        <button class="btn btn-success btn-favourite" ng-click="redirect_to_billing_cfg_guide('/billing_cfg_guide/', business, '6')">上一步</button>
+    </div>
+    
+</div>
\ No newline at end of file
diff --git a/src/static/templates/budget_form_customize.html b/src/static/templates/budget_form_customize.html
new file mode 100644
index 0000000..43ba6fb
--- /dev/null
+++ b/src/static/templates/budget_form_customize.html
@@ -0,0 +1,55 @@
+<div class="split_form" id="split_form">
+    <div class="main" style="padding-top:42px;">
+        <div class="row " style="margin-top:-41px;">
+            <div class="col-md-7 bill_name" >
+                <input 
+                    type="text" 
+                    class="inputunderline"
+                    placeholder=" 表单名称" 
+                    maxlength=50
+                    ng-model="guTempName"
+                />
+            </div>
+            <div class="col-md-3" >
+            	<!--
+                <textarea 
+                    style="float:left;margin-left:5px;height:35px;width:100%;"
+                    ng-model="guTempDisc"
+                >
+                </textarea>
+               -->
+            </div>
+            <div class="col-md-2">
+                <button 
+                    class="btn btn-success btn-favourite" 
+                    style="float:right;margin-bottom:2px;margin-right:5px;"
+                    ng-click="create_forms();"
+                    id="save_create_form"
+                    ng-show="permission_check('save',1)"
+                    >
+                    保存
+                </button>
+            </div>
+        </div>
+        <div class="el_form">
+
+        </div>
+    </div>
+    <div class="left" style="position:fixed;margin: 0;">
+        <h6>基础字段</h6>
+        <hr/>
+    </div>
+    <div class="right" style="position: relative;">
+        <h6>控件属性</h6>
+        <hr/>
+        <div name="el_attr_editor_container">
+            <div 
+                frm-element-attr-editor
+                element="element" 
+                data="data" 
+                type="type"
+            ></div>
+        </div>
+        
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/budget_forms.html b/src/static/templates/budget_forms.html
new file mode 100644
index 0000000..f13ea57
--- /dev/null
+++ b/src/static/templates/budget_forms.html
@@ -0,0 +1,87 @@
+<title>
+    {{type==10?'预算单向导配置页':''}}
+    {{type==20?'申请单向导配置页':''}}
+    {{type==30?'报销单向导配置页':''}}
+</title>
+<div class="split_form">
+    <div class="main"style="padding-left:230px;padding-right:0px;"> <!--position:relative;overflow-x:hidden-->
+        <div class="form_container">
+        </div>
+         <!--<div  style="width: 100%;height: 100%;position: fixed;top:0;z-index:9;">
+		</div>-->
+    </div>
+    <div class="left" style="width:230px;">
+        <ul class="ul-tree forms_editor">
+            <li class="forms_list" ng-if="!isShow">
+                <img src="./static/img/create_form.png" class="small" >
+                <a 
+                    ng-if="type==10"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to_args('/budget_form_customize', type ,business)"
+                >
+                使用空白的预算单
+                </a>
+                <a 
+                    ng-if="type==20"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to_args('/budget_form_customize', type, business)"
+                >
+                使用空白的申请单
+                </a>
+                <a 
+                    ng-if="type==30"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to_args('/budget_form_customize', type, business)"
+                >
+                使用空白的报销单
+                </a>
+            </li>
+            <li ng-show="permission_check('myform',1)" class="forms_list" ng-if="isShow">
+                <img src="./static/img/form_created.png" >
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-if="type==10" 
+                    ng-click="show_saved_form(business,type, 1)"
+                >
+                    我创建的预算单
+                </a>
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-if="type==20" 
+                    ng-click="show_saved_form(business, type,1)"
+                >
+                    我创建的申请单
+                </a>
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-if="type==30" 
+                    ng-click="show_saved_form(business, type,1)"
+                >
+                   	 我创建的报销单
+                </a>
+            </li>
+            <li ng-show="permission_check('bussiness',1)" class="forms_list">
+                <a ng-href="javascript:void(0);" ng-click="indus_templates_collpase = !indus_templates_collpase">
+                    <img src="./static/img/form_default.png" >
+                    <span ng-if="type==10" ng-click="searchtemplate(1)" id="bussiness_budget">
+                        行业精选预算单
+                    </span>
+                    <span ng-if="type==20" ng-click="searchtemplate(2)" id="bussiness_apply">
+              行业精选申请单
+                    </span>
+                    <span ng-if="type==30" ng-click="searchtemplate(3)" id="bussiness_expend">
+                        行业精选报销单
+                    </span>
+                </a>
+                <ul ng-if="!indus_templates_collpase">
+                    <li ng-repeat="template in indus_templates">
+                        <img src="./static/img/page.png" >
+                        <a ng-href="javascript:void(0);" ng-click="show_saved_form(business, type, 2, template.guId)">
+                            {{template.guTempName}}
+                        </a>
+                    </li>
+                </ul>
+            </li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/business.html b/src/static/templates/business.html
new file mode 100644
index 0000000..ab78aeb
--- /dev/null
+++ b/src/static/templates/business.html
@@ -0,0 +1,38 @@
+<title>选择行业</title>
+<div class="content">
+    <h1>请选择您公司的行业</h1>
+    <br>
+    <label class="text_label">我们会按照您所选择的行业快速匹配适合您的报销管理平台</label>
+    <br><br>
+    <div class="container">
+        <!--num表循环个数示-->
+        <ul class="business_items" ng-init="num=7">
+            <li ng-repeat="business in business_list | limitTo:num">
+                <div 
+                    ng-mouseenter="mouseover_business_item($event)"
+                    ng-mouseleave="mouseout_business_item($event)"
+                    ng-click="redirect_to_billing_cfg_guide(business.inCode);"
+                >
+                    <label>{{business.inName}}</label>
+                    <ul >
+                        <li style="font-size:12px;">
+                           {{business.inDesc}}
+                        </li>
+                    </ul>
+                    <img src="travel-web\{{business.inBigIcon}}" />
+                    <span>{{business.inName}}</span>
+                </div>
+            </li>
+            <!--加入更多-->
+            <li>
+                <!--点击时判断num的数量并进行切换-->
+                <a ng-href="javascript:void(0);" ng-click="show_more();num=num==Number.POSITIVE_INFINITY?7:Number.POSITIVE_INFINITY">
+                    <img src="./static/img/more_collapse.png" />
+                    <label class="bottom_label"> &nbsp;&nbsp;&nbsp;{{business_card_shown?'返回':'更多'}}</label>
+                </a>
+            </li>
+          
+        </ul>
+    </div>
+    <button class="btn btn-success btn-favourite" ng-click="redirect_to('/guide')">上一步</button>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/city.html b/src/static/templates/city.html
new file mode 100644
index 0000000..9ef277b
--- /dev/null
+++ b/src/static/templates/city.html
@@ -0,0 +1,37 @@
+<title>选择城市</title>
+<div id="citycontent">
+	<div class="topsection">
+		<p style="border: none;">选择城市</p>
+		<div id="searchdiv">
+			<input type="text" id="search"  ng-model="somecity"/>
+			<i class="fa fa-search search" aria-hidden="true"></i>
+		</div>
+		<button class="button" ng-click="savecity()">保存</button>
+		<img src="static/img/close.png" ng-click="hidecity()"/>
+	</div>
+	<div class="selectedcity"  gcColName="{{item.gcColName}}" selected_city="{{citycode.join(',')}}">
+		<p style="border: none;">已选城市</p>
+		<span ng-repeat="selectedcity in cityList">{{selectedcity}}<span class="deletecity" ng-click="deletecity($index)">×</span></span>
+	</div>
+	<div class="showcity">
+
+		<div class="leftsection">
+			<ul>
+				<li class="hot">热门城市</li>
+				<li ng-repeat="province in provinces" ng-click="selecthot($index)">{{province.value}}</li>
+			</ul>
+		</div>
+		<div class="rightsection">
+			<div class="classcity">
+				<a href="javascript:void(0)" class="firstcity" ng-click="firstcity()">一级城市</a>
+				<a href="javascript:void(0)" class="secondcity" ng-click="secondcity()">二级城市</a>
+				<a href="javascript:void(0)" class="thirdcity" ng-click="thirdcity()">三级城市</a>
+			</div>
+			<span class="citycontent" ng-repeat="city in citys track by $index"> 
+				<input type="checkbox" name="city.value" id="city.value" ng-checked="{{city.value|cityfilter:cityList}}" ng-click="selectcity($event,$index)"/> 
+				<span>{{city.value}}</span>
+			</span>
+
+		</div>
+	</div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/config_center.html b/src/static/templates/config_center.html
new file mode 100644
index 0000000..dac7616
--- /dev/null
+++ b/src/static/templates/config_center.html
@@ -0,0 +1,67 @@
+<title>配置中心</title>
+<div id="config">
+<div class="content">
+    <div class="container form">
+        <ul class="business_items cfg_items">
+            <li ng-if="permission_check('budget_template') && $root.budget_open == 1">
+                <div hover-card ng-click="redirect_to('/budget_froms/10');" id="budget_template">
+                    <label>这里是您想要的预算单模板.</label>
+                    <img src="./static/img/cfg_center_1.png" />
+                </div>
+            </li>
+            <li ng-if="permission_check('apply_template') && $root.apply_open == 1">
+                <div hover-card ng-click="redirect_to('/budget_froms/20');" id="apply_template">
+                    <label>这里是您想要的申请单模板.</label>
+                    <img src="./static/img/cfg_center_2.png" />
+                </div>
+            </li>
+            <li ng-if="permission_check('expend_template') && $root.expend_open == 1">
+                <div hover-card ng-click="redirect_to('/budget_froms/30');" id="expend_template">
+                    <label>这里是您想要的报销单模板.</label>
+                    <img src="./static/img/cfg_center_3.png" />
+                </div>
+            </li>
+        </ul>
+    </div>
+</div>
+<div class="content">
+    <div class="container form">
+        <ul class="business_items cfg_items">
+            <li ng-if="permission_check('system')">
+                <div 
+                    hover-card 
+                    ng-click="redirect_to('/system_config')"
+                    id="system">
+                    <label>这里是您想要的系统设置.</label>
+                    <img src="./static/img/cfg_center_4.png" style="width:180px !important;height:190px !important;position:absolute;top:9px;" />
+                </div>
+            </li>
+            <li ng-if="permission_check('standard')">
+                <div hover-card
+                     ng-click="redirect_to('/expend_standard')"
+                     id="standard"
+                >
+                    <label>这里是您想要的报销标准.</label>
+                    <img src="./static/img/cfg_center_5.png"  style="width:222px !important;height:250px !important;position:absolute;top:-30px;left:2px;" />
+                </div>
+            </li>
+            <li ng-if="permission_check('flow')">
+                <div hover-card ng-click="redirect_to('/work_flow')" id="flow">
+                    <label>这里是您想要的工作流配置.</label>
+                    <img src="./static/img/cfg_center_6.png" style="width:222px !important;height:250px !important;position:absolute;top:-38px;left:-28px;" />
+                </div>
+            </li>
+            <!--
+            <li >
+                <div  hover-card>
+                    <label>这里是您想要的基础数据管理.</label>
+                    <img src="./static/img/cfg_center_7.png" style="width:222px !important;height:250px !important;position:absolute;top:-62px;left:-15px;" />
+                </div>
+            </li>
+            -->
+        </ul>
+    </div>
+</div>
+</div>
+
+
diff --git a/src/static/templates/drop_down_selector.html b/src/static/templates/drop_down_selector.html
new file mode 100644
index 0000000..1fed62e
--- /dev/null
+++ b/src/static/templates/drop_down_selector.html
@@ -0,0 +1,14 @@
+<ul>
+    <li ng-repeat="option in filterlist">
+        <div>
+            <div>
+                <input 
+                    type="checkbox" 
+                    ng-model="option.selected"
+                    multiple="multiple"
+                >
+                </div>
+            <div>{{option.gc_cpn_alias}}</div>
+        </div>
+    </li>
+</ul>
\ No newline at end of file
diff --git a/src/static/templates/expend_standard.html b/src/static/templates/expend_standard.html
new file mode 100644
index 0000000..9bb461c
--- /dev/null
+++ b/src/static/templates/expend_standard.html
@@ -0,0 +1,78 @@
+<div class="split_form" id="expend_standard" ng-click="hide()">
+    <div class="main travel_expense" style="padding-left:280px;padding-right:0px;">
+        <div class="expense_strd_content">
+        	<button ng-show="permission_check('new_standard')" class="btn btn-success btn-favourite btn-action col-md-offset-8" ng-click="create_expense_strd_table();" id="new_standard">新建</button>
+            <button 
+                class="btn btn-success btn-favourite btn-action" 
+                ng-click="saveExpense();" 
+                id="save_standard"
+                ng-show="permission_check('save_standard')"
+            >
+            保存报销标准
+            </button>
+            <div 
+            	ng-if="get_all_data"
+                expense-table 
+                ng-repeat="data in allexpensedata track by $index" 
+                allexpensedata="allexpensedata" 
+                expensedata="allexpensedata[$index]" 
+                tabletitlescfg="tabletitlescfgs[$index]"
+                tabletitlescfgs="tabletitlescfgs"
+                sstype="sstypes[$index]"
+                ssname="ssnames[$index]"
+                ssrules="ssrules"
+                sstypename="sstypename[$index]"
+                ssnamename="ssnamename[$index]"
+                sstypename="sstypename"
+                ssnamename="ssnamename"
+                sstypes="sstypes"
+                ssnames="ssnames"
+                index="$index"
+            >
+            </div>
+            
+           	
+                
+        </div>
+    </div>
+    <div class="left" style="width:280px;">
+        <div class="left-expense-title">
+            <div class="containr_header">
+            	<span ng-click="title_type = true" ng-class="{'type_strand':title_type}">补助标准内容</span>
+               <span ng-click="title_type = false" ng-class="{'type_strand':!title_type}">系统变量</span>
+            </div>
+            <div ng-show="title_type" class="expense_titles" >
+            </div>
+            <div ng-show="!title_type" class="system_titles">
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/static/templates/expense_standard_table.html b/src/static/templates/expense_standard_table.html
new file mode 100644
index 0000000..7388b5d
--- /dev/null
+++ b/src/static/templates/expense_standard_table.html
@@ -0,0 +1,177 @@
+<div class="expense_standard">
+	<div class="table-content">
+		<div class="row second">
+			<div class="col-md-3 filter">
+				<img src="./static/img/u6181.png" class="expense_standard_filter">
+				<label>
+	                费用类型:
+	            </label>
+				<span class="selectclass">
+	                <select
+	                	class="myselect"
+	                    ng-model="sstype"
+	                    ng-options="type.code as type.value for type in ssTypeOptions" >
+	                </select/>
+	            </span>
+	            <!--<div class="select3-element selectclass">
+					<div class="select-container typeclass type" ng-click="showtype($event)">
+						{{sstypename}}
+						<div class="suffix">
+							<i class="fa fa-caret-down" aria-hidden="true"></i>
+						</div>
+					</div>
+					<ul 
+						class="showtype"
+						ng-click="showclass = !showclass"
+						ng-show ="showclass"
+						>
+	                    <li ng-repeat="type in ssTypeOptions" ng-click="selecttype($index)" ng-model="sstypetype.mdCode">{{type.mdName}}</li>
+	                </ul>
+				</div>-->
+				<!--<span select4 datamodel="sstypes" options="ssTypeOptions" style=style class="selectclass">
+                    <select 
+                    	ng-options="type.mdCode as type.mdName for type in ssTypeOptions"
+                    	ng-model="sstypename"
+                    	value="sstypename"
+                    >
+                    </select>
+                </span>-->
+			</div>
+			<div class="col-md-6 filter">
+				<img src="./static/img/u6181.png" class="expense_standard_filter">
+				<label>
+	                报销方式:
+	            </label>
+				<span class="selectclass">
+	                <select
+	                	class="myselect"
+	                	ng-model="ssname" 
+	                	ng-options="name.cdCode as name.cdValue for name in ssNameOptions" >
+	                </select>
+	            </span>
+	            <input class="expense_standard_radio" ng-model="ssSubType" ng-disabled="ssname!=222" type="checkbox"/>
+	            <span>票据必须</span>
+	            <span class="selectclass" ng-show="ssname == 222">
+	                <select
+	                	class="myselect"
+	                	ng-model="ssRule" 
+	                	ng-options="name.val as name.name for name in ssRuleOps" >
+	                </select>
+	            </span>
+	            <!--<div class="select3-element selectclass">
+					<div class="select-container typeclass name" ng-click="showname = !showname;$event.stopPropagation()">
+						{{ssnamename}}
+						<div class="suffix">
+							<i class="fa fa-caret-down" aria-hidden="true"></i>
+						</div>
+					</div>
+					<ul 
+						class="showtype"
+						ng-click="showname = !showname"
+						ng-show="showname"
+						>
+	                    <li ng-repeat="name in ssNameOptions" ng-click="selectname($index)" ng-model="name.cdCode">{{name.cdValue}}</li>
+	                </ul>
+				</div>-->
+				<!--<span select4 datamodel="ssnames" options="ssNameOptions" style=style class="selectclass">
+                    <select 
+                    	ng-options="name.cdCode as name.cdValue for name in ssNameOptions"
+                    	ng-model="ssnamename"
+                    	value="ssnamename"
+                    >
+                    </select>
+                </span>-->
+			</div>
+			<div class="col-md-3 filter">
+				<button ng-show="$parent.permission_check('copy_standard')" class="btn btn-success btn-favourite btnbtn" ng-click="duplicate_expense_strd_table();" id="copy_standard">复制</button>
+				<button ng-show="$parent.permission_check('delete_standard')" class="btn btn-success btn-favourite btnbtn" ng-click="rm_expense_strd_table();" id="delete_standard">删除</button>
+				<button class="btn btn-success btn-favourite btn-action" ng-show="hide" ng-click="hide = !hide" id="open_standard">展开</button>
+				<button class="btn btn-success btn-favourite btn-action" ng-show="!hide" ng-click="hide = !hide" id="close_standard">收回</button>
+			</div>
+		</div>
+		<table class="table table_travel_expense" ng-show="!hide">
+			<thead>
+				<th colspan="{{expenseConditionsTitles.length}}">
+					补助条件
+					<a ng-href="javascript:void(0);" ng-click="addConditions();">
+						<!--<i class="fa fa-plus-square-o" aria-hidden="true"></i>-->
+						<img src="./static/img/addelement.png" alt="addelement" class="deleteelment" />
+					</a>
+				</th>
+				<th colspan="{{expenseCtriteraTitles.length}}">
+					补助标准
+					<a ng-href="javascript:void(0);" ng-click="addCritera();">
+						<!--<i class="fa fa-plus-square-o" aria-hidden="true"></i>-->
+						<img src="./static/img/addelement.png" alt="addelement" class="deleteelment" />
+					</a>
+				</th>
+				<th colspan="{{budgetColspan(expenseBudgetTitles) || expenseBudgetTitles.length}}">
+					<!--补助金额-->
+					{{sstypename}}&{{ssnamename}}
+					<!--<a ng-href="javascript:void(0);" ng-click="addBudget();">-->
+						<!--<i class="fa fa-plus-square-o" aria-hidden="true"></i>-->
+						<!--<img src="./static/img/addelement.png" alt="addelement" class="deleteelment" />-->
+					<!--</a>-->
+				</th>
+			</thead>
+			<tbody>
+				<tr>
+					<td ng-repeat="title in expenseConditionsTitles track by $index" class="expenseTitle" rowspan="2" group="condition" index="{{$index}}" tableindex="{{index}}">
+
+						{{title.mdName?title.mdName:"请拖拽补助标准内容到这里"}}
+						<a class="rm-title" ng-href="javascript:void(0);" ng-click="rmTitle(title,$index,1);">
+							<!--<i class="fa fa-minus-square-o" aria-hidden="true"></i>-->
+							<img src="./static/img/deleteelement.png" class="deleteelment" />
+						</a>
+						<br />
+						<a class="relation-title" ng-href="javascript:void(0);" ng-click="togle_relation(title,$index,1);" ng-if="$index != (expenseConditionsTitles.length-1)">
+							或者
+							<i ng-if="title.asRelation == 1" class="fa fa-toggle-on" aria-hidden="true"></i>
+							<i ng-if="title.asRelation != undefined && title.asRelation == 0" class="fa fa-toggle-off" aria-hidden="true"></i>
+							并且
+						</a>
+						
+					</td>
+					<td ng-repeat="title in expenseCtriteraTitles track by $index" class="expenseTitle" rowspan="2" group="criteria" index="{{$index}}" tableindex="{{index}}">
+						{{title.mdName?title.mdName:"请拖拽补助标准内容到这里"}}
+						<a class="rm-title" ng-href="javascript:void(0);" ng-click="rmTitle(title,$index,2);">
+							<!--<i class="fa fa-minus-square-o" aria-hidden="true"></i>-->
+							<img src="./static/img/deleteelement.png" class="deleteelment" />
+						</a>
+						<br />
+						<a class="relation-title" ng-href="javascript:void(0);" ng-click="togle_relation(title,$index,2);" ng-if="$index != (expenseCtriteraTitles.length-1)">
+							或者
+							<i ng-if="title.asRelation == 1" class="fa fa-toggle-on" aria-hidden="true"></i>
+							<i ng-if="title.asRelation != undefined && title.asRelation == 0" class="fa fa-toggle-off" aria-hidden="true"></i>
+							并且
+						</a>
+					</td>
+					<td ng-repeat="title in expenseBudgetTitles track by $index" class="expenseTitle" group="expense" index="{{$index}}" tableindex="{{index}}" colspan="{{title.child.length || 1}}">
+						{{title.mdName?title.mdName:sstypename}}
+						<a class="rm-title" ng-href="javascript:void(0);" ng-click="rmTitle(title,$index,3);">
+							<!--<i class="fa fa-minus-square-o" aria-hidden="true"></i>-->
+							<img src="./static/img/deleteelement.png" class="deleteelment" />
+						</a>
+					</td>
+				</tr>
+				<tr>
+					<td ng-repeat="subTitle in budgetSubTitles">
+						{{subTitle.value}}
+						<!--
+						<a class="rm-title" ng-href="javascript:void(0);" ng-click="rmTitle(title);">
+							<i class="fa fa-minus-square-o" aria-hidden="true"></i>
+							<img src="./static/img/deleteelement.png" class="deleteelment" />
+						</a>
+						-->
+					</td>
+				</tr>
+				<tr expense-standard-row ng-repeat="data in expensedata track by $index" tabletitlescfg="tabletitlescfg" expenserowdata="data" expensedata="expensedata">
+				</tr>
+			</tbody>
+		</table>
+		<div style="margin-bottom: 10px;text-align: left;">
+			<button class="btn btn-success btn-favourite addbtn" ng-click="addRow();" ng-show="$parent.permission_check('delete_standard')&&!hide" id="add_standard_data">+ 添加数据</button>
+		</div>
+	</div>
+</div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/form_item.html b/src/static/templates/form_item.html
new file mode 100644
index 0000000..6d1b8a9
--- /dev/null
+++ b/src/static/templates/form_item.html
@@ -0,0 +1,90 @@
+<div class=" {{item.gcCpnType == 10 ? 'col-md-12':' col-md-6 column_cfg'}}" ng-repeat="item in form_items">
+    <div ng-if="item.gcCpnType === 1" class="text">
+        <span>
+            <input type="text" >
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 2" class="textarea">
+        <span>
+            <textarea>
+
+            </textarea>
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 3" class="checkbox">
+        <span>
+            <input type="checkbox" >
+            <br>
+            <input type="checkbox" >
+            <br>
+            <input type="checkbox" >
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 4" class="radio">
+        <span>
+            <div ng-repeat="option in item.gcOptList">
+                <input type="radio" value="0" name="{{item.gcCpnAlias}}">
+                <label>{{value}}</label>
+            </div>
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 5" class="text">
+        <span>
+            <input type="text" >
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 6" class="select">
+        <span>
+            <select>
+            </select>
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 7" class="text">
+        <span>
+            <input type="text" >
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 8" class="textarea">
+        <span>
+            <textarea>
+            </textarea>
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 9" class="hr">
+        <span>
+            <hr>
+        </span>
+        <label>
+            {{item.gcCpnAlias}}
+        </label>
+    </div>
+    <div ng-if="item.gcCpnType === 10" class="sub_form">
+        <div class="sub_form_container">
+            {{item.child}}
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/forms_center.html b/src/static/templates/forms_center.html
new file mode 100644
index 0000000..23861ac
--- /dev/null
+++ b/src/static/templates/forms_center.html
@@ -0,0 +1,135 @@
+<title>表单管理</title>
+<div class="split_form">
+    <div class="main travel_expense" style="padding-left:230px;padding-right:0px;">
+        <div class="form_container">
+        </div>
+    </div>
+    
+    <div class="left" style="width:230px;">
+        <ul class="ul-tree ">
+            <li class="search">
+                <a ng-href="javascript:void(0);" >
+                    <input type="text">
+                    <span class="query_icon"><i class="fa fa-search" aria-hidden="true"></i></span>
+                </a>
+            </li>
+            <li class="forms_list">
+                <img src="./static/img/create_form.png" class="small" >
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-click="frm1=!frm1"
+                >
+                    预算单
+                </a>
+                <ul ng-if="frm1">
+                    <li>
+                        <img src="./static/img/doc.png"  >
+                        <a
+                            g-href="javascript:void(0);"
+                            ng-click="show_saved_form();"
+                        >
+                            学校的预算单
+                        </a>
+                    </li>
+                    <li>
+                        <img src="./static/img/doc.png"  >
+                        <a
+                            g-href="javascript:void(0);"
+                            ng-click="show_saved_form();"
+                        >
+                            培训机构的预算单
+                        </a>
+                    </li>
+                </ul>
+            </li>
+            <li class="forms_list">
+                <img src="./static/img/form_created.png" >
+                <a
+                    ng-class="{'active': type==2}"
+                    ng-href="javascript:void(0);"
+                    ng-click="frm2=!frm2"
+                >
+                    申请单
+                </a>
+                <ul ng-if="frm2">
+                    <li>
+                        <img src="./static/img/doc.png"  >
+                        <a
+                            g-href="javascript:void(0);"
+                            ng-click="show_saved_form();"
+                        >
+                            学校的申请单
+                        </a>
+                    </li>
+                    <li>
+                        <img src="./static/img/doc.png"  >
+                        <a
+                            g-href="javascript:void(0);"
+                            ng-click="show_saved_form();"
+                        >
+                            培训机构的申请单
+                        </a>
+                    </li>
+                </ul>
+            </li>
+            <li class="forms_list">
+                <img src="./static/img/form_default.png" >
+                <a
+                    ng-class="{'active': type==3}"
+                    ng-href="javascript:void(0);"
+                    ng-click="frm3=!frm3"
+                >
+                    报销单
+                </a>
+                <ul ng-if="frm3">
+                    <li>
+                        <img src="./static/img/doc.png"  >
+                        <a
+                            g-href="javascript:void(0);"
+                            ng-click="show_saved_form();"
+                        >
+                            学校的报销单
+                        </a>
+                    </li>
+                    <li>
+                        <img src="./static/img/doc.png"  >
+                        <a
+                            g-href="javascript:void(0);"
+                            ng-click="show_saved_form();"
+                        >
+                            培训机构的报销单
+                        </a>
+                    </li>
+                </ul>
+            </li>
+        </ul>
+    </div>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/static/templates/frm_elem_attrs_editor.html b/src/static/templates/frm_elem_attrs_editor.html
new file mode 100644
index 0000000..b0a6a3d
--- /dev/null
+++ b/src/static/templates/frm_elem_attrs_editor.html
@@ -0,0 +1,1018 @@
+<div class="frm_el_attr_editor">
+	<div ng-if="data.gcCpnType===1 || data.gcCpnType===2">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc" name="desc_txt"></textarea>
+		</div>
+		<div>
+			<label>操作权限</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="visible" ng-model="data.gcShowFlag" ng-true-value="1" ng-false-value="0" ng-checked="data.gcShowFlag == 1">
+                    <label class="label" for="visible">可见</label>
+                    </span>
+
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="editable" ng-model="data.gcEditFlag" ng-true-value="1" ng-false-value="0" ng-checked="data.gcEditFlag == 1">
+                    <label class="label" for="editable">可编辑</label>
+                    </span>
+				</div>
+			</div>
+		</div>
+		<!--<div>
+            <label>格式</label>
+            <hr>
+            <select ng-model="data.gcCpnFormat">
+                <option ng-value="0" selected="selected">
+                    无
+                </option>
+                <option ng-value="11">
+                    手机号码
+                </option>
+                <option ng-value="12">
+                    电话号码
+                </option>
+                <option ng-value="13">
+                    邮编号码
+                </option>
+                <option ng-value="14">
+                    身份证号码
+                </option>
+                <option ng-value="15">
+                    邮箱
+                </option>
+            </select>
+        </div>-->
+		<div>
+			<label>默认值</label>
+			<hr>
+			<div>
+				<input type="text" placeholder="请输入默认值" ng-model="data.gcDefVal">
+			</div>
+		</div>
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcInputMust" ng-true-value="1" ng-false-value="0" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">流程必填</label>
+				</div>
+				<!--<div class="el_container">
+                    <span class="element">
+                        <input type="checkbox">
+                    </span>
+                    <label class="label">不允许重复</label>
+                </div>-->
+			</div>
+		</div>
+
+		<div>
+			<label>系统变量</label>
+			<hr>
+			<select ng-model="data.gcMathId">
+				<option ng-value="0">无</option>
+				<option ng-repeat="options in type_eill track by $index" ng-value="{{options.id}}">
+					{{options.name}}
+				</option>
+			</select>
+		</div>
+
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+		<div>
+			<label>长度限制</label>
+			<hr>
+			<div>
+				<!--<input type="text" placeholder="" ng-model="data.gcElLeng">-->
+				<input ng-change="check_length()" ng-model="data.gcElLeng">
+				<p class="length_err">{{data.length_err}}</p>
+			</div>
+		</div>
+		<div>
+			<label>自定义校验</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_customize_validation();">校验规则</button>
+		</div>
+		<div>
+			<label>自定义公式</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_formula();">公式编辑</button>
+		</div>
+	</div>
+	<div ng-if="data.gcCpnType===3 || data.gcCpnType===4">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+
+		<div>
+			<label>操作权限</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="visible" ng-model="data.gcShowFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    <label class="label" for="visible">可见</label>
+                    </span>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="editable" ng-model="data.gcEditFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    </span>
+					<label class="label" for="editable">可编辑</label>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcInputMust" ng-true-value="1" ng-false-value="0" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+				</div>
+				<div class="el_container">
+					<span class="element">
+	                    <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+	                </span>
+					<label class="label" for="required">流程必填</label>
+				</div>
+			</div>
+		</div>
+		<!--<div>
+            <label>选项</label>
+            <hr>
+            <div>
+                <div class="el_container" ng-repeat="option in data.gcOptList">
+                    <div class="third_column one_column">
+                        <label><input type="checkbox" ng-model="option.selected"></label>
+                    </div>
+                    <div class="third_column third_column_full">
+                        <span><input type="text" ng-model="option.value" /></span>
+                    </div>
+                    <div class="third_column two_column">
+                        <div class="frm_item_icons">
+                            <div class="frm_item_icon remove"><a ng-ref="" ng-click="remove_select_option(option)"><i class="fa fa-minus-circle"></i></a></div>
+                            <div class="frm_item_icon duplicate"><a ng-ref="" ng-click="add_select_option()"><i class="fa fa-plus-circle"></i></a></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>-->
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+		<div>
+			<label>自定义校验</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_customize_validation();">校验规则</button>
+		</div>
+	</div>
+	<div ng-if="data.gcCpnType===5">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+
+		<div>
+			<label>系统变量</label>
+			<hr>
+			<select ng-model="data.gcMathId">
+				<option ng-value="0">无</option>
+				<option ng-repeat="options in type_eill track by $index" ng-value="{{options.id}}">
+					{{options.name}}
+				</option>
+			</select>
+		</div>
+
+		<div>
+			<label>操作权限</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="visible"  ng-model="data.gcShowFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    <label class="label" for="visible" >可见</label>
+                    </span>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="editable" ng-model="data.gcEditFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    <label class="label" for="editable">可编辑</label>
+                    </span>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>日期类型</label>
+			<hr>
+			<select ng-model="data.gcCpnFormat">
+				<option ng-value="30" selected="selected">
+					日期
+				</option>
+				<option ng-value="31">
+					日期和时间
+				</option>
+			</select>
+		</div>
+
+		<div>
+			<label>默认值</label>
+			<hr>
+			<!--<div>-->
+			<!--<input type="text" placeholder="请输入默认值" ng-model="data.gcDefVal">-->
+			<select ng-model="data.gcDefVal">
+				<option ng-value="'1'" selected="selected">无</option>
+				<option ng-value="'10'">当前日期</option>
+			</select>
+			<!--</div>-->
+		</div>
+		<!--<div>
+            <label>系统变量</label>
+            <hr>
+            <select ng-model="data.gcCpnFormat" >
+                <option ng-value="30" selected="selected">
+                    日期
+                </option>
+                <option ng-value="31">
+                    日期和时间
+                </option>
+            </select>
+        </div>
+        <div>
+            <label>默认值</label>
+            <hr>
+            <div>
+                <div class="el_container">
+                    <span class="element">
+                        <input type="checkbox">
+                    </span>
+                    <label class="label">是否默认当天</label>
+                </div>
+            </div>
+        </div>-->
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-true-value="1" ng-false-value="0" ng-model="data.gcInputMust" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+				</div>
+				<div class="el_container">
+					<span class="element">
+	                    <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+	                </span>
+					<label class="label" for="required">流程必填</label>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+			<!--<div class="select3-element">
+            	<div class="select-container">
+            		<div class="suffix">
+            			<i class="fa fa-caret-down" aria-hidden="true"></i>
+            		</div>
+            	</div>
+            	<div drop-down-selector filterlist="searchlist" class="drop_down_sel" >
+                    <ul>
+                    	<li class="sel_query">1</li>
+                    </ul>
+                </div>
+            </div>-->
+		</div>
+		<div>
+			<label>自定义校验</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_customize_validation();">校验规则</button>
+		</div>
+	</div>
+
+	<div ng-if="data.gcCpnType===6">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>下拉类别</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="radio" id="radio" ng-value="0" ng-true-value="1" ng-false-value="0" name="select_type" ng-model="data.gcCpnMultiple">
+                    </span>
+					<label class="label" for="radio">单选</label>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="radio" id="multiselect" ng-value="1" ng-true-value="1" ng-false-value="0" name="select_type" ng-model="data.gcCpnMultiple">
+                    </span>
+					<label class="label" for="multiselect">多选</label>
+				</div>
+			</div>
+		</div>
+
+		<div>
+			<label>系统变量</label>
+			<hr>
+			<select ng-model="data.gcMathId">
+				<option ng-value="0">无</option>
+				<option ng-repeat="options in type_eill track by $index" ng-value="{{options.id}}">
+					{{options.name}}
+				</option>
+			</select>
+		</div>
+
+		<div>
+			<label>操作权限</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="visible" ng-model="data.gcShowFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    <label class="label" for="visible">可见</label>
+                    </span>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="editable" ng-model="data.gcEditFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    </span>
+					<label class="label" for="editable">可编辑</label>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>默认值</label>
+			<hr>
+			<div>
+				<input type="text" placeholder="请输入默认值" ng-model="data.gcDefVal">
+			</div>
+		</div>
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcInputMust" ng-true-value="1" ng-false-value="0" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+				</div>
+				<div class="el_container">
+					<span class="element">
+	                    <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+	                </span>
+					<label class="label" for="required">流程必填</label>
+				</div>
+			</div>
+		</div>
+		<!--<div>
+            <label>选项</label>
+            <hr>
+            <div>
+                <div class="el_container" ng-repeat="option in data.gcOptList">
+                    <div class="third_column one_column">
+                        <label><input type="checkbox" ng-model="option.selected"></label>
+                    </div>
+                    <div class="third_column third_column_full">
+                        <span><input type="text" ng-model="option.value" /></span>
+                    </div>
+                    <div class="third_column two_column">
+                        <div class="frm_item_icons">
+                            <div class="frm_item_icon remove"><a ng-ref="" ng-click="remove_select_option(option)"><i class="fa fa-minus-circle"></i></a></div>
+                            <div class="frm_item_icon duplicate"><a ng-ref="" ng-click="add_select_option()"><i class="fa fa-plus-circle"></i></a></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>-->
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+
+		<div>
+			<label>自定义校验</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_customize_validation();">校验规则</button>
+		</div>
+		<div>
+			<label>自定义公式</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_formula();">公式编辑</button>
+		</div>
+		<div>
+			<label>控件隐藏关联</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_hide_formula();">关联公式编辑</button>
+		</div>
+	</div>
+	<div ng-if="data.gcCpnType===7">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+
+		<div>
+			<label>系统变量</label>
+			<hr>
+			<select ng-model="data.gcMathId">
+				<option ng-value="0">无</option>
+				<option ng-repeat="options in type_eill track by $index" ng-value="{{options.id}}">
+					{{options.name}}
+				</option>
+			</select>
+		</div>
+
+		<div>
+			<label>操作权限</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="visible" ng-model="data.gcShowFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    <label class="label" for="visible" >可见</label>
+                    </span>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="editable" ng-model="data.gcEditFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    </span>
+					<label class="label" for="editable">可编辑</label>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>格式</label>
+			<hr>
+			<select ng-model="data.gcCpnFormat">
+				<option ng-value="20">
+					整数
+				</option>
+				<option ng-value="21">
+					允许小数
+				</option>
+				<!--<option ng-value="22">
+                    金额
+                </option>-->
+			</select>
+		</div>
+		<div>
+			<label>小数位数</label>
+			<hr>
+			<div>
+				<input onkeyup="this.value=this.value.replace(/\D/g,'')" onblur="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" ng-model="data.gcDmlLeng">
+			</div>
+		</div>
+		<div>
+			<label>长度限制</label>
+			<hr>
+			<div>
+				<!--<input type="text" placeholder="" ng-model="data.gcElLeng">-->
+				<input ng-change="check_length()" ng-model="data.gcElLeng">
+				<p class="length_err">{{data.length_err}}</p>
+			</div>
+		</div>
+		<div>
+			<label>默认值</label>
+			<hr>
+			<div>
+				<input type="text" placeholder="请输入默认值" ng-model="data.gcDefVal">
+			</div>
+		</div>
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcInputMust" ng-true-value="1" ng-false-value="0" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+					<div class="el_container">
+						<span class="element">
+	                        <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+	                    </span>
+						<label class="label" for="required">流程必填</label>
+					</div>
+				</div>
+
+			</div>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+		<div>
+			<label>自定义校验</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_customize_validation();">校验规则</button>
+		</div>
+		<div>
+			<label>自定义公式</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_formula();">公式编辑</button>
+		</div>
+	</div>
+
+	<div ng-if="data.gcCpnType===8">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>操作权限</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="visible" ng-model="data.gcShowFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    <label class="label" for="visible">可见</label>
+                    </span>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="editable" ng-model="data.gcEditFlag" ng-true-value="1" ng-false-value="0" checked="checked">
+                    </span>
+					<label class="label" for="editable">可编辑</label>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcInputMust" ng-true-value="1" ng-false-value="0" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+					<div class="el_container">
+						<span class="element">
+	                        <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+	                    </span>
+						<label class="label" for="required">流程必填</label>
+					</div>
+				</div>
+			</div>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+	</div>
+	<div ng-if="data.gcCpnType===9">
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+	</div>
+	<!--子表单默认显示长度为全部,select默认选1-->
+	<div ng-if="data.gcCpnType===10">
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+
+				<option ng-value="2" selected="selected">
+					全部
+				</option>
+			</select>
+		</div>
+		<!--<div>
+            <label>显示格式</label>
+            <hr>
+            <select ng-model="data.gcCpnFormat" >
+                <option ng-value="10" selected="selected">
+                    	平铺
+                </option>
+                <option ng-value="20">
+                    	列表
+                </option>
+            </select>
+        </div>-->
+	</div>
+	<div ng-if="data.gcCpnType===17">
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+
+				<option ng-value="2" selected="selected">
+					全部
+				</option>
+			</select>
+		</div>
+		<!--<div>
+            <label>显示格式</label>
+            <hr>
+            <select ng-model="data.gcCpnFormat" >
+                <option ng-value="10" selected="selected">
+                    	平铺
+                </option>
+                <option ng-value="20">
+                    	列表
+                </option>
+            </select>
+        </div>-->
+	</div>
+	<!--选择城市 控件属性-->
+	<div ng-if="data.gcCpnType===11">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+	</div>
+	<!--选择人员 控件属性-->
+	<div ng-if="data.gcCpnType===12||data.gcCpnType===0 || data.gcCpnType===14 || data.gcCpnType===16">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div ng-if="!(data.gcCpnType == 12 && data.parent_type != 0)">
+			<label>系统变量</label>
+			<hr>
+			<select ng-model="data.gcMathId">
+				<option ng-value="0">无</option>
+				<option ng-repeat="options in type_eill track by $index" ng-value="{{options.id}}">
+					{{options.name}}
+				</option>
+			</select>
+		</div>
+		<div>
+			<label>校验</label>
+			<hr>
+			<div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcInputMust" ng-true-value="1" ng-false-value="0" ng-click="manadatory_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">输入必填</label>
+				</div>
+				<div class="el_container">
+					<span class="element">
+                        <input type="checkbox" id="required" ng-model="data.gcMustCpn" ng-true-value="1" ng-false-value="0" ng-click="process_ifd_check($event);">
+                    </span>
+					<label class="label" for="required">流程必填</label>
+				</div>
+				<!--<div class="el_container">
+                    <span class="element">
+                        <input type="checkbox">
+                    </span>
+                    <label class="label">不允许重复</label>
+                </div>-->
+			</div>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+		<div>
+			<label>自定义公式</label>
+			<hr>
+			<button class="btn-el-attr-bind" ng-click="add_formula();">公式编辑</button>
+		</div>
+	</div>
+	<!--选择组织机构 控件属性-->
+	<div ng-if="data.gcCpnType===13">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+	</div>
+	<!--标签-->
+	<div ng-if="data.gcCpnType===15">
+		<div>
+			<label>标题</label>
+			<hr>
+			<input type="text" ng-model="data.gcCpnName" readonly/>
+			<button class="btn-el-attr-bind" ng-click="showMasDataEleList();">主数据定义选择</button>
+		</div>
+		<div>
+			<label>别名</label>
+			<hr>
+			<input value="无标题" type="text" ng-model="data.gcCpnAlias" />
+		</div>
+		<div>
+			<label>描述信息</label>
+			<hr>
+			<textarea ng-model="data.gcCpnDisc"></textarea>
+		</div>
+		<div>
+			<label>显示长度</label>
+			<hr>
+			<select ng-model="data.gcCpnInCol">
+				<option ng-value="1">
+					1/2
+				</option>
+				<option ng-value="3">
+					1/4
+				</option>
+				<option ng-value="4">
+					1/6
+				</option>
+				<option ng-value="2">
+					全部
+				</option>
+			</select>
+		</div>
+		<div>
+			<label>默认值</label>
+			<hr>
+			<div>
+				<input type="text" placeholder="请输入默认值" ng-model="data.gcDefVal">
+			</div>
+		</div>
+	</div>
+
+</div>
\ No newline at end of file
diff --git a/src/static/templates/frm_elem_cloud_attr.html b/src/static/templates/frm_elem_cloud_attr.html
new file mode 100644
index 0000000..140546f
--- /dev/null
+++ b/src/static/templates/frm_elem_cloud_attr.html
@@ -0,0 +1,97 @@
+<div class="bg-modal ">
+    <div class="pop_panel cloud_attr"  onMouseOver ="$(this).draggable();event.stopPropagation();" style="width:690px;height:auto;">
+        <div class="cv_title">主数据定义选择 
+            <div class="close" ng-click="close();">
+                <img src="./static/img/close.png" style="width:60%;margin-top:5px;">
+            </div>
+        </div>
+        <div class="table-content">
+                <table class="table table_travel_expense table_cloud_attr">
+                    <thead>
+                    	<tr>
+        				<!--<td>所属模块:</td>
+        				<td>
+        					<select ng-model="masDataEleList_type" ng-options="type.type for type in masDataEleList_types">
+        						<!--<option>预算</option>
+        						<option>申请</option>
+        						<option>报销</option>-->
+        					<!--</select>
+        				</td>-->
+        				<!--<td>
+        					主数据名称
+        				</td>-->
+        				<td class="mdcode_search" colspan="4">
+        					<input type="text" placeholder="请输入主数据名称" class="table_search_input" ng-model="masDataEleList_keywords" ng-keydown="search_masDataEleList_keydown($event)" />
+        					<button class="btn btn-success btn-favourite btn-action" ng-click="search_masDataEleList()">搜索</button>
+        				</td>
+        			</tr>
+                        <tr>
+                            <th >
+                                主数据编码
+                            </th>
+                            <th >
+                                主数据名称
+                            </th>
+                            <th >
+                                主数据说明
+                            </th>
+                            <th style="width:75px;">
+                                选择
+                            </th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                        <tr class="{{$index%2?'even':'odd'}}" ng-repeat="attr in attr_rows">
+                            
+                            <td >
+                                {{attr.masDataDefineCode}}
+                            </td>
+                            <td  >
+                                {{attr.masDataDefineName}}
+                            </td>
+                            <td >
+                                {{attr.masDataDefineDesc}}
+                            </td>
+                            <td style="text-align: center;">
+                                <input class="btn btn-success btn-favourite btn-action"
+                                    type="button" 
+                                    value="选择"
+                                    name="attr_code"
+                                    ng-click="get_cloud_attr(attr.masDataDefineCode);"
+                                    style="width:50px;"
+                                >
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div class="condition_search_footer">
+                <label class="first">
+                    <span>
+                        <select ng-model="pageSize"  ng-change="changed_page_size()">
+                            <!--<option value="5" selected="selected">5条/页</option>-->
+                            <option value="10" selected="selected">10条/页</option>
+                            <option value="20"> 20条/页</option>
+                            <option value="50">50条/页</option>
+                        </select>
+                    </span>
+                    <span >
+                        共{{math_ceil(total/pageSize)}}页
+                    </span>
+                </label>
+                <label class="second">
+                    <span>
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();" href="javascript:void(0);">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="next_page();" href="javascript:void(0);">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                    <span class="ng-binding">第<input type="text" value="1" ng-model="pageNumber" ng-change="search_keydown(pageNumber)"> 页/ 共{{math_ceil(total/pageSize)}}页</span>
+                </label>
+            </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/guide.html b/src/static/templates/guide.html
new file mode 100644
index 0000000..06b6e9e
--- /dev/null
+++ b/src/static/templates/guide.html
@@ -0,0 +1,21 @@
+<title>长虹云帐坊-费用云</title>
+<div class="welcome_guide">
+    <div name="step1" class="steps">
+        <div class="desc">
+            <img src="./static/img/hero_guide.png" />
+            <h1>长虹云帐坊-费用云</h1>
+            <h6>使用长虹费用云放飞你的双手</h6>
+        </div>
+        <div class="hero_content">
+            <img src="./static/img/guide.png" />    
+        </div>
+        <p>
+            <button class="btn btn-success btn-favourite" ng-click="business_select_phase();" style="text-align: center;">
+                开始使用
+            </button>
+            <!--<button class="btn btn-success btn-favourite" ng-click="registry_model();" style="text-align: center;">
+                登录入口
+            </button>-->
+        </p>
+    </div>
+</div>
diff --git a/src/static/templates/iframe_test.html b/src/static/templates/iframe_test.html
new file mode 100644
index 0000000..1f365e4
--- /dev/null
+++ b/src/static/templates/iframe_test.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title></title>
+		<style type="text/css">
+			body{
+				background-color: white;
+				height: 2000px;
+			}
+			input{
+				height: 20px;
+			}
+			button{
+				height: 20px;
+			}
+		</style>
+		<script type="text/javascript">
+//			document.domain = "";//填写顶级域名  用于解决同顶级域名的不同二级域名之间的调用
+			function get_couldNumber(){//此方法用于向父页面传值(传订单编号)
+				return document.getElementById("myinput").value;
+				sessionStorage.setItem("orderCode","2222");
+			}
+			function closes(){//此方法用于关闭iframe页面  同时调用父页面的方法传值
+//				var a = document.getElementById("myinput").value;
+				var orderCode = document.getElementById("myinput").value;
+//				parent.window.getdata_iframe(orderCode);//此为调用父页面方法  orderCode为要传的值
+				window.parent.postMessage(orderCode,"*");
+			}
+		</script>
+	</head>
+	<body>
+		test
+		<div style="height: 1800px;width: 100%;"></div>
+		<input type="text" id="myinput" />
+		<button onclick="closes()">close</button>
+		
+	</body>
+</html>
diff --git a/src/static/templates/messages_center.html b/src/static/templates/messages_center.html
new file mode 100644
index 0000000..f17a732
--- /dev/null
+++ b/src/static/templates/messages_center.html
@@ -0,0 +1,98 @@
+<title>消息中心</title>
+<style>
+</style>
+<style>
+</style>
+<div class="condition_search">
+	<div class="condition_search_header">
+		<label class="first">消息中心</label>
+		<label style="height: 30px;line-height: 30px;float: right;margin-right: 20px;">
+        	<span>消息状态:</span>
+
+
+
+            <select ng-init="state_now = '20'" ng-model="state_now" ng-change="change_state(state_now);" >
+                <option value="" selected="selected">全部</option>
+                <option value="10"> 已处理</option>
+                <option value="20">未处理</option>
+            </select>
+        </label>
+        <label style="height: 30px;line-height: 30px;float: right;margin-right: 20px;">
+            <span>租户ID:</span>
+            <select ng-model="tenant_name" ng-change="change_tenantState(tenant_name)">
+                    <!--ng-init=""-->
+                    <!--ng-model="tenant.tenantName"-->
+                    <!--ng-change="change_tenantState(tenant.tenantName)" ng-option="tenant.tenantName for tenant in tenants">-->
+                <option value="" selected="selected" >----请选择----</option>
+                <option ng-repeat="tenant in tenants" ng-value="{{tenant.gpUserId}}">{{tenant.tenantName}}</option>
+                <!--<option value="2"></option>-->
+            </select>
+        </label>
+	</div>
+</div>
+<!--table-->
+<div class="table-content">
+	<table class="table table_travel_expense">
+		<thead>
+			<tr>
+				<!--<th ng-repeat="num in nums track by $index" class="ng-binding ng-scope">{{num}}</th>-->
+                <th class="ng-binding ng-scope">主数据名称</th>
+                <th class="ng-binding ng-scope">错误原因</th>
+                <th class="ng-binding ng-scope">创建时间</th>
+                <th class="ng-binding ng-scope">状态</th>
+			</tr>
+		</thead>
+		<tbody>
+			<tr ng-repeat="message in messages track by $index" class="{{($index % 2)?'odd':'even'}}" 
+
+click-read>
+				<!--<td>{{message.eMdCode}}</td>-->
+				<td title="{{message.eMdName}}">{{message.eMdName}}</td>
+                <td title="{{message.eViewMsg}}">{{message.eViewMsg}}</td>
+				<td title="{{message.insT}}">{{message.insT}}</td>
+                <td ng-class="{statered:message.eState == '已读'}">{{message.eState}}</td>
+				<!--<td ng-class="{{message.eState == '已读'?'statered':'statedefault'}}">
+
+{{message.eState}}</td>-->
+				<!--<td>{{message.eId}}</td>-->
+				<!--<td>{{message.eCouldNumber}}</td>-->
+				<!--<td>{{message.eBillName}}</td>-->
+				<!--<td>{{message.eUpTime}}</td>-->
+			</tr>
+		</tbody>
+	</table>
+</div>
+
+<div style="background: #fff;border: 1px solid #ddd;padding-top: 1px;height: 29px;">
+	<label style="font-weight: 400;float: left;padding-left: 4px;margin-bottom: 0;font-size: 12px;line-height: 
+
+29px;display: inline-block;max-width: 100%;">
+                    <span style="cursor: pointer; margin: 0px 5px;font-size: 12px;">
+                        <select style="height: 22px;margin: 0;" ng-init="page.num_per_page='20'" ng-model="page.num_per_page" ng-change="change_page_num(page.num_per_page);">
+                            <!--<option value="" hidden></option>-->
+                            <option value="20" selected="selected">20条/页</option>
+                            <option value="50"> 50条/页</option>
+                            <option value="100">100条/页</option>
+                        </select>
+                    </span>
+                    <span ng-bind="'共'+total_page+'页'" style="cursor: pointer; margin: 0px 5px;font-size: 
+
+12px;">
+                    </span>
+    </label>
+	<label  style="font-weight: 400;float: right;padding-left: 4px;font-size: 12px;line-height: 29px;margin-
+
+bottom: 5px;display: inline-block;max-width: 100%;">
+                    <span style="cursor: pointer; margin: 0px 5px;font-size: 12px;">
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span style="cursor: pointer; margin: 0px 5px;font-size: 12px;">
+                        <a ng-href="javascript:void(0);" ng-click="next_page();">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+        <span>第<input style="width: 25px;min-width: 25px;min-height: 20px!important;height: 20px !important;" value="1" ng-model="page.page_num" ng-change="change_page(page.page_num)"> 页/ 共<span ng-bind="total_page"></span>页</span>
+    </label>
+	</div>
\ No newline at end of file
diff --git a/src/static/templates/no_permission.html b/src/static/templates/no_permission.html
new file mode 100644
index 0000000..253b157
--- /dev/null
+++ b/src/static/templates/no_permission.html
@@ -0,0 +1,3 @@
+	<body>
+		您没有权限
+	</body>
diff --git a/src/static/templates/pic.html b/src/static/templates/pic.html
new file mode 100644
index 0000000..833bb89
--- /dev/null
+++ b/src/static/templates/pic.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title></title>
+		<script src="../js/build/all.min.js" type="text/javascript" charset="utf-8"></script>
+		<script src="../vendors/jquery/dist/jquery.min.js" type="text/javascript" charset="utf-8"></script>
+		<link rel="stylesheet" type="text/css" href="../vendors/imageviewer/dist/viewer.css"/>
+		<style type="text/css">
+			body{
+				background-color: rgba(0,0,0,0.1);
+			}
+			p{
+				width: 100%;
+				text-align: center;
+			}
+			#pic_detail{
+				display: flex;
+				justify-content: flex-start;
+				width: 700px;
+				margin: auto;
+				padding-top: 100px;
+				padding-bottom: 100px;
+				flex-wrap: wrap;
+				background-color: white;
+			}
+			#pic_detail li{
+				width: 30%;
+				list-style-type: none;
+				display: flex;
+				flex-direction: column;
+				margin-bottom: 10px;
+				margin-right: 3%;
+				/*justify-content: center;*/
+			}
+			#pic_detail li span{
+				width: 100%;
+				text-align: center;
+				display: inline-block;
+				
+			}
+			#pic_detail img{
+				box-shadow: 0 0 10px rgba(0, 0, 0, .5);
+				width: 200px;
+				height: 200px;
+			}
+		</style>
+		<script src="../vendors/imageviewer/dist/viewer.js" type="text/javascript" charset="utf-8"></script>
+		<script type="text/javascript">		
+			$(function() {
+				var opn=window.opener;
+				var parentName=opn.document.getElementById("pic").getAttribute('value');//获取父页面标签的值
+				
+				parentName = JSON.parse(parentName);
+				
+				for(i in parentName){
+					$("<li><span>"+parentName[i].picName+"</span><img src='"+parentName[i].picUrl+"' alt="+parentName[i].picName+"/></li>").appendTo($("#pic_detail"));
+				}
+				
+				
+				$('#pic_detail').viewer({
+					url: 'data-original',
+				});
+			});
+		</script>
+	</head>
+	<body>
+		<p>票据图像资料</p>
+		<ul id="pic_detail">
+			<!--<li></li>-->
+		</ul>
+		<!--<img src="http://localhost:8070/static/img/pic.png"/>-->
+	</body>
+</html>
diff --git a/src/static/templates/registry.html b/src/static/templates/registry.html
new file mode 100644
index 0000000..d40b496
--- /dev/null
+++ b/src/static/templates/registry.html
@@ -0,0 +1,21 @@
+<title>登录界面</title>
+
+<div id="tenant" style="text-align:center">
+	<h1>请选择租户</h1>
+	<h3 ng-repeat="tname in tenantnames">
+		<i class="glyphicon glyphicon-user"></i>{{tname.name}}
+		<input type="radio" name="tenantname" ng-click="selecttenant($index)"/>
+	</h3>
+		<!--<button class="btn btn-default registrybtn" ng-click="lessee()">确认登录</button>-->
+		
+</div>
+
+<div id="registrySection">
+	<h1>请选择登录用户</h1>
+	<h3 ng-repeat="name in adminname" >
+		<i class="glyphicon glyphicon-user"></i>{{name.name}}
+		<input type="radio" name="registryname"  ng-click="selectuser($index)"/>
+	</h3>
+	<button class="btn btn-default registrybtn" ng-click="registry()">确认登录</button>
+</div>
+
diff --git a/src/static/templates/saved_form.html b/src/static/templates/saved_form.html
new file mode 100644
index 0000000..efe6e6c
--- /dev/null
+++ b/src/static/templates/saved_form.html
@@ -0,0 +1,911 @@
+<div class="form_content" id="form">
+	<!--<div class="trans" ng-if="!isbill">
+		
+	</div>-->
+	<div class="title" ng-if="!isbill">
+		<i class="fa fa-home" aria-hidden="true"></i>
+		<i class="fa fa-angle-right" aria-hidden="true"></i>
+		<h8>{{template_name}}</h8>
+		<!--<label class="text_label">({{template_desc}})</label>-->
+	</div>
+	<div class="row" >
+		<div class="row_unedit" ng-if="unedit == 1">
+			
+		</div>
+		<div ng-if="type==20 || type==30" ng-show="edit" class="cost_count">
+			<a ng-href="javascript:void(0);" ng-click="query_journel_budget(type)">
+				<img src="./static/img/calculate.png" title="计算费用" /> 计算费用
+			</a>
+		</div>
+		<div class=" {{item_column(item)}}" ng-repeat="item in form_items track by $index" style="border-bottom:1px solid {{edit|borderfilt}};" ng-show="checkshow(item) && item.gcShowFlag !== 0">
+			<div class="apply_control search_column" ng-show="item.gcShowFlag !== 0" ng-if="item.gcCpnType === 0 ">
+				<label>{{item.gcCpnAlias}}
+					 <text class="manadatory_ifd" ng-if='item.gcInputMust==1'>*</text>
+					<a  gcColName="{{item.gcColName}}" choose_budget="1" ng-show="edit" ng-href="javascript:void(0);" ng-click="show_apply_select(edit);">选择预算</a></label>
+				<!--<button class="btn btn-success btn-favourite btn-action" ng-click="show_apply_select($event);" ng-if="edit || !isbill">选择</button>-->
+				<!--<textarea gcColName="{{item.gcColName}}" choose_budget="1" type="text" class="apply_control_input" ng-model="selectinfo" readonly="readonly"></textarea>-->
+				<!--<div gcColName="{{item.gcColName}}" choose_budget="1" class="apply_control_input" />-->
+				<table class="apply_select_table col-md-12" ng-if="thshow">
+					<tr>
+						<th ng-repeat="head in heads track by $index">{{head.gcCpnAlias}}</th>
+					</tr>
+					<tr ng-repeat="info in selectinfo track by $index">
+						<td ng-repeat="head in heads">{{info[head.gcColName]}}</td>
+					</tr>
+				</table>
+				<!--</div>-->
+				<span ng-if="!edit  && isbill">{{item.render_value}}</span>
+				<div ng-if="apply_select_show " class="apply_select" onMouseOver="$(this).draggable();event.stopPropagation();">
+					<div class="apply_select_close">
+						<p>可选择预算</p>
+						<!--<i class="fa fa-times apply_close" ng-click="close_apply_select()"></i>-->
+						<img src="./static/img/close2.png" class="close close_create" style="width:-1%;margin-top:5px;text-shadow: 0 1px 0 #fff;"ng-click="close_apply_select()">
+					</div>
+					<div class="apply_select_search">
+						<input placeholder="请输入预算部门或项目" type="text" id="apply_search" ng-keydown="apply_search_info_keydown($event)" />
+						<button ng-click="apply_search_info();" class="btn btn-success btn-favourite btn-action">查询</button>
+					</div>
+					<table class="apply_select_table">
+						<thead>
+							<tr>
+								<th ng-repeat="head in heads">{{head.gcCpnAlias}}</th>
+								<!--<th>预算项目</th>
+								<th>预算部门</th>
+								<th>预算开始时间</th>
+								<th>预算截止时间</th>
+								<th>预算金额</th>-->
+								<th>选择</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr ng-repeat="data in budget_info">
+								<!--<td ng-repeat="data in datas">{{data}}</td>-->
+								<td ng-repeat="head in heads">{{data[head.gcColName]}}</td>
+								<td><button class="btn btn-success btn-favourite btn-action" ng-click="selected_budget(data)">选择</button></td>
+							</tr>
+						</tbody>
+					</table>
+					<div class="condition_search_footer">
+						<label class="first">
+                    <span>
+                        <select ng-model="page_number"  ng-change="change_page_number();">
+                            <option value="5" selected="selected">5条/页</option>
+                            <option value="10" >10条/页</option>
+                        </select>
+                    </span>
+                    <span >
+                        共{{math_ceil(rows/page_number)}}页
+                    </span>
+                </label>
+						<label class="second">
+                    <span>
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();" href="javascript:void(0);">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="next_page();" href="javascript:void(0);">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                    <span class="ng-binding">第<input class="pagenumber" type="text" value="1" ng-model="pages"> 页/ 共{{math_ceil(rows/page_number)}}页</span>
+                </label>
+					</div>
+				</div>
+			</div>
+
+			<div ng-if="item.gcCpnType === 1" ng-show="item.gcShowFlag !== 0" class="text">
+				
+				<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					<span ng-if="!edit  && isbill">{{item.render_value}}</span>
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+                    <input ng-blur="check_data(edit)" ng-model="item.render_value " ng-change="change_apmonut(item)" type="text" value="{{item.render_value || item.gcDefVal}}" gcColName="{{item.gcColName}}" ng-show="edit || !isbill" ng-disabled="!item.gcEditFlag == 1"  >
+                    <div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+				</span>
+				<label ng-class="{is_red:item.is_red}">
+					
+                    {{item.gcCpnAlias}} 
+                    <text class="manadatory_ifd" ng-if='item.gcInputMust==1'>*</text>
+                    <text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+                    <i ng-show="type==30 && item.expend_standard != undefined && item.expend_standard_sp != 0" >{{item.expend_standard}}</i>
+                    <i ng-show="type==30 && item.expend_standard_sp != undefined" >{{item.expend_standard_sp}}</i>
+                    <i ng-show="type==30 && item.billMoney != undefined" title="票据:{{item.billMoney}}">票据:{{item.billMoney}}</i>
+                </label>
+			</div>
+			<div ng-if="item.gcCpnType === 2" ng-show="item.gcShowFlag !== 0"  class="textarea col-md-12">
+				<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					<span ng-if="!edit  && isbill">{{item.render_value}}</span>
+                    <textarea 
+                    	ng-blur="check_data(edit)"
+                    	ng-model="item.render_value "
+                        gcColName="{{item.gcColName}}"  
+                        ng-show="edit || !isbill"
+                         ng-disabled="!item.gcEditFlag == 1"
+                    >{{item.render_value || item.gcDefVal}}</textarea>
+                    <div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+				</span>
+				<label ng-class="{is_red:item.is_red}">
+                    {{item.gcCpnAlias}} 
+                    <text class="manadatory_ifd" ng-if='item.gcInputMust==1'>*</text>
+                    <text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+                    <i ng-show="type==30 && item.expend_standard != undefined && item.expend_standard_sp != 0" >{{item.expend_standard}}</i>
+                    <i ng-show="type==30 && item.expend_standard_sp != undefined" >{{item.expend_standard_sp}}</i>
+                    <i ng-show="type==30 && item.billMoney != undefined" title="票据:{{item.billMoney}}">票据:{{item.billMoney}}</i>
+                </label>
+			</div>
+			<div ng-if="item.gcCpnType === 3" ng-show="item.gcShowFlag !== 0" class="checkbox">
+				<div ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					{{item.gcCpnAlias}} 
+					<text class="manadatory_ifd" ng-if='item.gcInputMust==1' ng-disabled="!item.gcEditFlag == 1">*</text>
+					<text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+				</div>
+				<div>
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+					<!--<div ng-repeat="opt in item.gcOptList" class="checkbox_container" ng-if="edit || !isbill">-->
+					<input type="checkbox" value="{{opt.value}}" ng-checked="check_item(item, opt);" checked="{{opt.selected}}" gcColName="{{item.gcColName}}" ng-disabled="!item.gcEditFlag == 1">
+					<!--<label class="cb_label">{{opt.value}}</label>-->
+					<!--</div>-->
+					<!--<span ng-if="!edit  && isbill">{{item.render_value}}</span>-->
+				</div>
+				<div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+			</div>
+			<div ng-if="item.gcCpnType === 4" ng-show="item.gcShowFlag !== 0" class="radio">
+				<div ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					{{item.gcCpnAlias}} 
+					<text class="manadatory_ifd" ng-if='item.gcInputMust==1' ng-disabled="!item.gcEditFlag == 1">*</text>
+					<text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+				</div>
+				<div>
+					<span ng-if="!edit  && isbill" class="radio">{{item.render_value}}
+						<div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+					</span>
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+					<!--<span ng-repeat="opt in item.gcOptList" class="rd_container" ng-if="edit || !isbill">-->
+					<input type="radio" value="{{opt.value}}" name="{{item.gcCpnAlias}}" ng-checked="check_item(item, opt);" ng-disabled="!item.gcEditFlag == 1" gcColName="{{item.gcColName}}">
+					<label class="rd_label">{{opt.value}}</label>
+					<!--</span>-->
+					
+				</div>
+			</div>
+
+			<div ng-if="item.gcCpnType === 5" ng-show="item.gcShowFlag !== 0" class="text timeinfo" >
+				<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+                    <div ng-if="item.gcCpnFormat == 30"><input type="text" item="{{item}}" realitem="item" editflag="{{item.gcEditFlag}}" edit="edit" class="getDateTime" date gcColName="{{item.gcColName}}" value="{{item.render_value || item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!item.gcEditFlag == 1" ></div>
+                    <div ng-if="item.gcCpnFormat == 31"><input type="text" item="{{item}}" realitem="item" editflag="{{item.gcEditFlag}}" edit="edit" class="getDateTime" datetime gcColName="{{item.gcColName}}" value="{{item.render_value || item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!item.gcEditFlag == 1" ></div>
+                    <div ng-if="item.gcCpnFormat == 32"><input type="text" item="{{item}}" realitem="item" editflag="{{item.gcEditFlag}}" edit="edit" class="getDateTime"  time gcColName="{{item.gcColName}}" value="{{item.render_value || item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!item.gcEditFlag == 1"></div>
+                    <span ng-if="!edit  && isbill">{{item.render_value}}
+                    	<div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+                    </span>
+                    <input gcColName="{{item.gcColName}}" type="text" ng-show="false" ng-if="!edit  && isbill" value="{{item.render_value}}" />
+				</span>
+				<label>
+                   {{item.gcCpnAlias}} 
+                   <text class="manadatory_ifd" ng-if='item.gcInputMust==1' >*</text>
+                   <text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+               </label>
+			</div>
+			<div ng-if="item.gcCpnType === 6" ng-show="item.gcShowFlag !== 0"  class="select">
+				<span ng-if="!edit  && isbill">{{item.select_value}}</span>
+				<span select3 edit-flag="item.gcEditFlag" edit="edit" item="item" ng-show="edit || !isbill"  ng-mouseenter="detail= true" ng-mouseleave="detail = false" >
+					<!--<p ng-if="item.gcCpnDisc" >{{item.gcCpnDisc}}</p>--> 
+                    <select 
+                        ng-if="!!item.gcCpnMultiple"
+                        value="{{item.render_value}}"
+                        class="select_get"
+                        multiple
+                        load-data
+                    >
+                    	<!--<option ng-if="kinds" ng-repeat="opt in options" {{opt.selected?'selected':''}} value="{{opt.value}}">
+                    		{{opt.value}}
+                    	</option>-->
+                    </select>
+                    <select 
+                        ng-if="!item.gcCpnMultiple"
+                        value="{{item.render_value}}"
+                        class="select_get"
+                        load-data
+                    >
+                    	<!--<option ng-if="kind" ng-repeat="opt in options" {{opt.selected?'selected':''}} value="{{opt.value}}" >
+                    		{{opt.value}}
+                    	</option>-->
+                        <!--<option ng-repeat="opt in item.gcOptList" {{opt.selected?'selected':''}} >{{opt.value}}</option>-->
+                    </select>
+                </span>
+                <div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+				<label>
+                    {{item.gcCpnAlias}} 
+                    <text class="manadatory_ifd" ng-if='item.gcInputMust==1'>*</text>
+                    <text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+                </label>
+			</div>
+			<div ng-if="item.gcCpnType === 7" ng-show="item.gcShowFlag !== 0" class="text">
+				<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+					<span ng-if="!edit  && isbill">{{item.render_value}}</span>
+                    <input ng-blur="check_data(edit)" ng-model="item.render_value " ng-change="change_apmonut(item)" type="text" gcColName="{{item.gcColName}}" ng-disabled="!item.gcEditFlag == 1" value="{{item.render_value || item.gcDefVal}}" ng-show="edit || !isbill" >
+				</span>
+				<div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+				<label ng-class="{is_red:item.is_red}">
+                    {{item.gcCpnAlias}} 
+                    <text class="manadatory_ifd" ng-if='item.gcInputMust==1'>*</text>
+                    <text class="process_ifd" ng-if='item.gcMustCpn==1' >△</text>
+                    <i ng-show="type==30 && item.expend_standard != undefined && item.expend_standard_sp != 0" >{{item.expend_standard}}</i>
+                    <i ng-show="type==30 && item.expend_standard_sp != undefined" >{{item.expend_standard_sp}}</i>
+                    <i ng-show="type==30 && item.billMoney != undefined" title="票据:{{item.billMoney}}">票据:{{item.billMoney}}</i>
+                </label>
+			</div>
+			<!--城市选择部分-->
+			<div ng-if="item.gcCpnType === 11 ">
+				<div select-city ng-show="city" class="col-md-12 citycity" style="padding: 0;"></div>
+				<a class="btn btn-default citybtn" ng-show="!city" ng-click="citybtn()">{{cityList.join(",")||'请选择城市'}}</a>
+			</div>
+			<!--去掉查看表单中的下划线-->
+			<div ng-if="item.gcCpnType === 9 " class="hr">
+				<span>
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+					   <div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+                    <hr style="margin:12px 0px;">
+                </span>
+			</div>
+			<!--选择人员-->
+			<div ng-if="item.gcCpnType === 12" class="people">
+				<div user-selector item="item" parentitem="item" type="type"></div>
+			</div>
+			<!--申请单选择-->
+			<div class="apply_control search_column" ng-if="item.gcCpnType === 14 && type == 30">
+				<label>{{item.gcCpnAlias}} 
+					 <text class="manadatory_ifd" ng-if='item.gcInputMust==1'>*</text>
+					<a gcColName="{{item.gcColName}}" choose_apply="1" ng-href="javascript:void(0);" ng-show="isbill=='false'" ng-click="show_expend_select(edit);">选择申请单</a></label>
+				<!--<input class="apply_control_number_input" gcColName="{{item.gcColName}}" value="{{item.render_value}}" readonly="readonly" style="border: none;"></input>-->
+				<table class="apply_select_table col-md-12"  ng-if="expend_thshow">
+					<tr>
+						<th ng-repeat="head in expend_heads track by $index">{{head.gcCpnAlias}}</th>
+					</tr>
+					<tr ng-repeat="info in expend_selectinfo track by $index">
+						<td ng-repeat="head in expend_heads">{{info[head.gcColName]}}</td>
+					</tr>
+				</table>
+				<div ng-if="expend_select_show " class="apply_select" onMouseOver="$(this).draggable();event.stopPropagation();">
+					<div class="apply_select_close">
+						<p>可选择申请</p>
+						<i class="fa fa-times apply_close" ng-click="close_expend_select()"></i>
+					</div>
+					<!--<div class="apply_select_search">
+						<span select3 item="expend_search" class="expend_search_style">
+                        	<select 
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+						<button ng-click="expend_search_info();" class="btn btn-success btn-favourite btn-action apply_search_btn">查询</button>
+					</div>-->
+					<table class="apply_select_table">
+						<thead>
+							<tr>
+								<th ng-repeat="head in expend_heads">{{head.gcCpnAlias}}</th>
+								<th>选择</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr ng-repeat="data in expend_info">
+								<td ng-repeat="head in expend_heads">{{data[head.gcColName]}}</td>
+								<td><button class="btn btn-success btn-favourite btn-action" ng-click="selected_expend(data,item)">选择</button></td>
+							</tr>
+						</tbody>
+					</table>
+					<div class="condition_search_footer">
+						<label class="first">
+                    <span>
+                        <select ng-model="expend_page_number"  ng-change="expend_change_page_number();">
+                            <option value="5" selected="selected">5条/页</option>
+                            <option value="10" >10条/页</option>
+                        </select>
+                    </span>
+                    <span >
+                        共{{math_ceil(expend_rows/expend_page_number)}}页
+                    </span>
+                </label>
+						<label class="second">
+                    <span>
+                    <a ng-href="javascript:void(0);" ng-click="expend_pre_page();" href="javascript:void(0);">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="expend_next_page();" href="javascript:void(0);">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                    <span class="ng-binding">第<input class="pagenumber" type="text" value="1" ng-model="expend_pages"> 页/ 共{{math_ceil(expend_rows/expend_page_number)}}页</span>
+                </label>
+					</div>
+				</div>
+			</div>
+			<!--标签-->
+			<!---->
+			<div ng-if="item.gcCpnType === 15"  ng-show="item.gcShowFlag !== 0"  class="textarea col-md-12">
+				<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+					<!--<p ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+					   <div class="showDetail" ng-show="detail" ng-if="item.gcCpnDisc">{{item.gcCpnDisc}}</div>
+                    <label ng-blur="check_data(edit)" ng-model="item.render_value " ng-change="change_apmonut(item)" value="{{item.render_value || item.gcDefVal}}" gcColName="{{item.gcColName}}" ng-if="edit || !isbill" ng-disabled="!item.gcEditFlag == 1"  >
+                    </label>
+                    <span ng-show="edit || !isbill">{{item.render_value ||item.gcDefVal}}</span>
+                    <span ng-if="!edit  && isbill">{{item.render_value || item.gcDefVal}}</span>
+				</span>
+				<label class="ng-binding">
+                    {{item.gcCpnAlias}} 
+                </label>
+			</div>
+			<!--选择组织机构-->
+			<!--<div ng-if="item.gcCpnType === 16" class="people">
+				<div org-selector item="item" parentitem="item" type="type"></div>
+			</div>-->
+			<!--子表单-->
+			<div ng-if="item.gcCpnType === 10" ng-show="item.gcCpnType == tap_type" class="col-md-12 sub_form">
+				<div class="sub_form_container sub_form_s">
+					<label ng-class="{nobill_red:item.nobill_red,is_red:item.is_red}" style="display: block;">{{item.gcCpnAlias}}{{item.num}}&nbsp;{{item.is_nobill}}&nbsp;{{item.bill_user_err}}</label>
+					<div class="sub_frm_tlbar" ng-show="btnflag">
+						<!--<div class="sfm_cou" ng-show="btnflag">
+							<a ng-href="javascript:void(0);" ng-click="query_journel_budget()">
+								<img src="./static/img/calculate.png" title="计算费用"/>
+							</a>
+						</div> -->
+						<div class="sfm_plus">
+							<a ng-href="javascript:void(0);" ng-click="duplicate_sub_form(item);">
+								<img src="./static/img/createorder.png" title="添加" />
+							</a>
+						</div>
+						<div class="sfm_minus">
+							<a ng-href="javascript:void(0);" ng-click="rm_sub_form(item); ">
+								<img src="./static/img/delete.png" title="删除" />
+							</a>
+						</div>
+					</div>
+					<div class=" {{item_column(_item)}}" ng-show="_item.gcShowFlag !== 0" ng-repeat="_item in item.child track by $index">
+						<!--选择人员-->
+						<div ng-if="_item.gcCpnType === 12" class="people">
+							<div user-selector item="_item" parentitem="item" type="type"></div>
+						</div>
+						<div ng-if="_item.gcCpnType === 1" ng-show="_item.gcShowFlag !== 0" class="text">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <input ng-blur="check_data(edit)" ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" type="text" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}"  ng-show="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"><i ng-if="edit || !isbill">{{item|getamount:_item}}</i>
+                                <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</span>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}}
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30 && _item.nobill_cd" >无</i>
+                                <i ng-show="type==30 && _item.expend_standard != undefined && _item.expend_standard_sp != 0" >{{_item.expend_standard}}</i>
+                                <i ng-show="type==30 && _item.expend_standard_sp != undefined" >{{_item.expend_standard_sp}}</i>
+                                <i ng-show="type==30 && _item.billMoney != undefined" title="票据:{{_item.billMoney}}">票据:{{_item.billMoney}}</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                                <i ng-show="type==20 && _item.standard_show">&nbsp;标准金额:{{_item.standard_money}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 2" ng-show="_item.gcShowFlag !== 0" class="textarea col-md-12">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<p ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</p>
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <textarea ng-blur="check_data(edit)" ng-model="_item.render_value " gcColName="{{_item.gcColName}}" ng-show="edit || !isbill"  ng-disabled="!_item.gcEditFlag == 1" >{{_item.render_value || _item.gcDefVal}}</textarea>
+                                   <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+                               </span>
+                                <label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                               {{_item.gcCpnAlias}} 
+                               <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                               <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                               <i ng-show="type==30 && _item.nobill_cd" >无</i>
+                               <i ng-show="type==30 && _item.expend_standard != undefined && _item.expend_standard_sp != 0" >{{_item.expend_standard}}</i>
+                               <i ng-show="type==30 && _item.expend_standard_sp != undefined" >{{_item.expend_standard_sp}}</i>
+                               <i ng-show="type==30 && _item.billMoney != undefined" title="票据:{{_item.billMoney}}">票据:{{_item.billMoney}}</i>
+                               <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                                <i ng-show="type==20 && _item.standard_show">&nbsp;标准金额:{{_item.standard_money}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 3" ng-show="_item.gcShowFlag !== 0" class="checkbox">
+							<div ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								{{_item.gcCpnAlias}} 
+								<text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+								<text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+								<div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</div>
+							<div>
+								<span ng-repeat="opt in _item.gcOptList" class="checkbox_container">
+                                    <input ng-model="_item.render_value " type="checkbox" value="{{opt.value}}" ng-disabled="!_item.gcEditFlag == 1" ng-checked="check_item(_item, opt);" gcColName="{{_item.gcColName}}" ng-show="edit || !isbill" >
+                                    <span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+								<label ng-if="opt.selected==true || (edit || !isbill)" class="cb_label">{{opt.value}}</label>
+								</span>
+							</div>
+						</div>
+						<div ng-if="_item.gcCpnType === 4" ng-show="_item.gcShowFlag !== 0" class="radio">
+							<div ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								{{_item.gcCpnAlias}} 
+								<text class="manadatory_ifd" ng-if='_item.gcInputMust==1' ng-disabled="!_item.gcEditFlag == 1">*</text>
+								<text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+								<div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</div>
+							<div>
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+								<span ng-repeat="opt in _item.gcOptList" class="rd_container">
+                                    <input 
+                                        type="radio" 
+                                        value="{{opt.value}}"  
+                                        name="{{_item.gcCpnAlias}}" 
+                                        gcColName="{{_item.gcColName}}"  
+                                        ng-disabled="!_item.gcEditFlag == 1"
+                                        ng-show="edit || !isbill"
+                                        ng-checked="check_item(_item, opt);"   > <i ng-show="edit || !isbill">{{item|getamount:_item}}</i>
+                                    
+								<label ng-if="opt.selected==true || (edit || !isbill)" class="rd_label">{{opt.value}}</label>
+								</span>
+							</div>
+						</div>
+
+					<div ng-if="_item.gcCpnType === 5" ng-show="_item.gcShowFlag !== 0"  class="text timeinfo">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								
+								<!--<p ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</p>-->
+			                    <div ng-if="_item.gcCpnFormat == 30"><input type="text" item="{{_item}}" realitem="_item" editflag="{{_item.gcEditFlag}}" edit="edit" date ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"  readonly="readonly"></div>
+			                    <div ng-if="_item.gcCpnFormat == 31"><input type="text" item="{{_item}}" realitem="_item" editflag="{{_item.gcEditFlag}}" edit="edit" datetime ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"  readonly="readonly"></div>
+			                    <div ng-if="_item.gcCpnFormat == 32"><input type="text" item="{{_item}}" realitem="_item" editflag="{{_item.gcEditFlag}}" edit="edit" time ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"  readonly="readonly"></div>
+			                    <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+			                    <span  ng-if="!edit  && isbill">{{_item.render_value}}</span>
+			                    <input gcColName="{{_item.gcColName}}" type="text" ng-show="false" ng-if="!edit  && isbill" value="{{_item.render_value}}" />
+							</span>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">{{_item.gcCpnAlias}} 
+								<text class="manadatory_ifd" ng-if='_item.gcInputMust==1'  ng-disabled="!_item.gcEditFlag == 1">*</text>
+								<i ng-show="type==30 && _item.nobill_cd" >无</i>
+								<i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+							</label>
+								<text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+								
+						</div>
+						<div ng-if="_item.gcCpnType === 6" ng-show="_item.gcShowFlag !== 0"  class="select">
+							<span ng-if="!edit  && isbill">{{_item.select_value}}</span>
+							<span select3 bill-check="bill_data_check()" childitem="item" edit-flag="_item.gcEditFlag" edit="edit" item="_item" ng-show="edit || !isbill" ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+                                <select 
+                                    ng-if="!!_item.gcCpnMultiple" 
+                                    ng-disabled="!_item.gcEditFlag == 1"
+                                    value="{{_item.render_value}}"
+                                    class="select_get"
+                                    multiple
+                                >
+                                    <option ng-repeat="opt in _item.gcOptList" {{opt.selected?'selected':''}} value="{{opt.value}}"  >{{opt.value}}</option>
+                                </select>
+                                <select 
+                                    ng-if="!_item.gcCpnMultiple" 
+                                    value="{{_item.render_value}}"
+                                    ng-disabled="!_item.gcEditFlag == 1"
+                                    class="select_get"
+                                >
+                                    <option ng-repeat="opt in _item.gcOptList" {{opt.selected?'selected':''}} value="{{opt.value}}"  >{{opt.value}}</option>
+                                </select>
+                            </span>
+                            <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}} 
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30 && _item.nobill_cd" >无</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 7" ng-show="_item.gcShowFlag !== 0"  class="text">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <input ng-blur="check_data(edit)" ng-model="_item.render_value " ng-change="change_apmonut(_item,item)" type="text" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}"  ng-show="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1" >
+                                <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</span>
+
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}} 
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30 &&_item.nobill_cd" >无</i>
+                                <i ng-show="type==30 && _item.expend_standard != undefined && _item.expend_standard_sp != 0" >{{_item.expend_standard}}</i>
+                                <i ng-show="type==30 && _item.expend_standard_sp != undefined" >{{_item.expend_standard_sp}}</i>
+                                <i ng-show="type==30 && _item.billMoney != undefined" title="票据:{{_item.billMoney}}">票据:{{_item.billMoney}}</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                                <i ng-show="type==20 && _item.standard_show">&nbsp;标准金额:{{_item.standard_money}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 8" ng-show="_item.gcShowFlag !== 0" class="textarea">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+                                <textarea gcColName="{{_item.gcColName}}" ng-show="edit || !isbill"  ng-disabled="!_item.gcEditFlag == 1">{{_item.render_value || _item.gcDefVal}}</textarea><i ng-show="edit || !isbill">{{item|getamount:_item}}</i>
+                                <span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+							</span>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}} 
+                                  <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30_item.nobill_cd" >无</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                            </label>
+						</div>
+						<!--去掉查看表单中的下划线(子表单中)-->
+						<div ng-if="item.gcCpnType === 9 && type != '10' && type != '20' && type != '30'" class="hr">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+                                <hr>
+                                	<div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+                            </span>
+							<label>
+                                {{_item.gcCpnAlias}}
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 15"  ng-show="_item.gcShowFlag !== 0"  class="textarea col-md-12">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<!--<p ng-if="_item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+			                    <label ng-blur="check_data(edit)" ng-model="_item.render_value " ng-change="change_apmonut(_item,item)" value="{{_item.render_value || _item.gcDefVal}}" gcColName="{{_item.gcColName}}" ng-show="edit || !isbill" >
+			                    </label>
+			                    <span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+			                    <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</span>
+							<label ng-class="{is_red:_item.is_red}" class="ng-binding">
+			                    {{_item.gcCpnAlias}} 
+			                    <i ng-show="type==30" >{{_item.bhName}}</i>
+                                <i ng-show="type==30" >{{_item.bbName}}</i>
+			                </label>
+						</div>
+
+					</div>
+
+				</div>
+				<!--<div class="cost_div" class="col-md-12" style="padding:0px;margin-top:10px;" name="journel_budget" user_id="{{budget_item.userId}}">
+					<div ng-repeat="budget in item.budget_list[0].child" class="col-md-12">
+						<div class="text">
+							<span>
+                                    <input 
+                                        type="text" 
+                                        gcColName="{{budget.name}}" 
+                                        jp_cd_code="{{budget.jp_cd_code}}" 
+                                        ng-model="budget.jp_amount"
+                                    >
+                                </span>
+							<label>
+                                    {{budget.mdDesc || budget.cd_name}}
+                                </label>
+						</div>
+					</div>
+				</div>-->
+			</div>
+			<!--支付方式子表单-->
+			<div ng-if="item.gcCpnType === 17" ng-show="item.gcCpnType == tap_type" class="col-md-12 sub_form">
+				<div class="sub_form_container sub_form_s">
+					<label ng-class="{nobill_red:item.nobill_red,is_red:item.is_red}" style="display: block;">{{item.gcCpnAlias}}{{item.num}}&nbsp;{{item.is_nobill}}&nbsp;{{item.bill_user_err}}</label>
+					<div class="sub_frm_tlbar" ng-show="btnflag">
+						<!--<div class="sfm_cou" ng-show="btnflag">
+							<a ng-href="javascript:void(0);" ng-click="query_journel_budget()">
+								<img src="./static/img/calculate.png" title="计算费用"/>
+							</a>
+						</div> -->
+						<div class="sfm_plus">
+							<a ng-href="javascript:void(0);" ng-click="duplicate_sub_form(item);">
+								<img src="./static/img/createorder.png" title="添加" />
+							</a>
+						</div>
+						<div class="sfm_minus">
+							<a ng-href="javascript:void(0);" ng-click="rm_sub_form(item); ">
+								<img src="./static/img/delete.png" title="删除" />
+							</a>
+						</div>
+					</div>
+					<div class=" {{item_column(_item)}}" ng-show="_item.gcShowFlag !== 0" ng-repeat="_item in item.child track by $index">
+						<!--选择人员-->
+						<div ng-if="_item.gcCpnType === 12" class="people">
+							<div user-selector item="_item" parentitem="item" type="type"></div>
+						</div>
+						<div ng-if="_item.gcCpnType === 1" ng-show="_item.gcShowFlag !== 0" class="text">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <input ng-blur="check_data(edit)" ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" type="text" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}"  ng-show="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"><i ng-if="edit || !isbill">{{item|getamount:_item}}</i>
+                                <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</span>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}}
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30 && _item.nobill_cd" >无</i>
+                                <i ng-show="type==30 && _item.expend_standard != undefined && _item.expend_standard_sp != 0" >{{_item.expend_standard}}</i>
+                                <i ng-show="type==30 && _item.expend_standard_sp != undefined" >{{_item.expend_standard_sp}}</i>
+                                <i ng-show="type==30 && _item.billMoney != undefined" title="票据:{{_item.billMoney}}">票据:{{_item.billMoney}}</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                                <i ng-show="type==20 && _item.standard_show">&nbsp;标准金额:{{_item.standard_money}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 2" ng-show="_item.gcShowFlag !== 0" class="textarea col-md-12">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<p ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</p>
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <textarea ng-blur="check_data(edit)" ng-model="_item.render_value " gcColName="{{_item.gcColName}}" ng-show="edit || !isbill"  ng-disabled="!_item.gcEditFlag == 1" >{{_item.render_value || _item.gcDefVal}}</textarea>
+                                   <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+                               </span>
+                                <label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                               {{_item.gcCpnAlias}} 
+                               <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                               <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                               <i ng-show="type==30 && _item.nobill_cd" >无</i>
+                               <i ng-show="type==30 && _item.expend_standard != undefined && _item.expend_standard_sp != 0" >{{_item.expend_standard}}</i>
+                               <i ng-show="type==30 && _item.expend_standard_sp != undefined" >{{_item.expend_standard_sp}}</i>
+                               <i ng-show="type==30 && _item.billMoney != undefined" title="票据:{{_item.billMoney}}">票据:{{_item.billMoney}}</i>
+                               <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                                <i ng-show="type==20 && _item.standard_show">&nbsp;标准金额:{{_item.standard_money}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 3" ng-show="_item.gcShowFlag !== 0" class="checkbox">
+							<div ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								{{_item.gcCpnAlias}} 
+								<text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+								<text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+								<div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</div>
+							<div>
+								<span ng-repeat="opt in _item.gcOptList" class="checkbox_container">
+                                    <input ng-model="_item.render_value " type="checkbox" value="{{opt.value}}" ng-disabled="!_item.gcEditFlag == 1" ng-checked="check_item(_item, opt);" gcColName="{{_item.gcColName}}" ng-show="edit || !isbill" >
+                                    <span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+								<label ng-if="opt.selected==true || (edit || !isbill)" class="cb_label">{{opt.value}}</label>
+								</span>
+							</div>
+						</div>
+						<div ng-if="_item.gcCpnType === 4" ng-show="_item.gcShowFlag !== 0" class="radio">
+							<div ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								{{_item.gcCpnAlias}} 
+								<text class="manadatory_ifd" ng-if='_item.gcInputMust==1' ng-disabled="!_item.gcEditFlag == 1">*</text>
+								<text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+								<div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</div>
+							<div>
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+								<span ng-repeat="opt in _item.gcOptList" class="rd_container">
+                                    <input 
+                                        type="radio" 
+                                        value="{{opt.value}}"  
+                                        name="{{_item.gcCpnAlias}}" 
+                                        gcColName="{{_item.gcColName}}"  
+                                        ng-disabled="!_item.gcEditFlag == 1"
+                                        ng-show="edit || !isbill"
+                                        ng-checked="check_item(_item, opt);"   > <i ng-show="edit || !isbill">{{item|getamount:_item}}</i>
+                                    
+								<label ng-if="opt.selected==true || (edit || !isbill)" class="rd_label">{{opt.value}}</label>
+								</span>
+							</div>
+						</div>
+
+					<div ng-if="_item.gcCpnType === 5" ng-show="_item.gcShowFlag !== 0"  class="text timeinfo">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								
+								<!--<p ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</p>-->
+			                    <div ng-if="_item.gcCpnFormat == 30"><input type="text" item="{{_item}}" realitem="_item" editflag="{{_item.gcEditFlag}}" edit="edit" date ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"  readonly="readonly"></div>
+			                    <div ng-if="_item.gcCpnFormat == 31"><input type="text" item="{{_item}}" realitem="_item" editflag="{{_item.gcEditFlag}}" edit="edit" datetime ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"  readonly="readonly"></div>
+			                    <div ng-if="_item.gcCpnFormat == 32"><input type="text" item="{{_item}}" realitem="_item" editflag="{{_item.gcEditFlag}}" edit="edit" time ng-model="_item.render_value" ng-change="change_apmonut(_item,item)" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}" ng-if="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1"  readonly="readonly"></div>
+			                    <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+			                    <span  ng-if="!edit  && isbill">{{_item.render_value}}</span>
+			                    <input gcColName="{{_item.gcColName}}" type="text" ng-show="false" ng-if="!edit  && isbill" value="{{_item.render_value}}" />
+							</span>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">{{_item.gcCpnAlias}} 
+								<text class="manadatory_ifd" ng-if='_item.gcInputMust==1'  ng-disabled="!_item.gcEditFlag == 1">*</text>
+								<i ng-show="type==30 && _item.nobill_cd" >无</i>
+								<i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+							</label>
+								<text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+								
+						</div>
+						<div ng-if="_item.gcCpnType === 6" ng-show="_item.gcShowFlag !== 0"  class="select">
+							<span ng-if="!edit  && isbill">{{_item.select_value}}</span>
+							<span select3 bill-check="bill_data_check()" childitem="item" edit-flag="_item.gcEditFlag" edit="edit" item="_item" ng-show="edit || !isbill" ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+                                <select 
+                                    ng-if="!!_item.gcCpnMultiple" 
+                                    ng-disabled="!_item.gcEditFlag == 1"
+                                    value="{{_item.render_value}}"
+                                    class="select_get"
+                                    multiple
+                                >
+                                    <option ng-repeat="opt in _item.gcOptList" {{opt.selected?'selected':''}} value="{{opt.value}}"  >{{opt.value}}</option>
+                                </select>
+                                <select 
+                                    ng-if="!_item.gcCpnMultiple" 
+                                    value="{{_item.render_value}}"
+                                    ng-disabled="!_item.gcEditFlag == 1"
+                                    class="select_get"
+                                >
+                                    <option ng-repeat="opt in _item.gcOptList" {{opt.selected?'selected':''}} value="{{opt.value}}"  >{{opt.value}}</option>
+                                </select>
+                            </span>
+                            <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}} 
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30 && _item.nobill_cd" >无</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30" title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 7" ng-show="_item.gcShowFlag !== 0"  class="text">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <input ng-blur="check_data(edit)" ng-model="_item.render_value " ng-change="change_apmonut(_item,item)" type="text" gcColName="{{_item.gcColName}}" value="{{_item.render_value || _item.gcDefVal}}"  ng-show="edit || !isbill" ng-disabled="!_item.gcEditFlag == 1" >
+                                <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</span>
+
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}} 
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30 &&_item.nobill_cd" >无</i>
+                                <i ng-show="type==30 && _item.expend_standard != undefined && _item.expend_standard_sp != 0" >{{_item.expend_standard}}</i>
+                                <i ng-show="type==30 && _item.expend_standard_sp != undefined" >{{_item.expend_standard_sp}}</i>
+                                <i ng-show="type==30 && _item.billMoney != undefined" title="票据:{{_item.billMoney}}">票据:{{_item.billMoney}}</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}" class="check_data">{{_item.bhName}}</i>
+                                <i ng-show="type==30"title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                                <i ng-show="type==20 && _item.standard_show">&nbsp;标准金额:{{_item.standard_money}}</i>
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 8" ng-show="_item.gcShowFlag !== 0" class="textarea">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+                                <textarea gcColName="{{_item.gcColName}}" ng-show="edit || !isbill"  ng-disabled="!_item.gcEditFlag == 1">{{_item.render_value || _item.gcDefVal}}</textarea><i ng-show="edit || !isbill">{{item|getamount:_item}}</i>
+                                <span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+                                <text class="manadatory_ifd" ng-if='_item.gcInputMust==1'>*</text>
+							</span>
+							<label ng-class="{is_red:_item.is_red || _item.nobill_cd || _item.sys_red}">
+                                {{_item.gcCpnAlias}} 
+                                  <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+                                <text class="process_ifd" ng-if='_item.gcMustCpn==1' >△</text>
+                                <i ng-show="type==30_item.nobill_cd" >无</i>
+                                <i ng-show="type==30" title="{{_item.bhName}}">{{_item.bhName}}</i>
+                                <i ng-show="type==30"title="{{_item.bbName}}">{{_item.bbName}}</i>
+                                <i ng-show="type==30" title="{{_item.sys_value}}">{{_item.sys_value}}</i>
+                            </label>
+						</div>
+						<!--去掉查看表单中的下划线(子表单中)-->
+						<div ng-if="item.gcCpnType === 9 && type != '10' && type != '20' && type != '30'" class="hr">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+                                <hr>
+                                	<div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+                            </span>
+							<label>
+                                {{_item.gcCpnAlias}}
+                            </label>
+						</div>
+						<div ng-if="_item.gcCpnType === 15"  ng-show="_item.gcShowFlag !== 0"  class="textarea col-md-12">
+							<span ng-mouseenter="detail= true" ng-mouseleave="detail = false">
+								<!--<p ng-if="_item.gcCpnDisc">{{item.gcCpnDisc}}</p>-->
+			                    <label ng-blur="check_data(edit)" ng-model="_item.render_value " ng-change="change_apmonut(_item,item)" value="{{_item.render_value || _item.gcDefVal}}" gcColName="{{_item.gcColName}}" ng-show="edit || !isbill" >
+			                    </label>
+			                    <span ng-if="!edit  && isbill">{{_item.render_value}}</span>
+			                    <div class="showDetail" ng-show="detail" ng-if="_item.gcCpnDisc">{{_item.gcCpnDisc}}</div>
+							</span>
+							<label ng-class="{is_red:_item.is_red}" class="ng-binding">
+			                    {{_item.gcCpnAlias}} 
+			                    <i ng-show="type==30" >{{_item.bhName}}</i>
+                                <i ng-show="type==30" >{{_item.bbName}}</i>
+			                </label>
+						</div>
+
+					</div>
+
+				</div>
+				<!--<div class="cost_div" class="col-md-12" style="padding:0px;margin-top:10px;" name="journel_budget" user_id="{{budget_item.userId}}">
+					<div ng-repeat="budget in item.budget_list[0].child" class="col-md-12">
+						<div class="text">
+							<span>
+                                    <input 
+                                        type="text" 
+                                        gcColName="{{budget.name}}" 
+                                        jp_cd_code="{{budget.jp_cd_code}}" 
+                                        ng-model="budget.jp_amount"
+                                    >
+                                </span>
+							<label>
+                                    {{budget.mdDesc || budget.cd_name}}
+                                </label>
+						</div>
+					</div>
+				</div>-->
+			</div>
+		</div>
+		<div class="col-md-12 add_jour" ng-if="type != 10 && add_jour_show && edit" ng-show="form_jour.gcCpnType == tap_type">
+			<i ng-click="add_jour()" class="fa fa-plus-circle" aria-hidden="true"></i>
+			<span>添加行程</span>
+		</div>
+		<div class="col-md-12 add_jour" ng-if="type != 10 && add_pay_show && edit" ng-show="form_pay.gcCpnType == tap_type">
+			<i ng-click="add_pay()" class="fa fa-plus-circle" aria-hidden="true"></i>
+			<span>添加支付方式</span>
+		</div>
+		<div class="col-md-12 tabstrip" ng-if="form_jour && form_pay">
+			<ul>
+				<li ng-class="{'tabstrip_active':form_jour.gcCpnType == tap_type}" ng-click="toggle_tap(form_jour.gcCpnType)"><span title="{{form_jour.gcCpnAlias}}">{{form_jour.gcCpnAlias}}</span></li>
+				<li ng-class="{'tabstrip_active':form_pay.gcCpnType == tap_type}" ng-click="toggle_tap(form_pay.gcCpnType)"><span title="{{form_pay.gcCpnAlias}}">{{form_pay.gcCpnAlias}}</span></li>
+			</ul>
+		</div>
+		<!--<div class="col-md-12" ng-if="type == 30" ng-show=" rule_bill_show || show_cost_err || err_bill_show || unjoin_bill_show || all_err_show || (maindata_err && maindata_err.length != 0)">-->
+		<div class="col-md-12" ng-if="type == 30" ng-show=" rule_bill_show || show_cost_err || err_bill_show || unjoin_bill_show || all_err_show || (maindata_err && maindata_err.length != 0)">
+			<div class="col-md-12 sub_form">
+				<div class="sub_form_container cost_err">
+					<label class="col-md-12 " ng-if="all_err_show">【表单中有与审定信息不符的内容,详见红字信息】</label>
+					<label class="col-md-12 " ng-if="show_cost_err">【费用不符合标准提示信息】</label>
+					<div class="col-md-12">
+						<ul ng-repeat="errs in cost_err track by $index">
+							<li>{{errs.journame}}:{{errs.errinfo}}</li>
+						</ul>
+					</div>
+					<label class="col-md-12 " ng-if="rule_bill_show">【票据内容错误信息】</label>
+					<div class="col-md-12">
+						<ul ng-repeat="error in rule_bill track by $index">
+							<li ng-class="error.ruLevel == 30 ? 'activeops' : 'inactiveops'">{{error.ruleName}}<span ng-if="error.ruLevel != 30">(警告)</span>
+							</li>
+						</ul>
+					</div>
+					<!--<label class="col-md-12 " ng-if="unjoin_bill_show || nobill_money_hint != ''">【未关联到行程的票据错误信息】</label>-->
+					<label class="col-md-12 " ng-if="unjoin_bill_show">【未关联到行程的票据错误信息】</label>
+					<div class="col-md-12">
+						<!--<ul ng-if="nobill_money_hint != ''">
+							<li>
+								<span ng-if="nobill_money_hint.expend_money != undefined && nobill_money_hint.expend_money != 0">存在</span><span ng-if="nobill_money_hint.expend_money == undefined || nobill_money_hint.expend_money == 0">无</span>未关联到行程的票据,
+								<span ng-if="nobill_money_hint.expend_money != undefined">票据金额为{{nobill_money_hint.expend_money}}</span>
+								<span ng-if="nobill_money_hint.expend_money != undefined">报销金额为{{nobill_money_hint.nobill_money}}</span>
+								</li>
+						</ul>-->
+						<ul ng-repeat="err in unjoin_bill.child track by $index">
+							<li>{{err.billMsg}}</li>
+						</ul>
+					</div>
+					<!--<label class="col-md-12 " ng-if="other_cost.length > 0">【其它费用提示】</label>
+					<div class="col-md-12">
+						<ul ng-repeat="other in other_cost track by $index">
+							<li>{{other.journame}}存在其它费用,
+								<span ng-if="other.expend_money != undefined">票据金额为{{other.expend_money}}</span> 
+								<span ng-if="other.bill_money != undefined">报销金额为{{other.bill_money}}</span> 
+							</li>
+						</ul>
+					</div>-->
+					<label class="col-md-12 " ng-if="maindata_err && maindata_err.length != 0">【主数据缺失信息】</label>
+					<div class="col-md-12">
+						<ul ng-repeat="errs in maindata_err track by $index">
+							<li>{{errs.eViewMsg}}</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+	
+
+	</div>
+	<div ng-if="type == 30 && isbill" style="float: right;">
+			<span>创建时间:  {{createtime}} </span>
+			<span>订单状态:  {{orderstatus}}</span>
+	</div>
+	<div class="btn-zone" ng-if="!isbill" >
+			
+		 <!--<div  style=" position: fixed;z-index:10;width: 718px;"style="position:relative">-->
+		
+		<button class="btn btn-success btn-favourite" ng-if="isguide" ng-click="goto_pre_page()" id="back">上一步</button>
+		<button ng-show="$parent.$parent.$parent.$parent.permission_check('edit',1)" ng-if="action != 2 && form_items" class="btn btn-success btn-favourite" ng-click="redirect_to_args('/budget_form_customize', type, business, guId, action);" id="edit_template">编辑</button>
+		<p ng-if="action != 2 && !form_items">您目前没有创建表单</p>
+		<button ng-if="action == 2 && $parent.$parent.$parent.$parent.permission_check('start',1)" class="btn btn-success btn-favourite" ng-click="enable_templates(business, type, guId, action);" id="start_template">启用该模板</button>
+		<button ng-if="action == 2 && $parent.$parent.$parent.$parent.permission_check('create',1)" class="btn btn-success btn-favourite" ng-click="redirect_to_args('/budget_form_customize', type,  business,guId, action);" id="create_form_template">从该模板创建</button>
+			<!--</div>-->
+		 </div>
\ No newline at end of file
diff --git a/src/static/templates/select3.html b/src/static/templates/select3.html
new file mode 100644
index 0000000..245b0ad
--- /dev/null
+++ b/src/static/templates/select3.html
@@ -0,0 +1,25 @@
+<div>
+    <div ng-transclude style="display:none;"></div>
+    <div class="select3-element">
+        <div ng-style="{'background-color':'{{editFlag == 0 ? '#EBEBE4' : ''}}'}" class="select-container" gcColName="{{item.gcColName}}" value="{{item.render_value}}" ng-style="style">
+    	<!--<div ng-if="editFlag == 0" class="select-container" style="background-color:#EBEBE4;" gcColName="{{item.gcColName}}" value="{{item.render_value}}" ng-style="style">-->
+            <div 
+                class="val-card" 
+                ng-repeat="sel_val in sel_val_lst track by $index"
+                ng-show={{sel_val|myhide}}
+                multiple
+                load-data
+            >
+                {{sel_val.label}}
+                <a ng-click="rm_option($event);" ng-href="javascript:void(0);">
+                	<i ng-if="editFlag !== 0 " class="fa fa-times"  aria-hidden="true" val="{{sel_val}}" style="color:#20b4aa;"></i>
+                    <i ng-if="editFlag == 0 " class="fa" aria-hidden="true" val="{{sel_val}}" style="color:#20b4aa;"></i>
+                    <!--<i ng-if="editFlag == 0"  class="fa" ng-class="{{editFlag !== 0 ? 'fa-times' : ''}} " aria-hidden="true" val="{{sel_val}}" style="color:#20b4aa;"></i>-->
+                </a>
+            </div>
+            <div class="suffix">
+                <i class="fa fa-caret-down" aria-hidden="true"></i>
+            </div>
+        </div>
+    </div>
+</div>
diff --git a/src/static/templates/system_config.html b/src/static/templates/system_config.html
new file mode 100644
index 0000000..9f424e2
--- /dev/null
+++ b/src/static/templates/system_config.html
@@ -0,0 +1,341 @@
+<title>系统设置</title>
+<div class="system_cfg" id="system_config">
+    <div class="bread_crumb">
+            <i class="fa fa-home" ></i> 
+            <i class="fa fa-angle-right" aria-hidden="true"></i> 
+            <label>系统设置</label>
+    </div>
+    
+    
+    
+    <div class="container form ">
+    	<ul id="myTab" class="col-md-8 nav nav-tabs">
+		   <li class="active"><a data-toggle="tab" style="cursor:pointer" ng-click="chang_show_flag(0)">
+		      系统设置</a></li>
+		   <li><a data-toggle="tab" style="cursor:pointer" ng-click="chang_show_flag(1)">系统变量</a></li>
+		</ul>
+		<div id="system_setting" ng-show="show_flag==0">
+			
+	        <div class="row">
+	            <div class="col-md-8">
+	                <div class="panel panel-default">
+	                	<div class="panel-heading">
+			                <label>系统设置</label>
+			            </div>
+	                    <div class="panel-heading {{!parseInt(cfg_data.budget.budget_open)  && 'collapse_heading'}}">
+	                        <label>是否启用预算单</label>
+	                        <img ng-src="{{parseInt(cfg_data.budget.budget_open)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" ng-click="toggle('cfg_data.budget.budget_open');">
+	                        <label>*(否,则无需针对其他相关参数设置)</label>
+	                    </div>
+	                    <!--<div class="panel-body" ng-if="parseInt(cfg_data.budget.budget_open)">
+	                        <table class="table table-bordered system_cfg_frm" >
+	                            <tbody>
+	                                <tr>
+	                                    <td>启用预算类型</td>
+	                                    <td>
+	                                        <div >
+	                                            <span>
+	                                                <input type="checkbox" value="0" ng-model="cfg_data.budget.budget_type[0]" >
+	                                            </span>
+	                                            <label>
+	                                                部门预算
+	                                            </label>
+	                                        </div>
+	                                        <div>
+	                                            <span>
+	                                                <input type="checkbox" value="1" ng-model="cfg_data.budget.budget_type[1]" >
+	                                            </span>
+	                                            <label>
+	                                                项目预算
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>预算管控方式</td>
+	                                    <td>
+	                                        <div>
+	                                            <span>
+	                                                <input type="radio" value="0" ng-model="cfg_data.budget.budget_method" >
+	                                            </span>
+	                                            <label>
+	                                                预警
+	                                            </label>
+	                                        </div>
+	                                        <div>
+	                                            <span>
+	                                                <input type="radio" value="1" ng-model="cfg_data.budget.budget_method">
+	                                            </span>
+	                                            <label>
+	                                                限制
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>预算执行预警值</td>
+	                                    <td>
+	                                        <div>
+	                                            <span>
+	                                                <input type="radio" value="ratio" ng-model="budget_ctrl_value.type" ng-disabled="cfg_data.budget.budget_method === '1'">
+	                                            </span>
+	                                            <label>
+	                                                比例值 
+	                                                <input 
+	                                                        type="text" 
+	                                                        ng-model="cfg_data.budget.budget_scale" 
+	                                                        ng-disabled="budget_ctrl_value.type === 'finger' || cfg_data.budget.budget_method === '1'"
+	                                                        ng-change="check_ratio_value();">
+	                                            </label>
+	                                            <label class="error" ng-if="cfg_data.budget.budget_scale && !ratio_val_match">比例值类型不合法, 请重新输入。</label>
+	                                        </div>
+	                                        <div>
+	                                            <span class="second_level" >
+	                                                <input 
+	                                                        type="radio" 
+	                                                        value="finger" 
+	                                                        ng-model="budget_ctrl_value.type"
+	                                                        ng-disabled="cfg_data.budget.budget_method === '1'">
+	                                            </span>
+	                                            <label>
+	                                                数值 
+	                                                <input 
+	                                                        type="text" 
+	                                                        ng-model="cfg_data.budget.budget_amount"
+	                                                        ng-disabled="budget_ctrl_value.type === 'ratio' || cfg_data.budget.budget_method === '1'"
+	                                                        ng-change="check_finger_value();" >
+	                                            </label>
+	                                            <label class="error" ng-if="cfg_data.budget.budget_amount && !finger_val_match">数值类型不合法, 请重新输入。</label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                            </tbody>
+	                        </table> 
+	                    </div>-->
+	                </div>
+	            </div>
+	        </div>
+	
+	        <div class="row">
+	            <div class="col-md-8">
+	                <div class="panel panel-default">
+	                    <div class="panel-heading {{!parseInt(cfg_data.apply.apply_open)  && 'collapse_heading'}}">
+	                        <label>是否启用申请单</label>
+	                        <img ng-src="{{parseInt(cfg_data.apply.apply_open)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" ng-click="toggle('cfg_data.apply.apply_open');">
+	                        <label><!--*(否,则无需针对其他相关参数设置)--></label>
+	                    </div>
+	                    <!--<div class="panel-body" ng-if="parseInt(cfg_data.apply.apply_open)">
+	                        <table class="table table-bordered system_cfg_frm" >
+	                            <tbody>
+	                                <tr>
+	                                    <td>启用申请工具模块的业务类型</td>
+	                                    <td>
+	                                        <div>
+	                                            <span>
+	                                                <input type="checkbox" value="0" ng-model="cfg_data.apply.apply_type[0]" >
+	                                            </span>
+	                                            <label>
+	                                                主数据带入
+	                                            </label>
+	                                        </div>
+	                                        <div>
+	                                            <span>
+	                                                <input type="checkbox" value="1" ng-model="cfg_data.apply.apply_type[1]" >
+	                                            </span>
+	                                            <label>
+	                                                参加业务类型集
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>开始占用预算额度的审批节点</td>
+	                                    <td>
+	                                        <div>
+	                                            <span>
+	                                                <input type="radio" value="0" ng-model="cfg_data.apply.apply_point">
+	                                            </span>
+	                                            <label>
+	                                                申请环节第一审批人
+	                                            </label>
+	                                        </div>
+	                                        <div>
+	                                            <span>
+	                                                <input type="radio" value="1" ng-model="cfg_data.apply.apply_point">
+	                                            </span>
+	                                            <label>
+	                                                申请环节最后审批人
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                            </tbody>
+	                        </table> 
+	                    </div>-->
+	                </div>
+	            </div>
+	        </div>
+	        <div class="row">
+	            <div class="col-md-8">
+	                <div class="panel panel-default">
+	                    <div class="panel-heading {{!parseInt(cfg_data.expend.expend_open)  && 'collapse_heading'}}">
+	                        <label>是否启用报销管理模块</label>
+	                        <img src="{{parseInt(cfg_data.expend.expend_open)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" ng-click="toggle('cfg_data.expend.expend_open');">
+	                        <label><!--*(否,则无需针对其他相关参数设置)--></label>
+	                    </div>
+	                    <!--<div class="panel-body" ng-if="parseInt(cfg_data.expend.expend_open)">
+	                        <table class="table table-bordered system_cfg_frm " >
+	                            <tbody>
+	                                <tr>
+	                                    <td>报销金额是否允许超过原申请单金额</td>
+	                                    <td>
+	                                        <div>
+	                                            <label style="text-align:center;">
+	                                                是
+	                                            </label>
+	                                            <label>
+	                                                <img 
+	                                                    ng-src="{{parseInt(cfg_data.expend.expend_over)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" 
+	                                                    ng-click="toggle('cfg_data.expend.expend_over');"
+	                                                >
+	                                            </label>
+	                                            <label style="text-align:left;margin-left:-35px;">
+	                                                否
+	                                            </label>
+	                                            <label>
+	                                                *(逻辑管控点:超预算执行是否需要领导单独事项审批)
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>报销金额小于等于原申请单金额情况下是否需要单独就报销事项再审批</td>
+	                                    <td>
+	                                        <div>
+	                                             <label style="text-align:center;">
+	                                                是
+	                                            </label>
+	                                            <label>
+	                                                <img 
+	                                                    ng-src="{{parseInt(cfg_data.expend.expend_below)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" 
+	                                                    ng-click="toggle('cfg_data.expend.expend_below');"
+	                                                >
+	                                            </label>
+	                                            <label style="text-align:left;margin-left:-35px;">
+	                                                否
+	                                            </label>
+	                                            <label>
+	                                                *(逻辑管控点:影响后续流程)
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>是否允许白条报销</td>
+	                                    <td>
+	                                        <div>
+	                                             <label style="text-align:center;">
+	                                                是
+	                                            </label>
+	                                            <label>
+	                                                <img 
+	                                                    ng-src="{{parseInt(cfg_data.expend.expend_free)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" 
+	                                                    ng-click="toggle('cfg_data.expend.expend_free');" 
+	                                                >
+	                                            </label>
+	                                            <label style="text-align:left;margin-left:-35px;">
+	                                                否
+	                                            </label>
+	                                            <label>
+	                                                    *(接口传递,费用系统检查)
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>是否允许跨区域单据报销(单据显示地与业务发生地不一致的情况)</td>
+	                                    <td>
+	                                        <div>
+	                                             <label style="text-align:center;">
+	                                                是
+	                                            </label>
+	                                            <label>
+	                                                <img 
+	                                                    ng-src="{{parseInt(cfg_data.expend.expend_cross)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" 
+	                                                    ng-click="toggle('cfg_data.expend.expend_cross');" 
+	                                                >
+	                                            </label>
+	                                            <label style="text-align:left;margin-left:-35px;">
+	                                                否
+	                                            </label>
+	                                            <label>
+	                                                *(接口传递,费用系统检查)
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                                <tr>
+	                                    <td>是否启用信息补录功能</td>
+	                                    <td>
+	                                        <div>   
+	                                             <label style="text-align:center;">
+	                                                是
+	                                            </label>
+	                                            <label>
+	                                                <img 
+	                                                    ng-src="{{parseInt(cfg_data.expend.expend_supply)?'./static/img/switch_on.png':'./static/img/switch_off.png'}}" 
+	                                                    ng-click="toggle('cfg_data.expend.expend_supply');" 
+	                                                >
+	                                            </label>
+	                                            <label style="text-align:left;margin-left:-35px;">
+	                                                否
+	                                            </label>
+	                                            <label>
+	                                                *(接口传递,费用系统检查)
+	                                            </label>
+	                                        </div>
+	                                    </td>
+	                                </tr>
+	                            </tbody>
+	                        </table> 
+	                    </div>-->
+	                </div>
+	            </div>
+	        </div>
+        	<div>
+        		<buttton class="save_btn btn btn-success btn-favourite" ng-click="refdata()">同步组织机构</buttton>
+        	</div>
+		</div>
+        <div id="system_variable" ng-show="show_flag==1">
+	        <div class="row">
+	        	<div class="col-md-8">
+	                <div class="panel panel-default">
+	                	<div class="panel-heading">
+	                        <label>系统变量</label>
+	                        <button ng-click="add_formula()" class="add_btn btn btn-success btn-favourite btn-action">新增</button>
+	                    </div>
+			        	 <table class="table table-bordered system_cfg_frm" >
+			                    <tbody>
+			                        <tr ng-repeat="formula in formulaList">
+			                            <td>{{formula.name}}</td><td>{{formula.view}}</td><td><button ng-click="add_formula(formula)" class="btn btn-success btn-favourite btn-action">编辑</button> &nbsp;&nbsp;<button class="btn btn-success btn-favourite btn-action" ng-click="del_formula(formula)">删除</button></td>
+			                       </tr>
+			                    </tbody>   
+			        	</table>
+		        	</div>
+	        	</div>
+	        </div>
+        </div>
+        
+        <div class="row" ng-show="show_flag==0">
+            <div class="col-md-12">
+                <button ng-show="permission_check('save_system')" class="save_btn btn btn-success btn-favourite" ng-click="save_system_cfg();" id="save_system">&nbsp;&nbsp;&nbsp;完成&nbsp;&nbsp;&nbsp;</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+
+
+
+    
\ No newline at end of file
diff --git a/src/static/templates/templates_center.html b/src/static/templates/templates_center.html
new file mode 100644
index 0000000..f742715
--- /dev/null
+++ b/src/static/templates/templates_center.html
@@ -0,0 +1,218 @@
+<title>模板中心</title>
+<div class="split_form" ng-click="show_sign_all();$event.stopPropagation();$(event).preventDefault();" id="templates_center">
+	<div class="main travel_expense form_container" style="padding-left:230px;padding-right:0px;">
+		<div class="content">
+			<div class="container">
+				<ul class="business_items forms_center">
+
+					<li ng-repeat="business in indus_templates">
+						<div ng-mouseenter="mouseover_business_item($event)" ng-mouseleave="mouseout_business_item($event)">
+							<label ng-bind="business.inName"></label>
+							<ul>
+								<li ng-bind="business.inDesc">
+									<!--{{business.inDesc}}-->
+								</li>
+							</ul>
+							<img src="{{business.inBigIcon}}" />
+							<span ng-bind="business.inName"></span>
+						</div>
+					</li>
+
+					<!--
+                    <li>
+                        <a ng-href="javascript:void(0);" ng-click="show_more();">
+                            <img src="./static/img/more_collapse.png" />
+                            <label class="bottom_label"> &nbsp;&nbsp;&nbsp;{{business_card_shown?'返回':'更多'}}</label>
+                        </a>
+                    </li>
+                   -->
+				</ul>
+			</div>
+		</div>
+	</div>
+
+	<div class="left" style="width:230px;">
+		<div class="containr_header">
+			模板管理
+		</div>
+		<ul class="ul-tree templates_list">
+			<li ng-repeat="template in indus_templates">
+				<div class="template_list_top">
+					<a ng-href="javascript:void(0);" ng-click="collapse=!collapse">
+						<img src="{{template.inBigIcon}}"><i style="font-style: normal;" ng-bind="template.inName"></i>
+					</a>
+
+					<!--加入标志符-->
+					<span ng-style="template.o1" ng-click="show_sign(template);$event.stopPropagation();">i</span>
+				</div>
+
+				<!--表单内容-->
+				<div class="list-operation" ng-show="template.num1==1&&temp_show_falg">
+					<div class="list-triangle-top">
+						<div class="list-triangle-top-in"></div>
+						<div class="list-triangle-top-out"></div>
+					</div>
+					<div class="list-group list-operation-centent" ng-init="indus_change_type=0">
+						<a ng-show="permission_check('add_bussiness')" ng-href="javascript:void(0);" class="list-group-item" ng-click="template.num2=1;template.num1=0;indus_change_type=1;" id="add_bussiness">添加行业</a>
+						<a ng-show="permission_check('edit_bussiness')" ng-href="javascript:void(0);" class="list-group-item" ng-click="template.num2=1;template.num1=0;indus_change_type=2;" id="edit_bussiness">修改行业</a>
+						<a ng-show="permission_check('delete_bussiness')" ng-href="javascript:void(0);" class="list-group-item" ng-click="delete_indus(template);template.num3=0;template.num1=0;indus_change_type=3;" id="delete_bussiness">删除行业</a>
+					</div>
+				</div>
+				<div class="list-change" ng-show="template.num2==1||template.num3==1">
+					<div class="list-triangle-top">
+						<div class="list-triangle-top-in"></div>
+						<div class="list-triangle-top-out"></div>
+					</div>
+					<div class="list-change-centent">
+						<label ng-show="template.num2==1">标题&nbsp;&nbsp;</label><input ng-show="template.num2==1" type="text" ng-model="$parent.template_title">
+						<!-- <div ng-show="permission_check('template_pass')&&template.num2==1"> -->
+						<div ng-show="false">
+							<label>图标</label><input type="file" file-model="images" ngf-select onchange="angular.element(this).scope().img_change(this.files)" name="file"  ngf-pattern="image/*" accept="image/jpg,image/jpeg,image/png" ngf-max-size="5MB" ngf-min-height="100"/>
+							<img src={{images}} alt="" ng-show="template.img_show_flag">
+						</div>
+						<div class="list-button">
+							<button type="button" class="btn btn-primary" ng-click="indus_change(template,indus_change_type)" id="template_pass">确定</button>
+							<button type="button" class="btn btn-default" data-dismiss="modal" ng-click="template.num1=0;template.num2=0;template.num3=0;template.o1={}" id="template_cancle">取消</button>
+						</div>
+					</div>
+				</div>
+				<!--表单内容结束-->
+
+				<ul ng-if="collapse" class="list_detail_ul">
+					<li class="list_detail_li">
+						<div class="template_list_second">
+							<!--<img src="./static/img/doc.png">-->
+							<img src="./static/img/rebuise_card.png"/>
+							<a ng-href="javascript:void(0);" ng-click="budget_show =! budget_show;$event.stopPropagation();">
+								预算单
+							</a>
+							<!--加入标志符-->
+							<span ng-style="template.o1_budget" ng-click="show_sign_budget(template);$event.stopPropagation();">i</span>
+						</div>
+						<!--表单内容-->
+						<div class="list-operation" ng-show="template.num1_budget==1&&temp_show_falg">
+							<div class="list-triangle-top">
+								<div class="list-triangle-top-in"></div>
+								<div class="list-triangle-top-out"></div>
+							</div>
+							<div ng-show="permission_check('add_budget_template')" class="list-group list-operation-centent">
+								<a ng-href="javascript:void(0);" class="list-group-item" ng-click="redirect_to_args('/budget_form_customize',10,template.inCode,'',3)" id="add_budget_template">添加预算单模版</a>
+							</div>
+						</div>
+						<!--表单内容结束-->
+						<ul ng-if="budget_show">
+							<li class="list_detail" ng-repeat="budget in template.budgets">
+								<a ng-href="javascript:void(0);" ng-click="show_saved_form( template.inCode,10,3,budget.guId);$event.stopPropagation();">
+									{{budget.guTempName}}
+								</a>
+								<!--加入标志符-->
+								<span ng-style="budget.o1_detail" ng-click="show_sign_budget_detail(template,budget);$event.stopPropagation();">i</span>
+								<!--表单内容-->
+								<div class="list-operation" ng-show="budget.num1_detail==1&&temp_show_falg">
+									<div class="list-triangle-top">
+										<div class="list-triangle-top-in"></div>
+										<div class="list-triangle-top-out"></div>
+									</div>
+									<div ng-show="permission_check('delete_budget_template')" class="list-group list-operation-centent">
+										<a ng-href="javascript:void(0);" class="list-group-item" ng-click="delete_form(budget);budget.num3=1;budget.num1=0"  id="delete_budget_template">删除预算单模版</a>
+									</div>
+								</div>
+								<div class="list-change" ng-show="budget.num2==1||budget.num3==1">
+									<div class="list-triangle-top">
+										<div class="list-triangle-top-in"></div>
+										<div class="list-triangle-top-out"></div>
+									</div>
+								</div>
+								<!--表单内容结束-->
+							</li>
+						</ul>
+					</li>
+					<li class="list_detail_li">
+						<div class="template_list_second">
+							<!--<img src="./static/img/doc.png">-->
+							<img src="./static/img/rebuise_card.png"/>
+							<a ng-href="javascript:void(0);" ng-click="apply_show =!apply_show;$event.stopPropagation();">
+								申请单
+							</a>
+							<!--加入标志符-->
+							<span ng-style="template.o1_apply" ng-click="show_sign_apply(template);$event.stopPropagation();">i</span>
+						</div>
+						<!--表单内容-->
+						<div class="list-operation" ng-show="template.num1_apply==1&&temp_show_falg">
+							<div class="list-triangle-top">
+								<div class="list-triangle-top-in"></div>
+								<div class="list-triangle-top-out"></div>
+							</div>
+							<div ng-show="permission_check('add_apply_template')" class="list-group list-operation-centent">
+								<a ng-href="javascript:void(0);" class="list-group-item" ng-click="redirect_to_args('/budget_form_customize',20,template.inCode,'',3)" id="add_apply_template">添加申请单模版</a>
+							</div>
+						</div>
+						<!--表单内容结束-->
+						<ul ng-if="apply_show">
+							<li class="list_detail" ng-repeat="apply in template.applys">
+								<a ng-href="javascript:void(0);" ng-click="show_saved_form( template.inCode,20,3,apply.guId);$event.stopPropagation();">
+									{{apply.guTempName}}
+								</a>
+								<!--加入标志符-->
+								<span ng-style="apply.o1_detail" ng-click="show_sign_apply_budget_detail(template,apply);$event.stopPropagation();">i</span>
+								<!--表单内容-->
+								<div class="list-operation" ng-show="apply.num1_detail==1&&temp_show_falg">
+									<div class="list-triangle-top">
+										<div class="list-triangle-top-in"></div>
+										<div class="list-triangle-top-out"></div>
+									</div>
+									<div ng-show="permission_check('delete_apply_template')" class="list-group list-operation-centent">
+										<a ng-href="javascript:void(0);" class="list-group-item" ng-click="delete_form(apply);apply.num3=1;apply.num1=0" id="delete_apply_template">删除申请单模版</a>
+									</div>
+								</div>
+								<!--表单内容结束-->
+							</li>
+						</ul>
+					</li>
+					<li class="list_detail_li">
+						<div class="template_list_second">
+							<!--<img src="./static/img/doc.png">-->
+							<img src="./static/img/rebuise_card.png"/>
+							<a ng-href="javascript:void(0);" ng-click="expend_show =! expend_show;$event.stopPropagation();">
+								报销单
+							</a>
+							<!--加入标志符-->
+							<span ng-style="template.o1_reimbursement" ng-click="show_sign_reimbursement(template);$event.stopPropagation();">i</span>
+						</div>
+						<!--表单内容-->
+						<div class="list-operation" ng-show="template.num1_reimbursement==1&&temp_show_falg">
+							<div class="list-triangle-top">
+								<div class="list-triangle-top-in"></div>
+								<div class="list-triangle-top-out"></div>
+							</div>
+							<div ng-show="permission_check('add_expend_template')" class="list-group list-operation-centent">
+								<a ng-href="javascript:void(0);" class="list-group-item" ng-click="redirect_to_args('/budget_form_customize',30,template.inCode,'',3)" id="add_expend_template">添加报销单模版</a>
+							</div>
+						</div>
+						<!--表单内容结束-->
+						<ul ng-if="expend_show">
+							<li class="list_detail" ng-repeat="expend in template.expends">
+								<a ng-href="javascript:void(0);" ng-click="show_saved_form( template.inCode,30,3,expend.guId);$event.stopPropagation();">
+									{{expend.guTempName}}
+								</a>
+								<!--加入标志符-->
+								<span ng-style="expend.o1_detail" ng-click="show_sign_extend_detail(template,expend);$event.stopPropagation();">i</span>
+								<!--表单内容-->
+								<div class="list-operation" ng-show="expend.num1_detail==1&&temp_show_falg">
+									<div class="list-triangle-top">
+										<div class="list-triangle-top-in"></div>
+										<div class="list-triangle-top-out"></div>
+									</div>
+									<div ng-show="permission_check('delete_expend_template')" class="list-group list-operation-centent">
+										<a ng-href="javascript:void(0);" class="list-group-item" ng-click="delete_form(expend);expend.num3=1;expend.num1=0;" id="delete_expend_template">删除报销单模版</a>
+									</div>
+								</div>
+								<!--表单内容结束-->
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+		</ul>
+	</div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/to_do_list.html b/src/static/templates/to_do_list.html
new file mode 100644
index 0000000..0c819da
--- /dev/null
+++ b/src/static/templates/to_do_list.html
@@ -0,0 +1,46 @@
+<div class="split_form">
+    <div class="main" style="padding-left:230px;padding-right:0px;">
+        <div class="form_container">
+        </div>
+    </div>
+    <div class="left" style="width:230px;">
+        <ul class="ul-tree">
+            <li>
+                <img src="./static/img/to_do.png" class="small" >
+                <a 
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/budget_form_customize/1')"
+                >
+                    我的待办
+                </a>
+            </li>
+            <li>
+                <img src="./static/img/create_form.png" class="small" >
+                <a 
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/budget_form_customize/1')"
+                >
+                    预算单
+                </a>
+            </li>
+            <li>
+                <img src="./static/img/form_created.png" >
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-click="show_saved_form()"
+                >
+                    申请单
+                </a>
+            </li>
+            <li>
+                <img src="./static/img/form_default.png" >
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-click="show_saved_form()"
+                >
+                    报销单
+                </a>
+            </li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/travel_expense.html b/src/static/templates/travel_expense.html
new file mode 100644
index 0000000..b2321f9
--- /dev/null
+++ b/src/static/templates/travel_expense.html
@@ -0,0 +1,262 @@
+<title ng-bind="type=='10'?'预算单':''+type=='20'?'申请单':''+type=='30'?'报销单':''">
+
+</title>
+<div class="split_form" id="searchorder">
+    <div class="main travel_expense" style="padding-left:230px;padding-right:0px;">
+    	<div>
+    		<ul class="main_choose">
+    			<li ng-bind="my_form" ng-click="toggle_form(1)" ng-class="{'main_active':$root.my_form_type == 1}"></li>
+    			<li ng-if="$root.permission_check(type,3)" ng-bind="my_check_form" ng-click="toggle_form(2)" ng-class="{'main_active':$root.my_form_type == 2}"></li>
+    		</ul>
+    	</div>
+        <div class="condition_search">
+            <div class="condition_search_header">
+                <label class="first"></label>
+                <label class="second" ng-show="permission_check('change',1)">
+                    <a 
+                        ng-href="javascript:void(0);" 
+                        ng-click="show_search_dropdown($event);"
+                        id="change_search_condition"
+                        >
+                        <img src="./static/img/search_item.png">
+                        &nbsp;更改查询内容
+                    </a>
+                </label>
+            </div>
+            <div class="search_item" >
+                <div class="search_column" ng-repeat="search in searchlist | filter: {selected: true}">
+                	<!--预算、申请、报销单号-->
+                    <span ng-if="search.gc_cpn_type == 1 || search.gc_cpn_type == 2 || search.gc_cpn_type == 90">
+                        <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft" ng-keydown="search_keydown($event)" class="text_input">
+                    </span>
+                    <span ng-if="search.gc_cpn_type == 5" style="display: inline-block;width:285px;">
+                        <span style="display: inline-block;width: 47%;">
+                            <input type="text" date editflag="1" name="{{search.sfFieldName}}" ng-model="search.valueLeft" ng-keydown="search_keydown($event)"> 
+                        </span>
+                        <span>
+                            ~ 
+                        </span>
+                        <span style="display: inline-block;width: 47%;">
+                            <input type="text" date editflag="1" name="{{search.sfFieldName}}" ng-model="search.valueRight" ng-keydown="search_keydown($event)">
+                        </span>
+                    </span>
+                    <span ng-if="search.gc_cpn_type == 7">
+                        <span>
+                            <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft" ng-keydown="search_keydown($event)"> 
+                        </span>
+                        <span>
+                            ~ 
+                        </span>
+                        <span>
+                            <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueRight" ng-keydown="search_keydown($event)">
+                        </span>
+                    </span>
+                    <span ng-if="search.gc_cpn_type == 3 || search.gc_cpn_type == 4 || search.gc_cpn_type == 6" ng-model="search.valueLeft">
+                        <span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+                    </span>
+                    <span ng-if="search.gc_cpn_type == 11">
+                        <span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+                    </span>
+                    <span ng-if="search.gc_cpn_type == 12">
+                        <span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+                    </span>
+                    <span ng-if="search.gc_cpn_type == 13">
+
+                    </span>
+                    
+                    <!--<span ng-if="search.gc_cpn_type == 0">
+						<span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+                    </span>-->
+                    <label ng-bind="search.gc_cpn_alias">
+                        <!--{{search.gc_cpn_alias}}-->
+                    </label>
+                </div>
+                <div class="search_column" ng-if="$root.my_form_type == 2">
+					<label>状态</label>
+					<select name="status" ng-model="$root.my_status" class="myselect">
+						<option ng-value="10" >已审核</option>
+						<option ng-value="20" >驳回</option>
+						<option ng-value="30" >已通过</option>
+						<option ng-value="50" >待审核</option>
+					</select>
+				</div>
+                <div class="search_column_button" ng-if="$root.my_form_type == 1">
+                    <span>
+                        <span>
+                            <button ng-show="permission_check('search',1)" class="btn btn-success btn-favourite btn-action" ng-click="refreshdata()" id="search_condition">查询</button> 
+                        </span>
+                    </span>
+                </div>
+                <div class="search_column_button" ng-if="$root.my_form_type == 2">
+                    <span>
+                        <span>
+                            <button ng-show="permission_check(type,4)" class="btn btn-success btn-favourite btn-action" ng-click="refreshdata()" id="search_condition">查询</button> 
+                        </span>
+                    </span>
+                </div>
+            </div>
+        </div>
+        <div class="condition_search">
+            <div class="condition_search_header">
+                <div class="first">
+                    <span><button ng-show="permission_check('new',1) && $root.my_form_type == 1" class="btn btn-success btn-favourite btn-action" ng-click="new();" id="new_order">+ 新建</button></span>   
+                    <span ng-show="permission_check('delete',1) && $root.my_form_type == 1"><a ng-href="javascript:void(0);" ng-click="delete_batch();"><img src="./static/img/travel_expense_del.png" id="delete_order">删除</a></span>
+                    <!--
+                    <span><a ng-href="javascript:void(0);" ng-click="import();"><img src="./static/img/travel_expense_import.png">导入</a></span>
+                    <span><a ng-href="javascript:void(0);" ng-click="export();"><img src="./static/img/travel_expense_export.png">导出</a></span>
+                    -->
+                </div>
+                <label class="second">
+                  <!--  <span>汇总金额: <span ng-bind="sum_money"></span></span>-->
+                    <span ng-show="permission_check('show',1)">
+                        <a
+                        ng-href="javascript:void(0);" 
+                        ng-click="show_conent_dropdown($event);"
+                        id="show_condition"
+                        >
+                            <img src="./static/img/travel_expense_view_content.png">&nbsp;显示内容
+                        </a>
+                    </span>
+                    <!--
+                    <span><img src="./static/img/travel_expense_full.png">&nbsp;全屏</span>
+                    -->
+                </label>
+            </div>
+            <div class="table-content">
+                <table class="table table_travel_expense">
+                    <thead>
+                        <tr>
+                        	
+                            <th style="width:70px;" ng-show="$root.my_form_type == 1">
+                                &nbsp;
+                            </th>
+                            <th ng-repeat="data in budget_data.headers track by $index" ng-click="content_ordering()">
+                                {{data.label}}
+                            </th>
+                            <th ng-if="$root.my_form_type == 2">
+								状态
+							</th>
+                        </tr>
+                    </thead>
+                    <tbody>
+                    	
+                    	<tr 
+                            class="{{($index % 2)?'odd':'even'}}"
+                            click-detail-td 
+                            ng-repeat="data in budget_data.data track by $index"
+                        >
+                            <td ng-show="$root.my_form_type == 1">
+                                <input 
+                                    type="checkbox" 
+                                    style="margin:0px;height:12px;width:12px;"
+                                    bind_value="{{doc_id(data)}}"
+                                    name="bill_cbx_{{doc_id(data)}}" 
+                                    ng-click="select_bill($event);"
+                                    ng-show="doc_id(data) && delete_checkbox(data)"
+                                />
+                            </td>
+                            <td class="ellipsis_td" ng-repeat="value in sub_data(data) track by $index" title="{{value}}">
+                                {{value}}
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+            <div class="condition_search_footer">
+                <label class="first">
+                    <span>
+                        <select ng-model="num_per_page" ng-change="change_page_num();">
+                            <option value="20" selected="selected" >20条/页</option>
+                            <option value="50"> 50条/页</option>
+                            <option value="100">100条/页</option>
+                        </select>
+                    </span>
+                    <span ng-bind="'共'+math_ceil(rows / num_per_page)+'页'">
+                        <!--共{{math_ceil(rows / num_per_page)}}页-->
+                    </span>
+                </label>
+                <label class="second">
+                    <span>
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="next_page();">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                    <span>第<input type="text" value="1" ng-model="page_num" ng-blur="change_page();" ng-change="change_keycode(page_num)"> 页/ 共<span ng-bind="math_ceil(rows / num_per_page)"></span>页</span>
+                </label>
+            </div>
+        </div>
+    </div>
+    <div class="wait bg-modal bill_create_pop" ng-if="wait"><i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i></div>
+    <div class="left" style="width:230px;">
+        <ul class="ul-tree">
+            <li>
+                <img src="./static/img/to_do.png" class="small" >
+                <a
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense_todos/')"
+                >
+                    我的待办
+                </a>
+            </li>
+            <li ng-if="permission_check('budgetorder') && $root.budget_open == 1">
+                <img src="./static/img/create_form.png" class="small" >
+                <a
+                    ng-class="{'active': type=='10'}"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense/1')"
+                >
+                    预&nbsp;算
+                </a>
+            </li>
+            <li ng-if="permission_check('applyorder') && $root.apply_open == 1">
+                <img src="./static/img/form_created.png" >
+                <a
+                    ng-class="{'active': type=='20'}"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense/2')"
+                >
+                    申&nbsp;请
+                </a>
+            </li>
+            <li ng-if="permission_check('expendorder') && $root.expend_open == 1">
+                <img src="./static/img/form_default.png" >
+                <a
+                    ng-class="{'active': type=='30'}"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense/3')"
+                >
+                    报&nbsp;销
+                </a>
+            </li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/travel_expense_detail_popup.html b/src/static/templates/travel_expense_detail_popup.html
new file mode 100644
index 0000000..428c07a
--- /dev/null
+++ b/src/static/templates/travel_expense_detail_popup.html
@@ -0,0 +1,118 @@
+<div class="bg-modal bill_create_pop  {{edit?'bill_detail_edit':'bill_detail_pop'}}" >
+    <div class="pop_panel" ng-drop="true" ng-drag="$root.drag_flag" ng-mousedown="$root.drag_div($event)" ng-drag-start="$root.draging()" ng-drag-stop="$root.drag_div_end()" style="padding-top:69px;">
+        <div class="heading" style="margin-top:-69px;">
+            <ul>
+                <li ng-click="flow_status_show = false">
+                                                      流程表单
+                </li>
+                <!--<li ng-show="$root.permission_check('flow',1)" ng-click="flowstatus()">
+                    流程状态
+                </li>-->
+                <li ng-click="flowstatus()">
+                    流程状态
+                </li>
+            </ul>
+            <div class="close" ng-click="close_lock()">
+                <img src="./static/img/close.png">
+            </div>
+        </div>
+        <div class="body" style="border: 1px solid #ddd;height:100%;">
+        	<div class="audit_commit" ng-if="audit_commit_show">
+        		<div class="audit_commit_header">
+        			审核意见
+        		</div>
+        		<div class="audit_commit_content">
+        			<!--<p>备注</p>-->
+        			<textarea id="audit_commit_content_textarea"></textarea>
+        		</div>
+        		<div class="audit_commit_btn">
+        			<button class="btn btn-action" ng-click="audit_commit()">确定</button>
+        			<button class="btn btn-action" ng-click="audit_commit_close()">取消</button>
+        		</div>
+        	</div>
+        	<div class="audit_commit" ng-if="back_commit_show">
+        		<div class="audit_commit_header">
+        			退回意见
+        		</div>
+        		<div class="audit_commit_content">
+        			<!--<p>备注</p>-->
+        			<textarea id="back_commit_content_textarea"></textarea>
+        		</div>
+        		<div class="audit_commit_btn">
+        			<button class="btn btn-action" ng-click="back_commit()">确定</button>
+        			<button class="btn btn-action" ng-click="back_commit_close()">取消</button>
+        		</div>
+        	</div>
+            <div class="tool_icon" style="z-index: 99999999999999999999;"><!--  (true && re_upload) || (flow_back && true) -->
+            	<div ng-if="type==30 && $root.permission_check(bill_commit_permission) && ((flow_back || (res.length == 0 && res != undefined))&& re_upload)">
+	        		<a ng-href="javascript:void(0);" ng-click="show_iframe();">
+					<img src="./static/img/update.png" title="票据上传" /> {{bill_commit_text}}
+					</a>
+				</div>
+				 <div ng-if="restart_review_show" id="restart_review"> 
+				<!-- <div ng-if="1==0" id="restart_review"> -->
+					<a ng-href="javascript:void(0);" ng-click="restart_review()">
+					<img src="./static/img/page.png" style="height:20px;width:20px"/> 重新审单
+					</a>
+				</div>
+	        	<div id="pic" ng-if="exCouldNumber != undefined">
+	        		<a ng-href="javascript:void(0);" ng-click="show_pic()">
+					<img src="./static/img/pic.png" /> 查看票据图片
+					</a>
+	        	</div>
+	        	<div class="paper_iframe" ng-if="type==30 && iframe_show">
+	        		<div class="paper_iframe_nav">
+		        		<span>
+		        			 票据上传
+		        		</span>
+						<div class="close" ng-click="close_iframe()">
+			                <img src="./static/img/close.png">
+			            </div>
+	        		</div>
+	        		<iframe id="iframeId" style="width: 100%;overflow: auto;" name='myiframe' ng-init="show_iframe()" ng-src='{{iframe_src}}'></iframe>
+	        	</div>
+            	<div class="order_number"><span ng-if="type == 10">预算单</span><span ng-if="type == 20">申请单</span><span ng-if="type == 30">报销单</span>号:{{order_number}}</div>
+            	<div class="order_number" ng-if="exCouldNumber != undefined"><span ng-if="type == 30">云单编</span>号:{{exCouldNumber}}</div>
+            	<!--<div ng-if="!edit && type == 30 && rectification_show"><a ng-click="rectification();" ng-href="javascript:void(0);"><i class="fa fa-eraser" aria-hidden="true" ></i>&nbsp;重新纠偏</a></div>-->
+            	<div ng-if="!edit && type == 30 && re_account_show"><a ng-click="re_account();" ng-href="javascript:void(0);"><i class="fa fa-pencil" aria-hidden="true" ></i>&nbsp;重新记账</a></div>
+                <div ng-show="$root.permission_check('deletebtn',1)&&deleteflag"id="deletebtn"><a ng-click="rm_bill();" ng-href="javascript:void(0);"><i class="fa fa-trash" aria-hidden="true"></i>&nbsp;删除</a></div>
+                <div ng-show="$root.permission_check('editbtn',1)&&editflag" id="editbtn"><a ng-click="edit_bill();" ng-class="{'allow_commit':save_btn_flag,'forbidden_commit':!save_btn_flag}" ng-href="javascript:void(0);"><i class="fa fa-pencil" aria-hidden="true" ></i>&nbsp;编辑</a></div>
+                <div ng-show="$root.permission_check(check,2)&&commitflag&&!edit&&commitflag_bill&&submit_Pors" id="commitbtn"><a ng-click="commit_bill();" ng-class="{'allow_commit':(save_btn_flag && init_btn_flag),'forbidden_commit':(!save_btn_flag || !init_btn_flag)}" ng-href="javascript:void(0);" ><i class="fa fa-file-text-o" aria-hidden="true"></i>&nbsp;{{check}}</a></div>
+                <div ng-show="$root.permission_check('backbtn',1)&&backflag"  id="backbtn"><a ng-click="back_bill();" ng-href="javascript:void(0);"><i class="fa fa-arrow-circle-o-left" aria-hidden="true"></i>&nbsp;退回</a></div>
+               <!--
+                <div><i class="fa fa-print" aria-hidden="true"></i>&nbsp;打印</div>
+                -->
+
+            </div>   
+
+            <div id="flowcontent" ng-show="!flow_status_show">
+	            <div class="form_container">
+	                <div saved-form type="type" isbill='true' billid="billid" edit="edit" btnflag="btnflag"></div>
+			        <div class="row btn-zone-center" ng-show="btnflag">
+			    		<button class="btn btn-success btn-favourite " ng-disabled="!save_btn_flag" ng-click="create_bill()">保存</button>
+			   			<button class="btn btn-success btn-favourite " ng-click="cancel();">取消</button>
+					</div>
+	            </div>
+            </div>
+            
+            
+        
+        <div ng-show="flow_status_show" class="flowstatus" id="flow_content">
+				<ul>
+					<li ng-repeat="response in res">
+						<div style="position: relative;text-align: center;clear:left;border-right:1px solid {{response.flStepCode|borderfilter}}" class="flowdetail">
+							<p>{{response.activityName}}</p>
+							<span style="background:{{response.flStepCode|colorfilter}};">{{response.flStepCode|stepfilter}}</span>
+							<!--<img src='{{response.flStepCode|statusfilter}}'/>-->
+						</div>
+						<div style="border-right:none;">
+							<p>{{response.flOperatorName}}&nbsp;&nbsp;{{response.flTime}}</p>
+							<p>{{response.info}}</p>
+						</div>
+					</li>
+				</ul>
+		    </div>
+    </div>
+                                             
+
+</div>
diff --git a/src/static/templates/travel_expense_todos.html b/src/static/templates/travel_expense_todos.html
new file mode 100644
index 0000000..7a55966
--- /dev/null
+++ b/src/static/templates/travel_expense_todos.html
@@ -0,0 +1,108 @@
+<div class="split_form">
+    <div class="main travel_expense" style="padding-left:230px;padding-right:0px;">
+        <div class="page-title" id="mytodos"> 我的待办 </div>
+        <div class="condition_search">
+            <div class="task_statics">
+                <div class="col-md-6">
+                    <div class="task_card">
+                    	<div class="budget_card" ng-show="$parent.permission_check('termination_budget')" ng-click="more_form('/travel_expense/1')">
+                        <!--<div class="budget_card" ng-show="$parent.permission_check('termination_budget')" ng-click="todos.budget=true">-->
+                            <div class="col-md-6">
+                                <img src="./static/img/budget_card.png">
+                            </div>
+                            <div class="col-md-6">
+                                <label class="todos_total">
+                                    {{budget_temp_num}}
+                                    <i class="fa-li fa fa-spinner fa-spin" ng-if="budget_temp_num_show"></i>
+                                </label>
+                                <label>待办预算</label>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-md-6">
+                    <div class="task_card center">
+                    	<div class="request_card" ng-show="$parent.permission_check('termination_apply')" ng-click="more_form('/travel_expense/2')">
+                        <!--<div class="request_card" ng-show="$parent.permission_check('termination_apply')" ng-click="todos.request=true">-->
+                            <div class="col-md-6">
+                                <img src="./static/img/request_card.png">
+                            </div>
+                            <div class="col-md-6">
+                                <label class="todos_total">
+                                    {{apply_temp_num}}
+                                    <i class="fa-li fa fa-spinner fa-spin" ng-if="apply_temp_num_show"></i>
+                                </label>
+                                <label>待办申请</label>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="task_card">
+                    	 <div class="rebuise_card" ng-show="$parent.permission_check('termination_expend')" ng-click="more_form('/travel_expense/3')">
+                        <!--<div class="rebuise_card" ng-show="$parent.permission_check('termination_expend')" ng-click="todos.rebuise=true">-->
+                            <div class="col-md-6">
+                                <img src="./static/img/rebuise_card.png" width="34px">
+                            </div>
+                            <div class="col-md-6">
+                                <label class="todos_total">
+                                    {{expend_temp_num}}
+                                    <i class="fa-li fa fa-spinner fa-spin" ng-if="expend_temp_num_show"></i>
+                                </label>
+                                <label>待办报销</label>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div travel-expense-todos-all todos="todos" ng-if="todos.all"></div>
+        <div travel-expense-todos-budget todos="todos" budget_temp_num="budget_temp_num" ng-show="$parent.permission_check('termination_budget')" ng-if="todos.budget" ></div>
+        <div travel-expense-todos-request todos="todos" apply_temp_num="apply_temp_num" ng-show="$parent.permission_check('termination_apply')" ng-if="todos.request" ></div>
+        <div travel-expense-todos-rebuise todos="todos" expend_temp_num="expend_temp_num" ng-show="$parent.permission_check('termination_expend')" ng-if="todos.rebuise"></div>
+    </div>
+    
+    <div class="left" style="width:230px;">
+        <ul class="ul-tree">
+            <li ng-show="$parent.permission_check('mytodos')">
+                <img src="./static/img/to_do.png" class="small" >
+                <a
+                    class="active"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense_todos/')"
+                >
+                    我的待办
+                </a>
+            </li>
+            <li ng-if="permission_check('budgetorder')">
+                <img src="./static/img/create_form.png" class="small" >
+                <a
+                    ng-class="{'active': type==1}"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense/1')"
+                >
+                    预&nbsp;算
+                </a>
+            </li>
+            <li ng-if="permission_check('applyorder')">
+                <img src="./static/img/form_created.png" >
+                <a
+                    ng-class="{'active': type==2}"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense/2')"
+                >
+                    申&nbsp;请
+                </a>
+            </li>
+            <li ng-if="permission_check('expendorder')">
+                <img src="./static/img/form_default.png" >
+                <a
+                    ng-class="{'active': type==3}"
+                    ng-href="javascript:void(0);"
+                    ng-click="redirect_to('/travel_expense/3')"
+                >
+                    报&nbsp;销
+                </a>
+            </li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/travel_expense_todos_all.html b/src/static/templates/travel_expense_todos_all.html
new file mode 100644
index 0000000..a41ebc7
--- /dev/null
+++ b/src/static/templates/travel_expense_todos_all.html
@@ -0,0 +1,136 @@
+<title>待办</title>
+<div >
+    <div ng-show="$parent.permission_check('termination_budget')" class="condition_search ">
+        <div class="table-heading">
+            <span>待办预算</span>
+        </div>
+        <div class="table-content width-heading">
+            <table class="table table_travel_expense">
+                <thead>
+                    <tr >
+                        <th ng-repeat="data in budget_data.headers track by $index">
+                            {{data}}
+                        </th>
+                        <th>
+                        	状态
+                        </th>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tr 
+                        class="{{($index % 2)?'odd':'even'}}"
+                        click-detail-td-all 
+                        type="10"
+                        mold="budget"
+                        index = "{{$index}}"
+                        ng-repeat="data in budget_data.data track by $index"
+                    >
+                        <!--<td style="display:none;">
+                            <input 
+                                type="checkbox" 
+                                bind_value="{{doc_id(data)}}"
+                                name="bill_cbx_{{doc_id(data)}}" 
+                                ng-click="select_bill($event);"
+                            />
+                        </td>-->
+                        <td ng-repeat="value in data track by $index" title="{{value.name}}" class="ellipsis_td ">
+                            {{value.name}}
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+
+
+
+
+    <div ng-show="$parent.permission_check('termination_apply')" class="condition_search">
+        <div class="table-heading ">
+            <span>待办申请</span>
+        </div>
+        <div class="table-content width-heading">
+            <table class="table table_travel_expense">
+                <thead>
+                    <tr >
+                        <th ng-repeat="data in apply_data.headers track by $index">
+                            {{data}}
+                        </th>
+                        <th>
+                        	状态
+                        </th>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tr 
+                        class="{{($index % 2)?'odd':'even'}}"
+                        click-detail-td-all 
+                        type="20"
+                        mold="apply"
+                        index = "{{$index}}"
+                        ng-repeat="data in apply_data.data track by $index"
+                    >
+                        <td style="display:none;">
+                            <input 
+                                type="checkbox" 
+                                bind_value="{{doc_id(data)}}"
+                                name="bill_cbx_{{doc_id(data)}}" 
+                                ng-click="select_bill($event);"
+                            />
+                        </td>
+                        <td ng-repeat="value in data track by $index" title="{{value.name}}" class="ellipsis_td ">
+                            {{value.name}}
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+
+
+
+    <div ng-show="$parent.permission_check('termination_expend')" class="condition_search">
+        <div class="table-heading">
+            <span>待办报销</span>
+        </div>
+        <div class="table-content width-heading">
+            <table class="table table_travel_expense">
+                <thead>
+                    <tr >
+                        <th ng-repeat="data in expend_data.headers track by $index">
+                            {{data}}
+                        </th>
+                        <th>
+                        	状态
+                        </th>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tr 
+                        class="{{($index % 2)?'odd':'even'}}"
+                        click-detail-td-all 
+                        type="30"
+                        mold="expend"
+                        index = "{{$index}}"
+                        bill_data="data"
+                        ng-repeat="data in expend_data.data track by $index"
+                    >
+                        <td style="display:none;">
+                            <input 
+                                type="checkbox" 
+                                bind_value="{{doc_id(data)}}"
+                                name="bill_cbx_{{doc_id(data)}}" 
+                                ng-click="select_bill($event);"
+                            />
+                        </td>
+                        <td ng-repeat="value in data track by $index" title="{{value.name}}" class="ellipsis_td ">
+                            {{value.name}}
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>
+    </div>
+</div>
+
+            
\ No newline at end of file
diff --git a/src/static/templates/travel_expense_todos_budget.html b/src/static/templates/travel_expense_todos_budget.html
new file mode 100644
index 0000000..0989e6b
--- /dev/null
+++ b/src/static/templates/travel_expense_todos_budget.html
@@ -0,0 +1,178 @@
+<title>待办预算</title>
+<div id="termination_budget">
+	<div class="condition_search">
+		<div class="condition_search_header">
+			<label class="first">查询条件</label>
+			<label ng-show="$parent.permission_check('termination_budget_search')" class="second">
+                <a 
+                    ng-href="javascript:void(0);" 
+                    ng-click="show_search_dropdown($event);"
+                    id="termination_budget_search"
+                    >
+                    <img src="./static/img/search_item.png">
+                    &nbsp;更改查询内容
+                </a>
+            </label>
+		</div>
+		<div>
+			<div class="search_item" style="min-height: 70px;">
+				<div class="search_column" ng-repeat="search in searchlist | filter: {selected: true}">
+					<!--预算、申请、报销单号-->
+                    <span ng-if="search.gc_cpn_type == 1 || search.gc_cpn_type == 2 || search.gc_cpn_type == 90">
+                            <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft">
+                        </span>
+					<span ng-if="search.gc_cpn_type == 5" style="display: inline-block;width:285px;">
+                            <span style="display: inline-block;width: 47%;">
+                                <input type="text" date name="{{search.sfFieldName}}" ng-model="search.valueLeft"> 
+                            </span>
+					<span>
+                                ~ 
+                            </span>
+					<span style="display: inline-block;width: 47%;">
+                                <input type="text" date name="{{search.sfFieldName}}" ng-model="search.valueRight">
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 7">
+                            <span>
+                                <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft"> 
+                            </span>
+					<span>
+                                ~ 
+                            </span>
+					<span>
+                                <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueRight">
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 3 || search.gc_cpn_type == 4 || search.gc_cpn_type == 6" ng-model="search.valueLeft">
+                            <span select3 item="search">
+                            	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 11">
+                            <span select3 item="search">
+                            	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                            </span>
+                        </span>
+					<span ng-if="search.gc_cpn_type == 12">
+                            <span select3 item="search">
+	                        	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                       		</span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 13">
+
+                        </span>
+					<!--<span ng-if="search.gc_cpn_type == 0">
+						<span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+					</span>-->
+					<label ng-bind="search.gc_cpn_alias">
+                            <!--{{search.gc_cpn_alias}}-->
+                        </label>
+				</div>
+				<div class="search_column">
+					<label>状态</label>
+					<!--<div class="select3-element selectul" ng-click="showstatus = !showstatus" >
+						<div class="select-container" ng-style="style">
+							{{status}}
+							<div class="suffix">
+								<i class="fa fa-caret-down" aria-hidden="true"></i>
+							</div>
+						</div>
+						<ul ng-show="showstatus" class="showul" ng-click="selectstatus()" ng-model="code">
+							<li ng-click="status = '待提交';showstatus = true;code = 10;"><input type="checkbox" name="status" value="10" />待提交</li>
+							<li ng-click="status = '已提交';showstatus = true;code = 20;"><input type="checkbox" name="status" value="20" />已提交</li>
+							<li ng-click="status = '待审核';showstatus = true;code = 30;"><input type="checkbox" name="status" value="30" />待审核</li>
+							<li ng-click="status = '审核完成';showstatus = true;code = 40;"><input type="checkbox" name="status" value="40" />审核完成</li>
+							<li ng-click="status = '驳回';showstatus = true;code = -1;"><input type="checkbox" name="status" value="-1" />驳回</li>
+							<li ng-click="status = '已完成';showstatus = true;code = 100;"><input type="checkbox" name="status" value="100" />已完成</li>
+						</ul>
+					</div>-->
+					<select name="status" ng-model="status" class="myselect">
+						<option value="10" ng-model="status">待提交</option>
+						<option value="20" ng-model="status">已提交</option>
+						<option value="30" ng-model="status">待审核</option>
+						<option value="40" ng-model="status">审核完成</option>
+						<option value="-1" ng-model="status">驳回</option>
+						<option value="100" ng-model="status">已完成</option>
+					</select>
+				</div>
+				<div class="search_column">
+					<button ng-show="$parent.permission_check('search_budget')"  ng-click="refreshdata();" class="btn btn-success btn-favourite btn-action" id="search_budget">查询</button>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="condition_search">
+		<div class="table-content">
+			<table class="table table_travel_expense">
+				<thead>
+					<tr>
+						<th ng-repeat="data in budget_data.headers track by $index">
+							{{data}}
+						</th>
+						<th>
+							状态
+						</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr class="{{($index % 2)?'odd':'even'}}" click-detail-td-all type="10" mold="budget" index="{{$index}}" ng-repeat="data in budget_data.data track by $index">
+						<td style="display:none;">
+							<input type="radio" bind_value="{{doc_id(data)}}" name="bill_cbx_{{doc_id(data)}}" ng-click="select_bill($event);" />
+						</td>
+						<td ng-repeat="value in data track by $index">
+							{{value.name}}
+						</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+
+		<div class="condition_search_footer">
+			<label class="first">
+                <span>
+                    <select ng-model="num_per_page" ng-change="change_page_num();">
+                        <option value="20" selected="selected">20条/页</option>
+                        <option value="50"> 50条/页</option>
+                        <option value="100">100条/页</option>
+                    </select>
+                </span>
+                <span ng-bind="'共'+math_ceil(budget_rows/ num_per_page)+'页'">
+                   <!--共{{math_ceil(budget_rows/ num_per_page)}}页-->
+                </span>
+            </label>
+			<label class="second">
+                <span>
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="next_page();">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                <span>第<input type="text" value="1" ng-change="change_page_num()" ng-model="page_num"> 页/ 共<span ng-bind="math_ceil(budget_rows / num_per_page)"></span>页</span>
+            </label>
+		</div>
+
+	</div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/travel_expense_todos_rebuise.html b/src/static/templates/travel_expense_todos_rebuise.html
new file mode 100644
index 0000000..b251431
--- /dev/null
+++ b/src/static/templates/travel_expense_todos_rebuise.html
@@ -0,0 +1,182 @@
+<title>待办报销</title>
+<div id="termination_expend">
+	<div class="condition_search">
+		<div class="condition_search_header">
+			<label class="first">查询条件</label>
+			<label ng-show="$parent.permission_check('termination_expend_search')" class="second">
+                <a 
+                    ng-href="javascript:void(0);" 
+                    ng-click="show_search_dropdown($event);"
+                    id="termination_expend_search"
+                    >
+                    <img src="./static/img/search_item.png">
+                    &nbsp;更改查询内容
+                </a>
+            </label>
+		</div>
+		<div>
+			<div class="search_item">
+				<div class="search_column" ng-repeat="search in searchlist | filter: {selected: true}">
+						<!--预算、申请、报销单号-->
+                    <span ng-if="search.gc_cpn_type == 1 || search.gc_cpn_type == 2 || search.gc_cpn_type == 90">
+                            <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft">
+                        </span>
+					<span ng-if="search.gc_cpn_type == 5" style="display: inline-block;width:285px;">
+                            <span style="display: inline-block;width: 47%;">
+                                <input type="text" date name="{{search.sfFieldName}}" ng-model="search.valueLeft"> 
+                            </span>
+					<span>
+                                ~ 
+                            </span>
+					<span style="display: inline-block;width: 47%;">
+                                <input type="text" date name="{{search.sfFieldName}}" ng-model="search.valueRight">
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 7">
+                            <span>
+                                <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft"> 
+                            </span>
+					<span>
+                                ~ 
+                            </span>
+					<span>
+                                <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueRight">
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 3 || search.gc_cpn_type == 4 || search.gc_cpn_type == 6" ng-model="search.valueLeft">
+                            <span select3 item="search">
+                            	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 11">
+                            <span select3 item="search">
+                            	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                            </span>
+                        </span>
+					<span ng-if="search.gc_cpn_type == 12">
+                            <span select3 item="search">
+	                        	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+		                    </select>
+		                    </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 13">
+
+                        </span>
+					<!--<span ng-if="search.gc_cpn_type == 0">
+						<span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+					</span>-->
+					<label>
+                            {{search.gc_cpn_alias}}
+                        </label>
+				</div>
+				<div class="search_column">
+					<label>状态</label>
+					<!--<div class="select3-element selectul" ng-click="showstatus = !showstatus" >
+						<div class="select-container" ng-style="style">
+							{{status}}
+							<div class="suffix">
+								<i class="fa fa-caret-down" aria-hidden="true"></i>
+							</div>
+						</div>
+						<ul ng-show="showstatus" class="showul" ng-click="selectstatus()">
+							<li ng-click="status = '待提交';showstatus = true;code = 10;">待提交</li>
+							<li ng-click="status = '已提交';showstatus = true;code = 20;">已提交</li>
+							<li ng-click="status = '待审核';showstatus = true;code = 30;">待审核</li>
+							<li ng-click="status = '审核完成';showstatus = true;code = 40;">审核完成</li>
+							<li ng-click="status = '驳回';showstatus = true;code = -1;">驳回</li>
+							<li ng-click="status = '已完成';showstatus = true;code = 100;">已完成</li>
+						</ul>
+					</div>-->
+					<select name="status" ng-model="status" class="myselect">
+						<option value="10" ng-model="status">待提交</option>
+						<option value="20" ng-model="status">已提交</option>
+						<option value="30" ng-model="status">待审核</option>
+						<option value="40" ng-model="status">审核完成</option>
+						<option value="-1" ng-model="status">驳回</option>
+						<option value="100" ng-model="status">已完成</option>
+					</select>
+				</div>
+				<div class="search_column">
+					<span>
+                        <span>
+                            <button ng-show="$parent.permission_check('search_expend')" ng-click="refreshdata();" class="btn btn-success btn-favourite btn-action" id="search_expend">查询</button> 
+                        </span>
+					</span>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="condition_search">
+		<div class="table-content">
+			<table class="table table_travel_expense">
+				<thead>
+					<tr>
+						<th ng-repeat="data in budget_data.headers track by $index">
+							{{data}}
+						</th>
+						<th>
+							状态
+						</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr class="{{($index % 2)?'odd':'even'}}" click-detail-td-all type="30" mold="expend" index="{{$index}}" ng-repeat="data in budget_data.data track by $index">
+						<td style="display:none;">
+							<input type="checkbox" bind_value="{{doc_id(data)}}" name="bill_cbx_{{doc_id(data)}}" ng-click="select_bill($event);" />
+						</td>
+						<td ng-repeat="value in data track by $index">
+							{{value.name}}
+						</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+
+		<div class="condition_search_footer">
+			<label class="first">
+                <span>
+                    <select ng-model="num_per_page" ng-change="change_page_num();">
+                        <option value="20" selected="selected">20条/页</option>
+                        <option value="50"> 50条/页</option>
+                        <option value="100">100条/页</option>
+                    </select>
+                </span>
+                <span ng-bind="'共'+math_ceil(expend_rows / num_per_page)+'页'">
+                    <!--共{{math_ceil(expend_rows / num_per_page)}}页-->
+                </span>
+            </label>
+			<label class="second">
+                <span>
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="next_page();">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                <span>第<input type="text" value="1" ng-change="change_page_num()" ng-model="page_num"> 页/ 共<span ng-bind="math_ceil(expend_rows / num_per_page)"></span>页</span>
+            </label>
+		</div>
+	</div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/travel_expense_todos_request.html b/src/static/templates/travel_expense_todos_request.html
new file mode 100644
index 0000000..641084f
--- /dev/null
+++ b/src/static/templates/travel_expense_todos_request.html
@@ -0,0 +1,181 @@
+<title>待办申请</title>
+<div id="termination_apply">
+	<div class="condition_search">
+		<div class="condition_search_header">
+			<label class="first">查询条件</label>
+			<label ng-show="$parent.permission_check('termination_apply_search')" class="second">
+                <a 
+                    ng-href="javascript:void(0);" 
+                    ng-click="show_search_dropdown($event);"
+                    id="termination_apply_search"
+                    >
+                    <img src="./static/img/search_item.png">
+                    &nbsp;更改查询内容
+                </a>
+            </label>
+		</div>
+		<div>
+			<div class="search_item">
+				<div class="search_column" ng-repeat="search in searchlist | filter: {selected: true}">
+					<!--预算、申请、报销单号-->
+                    <span ng-if="search.gc_cpn_type == 1 || search.gc_cpn_type == 2 || search.gc_cpn_type == 90">
+                            <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft">
+                        </span>
+					<span ng-if="search.gc_cpn_type == 5" style="display: inline-block;width:285px;">
+                            <span style="display: inline-block;width: 47%;">
+                                <input type="text" date name="{{search.sfFieldName}}" ng-model="search.valueLeft"> 
+                            </span>
+					<span>
+                                ~ 
+                            </span>
+					<span style="display: inline-block;width: 47%;">
+                                <input type="text" date name="{{search.sfFieldName}}" ng-model="search.valueRight">
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 7">
+                            <span>
+                                <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueLeft"> 
+                            </span>
+					<span>
+                                ~ 
+                            </span>
+					<span>
+                                <input type="text" name="{{search.sfFieldName}}" ng-model="search.valueRight">
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 3 || search.gc_cpn_type == 4 || search.gc_cpn_type == 6" ng-model="search.valueLeft">
+                            <span select3 item="search">
+                            	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                            </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 11">
+                            <span select3 item="search">
+                            	<select name="{{search.sfFieldName}}"
+			                        multiple
+			                        load-data
+			                    >
+			                    </select>
+                            </span>
+                        </span>
+					<span ng-if="search.gc_cpn_type == 12">
+                            <span select3 item="search">
+		                        	<select name="{{search.sfFieldName}}"
+				                        multiple
+				                        load-data
+				                    >
+				                    </select>
+	                        </span>
+					</span>
+					<span ng-if="search.gc_cpn_type == 13">
+
+                        </span>
+					<!--<span ng-if="search.gc_cpn_type == 0">
+						<span select3 item="search">
+                        	<select name="{{search.sfFieldName}}"
+		                        multiple
+		                        load-data
+		                    >
+		                    </select>
+                        </span>
+					</span>-->
+					<label>
+                            {{search.gc_cpn_alias}}
+                    </label>
+				</div>
+				<div class="search_column">
+					<label>状态</label>
+					<!--<div class="select3-element selectul" ng-click="showstatus = !showstatus" >
+						<div class="select-container" ng-style="style">
+							{{status}}
+							<div class="suffix">
+								<i class="fa fa-caret-down" aria-hidden="true"></i>
+							</div>
+						</div>
+						<ul ng-show="showstatus" class="showul" ng-click="selectstatus()">
+							<li ng-click="status = '待提交';showstatus = true;code = 10;">待提交</li>
+							<li ng-click="status = '已提交';showstatus = true;code = 20;">已提交</li>
+							<li ng-click="status = '待审核';showstatus = true;code = 30;">待审核</li>
+							<li ng-click="status = '审核完成';showstatus = true;code = 40;">审核完成</li>
+							<li ng-click="status = '驳回';showstatus = true;code = -1;">驳回</li>
+							<li ng-click="status = '已完成';showstatus = true;code = 100;">已完成</li>
+						</ul>
+					</div>-->
+					<select name="status" ng-model="status" class="myselect">
+						<option value="10" ng-model="status">待提交</option>
+						<option value="20" ng-model="status">已提交</option>
+						<option value="30" ng-model="status">待审核</option>
+						<option value="40" ng-model="status">审核完成</option>
+						<option value="-1" ng-model="status">驳回</option>
+						<option value="100" ng-model="status">已完成</option>
+					</select>
+				</div>
+				<div class="search_column">
+					<span>
+                        <span>
+                            <button ng-show="$parent.permission_check('search_apply')" ng-click="refreshdata();" class="btn btn-success btn-favourite btn-action" id="search_apply">查询</button> 
+                        </span>
+					</span>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="condition_search">
+		<div class="table-content">
+			<table class="table table_travel_expense">
+				<thead>
+					<tr>
+						<th ng-repeat="data in budget_data.headers track by $index">
+							{{data}}
+						</th>
+						<th>
+							状态
+						</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr class="{{($index % 2)?'odd':'even'}}" click-detail-td-all type="20" mold="apply" index="{{$index}}" ng-repeat="data in budget_data.data track by $index">
+						<td style="display:none;">
+							<input type="checkbox" bind_value="{{doc_id(data)}}" name="bill_cbx_{{doc_id(data)}}" ng-click="select_bill($event);" />
+						</td>
+						<td ng-repeat="value in data track by $index">
+							{{value.name}}
+						</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+
+		<div class="condition_search_footer">
+			<label class="first">
+                <span>
+                    <select ng-model="num_per_page" ng-change="change_page_num();">
+                        <option value="20" selected="selected">20条/页</option>
+                        <option value="50"> 50条/页</option>
+                        <option value="100">100条/页</option>
+                    </select>
+                </span>
+                <span ng-bind="'共'+math_ceil(apply_rows / num_per_page)+'页'">
+                    <!--共{{math_ceil(apply_rows / num_per_page)}}页-->
+                </span>
+            </label>
+			<label class="second">
+                <span>
+                    <a ng-href="javascript:void(0);" ng-click="pre_page();">
+                        <i class="fa" aria-hidden="true">上一页</i>
+                    </a>
+                    </span>
+                    <span>
+                        <a ng-href="javascript:void(0);" ng-click="next_page();">
+                            <i class="fa" aria-hidden="true">下一页</i>
+                        </a>
+                    </span>
+                <span>第<input type="text" value="1" ng-change="change_page_num()" ng-model="page_num"> 页/ 共<span ng-bind="math_ceil(apply_rows / num_per_page)"></span>页</span>
+            </label>
+		</div>
+	</div>
+</div>
\ No newline at end of file
diff --git a/src/static/templates/user_select.html b/src/static/templates/user_select.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/static/templates/user_select.html
diff --git a/src/static/templates/work_flow.html b/src/static/templates/work_flow.html
new file mode 100644
index 0000000..5f6895a
--- /dev/null
+++ b/src/static/templates/work_flow.html
@@ -0,0 +1,48 @@
+<title>工作流配置</title>
+<h1 class="flowtitle">工作流配置</h1>
+<div id="workflowcontent">
+	<div class="workflow_part" ng-if="$root.budget_open == 1">
+		<div class="workflow_btn" style="display: flex;justify-content:center;">
+			<img src="./static/img/workflow_ys.png" alt="" />
+		</div>
+		<div class="part">
+			<p>状态: <span style="color:{{budgetcolor}}" ng-bind="budgetcreateflag"></span></p>
+			<div class="kongbai"></div>
+			<a ng-show="permission_check('config_budget')" class="btn_class btn btn-favourite budgetbtn" ng-disabled="!buDefFlag" ng-click="createflow(10)" href="javascript:void(0)" target="_blank" id="config_budget">配置流程</a>
+			<div class="kongbai"></div>
+			<button ng-show="permission_check('econfig_budget')" class="btn_class btn btn-favourite" ng-disabled="!buDef_bushuFlag" ng-click="configb()" ng-show="bconfigflag" id="econfig_budget">部署</button>
+		</div>
+	<!--<i class="workflow_type glyphicon glyphicon-list-alt">&nbsp;预算流程</i>-->
+	</div>
+	<div class="workflow_part" ng-if="$root.apply_open == 1">
+	<div class="workflow_btn" style="display: flex;justify-content: center;">
+		<img src="./static/img/workflow_sq.png" alt="" />
+	</div>
+	<div class="part">
+			<p>状态: <span style="color:{{applycolor}}" ng-bind="applycreateflag"></span></p>
+			<div class="kongbai"></div>
+			<a ng-show="permission_check('config_apply')" class="btn btn-favourite applybtn" ng-disabled="!apDefFlag" ng-click="createflow(20)" href="javascript:void(0)" target="_blank"  id="config_apply">配置流程</a>
+			<div class="kongbai"></div>
+			<button ng-show="permission_check('econfig_apply')" class="btn btn-favourite" ng-disabled="!apDef_bushuFlag" ng-click="configa()" ng-show="aconfigflag" id="econfig_apply">部署</button>
+		</div>
+	<!--<i class="workflow_type glyphicon glyphicon-calendar">&nbsp;申请流程</i>-->
+	</div>
+	<div class="workflow_part" ng-if="$root.expend_open == 1">
+	<div class="workflow_btn" style="display: flex;justify-content: center;">
+		<img src="./static/img/workflow_bx.png" alt="" />
+	</div>
+	<div class="part">
+			<p>状态: <span style="color:{{expendcolor}}" ng-bind="expendcreateflag"></span></p>
+			<div class="kongbai"></div>
+			<a ng-show="permission_check('config_expend')" class="btn btn-favourite expendbtn" ng-disabled="!exDefFlag" ng-click="createflow(30)" href="javascript:void(0)" target="_blank" id="config_expend">配置流程</a>
+			<div class="kongbai"></div>
+			<button ng-show="permission_check('econfig_expend')" class="btn btn-favourite" ng-disabled="!exDef_bushuFlag" ng-click="confige()" ng-show="econfigflag" id="econfig_expend">部署</button>
+		</div>
+		<!--<i class="workflow_type glyphicon glyphicon-credit-card">&nbsp;报销流程</i>-->
+	</div>
+	   
+	
+</div>
+	<div class="back_btn">
+	<button class="btn btn-success btn-favourite" style="width:80px;height:40px;font-size:18px;display: block;text-align: center;margin-left:40%;margin-top:10%;" ng-click="redirect_to('cfg_center')">返回</button>
+	</div>
\ No newline at end of file
diff --git "a/src/\345\267\256\346\227\205\351\203\250\347\275\262\350\257\264\346\230\216.txt" "b/src/\345\267\256\346\227\205\351\203\250\347\275\262\350\257\264\346\230\216.txt"
new file mode 100644
index 0000000..ceffae2
--- /dev/null
+++ "b/src/\345\267\256\346\227\205\351\203\250\347\275\262\350\257\264\346\230\216.txt"
@@ -0,0 +1,5 @@
+1.���� 10.4.32.55 
+���� /usr/local/nginx���ļ����� 
+2.Ȼ�󽫴��ļ����µ�html/static�ļ��б���
+3.��ѹdistѹ������ʹ��dist/static�ļ����滻��/usr/local/nginx/html/static�ļ��У�
+����ʹ��dist/index.html �滻/usr/local/nginx/html/index.html

--
Gitblit v1.8.0