分布式调度框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

907 lines
41 KiB

<!DOCTYPE HTML>
<html lang="zh-hans" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>项目目录结构 · 调度系统-EasyScheduler</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<meta name="author" content="YIGUAN">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-insert-logo-link/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="前端开发文档.html" />
<link rel="prev" href="前端部署文档.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="输入并搜索" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="./">
<a href="./">
Easyscheduler简介
</a>
</li>
<li class="chapter " data-level="1.2" >
<span>
前端部署文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="前端部署文档.html">
<a href="前端部署文档.html#前端项目环境构建及编译">
环境搭建
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="前端部署文档.html">
<a href="前端部署文档.html#安装及配置">
安装及配置
</a>
</li>
<li class="chapter " data-level="1.2.3" data-path="前端部署文档.html">
<a href="前端部署文档.html#项目生产环境配置">
项目生产环境Nginx配置
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="前端部署文档.html">
<a href="前端部署文档.html#前端项目发布">
前端项目发布
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="前端部署文档.html">
<a href="前端部署文档.html#问题">
问题
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" >
<span>
后端部署文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="后端部署文档.html">
<a href="后端部署文档.html#部署文档">
后端部署文档
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="系统使用手册.html">
<a href="系统使用手册.html#使用手册">
系统使用手册
</a>
</li>
<li class="chapter " data-level="1.5" data-path="系统架构设计.html">
<a href="系统架构设计.html#系统架构设计">
系统架构设计
</a>
</li>
<li class="chapter " data-level="1.6" >
<span>
前端开发文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.6.1" data-path="前端部署文档.html">
<a href="前端部署文档.html">
开发环境搭建
</a>
</li>
<li class="chapter " data-level="1.6.2" data-path="前端开发文档.html">
<a href="前端开发文档.html#项目目录结构">
项目目录结构
</a>
</li>
<li class="chapter " data-level="1.6.3" data-path="前端开发文档.html">
<a href="前端开发文档.html#系统功能模块">
系统功能模块
</a>
</li>
<li class="chapter " data-level="1.6.4" data-path="前端开发文档.html">
<a href="前端开发文档.html#路由和状态管理">
路由和状态管理
</a>
</li>
<li class="chapter " data-level="1.6.5" data-path="前端开发文档.html">
<a href="前端开发文档.html#规范">
规范
</a>
</li>
<li class="chapter " data-level="1.6.6" data-path="前端开发文档.html">
<a href="前端开发文档.html#接口">
接口
</a>
</li>
<li class="chapter " data-level="1.6.7" data-path="前端开发文档.html">
<a href="前端开发文档.html#扩展开发">
扩展开发
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.7" >
<span>
后端开发文档
</span>
<ul class="articles">
<li class="chapter " data-level="1.7.1" data-path="任务插件开发.html">
<a href="任务插件开发.html#任务插件开发">
自定义任务插件文档
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本书使用 GitBook 发布
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >项目目录结构</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="&#x524D;&#x7AEF;&#x5F00;&#x53D1;&#x6587;&#x6863;">&#x524D;&#x7AEF;&#x5F00;&#x53D1;&#x6587;&#x6863;</h1>
<h3 id="&#x6280;&#x672F;&#x9009;&#x578B;">&#x6280;&#x672F;&#x9009;&#x578B;</h3>
<pre><code>Vue mvvm&#x6846;&#x67B6;
Es6 ECMAScript 6.0
Ans-ui Analysys-ui
D3 &#x53EF;&#x89C6;&#x5316;&#x5E93;&#x56FE;&#x8868;&#x5E93;
Jsplumb &#x8FDE;&#x7EBF;&#x63D2;&#x4EF6;&#x5E93;
Lodash &#x9AD8;&#x6027;&#x80FD;&#x7684; JavaScript &#x5B9E;&#x7528;&#x5DE5;&#x5177;&#x5E93;
</code></pre><h3 id="&#x9879;&#x76EE;&#x76EE;&#x5F55;&#x7ED3;&#x6784;">&#x9879;&#x76EE;&#x76EE;&#x5F55;&#x7ED3;&#x6784;</h3>
<p><code>build</code> &#x6253;&#x5305;&#x53CA;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#x9879;&#x76EE;&#x7684;&#x4E00;&#x4E9B;webpack&#x914D;&#x7F6E;</p>
<p><code>node_modules</code> &#x5F00;&#x53D1;&#x73AF;&#x5883;node&#x4F9D;&#x8D56;&#x5305;</p>
<p><code>src</code> &#x9879;&#x76EE;&#x6240;&#x9700;&#x6587;&#x4EF6;</p>
<p><code>src =&gt; combo</code> &#x9879;&#x76EE;&#x7B2C;&#x4E09;&#x65B9;&#x8D44;&#x6E90;&#x672C;&#x5730;&#x5316; <code>npm run combo</code>&#x5177;&#x4F53;&#x67E5;&#x770B;<code>build/combo.js</code></p>
<p><code>src =&gt; font</code> &#x5B57;&#x4F53;&#x56FE;&#x6807;&#x5E93;&#x53EF;&#x8BBF;&#x95EE; <a href="https://www.iconfont.cn" target="_blank">https://www.iconfont.cn</a> &#x8FDB;&#x884C;&#x6DFB;&#x52A0; &#x6CE8;&#x610F;&#xFF1A;&#x5B57;&#x4F53;&#x5E93;&#x7528;&#x7684;&#x81EA;&#x5DF1;&#x7684; &#x4E8C;&#x6B21;&#x5F00;&#x53D1;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x5F15;&#x5165;&#x81EA;&#x5DF1;&#x7684;&#x5E93; <code>src/sass/common/_font.scss</code></p>
<p><code>src =&gt; images</code> &#x516C;&#x5171;&#x56FE;&#x7247;&#x5B58;&#x653E;</p>
<p><code>src =&gt; js</code> js/vue</p>
<p><code>src =&gt; lib</code> &#x516C;&#x53F8;&#x5185;&#x90E8;&#x7EC4;&#x4EF6;&#xFF08;&#x516C;&#x53F8;&#x7EC4;&#x4EF6;&#x5E93;&#x5F00;&#x6E90;&#x540E;&#x53EF;&#x5220;&#x6389;&#xFF09;</p>
<p><code>src =&gt; sass</code> sass&#x6587;&#x4EF6; &#x4E00;&#x4E2A;&#x9875;&#x9762;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;sass&#x6587;&#x4EF6;</p>
<p><code>src =&gt; view</code> &#x9875;&#x9762;&#x6587;&#x4EF6; &#x4E00;&#x4E2A;&#x9875;&#x9762;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;html&#x6587;&#x4EF6;</p>
<pre><code>&gt; &#x9879;&#x76EE;&#x91C7;&#x7528;vue&#x5355;&#x9875;&#x9762;&#x5E94;&#x7528;(SPA)&#x5F00;&#x53D1;
- &#x6240;&#x6709;&#x9875;&#x9762;&#x5165;&#x53E3;&#x6587;&#x4EF6;&#x5728; `src/js/conf/${&#x5BF9;&#x5E94;&#x9875;&#x9762;&#x6587;&#x4EF6;&#x540D; =&gt; home}` &#x7684; `index.js` &#x5165;&#x53E3;&#x6587;&#x4EF6;
- &#x5BF9;&#x5E94;&#x7684;sass&#x6587;&#x4EF6;&#x5219;&#x5728; `src/sass/conf/${&#x5BF9;&#x5E94;&#x9875;&#x9762;&#x6587;&#x4EF6;&#x540D; =&gt; home}/index.scss`
- &#x5BF9;&#x5E94;&#x7684;html&#x6587;&#x4EF6;&#x5219;&#x5728; `src/view/${&#x5BF9;&#x5E94;&#x9875;&#x9762;&#x6587;&#x4EF6;&#x540D; =&gt; home}/index.html`
</code></pre><p>&#x516C;&#x5171;&#x6A21;&#x5757;&#x53CA;util <code>src/js/module</code></p>
<p><code>components</code> =&gt; &#x5185;&#x90E8;&#x9879;&#x76EE;&#x516C;&#x5171;&#x7EC4;&#x4EF6;</p>
<p><code>download</code> =&gt; &#x4E0B;&#x8F7D;&#x7EC4;&#x4EF6;</p>
<p><code>echarts</code> =&gt; &#x56FE;&#x8868;&#x7EC4;&#x4EF6;</p>
<p><code>filter</code> =&gt; &#x8FC7;&#x6EE4;&#x5668;&#x548C;vue&#x7BA1;&#x9053;</p>
<p><code>i18n</code> =&gt; &#x56FD;&#x9645;&#x5316;</p>
<p><code>io</code> =&gt; io&#x8BF7;&#x6C42;&#x5C01;&#x88C5; &#x57FA;&#x4E8E;axios</p>
<p><code>mixin</code> =&gt; vue mixin &#x516C;&#x5171;&#x90E8;&#x5206; &#x7528;&#x4E8E;disabled&#x64CD;&#x4F5C;</p>
<p><code>permissions</code> =&gt; &#x6743;&#x9650;&#x64CD;&#x4F5C;</p>
<p><code>util</code> =&gt; &#x5DE5;&#x5177;</p>
<h3 id="&#x7CFB;&#x7EDF;&#x529F;&#x80FD;&#x6A21;&#x5757;">&#x7CFB;&#x7EDF;&#x529F;&#x80FD;&#x6A21;&#x5757;</h3>
<p>&#x9996;&#x9875; =&gt; <code>http://localhost:8888/#/home</code></p>
<p>&#x9879;&#x76EE;&#x7BA1;&#x7406; =&gt; <code>http://localhost:8888/#/projects/list</code></p>
<pre><code>| &#x9879;&#x76EE;&#x9996;&#x9875;
| &#x5DE5;&#x4F5C;&#x6D41;
- &#x5DE5;&#x4F5C;&#x6D41;&#x5B9A;&#x4E49;
- &#x5DE5;&#x4F5C;&#x6D41;&#x5B9E;&#x4F8B;
- &#x4EFB;&#x52A1;&#x5B9E;&#x4F8B;
</code></pre><p>&#x8D44;&#x6E90;&#x7BA1;&#x7406; =&gt; <code>http://localhost:8888/#/resource/file</code></p>
<pre><code>| &#x6587;&#x4EF6;&#x7BA1;&#x7406;
| UDF&#x7BA1;&#x7406;
- &#x8D44;&#x6E90;&#x7BA1;&#x7406;
- &#x51FD;&#x6570;&#x7BA1;&#x7406;
</code></pre><p>&#x6570;&#x636E;&#x6E90;&#x7BA1;&#x7406; =&gt; <code>http://localhost:8888/#/datasource/list</code></p>
<p>&#x5B89;&#x5168;&#x4E2D;&#x5FC3; =&gt; <code>http://localhost:8888/#/security/tenant</code></p>
<pre><code>| &#x79DF;&#x6237;&#x7BA1;&#x7406;
| &#x7528;&#x6237;&#x7BA1;&#x7406;
| &#x544A;&#x8B66;&#x7EC4;&#x7BA1;&#x7406;
- master
- worker
</code></pre><p>&#x7528;&#x6237;&#x4E2D;&#x5FC3; =&gt; <code>http://localhost:8888/#/user/account</code></p>
<h2 id="&#x8DEF;&#x7531;&#x548C;&#x72B6;&#x6001;&#x7BA1;&#x7406;">&#x8DEF;&#x7531;&#x548C;&#x72B6;&#x6001;&#x7BA1;&#x7406;</h2>
<p>&#x9879;&#x76EE; <code>src/js/conf/home</code> &#x4E0B;&#x5206;&#x4E3A;</p>
<p><code>pages</code> =&gt; &#x8DEF;&#x7531;&#x6307;&#x5411;&#x9875;&#x9762;&#x76EE;&#x5F55;</p>
<pre><code> &#x8DEF;&#x7531;&#x5730;&#x5740;&#x5BF9;&#x5E94;&#x7684;&#x9875;&#x9762;&#x6587;&#x4EF6;
</code></pre><p><code>router</code> =&gt; &#x8DEF;&#x7531;&#x7BA1;&#x7406;</p>
<pre><code>vue&#x7684;&#x8DEF;&#x7531;&#x5668;&#xFF0C;&#x5728;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x7684;&#x5165;&#x53E3;&#x6587;&#x4EF6;index.js &#x90FD;&#x4F1A;&#x6CE8;&#x518C;&#x8FDB;&#x6765; &#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF1A;https://router.vuejs.org/zh/
</code></pre><p><code>store</code> =&gt; &#x72B6;&#x6001;&#x7BA1;&#x7406;</p>
<pre><code>&#x6BCF;&#x4E2A;&#x8DEF;&#x7531;&#x5BF9;&#x5E94;&#x7684;&#x9875;&#x9762;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x72B6;&#x6001;&#x7BA1;&#x7406;&#x7684;&#x6587;&#x4EF6; &#x5206;&#x4E3A;&#xFF1A;
actions =&gt; mapActions =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/actions.html
getters =&gt; mapGetters =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/getters.html
index =&gt; &#x5165;&#x53E3;
mutations =&gt; mapMutations =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/mutations.html
state =&gt; mapState =&gt; &#x8BE6;&#x60C5;&#xFF1A;https://vuex.vuejs.org/zh/guide/state.html
&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF1A;https://vuex.vuejs.org/zh/
</code></pre><h2 id="&#x89C4;&#x8303;">&#x89C4;&#x8303;</h2>
<h2 id="vue&#x89C4;&#x8303;">Vue&#x89C4;&#x8303;</h2>
<h5 id="1&#x7EC4;&#x4EF6;&#x540D;">1.&#x7EC4;&#x4EF6;&#x540D;</h5>
<p>&#x7EC4;&#x4EF6;&#x540D;&#x4E3A;&#x591A;&#x4E2A;&#x5355;&#x8BCD;&#xFF0C;&#x5E76;&#x4E14;&#x7528;&#x8FDE;&#x63A5;&#x7EBF;&#xFF08;-&#xFF09;&#x8FDE;&#x63A5;&#xFF0C;&#x907F;&#x514D;&#x4E0E; HTML &#x6807;&#x7B7E;&#x51B2;&#x7A81;&#xFF0C;&#x5E76;&#x4E14;&#x7ED3;&#x6784;&#x66F4;&#x52A0;&#x6E05;&#x6670;&#x3002;</p>
<pre><code>// &#x6B63;&#x4F8B;
export default {
name: &apos;page-article-item&apos;
}
</code></pre><h5 id="2&#x7EC4;&#x4EF6;&#x6587;&#x4EF6;">2.&#x7EC4;&#x4EF6;&#x6587;&#x4EF6;</h5>
<p><code>src/js/module/components</code>&#x9879;&#x76EE;&#x5185;&#x90E8;&#x516C;&#x5171;&#x7EC4;&#x4EF6;&#x4E66;&#x5199;&#x6587;&#x4EF6;&#x5939;&#x540D;&#x4E0E;&#x6587;&#x4EF6;&#x540D;&#x540C;&#x540D;,&#x516C;&#x5171;&#x7EC4;&#x4EF6;&#x5185;&#x90E8;&#x6240;&#x62C6;&#x5206;&#x7684;&#x5B50;&#x7EC4;&#x4EF6;&#x4E0E;util&#x5DE5;&#x5177;&#x90FD;&#x653E;&#x7F6E;&#x7EC4;&#x4EF6;&#x5185;&#x90E8; <code>_source</code>&#x6587;&#x4EF6;&#x5939;&#x91CC;&#x3002;</p>
<pre><code>&#x2514;&#x2500;&#x2500; components
&#x251C;&#x2500;&#x2500; header
&#x251C;&#x2500;&#x2500; header.vue
&#x2514;&#x2500;&#x2500; _source
&#x2514;&#x2500;&#x2500; nav.vue
&#x2514;&#x2500;&#x2500; util.js
&#x251C;&#x2500;&#x2500; conditions
&#x251C;&#x2500;&#x2500; conditions.vue
&#x2514;&#x2500;&#x2500; _source
&#x2514;&#x2500;&#x2500; serach.vue
&#x2514;&#x2500;&#x2500; util.js
</code></pre><h5 id="3prop">3.Prop</h5>
<p>&#x5B9A;&#x4E49; Prop &#x7684;&#x65F6;&#x5019;&#x5E94;&#x8BE5;&#x59CB;&#x7EC8;&#x4EE5;&#x9A7C;&#x5CF0;&#x683C;&#x5F0F;&#xFF08;camelCase&#xFF09;&#x547D;&#x540D;&#xFF0C;&#x5728;&#x7236;&#x7EC4;&#x4EF6;&#x8D4B;&#x503C;&#x7684;&#x65F6;&#x5019;&#x4F7F;&#x7528;&#x8FDE;&#x63A5;&#x7EBF;&#xFF08;-&#xFF09;&#x3002;
&#x8FD9;&#x91CC;&#x9075;&#x5FAA;&#x6BCF;&#x4E2A;&#x8BED;&#x8A00;&#x7684;&#x7279;&#x6027;&#xFF0C;&#x56E0;&#x4E3A;&#x5728; HTML &#x6807;&#x8BB0;&#x4E2D;&#x5BF9;&#x5927;&#x5C0F;&#x5199;&#x662F;&#x4E0D;&#x654F;&#x611F;&#x7684;&#xFF0C;&#x4F7F;&#x7528;&#x8FDE;&#x63A5;&#x7EBF;&#x66F4;&#x52A0;&#x53CB;&#x597D;&#xFF1B;&#x800C;&#x5728; JavaScript &#x4E2D;&#x66F4;&#x81EA;&#x7136;&#x7684;&#x662F;&#x9A7C;&#x5CF0;&#x547D;&#x540D;&#x3002;</p>
<pre><code>// Vue
props: {
articleStatus: Boolean
}
// HTML
&lt;article-item :article-status=&quot;true&quot;&gt;&lt;/article-item&gt;
</code></pre><p>Prop &#x7684;&#x5B9A;&#x4E49;&#x5E94;&#x8BE5;&#x5C3D;&#x91CF;&#x8BE6;&#x7EC6;&#x7684;&#x6307;&#x5B9A;&#x5176;&#x7C7B;&#x578B;&#x3001;&#x9ED8;&#x8BA4;&#x503C;&#x548C;&#x9A8C;&#x8BC1;&#x3002;</p>
<p>&#x793A;&#x4F8B;&#xFF1A;</p>
<pre><code>props: {
attrM: Number,
attrA: {
type: String,
required: true
},
attrZ: {
type: Object,
// &#x6570;&#x7EC4;/&#x5BF9;&#x8C61;&#x7684;&#x9ED8;&#x8BA4;&#x503C;&#x5E94;&#x8BE5;&#x7531;&#x4E00;&#x4E2A;&#x5DE5;&#x5382;&#x51FD;&#x6570;&#x8FD4;&#x56DE;
default: function () {
return {
msg: &apos;&#x6210;&#x5C31;&#x4F60;&#x6211;&apos;
}
}
},
attrE: {
type: String,
validator: function (v) {
return !([&apos;success&apos;, &apos;fail&apos;].indexOf(v) === -1)
}
}
}
</code></pre><h5 id="4v-for">4.v-for</h5>
<p>&#x5728;&#x6267;&#x884C; v-for &#x904D;&#x5386;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x603B;&#x662F;&#x5E94;&#x8BE5;&#x5E26;&#x4E0A; key &#x503C;&#x4F7F;&#x66F4;&#x65B0; DOM &#x65F6;&#x6E32;&#x67D3;&#x6548;&#x7387;&#x66F4;&#x9AD8;&#x3002;</p>
<pre><code>&lt;ul&gt;
&lt;li v-for=&quot;item in list&quot; :key=&quot;item.id&quot;&gt;
{{ item.title }}
&lt;/li&gt;
&lt;/ul&gt;
</code></pre><p>v-for &#x5E94;&#x8BE5;&#x907F;&#x514D;&#x4E0E; v-if &#x5728;&#x540C;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF08;<code>&#x4F8B;&#x5982;&#xFF1A;&lt;li&gt;</code>&#xFF09;&#x4E0A;&#x4F7F;&#x7528;&#xFF0C;&#x56E0;&#x4E3A; v-for &#x7684;&#x4F18;&#x5148;&#x7EA7;&#x6BD4; v-if &#x66F4;&#x9AD8;&#xFF0C;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x65E0;&#x6548;&#x8BA1;&#x7B97;&#x548C;&#x6E32;&#x67D3;&#xFF0C;&#x5E94;&#x8BE5;&#x5C3D;&#x91CF;&#x5C06; v-if &#x653E;&#x5230;&#x5BB9;&#x5668;&#x7684;&#x7236;&#x5143;&#x7D20;&#x4E4B;&#x4E0A;&#x3002;</p>
<pre><code>&lt;ul v-if=&quot;showList&quot;&gt;
&lt;li v-for=&quot;item in list&quot; :key=&quot;item.id&quot;&gt;
{{ item.title }}
&lt;/li&gt;
&lt;/ul&gt;
</code></pre><h5 id="5v-if--v-else-if--v-else">5.v-if / v-else-if / v-else</h5>
<p>&#x82E5;&#x540C;&#x4E00;&#x7EC4; v-if &#x903B;&#x8F91;&#x63A7;&#x5236;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#x903B;&#x8F91;&#x76F8;&#x540C;&#xFF0C;Vue &#x4E3A;&#x4E86;&#x66F4;&#x9AD8;&#x6548;&#x7684;&#x5143;&#x7D20;&#x5207;&#x6362;&#xFF0C;&#x4F1A;&#x590D;&#x7528;&#x76F8;&#x540C;&#x7684;&#x90E8;&#x5206;&#xFF0C;<code>&#x4F8B;&#x5982;&#xFF1A;value</code>&#x3002;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x590D;&#x7528;&#x5E26;&#x6765;&#x7684;&#x4E0D;&#x5408;&#x7406;&#x6548;&#x679C;&#xFF0C;&#x5E94;&#x8BE5;&#x5728;&#x540C;&#x79CD;&#x5143;&#x7D20;&#x4E0A;&#x52A0;&#x4E0A; key &#x505A;&#x6807;&#x8BC6;&#x3002;</p>
<pre><code>&lt;div v-if=&quot;hasData&quot; key=&quot;mazey-data&quot;&gt;
&lt;span&gt;{{ mazeyData }}&lt;/span&gt;
&lt;/div&gt;
&lt;div v-else key=&quot;mazey-none&quot;&gt;
&lt;span&gt;&#x65E0;&#x6570;&#x636E;&lt;/span&gt;
&lt;/div&gt;
</code></pre><h5 id="6&#x6307;&#x4EE4;&#x7F29;&#x5199;">6.&#x6307;&#x4EE4;&#x7F29;&#x5199;</h5>
<p>&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x89C4;&#x8303;&#x59CB;&#x7EC8;&#x4F7F;&#x7528;&#x6307;&#x4EE4;&#x7F29;&#x5199;&#xFF0C;&#x4F7F;&#x7528;<code>v-bind</code>&#xFF0C;<code>v-on</code>&#x5E76;&#x6CA1;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x597D;&#xFF0C;&#x8FD9;&#x91CC;&#x4EC5;&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x89C4;&#x8303;&#x3002;</p>
<pre><code>&lt;input :value=&quot;mazeyUser&quot; @click=&quot;verifyUser&quot;&gt;
</code></pre><h5 id="7&#x5355;&#x6587;&#x4EF6;&#x7EC4;&#x4EF6;&#x7684;&#x9876;&#x7EA7;&#x5143;&#x7D20;&#x987A;&#x5E8F;">7.&#x5355;&#x6587;&#x4EF6;&#x7EC4;&#x4EF6;&#x7684;&#x9876;&#x7EA7;&#x5143;&#x7D20;&#x987A;&#x5E8F;</h5>
<p>&#x6837;&#x5F0F;&#x540E;&#x7EED;&#x90FD;&#x662F;&#x6253;&#x5305;&#x5728;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x91CC;&#xFF0C;&#x6240;&#x6709;&#x5728;&#x5355;&#x4E2A;vue&#x6587;&#x4EF6;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x6837;&#x5F0F;&#xFF0C;&#x5728;&#x522B;&#x7684;&#x6587;&#x4EF6;&#x91CC;&#x540C;&#x7C7B;&#x540D;&#x7684;&#x6837;&#x5F0F;&#x4E5F;&#x662F;&#x4F1A;&#x751F;&#x6548;&#x7684;&#x6240;&#x6709;&#x5728;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7EC4;&#x4EF6;&#x524D;&#x90FD;&#x4F1A;&#x6709;&#x4E2A;&#x9876;&#x7EA7;&#x7C7B;&#x540D;
&#x6CE8;&#x610F;&#xFF1A;&#x9879;&#x76EE;&#x5185;&#x5DF2;&#x7ECF;&#x589E;&#x52A0;&#x4E86;sass&#x63D2;&#x4EF6;&#xFF0C;&#x5355;&#x4E2A;vue&#x6587;&#x4EF6;&#x91CC;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4E66;&#x5199;sass&#x8BED;&#x6CD5;
&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x548C;&#x4FBF;&#x4E8E;&#x9605;&#x8BFB;&#xFF0C;&#x5E94;&#x8BE5;&#x6309; <code>&lt;template&gt;</code>&#x3001;<code>&lt;script&gt;</code>&#x3001;<code>&lt;style&gt;</code>&#x7684;&#x987A;&#x5E8F;&#x653E;&#x7F6E;&#x3002;</p>
<pre><code>&lt;template&gt;
&lt;div class=&quot;test-model&quot;&gt;
test
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
export default {
name: &quot;test&quot;,
data() {
return {}
},
props: {},
methods: {},
watch: {},
beforeCreate() {
},
created() {
},
beforeMount() {
},
mounted() {
},
beforeUpdate() {
},
updated() {
},
beforeDestroy() {
},
destroyed() {
},
computed: {},
components: {},
}
&lt;/script&gt;
&lt;style lang=&quot;scss&quot; rel=&quot;stylesheet/scss&quot;&gt;
.test-model {
}
&lt;/style&gt;
</code></pre><h2 id="javascript&#x89C4;&#x8303;">JavaScript&#x89C4;&#x8303;</h2>
<h5 id="1var--let--const">1.var / let / const</h5>
<p>&#x5EFA;&#x8BAE;&#x4E0D;&#x518D;&#x4F7F;&#x7528; var&#xFF0C;&#x800C;&#x4F7F;&#x7528; let / const&#xFF0C;&#x4F18;&#x5148;&#x4F7F;&#x7528; const&#x3002;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x4F7F;&#x7528;&#x90FD;&#x8981;&#x63D0;&#x524D;&#x7533;&#x660E;&#xFF0C;&#x9664;&#x4E86; function &#x5B9A;&#x4E49;&#x7684;&#x51FD;&#x6570;&#x53EF;&#x4EE5;&#x968F;&#x4FBF;&#x653E;&#x5728;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x3002;</p>
<h5 id="2&#x5F15;&#x53F7;">2.&#x5F15;&#x53F7;</h5>
<pre><code>const foo = &apos;&#x540E;&#x9664;&apos;
const bar = `${foo}&#xFF0C;&#x524D;&#x7AEF;&#x5DE5;&#x7A0B;&#x5E08;`
</code></pre><h5 id="3&#x51FD;&#x6570;">3.&#x51FD;&#x6570;</h5>
<p>&#x533F;&#x540D;&#x51FD;&#x6570;&#x7EDF;&#x4E00;&#x4F7F;&#x7528;&#x7BAD;&#x5934;&#x51FD;&#x6570;&#xFF0C;&#x591A;&#x4E2A;&#x53C2;&#x6570;/&#x8FD4;&#x56DE;&#x503C;&#x65F6;&#x4F18;&#x5148;&#x4F7F;&#x7528;&#x5BF9;&#x8C61;&#x7684;&#x7ED3;&#x6784;&#x8D4B;&#x503C;&#x3002;</p>
<pre><code>function getPersonInfo ({name, sex}) {
// ...
return {name, gender}
}
</code></pre><p>&#x51FD;&#x6570;&#x540D;&#x7EDF;&#x4E00;&#x4F7F;&#x7528;&#x9A7C;&#x5CF0;&#x547D;&#x540D;&#xFF0C;&#x4EE5;&#x5927;&#x5199;&#x5B57;&#x6BCD;&#x5F00;&#x5934;&#x7533;&#x660E;&#x7684;&#x90FD;&#x662F;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x4F7F;&#x7528;&#x5C0F;&#x5199;&#x5B57;&#x6BCD;&#x5F00;&#x5934;&#x7684;&#x90FD;&#x662F;&#x666E;&#x901A;&#x51FD;&#x6570;&#xFF0C;&#x4E5F;&#x4E0D;&#x8BE5;&#x4F7F;&#x7528; new &#x64CD;&#x4F5C;&#x7B26;&#x53BB;&#x64CD;&#x4F5C;&#x666E;&#x901A;&#x51FD;&#x6570;&#x3002;</p>
<h5 id="4&#x5BF9;&#x8C61;">4.&#x5BF9;&#x8C61;</h5>
<pre><code>const foo = {a: 0, b: 1}
const bar = JSON.parse(JSON.stringify(foo))
const foo = {a: 0, b: 1}
const bar = {...foo, c: 2}
const foo = {a: 3}
Object.assign(foo, {b: 4})
const myMap = new Map([])
for (let [key, value] of myMap.entries()) {
// ...
}
</code></pre><h5 id="5&#x6A21;&#x5757;">5.&#x6A21;&#x5757;</h5>
<p>&#x7EDF;&#x4E00;&#x4F7F;&#x7528; import / export &#x7684;&#x65B9;&#x5F0F;&#x7BA1;&#x7406;&#x9879;&#x76EE;&#x7684;&#x6A21;&#x5757;&#x3002;</p>
<pre><code>// lib.js
export default {}
// app.js
import app from &apos;./lib&apos;
</code></pre><p>import &#x7EDF;&#x4E00;&#x653E;&#x5728;&#x6587;&#x4EF6;&#x9876;&#x90E8;&#x3002;</p>
<p>&#x5982;&#x679C;&#x6A21;&#x5757;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x8F93;&#x51FA;&#x503C;&#xFF0C;&#x4F7F;&#x7528; <code>export default</code>&#xFF0C;&#x5426;&#x5219;&#x4E0D;&#x7528;&#x3002;</p>
<h2 id="html--css">HTML / CSS</h2>
<h6 id="1&#x6807;&#x7B7E;">1.&#x6807;&#x7B7E;</h6>
<p>&#x5728;&#x5F15;&#x7528;&#x5916;&#x90E8; CSS &#x6216; JavaScript &#x65F6;&#x4E0D;&#x5199; type &#x5C5E;&#x6027;&#x3002;HTML5 &#x9ED8;&#x8BA4; type &#x4E3A; <code>text/css</code> &#x548C; <code>text/javascript</code> &#x5C5E;&#x6027;&#xFF0C;&#x6240;&#x4EE5;&#x6CA1;&#x5FC5;&#x8981;&#x6307;&#x5B9A;&#x3002;</p>
<pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;//www.test.com/css/test.css&quot;&gt;
&lt;script src=&quot;//www.test.com/js/test.js&quot;&gt;&lt;/script&gt;
</code></pre><h5 id="2&#x547D;&#x540D;">2.&#x547D;&#x540D;</h5>
<p>Class &#x548C; ID &#x7684;&#x547D;&#x540D;&#x5E94;&#x8BE5;&#x8BED;&#x4E49;&#x5316;&#xFF0C;&#x901A;&#x8FC7;&#x770B;&#x540D;&#x5B57;&#x5C31;&#x77E5;&#x9053;&#x662F;&#x5E72;&#x561B;&#x7684;&#xFF1B;&#x591A;&#x4E2A;&#x5355;&#x8BCD;&#x7528;&#x8FDE;&#x63A5;&#x7EBF; - &#x8FDE;&#x63A5;&#x3002;</p>
<pre><code>// &#x6B63;&#x4F8B;
.test-header{
font-size: 20px;
}
</code></pre><h5 id="3&#x5C5E;&#x6027;&#x7F29;&#x5199;">3.&#x5C5E;&#x6027;&#x7F29;&#x5199;</h5>
<p>CSS &#x5C5E;&#x6027;&#x5C3D;&#x91CF;&#x4F7F;&#x7528;&#x7F29;&#x5199;&#xFF0C;&#x63D0;&#x9AD8;&#x4EE3;&#x7801;&#x7684;&#x6548;&#x7387;&#x548C;&#x65B9;&#x4FBF;&#x7406;&#x89E3;&#x3002;</p>
<pre><code>// &#x53CD;&#x4F8B;
border-width: 1px;
border-style: solid;
border-color: #ccc;
// &#x6B63;&#x4F8B;
border: 1px solid #ccc;
</code></pre><h5 id="4&#x6587;&#x6863;&#x7C7B;&#x578B;">4.&#x6587;&#x6863;&#x7C7B;&#x578B;</h5>
<p>&#x5E94;&#x8BE5;&#x603B;&#x662F;&#x4F7F;&#x7528; HTML5 &#x6807;&#x51C6;&#x3002;</p>
<pre><code>&lt;!DOCTYPE html&gt;
</code></pre><h5 id="5&#x6CE8;&#x91CA;">5.&#x6CE8;&#x91CA;</h5>
<p>&#x5E94;&#x8BE5;&#x7ED9;&#x4E00;&#x4E2A;&#x6A21;&#x5757;&#x6587;&#x4EF6;&#x5199;&#x4E00;&#x4E2A;&#x533A;&#x5757;&#x6CE8;&#x91CA;&#x3002;</p>
<pre><code>/**
* @module mazey/api
* @author Mazey &lt;mazey@mazey.net&gt;
* @description test.
* */
</code></pre><h2 id="&#x63A5;&#x53E3;">&#x63A5;&#x53E3;</h2>
<h5 id="&#x6240;&#x6709;&#x7684;&#x63A5;&#x53E3;&#x90FD;&#x4EE5;-promise-&#x5F62;&#x5F0F;&#x8FD4;&#x56DE;">&#x6240;&#x6709;&#x7684;&#x63A5;&#x53E3;&#x90FD;&#x4EE5; Promise &#x5F62;&#x5F0F;&#x8FD4;&#x56DE;</h5>
<p>&#x6CE8;&#x610F;&#x975E;0&#x90FD;&#x4E3A;&#x9519;&#x8BEF;&#x8D70;catch</p>
<pre><code>const test = () =&gt; {
return new Promise((resolve, reject) =&gt; {
resolve({
a:1
})
})
}
// &#x8C03;&#x7528;
test.then(res =&gt; {
console.log(res)
// {a:1}
})
</code></pre><p>&#x6B63;&#x5E38;&#x8FD4;&#x56DE;</p>
<pre><code>{
code:0,
data:{}
msg:&apos;&#x6210;&#x529F;&apos;
}
</code></pre><p>&#x9519;&#x8BEF;&#x8FD4;&#x56DE;</p>
<pre><code>{
code:10000,
data:{}
msg:&apos;&#x5931;&#x8D25;&apos;
}
</code></pre><h5 id="&#x76F8;&#x5173;&#x63A5;&#x53E3;&#x8DEF;&#x5F84;">&#x76F8;&#x5173;&#x63A5;&#x53E3;&#x8DEF;&#x5F84;</h5>
<p>dag &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/dag/actions.js</code></p>
<p>&#x6570;&#x636E;&#x6E90;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/datasource/actions.js</code></p>
<p>&#x9879;&#x76EE;&#x7BA1;&#x7406; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/projects/actions.js</code></p>
<p>&#x8D44;&#x6E90;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/resource/actions.js</code></p>
<p>&#x5B89;&#x5168;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/security/actions.js</code></p>
<p>&#x7528;&#x6237;&#x4E2D;&#x5FC3; &#x76F8;&#x5173;&#x63A5;&#x53E3; <code>src/js/conf/home/store/user/actions.js</code></p>
<h2 id="&#x6269;&#x5C55;&#x5F00;&#x53D1;">&#x6269;&#x5C55;&#x5F00;&#x53D1;</h2>
<h5 id="1&#x589E;&#x52A0;&#x8282;&#x70B9;">1.&#x589E;&#x52A0;&#x8282;&#x70B9;</h5>
<p>(1) &#x5148;&#x5C06;&#x8282;&#x70B9;&#x7684;icon&#x5C0F;&#x56FE;&#x6807;&#x653E;&#x7F6E;<code>src/js/conf/home/pages/dag/img</code>&#x6587;&#x4EF6;&#x5939;&#x5185;&#xFF0C;&#x6CE8;&#x610F; <code>toolbar_${&#x540E;&#x53F0;&#x5B9A;&#x4E49;&#x7684;&#x8282;&#x70B9;&#x7684;&#x82F1;&#x6587;&#x540D;&#x79F0; &#x4F8B;&#x5982;:SHELL}.png</code>
(2) &#x627E;&#x5230; <code>src/js/conf/home/pages/dag/_source/config.js</code> &#x91CC;&#x7684; <code>tasksType</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5F80;&#x91CC;&#x589E;&#x52A0;</p>
<pre><code>&apos;DEPENDENT&apos;: { // &#x540E;&#x53F0;&#x5B9A;&#x4E49;&#x8282;&#x70B9;&#x7C7B;&#x578B;&#x82F1;&#x6587;&#x540D;&#x79F0;&#x7528;&#x4F5C;key&#x503C;
desc: &apos;DEPENDENT&apos;, // tooltip desc
color: &apos;#2FBFD8&apos; // &#x4EE3;&#x8868;&#x7684;&#x989C;&#x8272;&#x4E3B;&#x8981;&#x7528;&#x4E8E; tree&#x548C;gantt &#x4E24;&#x5F20;&#x56FE;
}
</code></pre><p>(3) &#x5728; <code>src/js/conf/home/pages/dag/_source/formModel/tasks</code> &#x589E;&#x52A0;&#x4E00;&#x4E2A; <code>${&#x8282;&#x70B9;&#x7C7B;&#x578B;&#xFF08;&#x5C0F;&#x5199;&#xFF09;}</code>.vue &#x6587;&#x4EF6;&#xFF0C;&#x8DDF;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x76F8;&#x5173;&#x7684;&#x7EC4;&#x4EF6;&#x5185;&#x5BB9;&#x90FD;&#x5728;&#x8FD9;&#x91CC;&#x5199;&#x3002; &#x5C5E;&#x4E8E;&#x8282;&#x70B9;&#x7EC4;&#x4EF6;&#x5185;&#x7684;&#x5FC5;&#x987B;&#x62E5;&#x6709;&#x4E00;&#x4E2A;&#x51FD;&#x6570; <code>_verification()</code> &#x9A8C;&#x8BC1;&#x6210;&#x529F;&#x540E;&#x8BB2;&#x5F53;&#x524D;&#x7EC4;&#x4EF6;&#x7684;&#x76F8;&#x5173;&#x6570;&#x636E;&#x5F80;&#x7236;&#x7EC4;&#x4EF6;&#x629B;&#x3002;</p>
<pre><code>/**
* &#x9A8C;&#x8BC1;
*/
_verification () {
// datasource &#x5B50;&#x7EC4;&#x4EF6;&#x9A8C;&#x8BC1;
if (!this.$refs.refDs._verifDatasource()) {
return false
}
// &#x9A8C;&#x8BC1;&#x51FD;&#x6570;
if (!this.method) {
this.$message.warning(`${i18n.$t(&apos;&#x8BF7;&#x8F93;&#x5165;&#x65B9;&#x6CD5;&apos;)}`)
return false
}
// localParams &#x5B50;&#x7EC4;&#x4EF6;&#x9A8C;&#x8BC1;
if (!this.$refs.refLocalParams._verifProp()) {
return false
}
// &#x5B58;&#x50A8;
this.$emit(&apos;on-params&apos;, {
type: this.type,
datasource: this.datasource,
method: this.method,
localParams: this.localParams
})
return true
}
</code></pre><p>(4) &#x8282;&#x70B9;&#x7EC4;&#x4EF6;&#x5185;&#x90E8;&#x6240;&#x7528;&#x5230;&#x516C;&#x5171;&#x7684;&#x7EC4;&#x4EF6;&#x90FD;&#x5728;<code>_source</code>&#x4E0B;&#xFF0C;<code>commcon.js</code>&#x7528;&#x4E0E;&#x914D;&#x7F6E;&#x516C;&#x5171;&#x6570;&#x636E;</p>
<h5 id="2&#x589E;&#x52A0;&#x72B6;&#x6001;&#x7C7B;&#x578B;">2.&#x589E;&#x52A0;&#x72B6;&#x6001;&#x7C7B;&#x578B;</h5>
<p>(1) &#x627E;&#x5230; <code>src/js/conf/home/pages/dag/_source/config.js</code> &#x91CC;&#x7684; <code>tasksState</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5F80;&#x91CC;&#x589E;&#x52A0;</p>
<pre><code>&apos;WAITTING_DEPEND&apos;: { //&#x540E;&#x7AEF;&#x5B9A;&#x4E49;&#x72B6;&#x6001;&#x7C7B;&#x578B; &#x524D;&#x7AEF;&#x7528;&#x4F5C;key&#x503C;
id: 11, // &#x524D;&#x7AEF;&#x5B9A;&#x4E49;id &#x540E;&#x7EED;&#x7528;&#x4F5C;&#x6392;&#x5E8F;
desc: `${i18n.$t(&apos;&#x7B49;&#x5F85;&#x4F9D;&#x8D56;&apos;)}`, // tooltip desc
color: &apos;#5101be&apos;, // &#x4EE3;&#x8868;&#x7684;&#x989C;&#x8272;&#x4E3B;&#x8981;&#x7528;&#x4E8E; tree&#x548C;gantt &#x4E24;&#x5F20;&#x56FE;
icoUnicode: &apos;&amp;#xe68c;&apos;, // &#x5B57;&#x4F53;&#x56FE;&#x6807;
isSpin: false // &#x662F;&#x5426;&#x65CB;&#x8F6C;&#xFF08;&#x9700;&#x4EE3;&#x7801;&#x5224;&#x65AD;&#xFF09;
}
</code></pre><h5 id="3&#x589E;&#x52A0;&#x64CD;&#x4F5C;&#x680F;&#x5DE5;&#x5177;">3.&#x589E;&#x52A0;&#x64CD;&#x4F5C;&#x680F;&#x5DE5;&#x5177;</h5>
<p>(1) &#x627E;&#x5230; <code>src/js/conf/home/pages/dag/_source/config.js</code> &#x91CC;&#x7684; <code>toolOper</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5F80;&#x91CC;&#x589E;&#x52A0;</p>
<pre><code>{
code: &apos;pointer&apos;, // &#x5DE5;&#x5177;&#x6807;&#x8BC6;
icon: &apos;&amp;#xe781;&apos;, // &#x5DE5;&#x5177;&#x56FE;&#x6807;
disable: disable, // &#x662F;&#x5426;&#x7981;&#x7528;
desc: `${i18n.$t(&apos;&#x62D6;&#x52A8;&#x8282;&#x70B9;&#x548C;&#x9009;&#x4E2D;&#x9879;&apos;)}` // tooltip desc
}
</code></pre><p>(2) &#x5DE5;&#x5177;&#x7C7B;&#x90FD;&#x4EE5;&#x4E00;&#x4E2A;&#x6784;&#x9020;&#x51FD;&#x6570;&#x8FD4;&#x56DE; <code>src/js/conf/home/pages/dag/_source/plugIn</code></p>
<p><code>downChart.js</code> =&gt; dag &#x56FE;&#x7247;&#x4E0B;&#x8F7D;&#x5904;&#x7406; </p>
<p><code>dragZoom.js</code> =&gt; &#x9F20;&#x6807;&#x7F29;&#x653E;&#x6548;&#x679C;&#x5904;&#x7406; </p>
<p><code>jsPlumbHandle.js</code> =&gt; &#x62D6;&#x62FD;&#x7EBF;&#x6761;&#x5904;&#x7406; </p>
<p><code>util.js</code> =&gt; &#x5C5E;&#x4E8E; <code>plugIn</code> &#x5DE5;&#x5177;&#x7C7B;</p>
<p>&#x64CD;&#x4F5C;&#x5219;&#x5728; <code>src/js/conf/home/pages/dag/_source/dag.js</code> =&gt; <code>toolbarEvent</code> &#x4E8B;&#x4EF6;&#x4E2D;&#x5904;&#x7406;&#x3002;</p>
<h5 id="3&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x8DEF;&#x7531;&#x9875;&#x9762;">3.&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x8DEF;&#x7531;&#x9875;&#x9762;</h5>
<p>(1) &#x9996;&#x5148;&#x5728;&#x8DEF;&#x7531;&#x7BA1;&#x7406;&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x8DEF;&#x7531;&#x5730;&#x5740;<code>src/js/conf/home/router/index.js</code></p>
<pre><code>{
path: &apos;/test&apos;, // &#x8DEF;&#x7531;&#x5730;&#x5740;
name: &apos;test&apos;, // &#x522B;&#x540D;
component: resolve =&gt; require([&apos;../pages/test/index&apos;], resolve), // &#x8DEF;&#x7531;&#x5BF9;&#x5E94;&#x7EC4;&#x4EF6;&#x5165;&#x53E3;&#x6587;&#x4EF6;
meta: {
title: `${i18n.$t(&apos;test&apos;)} - EasyScheduler` // title &#x663E;&#x793A;
}
},
</code></pre><p>(2) &#x5728;<code>src/js/conf/home/pages</code> &#x5EFA;&#x4E00;&#x4E2A; <code>test</code> &#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5728;&#x6587;&#x4EF6;&#x5939;&#x91CC;&#x5EFA;&#x4E00;&#x4E2A;<code>index.vue</code>&#x5165;&#x53E3;&#x6587;&#x4EF6;&#x3002;</p>
<pre><code>&#x8FD9;&#x6837;&#x5C31;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE; `http://localhost:8888/#/test`
</code></pre><h5 id="4&#x589E;&#x52A0;&#x9884;&#x7F6E;&#x90AE;&#x7BB1;">4.&#x589E;&#x52A0;&#x9884;&#x7F6E;&#x90AE;&#x7BB1;</h5>
<p>&#x627E;&#x5230;<code>src/lib/localData/email.js</code>&#x542F;&#x52A8;&#x548C;&#x5B9A;&#x65F6;&#x90AE;&#x7BB1;&#x5730;&#x5740;&#x8F93;&#x5165;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x4E0B;&#x62C9;&#x5339;&#x914D;&#x3002;</p>
<pre><code>export default [&quot;test@analysys.com.cn&quot;,&quot;test1@analysys.com.cn&quot;,&quot;test3@analysys.com.cn&quot;]
</code></pre><h5 id="5&#x6743;&#x9650;&#x7BA1;&#x7406;&#x53CA;disabled&#x72B6;&#x6001;&#x5904;&#x7406;">5.&#x6743;&#x9650;&#x7BA1;&#x7406;&#x53CA;disabled&#x72B6;&#x6001;&#x5904;&#x7406;</h5>
<p>&#x6743;&#x9650;&#x6839;&#x636E;&#x540E;&#x7AEF;&#x63A5;&#x53E3;<code>getUserInfo</code>&#x63A5;&#x53E3;&#x7ED9;&#x51FA;<code>userType: &quot;ADMIN_USER/GENERAL_USER&quot;</code>&#x6743;&#x9650;&#x63A7;&#x5236;&#x9875;&#x9762;&#x64CD;&#x4F5C;&#x6309;&#x94AE;&#x662F;&#x5426;<code>disabled</code></p>
<p>&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#xFF1A;<code>src/js/module/permissions/index.js</code></p>
<p>disabled&#x5904;&#x7406;&#xFF1A;<code>src/js/module/mixin/disabledState.js</code></p>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="前端部署文档.html" class="navigation navigation-prev " aria-label="Previous page: 开发环境搭建">
<i class="fa fa-angle-left"></i>
</a>
<a href="前端开发文档.html#系统功能模块" class="navigation navigation-next " aria-label="Next page: 系统功能模块">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"项目目录结构","level":"1.6.2","depth":2,"next":{"title":"系统功能模块","level":"1.6.3","depth":2,"anchor":"#系统功能模块","path":"前端开发文档.md","ref":"前端开发文档.md#系统功能模块","articles":[]},"previous":{"title":"开发环境搭建","level":"1.6.1","depth":2,"path":"前端部署文档.md","ref":"前端部署文档.md","articles":[]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","insert-logo-link","livereload"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"livereload":{},"insert-logo-link":{"src":"http://geek.analysys.cn/static/upload/236/2019-03-29/379450b4-7919-4707-877c-4d33300377d4.png","url":"https://github.com/analysys/EasyScheduler"},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{}},"theme":"default","author":"YIGUAN","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"调度系统-EasyScheduler","language":"zh-hans","gitbook":"3.2.3","description":"调度系统"},"file":{"path":"前端开发文档.md","mtime":"2019-04-08T02:29:27.998Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-04-10T07:14:01.407Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
<script src="gitbook/gitbook-plugin-insert-logo-link/plugin.js"></script>
<script src="gitbook/gitbook-plugin-livereload/plugin.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>
<script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
<script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
</body>
</html>