idList) {
46 | return functionMapper.getByIdList(idList);
47 | }
48 |
49 | public List query(P params, Pageable pager) {
50 | return functionMapper.query(params, pager);
51 | }
52 | public Integer count(P params) {
53 | return functionMapper.count(params);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/java/src/main/java/com/gomcarter/developer/service/JavaService.java:
--------------------------------------------------------------------------------
1 | package com.gomcarter.developer.service;
2 |
3 | import com.gomcarter.developer.dao.JavaMapper;
4 | import com.gomcarter.developer.entity.Java;
5 | import com.gomcarter.frameworks.base.common.CollectionUtils;
6 | import com.gomcarter.frameworks.base.pager.Pageable;
7 | import com.gomcarter.frameworks.base.streaming.Streamable;
8 | import org.springframework.stereotype.Service;
9 |
10 | import javax.annotation.Resource;
11 | import java.util.Collection;
12 | import java.util.HashMap;
13 | import java.util.List;
14 | import java.util.Map;
15 |
16 | /**
17 | * @author gomcarter
18 | * @date 2019-06-17 16:41:01
19 | */
20 | @Service
21 | public class JavaService {
22 |
23 | @Resource
24 | private JavaMapper javaMapper;
25 |
26 | public void insert(Java java) {
27 | javaMapper.insert(java);
28 | }
29 |
30 | public void update(Java java) {
31 | javaMapper.update(java);
32 | }
33 |
34 | public Java getById(Long id) {
35 | return javaMapper.getById(id);
36 | }
37 |
38 | public List getByIdList(Collection idList) {
39 | return javaMapper.getByIdList(idList);
40 | }
41 |
42 | public List query(R params, Pageable pager) {
43 | return javaMapper.query(params, pager);
44 | }
45 |
46 | public Integer count(R params) {
47 | return javaMapper.count(params);
48 | }
49 |
50 | public Map getMapByIdList(Collection idList) {
51 | if (CollectionUtils.isEmpty(idList)) {
52 | return new HashMap<>();
53 | }
54 | return Streamable.valueOf(this.getByIdList(idList)).uniqueGroupby(Java::getId).collect();
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/java/src/main/java/com/gomcarter/developer/service/MarkService.java:
--------------------------------------------------------------------------------
1 | package com.gomcarter.developer.service;
2 |
3 | import com.gomcarter.developer.dao.MarkMapper;
4 | import com.gomcarter.developer.entity.Mark;
5 | import com.gomcarter.frameworks.base.common.AssertUtils;
6 | import com.gomcarter.frameworks.base.pager.Pageable;
7 | import org.apache.commons.lang3.StringUtils;
8 | import org.springframework.stereotype.Service;
9 |
10 | import javax.annotation.Resource;
11 | import java.util.Collection;
12 | import java.util.List;
13 |
14 | /**
15 | * @author gomcarter on 2020-02-10 16:05:03
16 | */
17 | @Service
18 | public class MarkService {
19 |
20 | @Resource
21 | private MarkMapper markMapper;
22 |
23 | public void insert(Mark mark) {
24 | markMapper.insert(mark);
25 | }
26 |
27 | public void insertNoisy(Mark mark) {
28 | markMapper.insertNoisy(mark);
29 | }
30 |
31 | public void update(Mark mark) {
32 | markMapper.update(mark);
33 | }
34 |
35 | public void updateCas(Mark mark) {
36 | markMapper.cas(mark);
37 | }
38 |
39 | public void updateCasNoisy(Mark mark) {
40 | markMapper.casNoisy(mark);
41 | }
42 |
43 | public Mark getById(Long id) {
44 | return markMapper.getById(id);
45 | }
46 |
47 | public List getByIdList(Collection idList) {
48 | return markMapper.getByIdList(idList);
49 | }
50 |
51 | public List query(P params, Pageable pager) {
52 | return markMapper.query(params, pager);
53 | }
54 |
55 | public Integer count(P params) {
56 | return markMapper.count(params);
57 | }
58 |
59 | public void create(Long interfaceId, String user, String mark) {
60 | AssertUtils.isTrue(StringUtils.isNotBlank(mark), "备注不能为空!");
61 | this.markMapper.insert(new Mark()
62 | .setFkInterfacesId(interfaceId)
63 | .setUser(user)
64 | .setMark(mark)
65 | );
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/java/src/main/java/com/gomcarter/developer/service/TestCaseHistoryService.java:
--------------------------------------------------------------------------------
1 | package com.gomcarter.developer.service;
2 |
3 | import com.gomcarter.developer.dao.TestCaseHistoryMapper;
4 | import com.gomcarter.developer.entity.TestCaseHistory;
5 | import com.gomcarter.frameworks.base.pager.Pageable;
6 | import org.springframework.stereotype.Service;
7 |
8 | import javax.annotation.Resource;
9 | import java.util.Collection;
10 | import java.util.List;
11 |
12 | /**
13 | * @author 李银 on 2020-07-17 21:35:29
14 | */
15 | @Service
16 | public class TestCaseHistoryService {
17 |
18 | @Resource
19 | private TestCaseHistoryMapper testCaseHistoryMapper;
20 |
21 | public TestCaseHistory insert(TestCaseHistory testCaseHistory) {
22 | testCaseHistoryMapper.insert(testCaseHistory);
23 | return testCaseHistory;
24 | }
25 |
26 | public void insertNoisy(TestCaseHistory testCaseHistory) {
27 | testCaseHistoryMapper.insertNoisy(testCaseHistory);
28 | }
29 |
30 | public void update(TestCaseHistory testCaseHistory) {
31 | testCaseHistoryMapper.update(testCaseHistory);
32 | }
33 |
34 | public void updateCas(TestCaseHistory testCaseHistory) {
35 | testCaseHistoryMapper.cas(testCaseHistory);
36 | }
37 |
38 | public void updateCasNoisy(TestCaseHistory testCaseHistory) {
39 | testCaseHistoryMapper.casNoisy(testCaseHistory);
40 | }
41 |
42 | public TestCaseHistory getById(Long id) {
43 | return testCaseHistoryMapper.getById(id);
44 | }
45 |
46 | public List getByIdList(Collection idList) {
47 | return testCaseHistoryMapper.getByIdList(idList);
48 | }
49 |
50 | public List query(P params, Pageable pager) {
51 | return testCaseHistoryMapper.query(params, pager);
52 | }
53 |
54 | public Integer count(P params) {
55 | return testCaseHistoryMapper.count(params);
56 | }
57 |
58 | public void delete(Long id) {
59 | this.testCaseHistoryMapper.deleteById(id);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/java/src/main/java/com/gomcarter/developer/utils/DefaultResponseHandler.java:
--------------------------------------------------------------------------------
1 | package com.gomcarter.developer.utils;
2 |
3 | import org.apache.http.HttpEntity;
4 | import org.apache.http.HttpResponse;
5 | import org.apache.http.HttpStatus;
6 | import org.apache.http.StatusLine;
7 | import org.apache.http.client.ClientProtocolException;
8 | import org.apache.http.client.ResponseHandler;
9 | import org.apache.http.util.EntityUtils;
10 |
11 | import java.io.IOException;
12 | import java.nio.charset.Charset;
13 |
14 | public class DefaultResponseHandler implements ResponseHandler {
15 |
16 | @Override
17 | public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
18 | StatusLine statusLine = response.getStatusLine();
19 |
20 | if (statusLine.getStatusCode() != HttpStatus.SC_OK) {
21 | throw new RuntimeException("statusCode=" + statusLine.getStatusCode() + ",reason:" + statusLine.getReasonPhrase());
22 | }
23 |
24 | HttpEntity entity = response.getEntity();
25 | if (entity == null) {
26 | throw new ClientProtocolException("Response no content return.");
27 | }
28 |
29 | return EntityUtils.toString(entity, Charset.forName("UTF-8"));
30 | }
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/java/src/main/java/com/gomcarter/developer/utils/Pair.java:
--------------------------------------------------------------------------------
1 | package com.gomcarter.developer.utils;
2 |
3 | import lombok.Data;
4 | import lombok.experimental.Accessors;
5 |
6 | import java.io.Serializable;
7 |
8 | @Data
9 | @Accessors(chain = true)
10 | public class Pair implements Serializable {
11 |
12 | private K key;
13 |
14 | private V value;
15 |
16 | public Pair(K key, V value) {
17 | this.key = key;
18 | this.value = value;
19 | }
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/java/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %date [%thread] %-5level %C %logger{50}:%L - %msg%n
8 |
9 |
10 |
11 |
13 | ${logDir}/developer.log
14 |
15 | ${logDir}/logs/history/developer.%d{yyyy-MM-dd}.log.gz
16 | 30
17 |
18 |
19 | %date [%thread] %-5level %C %logger{50}:%L - %msg%n
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/CustomInterfacesItemMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/EndAuthMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/EndMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/FunctionMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/InterfacesMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | UPDATE
25 | interfaces
26 | SET
27 | deprecated=true
28 | WHERE
29 | fk_java_id=#{javaId}
30 |
31 |
32 |
35 |
36 |
39 |
40 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/InterfacesPackageItemMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | INSERT INTO interfaces_package_item
17 | (`interfaces_package_id`,`interfaces_id`)
18 | VALUES
19 |
20 | (#{packageId},#{_interface_id_})
21 |
22 |
23 |
24 |
25 | delete from interfaces_package_item where interfaces_package_id = ${packageId}
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/InterfacesPackageMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/InterfacesVersionedMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/JavaMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/MarkMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/SettingOfUserMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/TestCaseHistoryMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/TestCaseMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/java/src/main/resources/mybatis/UserMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/java/src/main/resources/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/favicon.ico
--------------------------------------------------------------------------------
/java/src/main/resources/static/index.html:
--------------------------------------------------------------------------------
1 | 开发平台
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/fonts/element-icons.535877f.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/fonts/element-icons.535877f.woff
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/fonts/element-icons.732389d.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/fonts/element-icons.732389d.ttf
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/img/bg.129e18e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/img/bg.129e18e.png
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/img/logo.8cab05f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/java/src/main/resources/static/static/img/logo.8cab05f.png
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/11.9c7addf8992f5ffeaba1.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([11],{ENre:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i={name:"index",data:function(){return{width:1e3,height:600,myTableList:[{id:1,name:"name1"}]}},computed:{},methods:{onTreeSelectionChanged:function(e){}},components:{"v-tree":function(){return n.e(37).then(n.bind(null,"BBpc"))},"v-table-editor":function(){return n.e(39).then(n.bind(null,"ok35"))}},mounted:function(){}},a={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("h4",{staticClass:"title"},[e._v("创建表")]),e._v(" "),n("hr"),e._v(" "),n("el-container",[n("el-main",{staticClass:"favorite-container",style:{width:"15%"}},[n("v-tree",{attrs:{datas:e.myTableList,id:"id",text:"name",onSelectionChanged:e.onTreeSelectionChanged,editable:!0}})],1),e._v(" "),n("el-aside",{staticClass:"interfaces-list-container",style:{width:"84%"}},[n("v-table-editor",{staticStyle:{position:"relative"},attrs:{width:e.width,height:e.height}})],1)],1)],1)},staticRenderFns:[]};var r=n("C7Lr")(i,a,!1,function(e){n("r5RT")},"data-v-8b852462",null);t.default=r.exports},r5RT:function(e,t){}});
2 | //# sourceMappingURL=11.9c7addf8992f5ffeaba1.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/17.2095f5eb661f487e6013.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([17],{KOfc:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i("0Njg"),n=i("R2SV"),a=i("Dx6B"),l={name:"java",data:function(){var e=this;return{filter:{id:null,name:null},dataUrl:r.X,countUrl:r.W,params:{},toolbar:[{title:"新增",icon:"el-icon-plus",handler:this.edit}],columns:[{field:"action",header:"操作",width:130,actions:[{text:"编辑",handler:function(t){e.$router.push("/provider/list/edit/"+t.id)}}]},{field:"id",header:"序号",sort:"id",width:50},{field:"name",header:"模块名称",sort:"name",width:200},{field:"alias",header:"应用名",sort:"alias",width:200},{field:"createTime",header:"添加时间",sort:"create_time",width:200,formatter:function(e,t,i){return Object(n.b)(i)}}]}},mounted:function(){for(var e in a.b)this.columns.splice(4,0,{field:e,header:a.b[e]+"域名",width:180});this.action&&this.columns.push({field:"action",header:"操作",sort:"id",width:230,actions:this.action||[]})},methods:{search:function(){this.params=Object(n.g)(this.filter)},clear:function(){this.params={},this.filter={name:""}},edit:function(e){this.$router.push("/provider/list/edit")}},components:{"v-datagrid":function(){return i.e(32).then(i.bind(null,"mW4C"))}}},s={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("h4",{staticClass:"title"},[e._v("筛选条件")]),e._v(" "),i("hr"),e._v(" "),i("div",{staticClass:"filters"},[i("el-form",{attrs:{inline:!0,model:e.filter,"label-width":"6em"}},[i("el-form-item",{attrs:{label:"序号"}},[i("el-input",{attrs:{placeholder:"请输入序号"},nativeOn:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.search(t)}},model:{value:e.filter.id,callback:function(t){e.$set(e.filter,"id",t)},expression:"filter.id"}})],1),e._v(" "),i("el-form-item",{attrs:{label:"模块名称"}},[i("el-input",{attrs:{placeholder:"请输入模块名称"},nativeOn:{keypress:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.search(t)}},model:{value:e.filter.name,callback:function(t){e.$set(e.filter,"name",t)},expression:"filter.name"}})],1),e._v(" "),i("el-form-item",[i("el-button",{attrs:{type:"primary",icon:"el-icon-search"},on:{click:e.search}},[e._v("搜索")]),e._v(" "),i("el-button",{attrs:{type:"info",icon:"el-icon-delete"},on:{click:e.clear}},[e._v("清空")])],1)],1)],1),e._v(" "),i("h4",{staticClass:"title"},[e._v("后端服务列表")]),e._v(" "),i("hr"),e._v(" "),i("v-datagrid",{attrs:{columns:e.columns,"data-url":e.dataUrl,"count-url":e.countUrl,params:e.params,toolbar:e.toolbar}})],1)},staticRenderFns:[]};var o=i("C7Lr")(l,s,!1,function(e){i("l4Ol")},"data-v-42817d58",null);t.default=o.exports},l4Ol:function(e,t){}});
2 | //# sourceMappingURL=17.2095f5eb661f487e6013.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/22.0bb2356d936198667870.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([22],{a76X:function(t,e){},oF63:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=a("aA9S"),n=a.n(s),r={name:"transfer",data:function(){return{data:{result:!0,title:"操作成功!",subtitle:null,back:"返回",buttons:[]}}},methods:{to:function(t){this.$router.push(t)}},mounted:function(){var t=void 0;try{var e=this.$route.params.data;t=e&&"string"==typeof e?JSON.parse(decodeURIComponent(e)):t||{}}catch(t){}this.data=n()({},this.data,t),document.documentElement.scrollTop=0,window.screenTop=0}},i={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h4",{staticClass:"title"},[t._v("操作结果")]),t._v(" "),a("hr"),t._v(" "),a("div",{staticClass:"transfer_container"},[a("div",{staticClass:"result-container"},[t.data.result?a("span",{staticClass:"el-icon-success success"}):a("span",{staticClass:"el-icon-error failed"})]),t._v(" "),a("br"),t._v(" "),a("br"),t._v(" "),a("h4",{staticClass:"center"},[a("b",[t._v(t._s(t.data.title||"操作成功!"))])]),t._v(" "),t.data.subtitle?a("div",{staticClass:"subtitle center"},[t._v(t._s(t.data.subtitle))]):t._e(),t._v(" "),a("br"),t._v(" "),a("br"),t._v(" "),a("div",{staticStyle:{margin:"10px"}},[t._l(t.data.buttons,function(e,s){return a("el-button",{key:s,attrs:{type:"primary"},on:{click:function(a){return t.to(e.link)}}},[t._v(t._s(e.text))])}),t._v(" "),0!=t.data.back?a("el-button",{attrs:{type:"info"},on:{click:function(e){return t.$router.go(-1)}}},[t._v(t._s(t.data.back||"返回"))]):t._e()],2)])])},staticRenderFns:[]};var c=a("C7Lr")(r,i,!1,function(t){a("a76X")},"data-v-190a2018",null);e.default=c.exports}});
2 | //# sourceMappingURL=22.0bb2356d936198667870.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/24.ed30e718352e619ce964.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([24],{Fw7Z:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"index-main-left-content"})},staticRenderFns:[]};var c=n("C7Lr")({name:"index",data:function(){return{}},computed:{},methods:{},components:{},mounted:function(){}},a,!1,function(e){n("bHEh")},"data-v-108aa0a8",null);t.default=c.exports},bHEh:function(e,t){}});
2 | //# sourceMappingURL=24.ed30e718352e619ce964.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/26.f783d01b2450e40dfe86.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([26],{BvPQ:function(e,t){},vVkX:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i("0Njg"),s={data:function(){return{times:1,width:1e3,height:618,disabled:!0,id:this.$route.params.id,name:null}},computed:{},methods:{init:function(){var e=this;this.id&&Object(n.O)(this.id).then(function(t){e.name=t.name;var i={testCaseId:e.id,workflow:JSON.parse(t.workflow),presetParams:JSON.parse(t.presetParams)||[]};setTimeout(function(){return e.$refs.runner.setData(i)},800)})},run:function(e){this.disabled=!0,this.times=this.times>1e3?1e3:this.times,this.$refs.runner.run(this.times,e)},saveHistory:function(){this.$refs.runner.saveHistory()},finished:function(){this.disabled=!1}},components:{"v-runner":function(){return i.e(34).then(i.bind(null,"V7zm"))}},mounted:function(){this.width=this.$el.clientWidth-100,this.init()}},r={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("h4",{staticClass:"title"},[e._v("执行用例")]),e._v(" "),i("hr"),e._v(" "),i("el-form",{ref:"edit",attrs:{"label-width":"8em"}},[i("el-form-item",{attrs:{label:"用例名称:"}},[e._v("\n "+e._s(e.name)+"\n ")]),e._v(" "),i("el-form-item",{staticStyle:{"margin-left":"-3em"}},[i("v-runner",{ref:"runner",staticStyle:{"line-height":"20px"},attrs:{width:e.width,height:e.height,finished:e.finished,prepared:e.finished}})],1),e._v(" "),i("el-form-item",[i("el-button",{attrs:{type:"info",icon:"el-icon-back"},on:{click:function(t){return e.$router.go(-1)}}},[e._v("返回")]),e._v(" "),i("el-input",{staticStyle:{width:"88px"},attrs:{placeholder:"运行次数",type:"number",max:1e3},model:{value:e.times,callback:function(t){e.times=t},expression:"times"}}),e._v(" "),i("el-button",{attrs:{type:"success",icon:e.disabled?"el-icon-loading":"el-icon-magic-stick",disabled:e.disabled},on:{click:function(t){return e.run(!1)}}},[e._v("运行")]),e._v(" "),i("el-button",{attrs:{type:"success",icon:e.disabled?"el-icon-loading":"el-icon-video-camera-solid",disabled:e.disabled},on:{click:function(t){return e.run(!0)}}},[e._v("mock运行")]),e._v(" "),i("el-button",{attrs:{type:"success",icon:e.disabled?"el-icon-loading":"el-icon-video-camera-solid",disabled:e.disabled},on:{click:e.saveHistory}},[e._v("保存执行结果")])],1)],1)],1)},staticRenderFns:[]};var a=i("C7Lr")(s,r,!1,function(e){i("BvPQ")},"data-v-0b32ee44",null);t.default=a.exports}});
2 | //# sourceMappingURL=26.f783d01b2450e40dfe86.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/27.be51282c4f6c1de71cfe.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([27],{"7tIR":function(e,r){},fAfb:function(e,r,t){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var s=t("0Njg"),o=t("LLxk"),i=t("R2SV"),n={data:function(){return{remember:!1,forms:{username:"",password:""},rules:{username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},disClick:!1}},computed:{},methods:{onSubmit:function(){var e=this;this.$refs.forms.validate(function(r){r&&(e.disClick=!0,Object(s.Y)(e.forms).then(function(r){var t=7200;e.remember&&(t=31536e4),Object(o.c)(r,t),e.disClick=!1,e.redirect?e.$router.push(decodeURIComponent(e.redirect)):e.$router.push("/")}).catch(function(){e.disClick=!1}))})}},mounted:function(){this.redirect=(Object(i.f)()||{}).redirect}},l={render:function(){var e=this,r=e.$createElement,s=e._self._c||r;return s("div",{staticClass:"login"},[s("div",{staticClass:"login-box"},[s("img",{staticClass:"logo",attrs:{src:t("dLd/"),alt:"developer center"}}),e._v(" "),s("p",{staticClass:"logo_title"},[e._v("开发者中心")]),e._v(" "),s("div",{staticClass:"form"},[s("el-form",{ref:"forms",attrs:{model:e.forms,"label-width":"0",rules:e.rules}},[s("el-form-item",{attrs:{prop:"username"}},[s("el-input",{attrs:{placeholder:"请输入账号"},nativeOn:{keypress:function(r){return!r.type.indexOf("key")&&e._k(r.keyCode,"enter",13,r.key,"Enter")?null:e.onSubmit(r)}},model:{value:e.forms.username,callback:function(r){e.$set(e.forms,"username",r)},expression:"forms.username"}})],1),e._v(" "),s("el-form-item",{attrs:{prop:"password"}},[s("el-input",{attrs:{type:"password",placeholder:"请输入密码"},nativeOn:{keypress:function(r){return!r.type.indexOf("key")&&e._k(r.keyCode,"enter",13,r.key,"Enter")?null:e.onSubmit(r)}},model:{value:e.forms.password,callback:function(r){e.$set(e.forms,"password",r)},expression:"forms.password"}})],1),e._v(" "),s("el-form-item",[s("el-checkbox",{staticStyle:{float:"left"},model:{value:e.remember,callback:function(r){e.remember=r},expression:"remember"}},[e._v("长期登录")])],1)],1),e._v(" "),s("el-row"),e._v(" "),s("el-button",{attrs:{type:"primary",disabled:e.disClick,icon:e.disClick?"el-icon-loading":""},on:{click:e.onSubmit}},[e._v(e._s(e.disClick?"登录中":"登录"))])],1)])])},staticRenderFns:[]};var a=t("C7Lr")(n,l,!1,function(e){t("7tIR")},"data-v-09524be6",null);r.default=a.exports}});
2 | //# sourceMappingURL=27.be51282c4f6c1de71cfe.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/31.c830f4d0bc41e35c5912.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([31],{j9Pd:function(e,t,l){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=l("lC5x"),n=l.n(i),o=l("J0Oq"),a=l.n(o),s={name:"modalBase",props:{title:{type:String,default:"模态框"},lockScroll:{type:Boolean,default:!0},okText:{type:String,default:"确定"},cancelText:{type:String,default:"取消"},ok:{type:Function,default:null},cancel:{type:Function,default:null},width:{type:Number,default:600},height:{type:Number,default:null},autoClose:{type:Boolean,default:!1}},data:function(){return{visible:!1,disabled:!1}},methods:{confirm:function(){var e=this;return a()(n.a.mark(function t(){return n.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e.disabled=!0,!e.ok){t.next=8;break}return t.next=4,e.ok();case 4:!1!==t.sent&&e.autoClose&&(e.visible=!1),t.next=9;break;case 8:e.autoClose&&(e.visible=!1);case 9:e.disabled=!1;case 10:case"end":return t.stop()}},t,e)}))()},close:function(){this.cancel?!1!==this.cancel()&&(this.visible=!1):this.visible=!1},open:function(){this.visible=!0},toggle:function(){this.visible=!this.visible}}},c={render:function(){var e=this,t=e.$createElement,l=e._self._c||t;return l("el-dialog",{attrs:{title:e.title,visible:e.visible,width:null!=e.width?e.width+"px":"auto","lock-scroll":e.lockScroll},on:{"update:visible":function(t){e.visible=t}}},[l("hr"),e._v(" "),l("div",[e._t("body")],2),e._v(" "),e.okText||e.cancelText?l("div",{staticClass:"modal-footer",attrs:{slot:"footer"},slot:"footer"},[e._t("default",[e.cancelText?l("el-button",{attrs:{type:"info"},on:{click:e.close}},[e._v(e._s(e.cancelText))]):e._e(),e._v(" "),e.okText?l("el-button",{attrs:{type:"primary",disabled:e.disabled,icon:e.disabled?"el-icon-loading":""},on:{click:e.confirm}},[e._v("\n "+e._s(e.okText)+"\n ")]):e._e()])],2):e._e()])},staticRenderFns:[]};var r=l("C7Lr")(s,c,!1,function(e){l("tFhY")},"data-v-2bc75620",null);t.default=r.exports},tFhY:function(e,t){}});
2 | //# sourceMappingURL=31.c830f4d0bc41e35c5912.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/35.31a3c801df3b1e3fcaba.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([35],{"3vG1":function(t,e){},Kq1y:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r={name:"parameter",props:{json:{type:Array,default:null}},data:function(){return{data:[]}},mounted:function(){this.init()},methods:{init:function(){var t=this;this.data=this.json.flatMap(function(e){return"Object"!==e.type||e.body||(e.key=void 0),t.generateChild(e,void 0)})},generateBodyComment:function(t){var e=this;if("List"===t.type)return[this.generateBodyComment(t.children[0])];if("Object"===t.type){var n={};return t.children=t.children||[],t.children.forEach(function(t){n[t.key]=e.generateBodyComment(t)}),n}return void 0===t.type?"...":"void"===t.type?"无":(t.comment?t.comment+"; ":"")+" 数据类型:"+t.type+"; "+(t.notNull?"此项一定不为空;":"")},generateChild:function(t,e){var n=this,r=(e?e+".":"")+(t.key||"");if(t.body){var o=t.comment||"";return[{key:r,notNull:t.notNull,comment:o,body:this.generateBodyComment(t),defaults:t.defaults,type:"body"}]}if("List"===t.type){var l=[{key:r,notNull:t.notNull,comment:t.comment,defaults:t.defaults,type:"List<"+(t.children[0].type||"Object")+">"}];return"Object"!==t.children[0].type&&"List"!==t.children[0].type||(l=l.concat((t.children[0].children||[]).flatMap(function(t){return n.generateChild(t,r)}))),l}return"Object"===t.type?(t.children||[]).flatMap(function(t){return n.generateChild(t,r)}):{key:r,notNull:t.notNull,comment:t.comment,defaults:t.defaults,type:t.type}}},components:{"v-jsonformatter":function(){return n.e(33).then(n.bind(null,"9YOq"))}}},o={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("el-table",{staticStyle:{width:"100%","margin-bottom":"20px"},attrs:{data:t.data||[],"row-key":"key",border:"","default-expand-all":""}},[n("el-table-column",{attrs:{prop:"key",label:"参数名",width:"150"}}),t._v(" "),n("el-table-column",{attrs:{prop:"type",label:"类型",width:"120"}}),t._v(" "),n("el-table-column",{attrs:{prop:"notNull",label:"是否必填",formatter:function(t,e,n){return n?"是":"否"},width:"120"}}),t._v(" "),n("el-table-column",{attrs:{prop:"defaults",label:"默认值",formatter:function(t,e,n){return void 0===n?"":n+""},width:"100"}}),t._v(" "),n("el-table-column",{attrs:{prop:"comment",label:"说明",width:"800"},scopedSlots:t._u([{key:"default",fn:function(e){return[n("div",{domProps:{innerHTML:t._s(e.row.comment)}}),t._v(" "),e.row.body?n("v-jsonformatter",{attrs:{json:e.row.body,minHeight:100}}):t._e()]}}])})],1)],1)},staticRenderFns:[]};var l=n("C7Lr")(r,o,!1,function(t){n("3vG1")},"data-v-3dc81fa4",null);e.default=l.exports}});
2 | //# sourceMappingURL=35.31a3c801df3b1e3fcaba.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/46.5fcccc975feda255736e.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([46],{vkFf:function(e,t){},zmcw:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n("aA9S"),r=n.n(o),i={props:{onOk:{type:Function,default:function(){}}},data:function(){return{nodeId:null,source:[],target:[],node:{sleep:0,javascript:null},hasTarget:!1,hasSource:!1}},methods:{open:function(e,t){this.target=t.filter(function(t){return t.getModel().source===e.id}).map(function(e){return e.getModel().id})||[],this.source=t.filter(function(t){return t.getModel().target===e.id}).map(function(e){return e.getModel().id})||[],this.hasTarget=this.target.length>0,this.hasSource=this.source.length>0;var n=e.data||{};this.nodeId="(上游节点:"+this.source+";下游节点:"+this.target+")",this.node.javascript=n.javascript,this.node.sleep=n.sleep,this.$refs.editConditionDialog.open()},confirm:function(){var e=this;this.$refs.form.validate(function(t){t&&(e.onOk&&e.onOk(r()({},e.node)),e.$refs.editConditionDialog.close())})}},components:{"v-dialog":function(){return n.e(31).then(n.bind(null,"j9Pd"))}}},a={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-dialog",{ref:"editConditionDialog",attrs:{title:"配置条件:"+e.nodeId,ok:e.confirm,width:1e3}},[n("el-form",{ref:"form",staticClass:"edit-node-dialog",attrs:{slot:"body",model:e.node,"label-width":"8em"},slot:"body"},[n("el-form-item",{attrs:{label:"休眠"}},[n("el-input",{staticStyle:{display:"inline-block",width:"100px"},attrs:{placeholder:"0"},model:{value:e.node.sleep,callback:function(t){e.$set(e.node,"sleep",t)},expression:"node.sleep"}}),e._v(" 秒之后运行\n ")],1),e._v(" "),n("el-form-item",{attrs:{label:"条件处理脚本:"}},[n("el-input",{attrs:{placeholder:(e.hasSource?"您可以使用("+e.source.map(function(e){return"$"+e}).join(",")+")来获取上游返回值,":"")+"\n"+(e.hasTarget?"并选择["+e.target.map(function(e){return" '"+e+"' "}).join(",")+"]中任意一个或者多个作为返回值,表示下游执行哪条线路":"")+"\n如不做任何处理,下游每条分支都将被运行,没有下游则说明都不执行,举例:\n\nif (xx === yy) {\n return ["+(e.hasTarget?" '"+e.target[0]+"' ":"")+"]\n} else {\n return [ "+e.target.map(function(e){return" '"+e+"' "}).join(",")+" ]\n}",rows:15,type:"textarea"},model:{value:e.node.javascript,callback:function(t){e.$set(e.node,"javascript",t)},expression:"node.javascript"}})],1)],1)],1)],1)},staticRenderFns:[]};var s=n("C7Lr")(i,a,!1,function(e){n("vkFf")},"data-v-195ca8f6",null);t.default=s.exports}});
2 | //# sourceMappingURL=46.5fcccc975feda255736e.js.map
--------------------------------------------------------------------------------
/java/src/main/resources/static/static/js/manifest.a87ede5bbd71abf9bf31.js:
--------------------------------------------------------------------------------
1 | !function(e){var c=window.webpackJsonp;window.webpackJsonp=function(a,n,r){for(var t,b,o,i=0,u=[];i 1%", "last 2 versions", "not ie <= 8"]
7 | }
8 | }],
9 | "stage-2"
10 | ],
11 | "plugins": ["transform-vue-jsx", "transform-runtime", "transform-decorators-legacy"]
12 | }
13 |
--------------------------------------------------------------------------------
/web/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/web/.eslintignore:
--------------------------------------------------------------------------------
1 | /build/
2 | /config/
3 | /dist/
4 | /*.js
5 |
--------------------------------------------------------------------------------
/web/.eslintrc.js:
--------------------------------------------------------------------------------
1 | // https://eslint.org/docs/user-guide/configuring
2 |
3 | module.exports = {
4 | root: true,
5 | parserOptions: {
6 | parser: 'babel-eslint'
7 | },
8 | env: {
9 | browser: true,
10 | },
11 | extends: [
12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
14 | 'plugin:vue/essential',
15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md
16 | 'standard'
17 | ],
18 | // required to lint *.vue files
19 | plugins: [
20 | 'vue'
21 | ],
22 | // add your custom rules here
23 | rules: {
24 | // allow async-await
25 | 'generator-star-spacing': 'off',
26 | // allow debugger during development
27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/web/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/web/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/web/README.md:
--------------------------------------------------------------------------------
1 | # cruise
2 |
3 | > A Vue.js project
4 |
5 | ## Build Setup
6 |
7 | ``` bash
8 | # install dependencies
9 | npm install
10 |
11 | # serve with hot reload at localhost:8080
12 | npm run dev
13 |
14 | # build for production with minification
15 | npm run build
16 |
17 | # build for production and view the bundle analyzer report
18 | npm run build --report
19 | ```
20 |
21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
22 |
--------------------------------------------------------------------------------
/web/build/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | require('./check-versions')()
3 |
4 | process.env.NODE_ENV = 'production'
5 |
6 | const ora = require('ora')
7 | const rm = require('rimraf')
8 | const path = require('path')
9 | const chalk = require('chalk')
10 | const webpack = require('webpack')
11 | const config = require('../config')
12 | const webpackConfig = require('./webpack.prod.conf')
13 |
14 | const spinner = ora('building for production...')
15 | spinner.start()
16 |
17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18 | if (err) throw err
19 | webpack(webpackConfig, (err, stats) => {
20 | spinner.stop()
21 | if (err) throw err
22 | process.stdout.write(stats.toString({
23 | colors: true,
24 | modules: false,
25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26 | chunks: false,
27 | chunkModules: false
28 | }) + '\n\n')
29 |
30 | if (stats.hasErrors()) {
31 | console.log(chalk.red(' Build failed with errors.\n'))
32 | process.exit(1)
33 | }
34 |
35 | console.log(chalk.cyan(' Build complete.\n'))
36 | console.log(chalk.yellow(
37 | ' Tip: built files are meant to be served over an HTTP server.\n' +
38 | ' Opening index.html over file:// won\'t work.\n'
39 | ))
40 | })
41 | })
42 |
--------------------------------------------------------------------------------
/web/build/check-versions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const chalk = require('chalk')
3 | const semver = require('semver')
4 | const packageConfig = require('../package.json')
5 | const shell = require('shelljs')
6 |
7 | function exec (cmd) {
8 | return require('child_process').execSync(cmd).toString().trim()
9 | }
10 |
11 | const versionRequirements = [
12 | {
13 | name: 'node',
14 | currentVersion: semver.clean(process.version),
15 | versionRequirement: packageConfig.engines.node
16 | }
17 | ]
18 |
19 | if (shell.which('npm')) {
20 | versionRequirements.push({
21 | name: 'npm',
22 | currentVersion: exec('npm --version'),
23 | versionRequirement: packageConfig.engines.npm
24 | })
25 | }
26 |
27 | module.exports = function () {
28 | const warnings = []
29 |
30 | for (let i = 0; i < versionRequirements.length; i++) {
31 | const mod = versionRequirements[i]
32 |
33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34 | warnings.push(mod.name + ': ' +
35 | chalk.red(mod.currentVersion) + ' should be ' +
36 | chalk.green(mod.versionRequirement)
37 | )
38 | }
39 | }
40 |
41 | if (warnings.length) {
42 | console.log('')
43 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
44 | console.log()
45 |
46 | for (let i = 0; i < warnings.length; i++) {
47 | const warning = warnings[i]
48 | console.log(' ' + warning)
49 | }
50 |
51 | console.log()
52 | process.exit(1)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/web/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const config = require('../config')
4 | const isProduction = process.env.NODE_ENV === 'production'
5 | const sourceMapEnabled = isProduction
6 | ? config.build.productionSourceMap
7 | : config.dev.cssSourceMap
8 |
9 | module.exports = {
10 | loaders: utils.cssLoaders({
11 | sourceMap: sourceMapEnabled,
12 | extract: isProduction
13 | }),
14 | cssSourceMap: sourceMapEnabled,
15 | cacheBusting: config.dev.cacheBusting,
16 | transformToRequire: {
17 | video: ['src', 'poster'],
18 | source: 'src',
19 | img: 'src',
20 | image: 'xlink:href'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/web/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/web/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/web/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/favicon.ico
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 开发平台
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/web/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
33 |
34 |
38 |
--------------------------------------------------------------------------------
/web/src/assets/css/mixin.scss:
--------------------------------------------------------------------------------
1 | $bc: #4063FF;
2 | $fc:#fff;
3 |
4 | // 背景图片地址和大小
5 | @mixin bis($url) {
6 | background-image: url($url);
7 | background-repeat: no-repeat;
8 | background-size: 100% 100%;
9 | }
10 |
11 | @mixin borderRadius($radius) {
12 | -webkit-border-radius: $radius;
13 | -moz-border-radius: $radius;
14 | -ms-border-radius: $radius;
15 | -o-border-radius: $radius;
16 | border-radius: $radius;
17 | }
18 |
19 | //定位全屏
20 | @mixin allcover{
21 | position:absolute;
22 | top:0;
23 | right:0;
24 | bottom: 0;
25 | left: 0;
26 | }
27 |
28 | //定位上下左右居中
29 | @mixin center {
30 | position: absolute;
31 | top: 50%;
32 | left: 50%;
33 | transform: translate(-50%, -50%);
34 | }
35 |
36 | //定位上下居中
37 | @mixin ct {
38 | position: absolute;
39 | top: 50%;
40 | transform: translateY(-50%);
41 | }
42 |
43 | //定位上下居中
44 | @mixin cl {
45 | position: absolute;
46 | left: 50%;
47 | transform: translateX(-50%);
48 | }
49 |
50 | //宽高
51 | @mixin wh($width, $height){
52 | width: $width;
53 | height: $height;
54 | }
55 |
56 | @mixin shadow($xIndex, $yIndex, $shadow, $color) {
57 | -webkit-box-shadow: $xIndex $yIndex $shadow $color;
58 | box-shadow:$xIndex $yIndex $shadow $color;
59 | }
60 |
61 | //字体大小、行高、字体
62 | @mixin font($size, $line-height, $family: 'Microsoft YaHei') {
63 | font: #{$size}/#{$line-height} $family;
64 | }
65 |
66 | //字体大小,颜色
67 | @mixin sc($size, $color){
68 | font-size: $size;
69 | color: $color;
70 | }
71 |
72 | //flex 布局和 子元素 对其方式
73 | @mixin fj($type: space-between){
74 | display: flex;
75 | justify-content: $type;
76 | }
77 |
--------------------------------------------------------------------------------
/web/src/assets/font_icons/fonts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts.png
--------------------------------------------------------------------------------
/web/src/assets/font_icons/fonts/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts/icomoon.eot
--------------------------------------------------------------------------------
/web/src/assets/font_icons/fonts/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts/icomoon.ttf
--------------------------------------------------------------------------------
/web/src/assets/font_icons/fonts/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/font_icons/fonts/icomoon.woff
--------------------------------------------------------------------------------
/web/src/assets/img/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/bg.png
--------------------------------------------------------------------------------
/web/src/assets/img/logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/logo.jpg
--------------------------------------------------------------------------------
/web/src/assets/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/logo.png
--------------------------------------------------------------------------------
/web/src/assets/img/qa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/qa.png
--------------------------------------------------------------------------------
/web/src/assets/img/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/src/assets/img/upload.png
--------------------------------------------------------------------------------
/web/src/components/aggregation-editor/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .dependency-dialog .el-form-item {
4 | margin-bottom: 16px;
5 | }
6 |
7 | .agg-editor {
8 | position: relative;
9 | }
10 |
11 | .param-value {
12 | display: inline-block;
13 | width: 55% !important;
14 | }
15 |
16 | .param-key {
17 | display: inline-block;
18 | width: 20% !important;
19 | }
20 |
21 | .graph-container {
22 | text-align: center;
23 | padding: 5px 0;
24 | border-radius: 4px;
25 | border: 1px solid #DCDFE6;
26 | }
27 |
28 | .data-container {
29 | padding: 20px;
30 | height: 100%;
31 | border-radius: 4px;
32 | margin-left: 20px;
33 | border: 1px solid #DCDFE6;
34 | }
35 |
36 | .function-selector {
37 | position: absolute;
38 | display: none;
39 | width: 200px;
40 | }
41 |
42 | .mask {
43 | background: #0004;
44 | position: absolute;
45 | top: 0;
46 | left: 0;
47 | width: 100%;
48 | height: 100%;
49 | z-index: 999;
50 | }
51 |
52 | .create-button {
53 | position: absolute;
54 | margin: auto;
55 | top: 0;
56 | bottom: 0;
57 | left: 0;
58 | right: 0;
59 | height: 46px;
60 | }
61 |
62 | .work-flow-context-menu {
63 | position: absolute;
64 | list-style-type: none;
65 | left: -10000px;
66 | background-color: rgba(255, 255, 255, 0.9);
67 | border: 1px solid #e2e2e2;
68 | border-radius: 4px;
69 | font-size: 13px;
70 | color: #999;
71 | user-select: none;
72 | min-width: 70px;
73 | }
74 |
75 | .work-flow-context-menu li {
76 | cursor: pointer;
77 | list-style-type: none;
78 | list-style: none;
79 | margin-left: 0px;
80 | line-height: 30px;
81 | padding: 0 10px;
82 | }
83 |
84 | .work-flow-context-menu li:hover {
85 | color: #000;
86 | background: #eeee;
87 | font-weight: bold;
88 | }
89 |
90 |
--------------------------------------------------------------------------------
/web/src/components/condition-editor/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .edit-node-dialog .el-form-item {
4 | margin-bottom: 16px;
5 | }
6 |
7 | .param-value {
8 | width: 450px !important;
9 | }
10 |
11 | .param-key {
12 | width: 230px !important;
13 | }
14 |
15 | .param-label {
16 | width: 50px !important;
17 | }
18 |
--------------------------------------------------------------------------------
/web/src/components/condition-editor/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 秒之后运行
7 |
8 |
9 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
77 |
78 |
81 |
--------------------------------------------------------------------------------
/web/src/components/datagrid/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | /*样式在下面完成*/
4 | .datagrid-container {
5 |
6 | }
7 |
8 | .datagrid-title {
9 | font-size: 16px;
10 | font-weight: 600;
11 | padding-bottom: 10px;
12 | color: #6d6d6d;
13 | }
14 |
15 | .datagrid-title-text {
16 | padding: 15px;
17 | border-left: 3px solid #4786ff;
18 | }
19 |
20 | .datagrid-toolbar {
21 | width: 100%;
22 | height: 60px;
23 | padding: 15px;
24 | border-bottom: none;
25 | }
26 |
27 | .datagrid-toolbar-button {
28 | }
29 |
30 | .datagrid-checkbox {
31 | width: 20px;
32 | zoom: 1.5;
33 | }
34 |
35 | .datagrid-frame {
36 | border-spacing: 0;
37 | border-collapse: collapse;
38 | background-color: transparent;
39 | }
40 |
41 | .datagrid-header {
42 | font-size: 15px;
43 | padding: 15px;
44 | }
45 |
46 | .datagrid-header-row {
47 | border: 1px solid #ddd;
48 | }
49 |
50 | .datagrid-header-cell {
51 | //text-align: center;
52 | line-height: 1.42857143;
53 | cursor: pointer;
54 | padding: 15px;
55 | white-space: nowrap;
56 | text-align: left;
57 | }
58 |
59 | .datagrid-header-check, .datagrid-row-check{
60 | width: 30px;
61 | text-align: center;
62 | padding-left: 10px;
63 | }
64 |
65 | .datagrid-body {
66 | text-align: left;
67 | }
68 |
69 | .datagrid-body-row, .datagrid-body-row-child {
70 | border: 1px solid #ddd;
71 | }
72 |
73 | .datagrid-body-row:hover {
74 | background: rgba(230, 230, 230, 0.31) !important;
75 | }
76 |
77 | .datagrid-body-td {
78 | padding: 15px;
79 | }
80 |
81 | .datagrid-body-cell {
82 | max-height: 80px;
83 | overflow-y: auto;
84 | }
85 | .datagrid-body-cell::-webkit-scrollbar {
86 | width: 3px;
87 | }
88 |
89 | .datagrid-body-cell::-webkit-scrollbar-thumb {
90 | background: rgba(68, 54, 54, 0.1);
91 | }
92 |
93 | .datagrid-body-cell::-webkit-scrollbar-track {
94 | background: rgba(0, 0, 0, 0.11);
95 | }
96 |
97 | .datagrid-action {
98 | white-space: nowrap;
99 | text-decoration: none;
100 | cursor: pointer;
101 | color: darkblue;
102 | margin: 0 7px;
103 | }
104 |
105 | .datagrid-footer {
106 | border: 1px solid #ddd;
107 | background-color: #f1f1f1;
108 | }
109 |
110 | .datagrid-row-expander-all, .datagrid-row-expander {
111 | cursor: pointer;
112 | width: 46px;
113 |
114 | span {
115 | display: inline-block;
116 | padding: 15px;
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/web/src/components/dialog/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .modal-footer {
4 | padding: 15px 0 0 0;
5 | }
6 |
--------------------------------------------------------------------------------
/web/src/components/frame/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .header {
4 | position: fixed;
5 | z-index: 100;
6 | background: #4063ff;
7 | background-size: 100% 100%;
8 | @include wh(100%, 60px);
9 | }
10 |
11 | .logo{
12 | height: 100%;
13 | padding: 12px;
14 | }
15 |
16 | .link {
17 | color: #eee;
18 | display: block;
19 | width: 100%;
20 | height: 100%;
21 | }
22 |
23 | .link.router-link-exact-active.router-link-active {
24 | color: gold !important;
25 | }
26 |
27 | .menu {
28 | display: inline-block;
29 | }
30 |
31 |
32 | .user {
33 | display: inline-block;
34 | height: 100%;
35 | float: right;
36 | line-height: 60px;
37 | margin-right: 20px;
38 | }
39 |
40 | .el-dropdown-link:hover {
41 | color: #ffffff8c !important;
42 | }
43 |
--------------------------------------------------------------------------------
/web/src/components/image/big.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
![]()
9 |
10 |
11 |
12 |
13 |
14 |
37 |
88 |
--------------------------------------------------------------------------------
/web/src/components/image/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
7 |
8 |
9 |
10 |
11 |
12 |
56 |
87 |
--------------------------------------------------------------------------------
/web/src/components/interfaces-selector/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .edit-node-dialog .el-form-item {
4 | margin-bottom: 16px;
5 | }
6 |
7 | .param-value {
8 | width: 450px !important;
9 | }
10 |
11 | .param-key {
12 | width: 230px !important;
13 | }
14 |
15 | .param-label {
16 | width: 50px !important;
17 | }
18 |
--------------------------------------------------------------------------------
/web/src/components/node-editor/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .edit-node-dialog .el-form-item {
4 | margin-bottom: 16px;
5 | }
6 |
7 | .param-value {
8 | width: 450px !important;
9 | }
10 |
11 | .param-key {
12 | width: 230px !important;
13 | }
14 |
15 | .param-label {
16 | width: 50px;
17 | }
18 |
--------------------------------------------------------------------------------
/web/src/components/pager/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | .pager {
3 | font-size: 15px;
4 | color: #666666;
5 | margin: 10px 10px;
6 | box-sizing: border-box;
7 | text-align: right;
8 | -moz-user-select: none;
9 | -khtml-user-select: none;
10 | user-select: none;
11 | }
12 |
13 | .pager-rows {
14 | width: 70px;
15 | }
16 |
17 | .pager-rows-option {
18 |
19 | }
20 |
21 | .pager-btn-enable {
22 | background-color: white;
23 | min-width: 30px;
24 | height: 28px;
25 | border: 1px solid #0073A9 !important;
26 | text-align: center;
27 | margin: 0 4px;
28 | cursor: pointer;
29 | line-height: 27px;
30 | color: #0073A9;
31 | font-size: 13px;
32 | display: inline-block;
33 | }
34 |
35 | .pager-btn-enable:hover {
36 | background-color: #3674F4;
37 | border-color: #3674F4;
38 | color: #FFFFFF !important;
39 | }
40 |
41 | .pager-btn-disable {
42 | color: gray !important;
43 | background-color: #f2f6f7 !important;
44 | min-width: 30px;
45 | height: 28px;
46 | border: 1px solid #cacaca !important;
47 | text-align: center;
48 | margin: 0 4px;
49 | cursor: pointer;
50 | line-height: 28px;
51 | font-size: 13px;
52 | display: inline-block;
53 | }
54 |
55 | .pager-first {
56 | width: 50px;
57 | }
58 |
59 | .pager-previous {
60 | width: 70px;
61 | }
62 |
63 | .pager-current {
64 | width: 60px;
65 | text-align: center;
66 | &::-webkit-outer-spin-button,
67 | &::-webkit-inner-spin-button {
68 | -webkit-appearance: none !important;
69 | }
70 | -webkit-appearance: none;
71 | -moz-appearance:textfield;
72 | -webkit-box-sizing: border-box;
73 |
74 | border-radius: 3px;
75 | line-height: 20px;
76 | background: #fff none;
77 | border: 1px solid #dcdfe6;
78 | box-sizing: border-box;
79 | color: #606266;
80 | display: inline-block;
81 | font-size: inherit;
82 | outline: 0;
83 | -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
84 | transition: border-color .2s cubic-bezier(.645,.045,.355,1);
85 | }
86 |
87 | .pager-next {
88 | width: 70px;
89 | }
90 |
91 | .pager-last {
92 | width: 50px;
93 | }
94 |
95 | .pager-page {
96 | margin: 0 10px;
97 | }
98 |
99 | .pager-total {
100 | margin: 0 10px;
101 | }
102 |
103 | .pager-page-num {
104 | color: #0073A9;
105 | margin: 0 5px;
106 | }
107 |
108 | .pager-total-num {
109 | color: #0073A9;
110 | margin: 0 5px;
111 | }
112 |
--------------------------------------------------------------------------------
/web/src/components/parameter-input/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .param-value {
4 | width: 55% !important;
5 | }
6 |
7 | .param-script {
8 | width: 35% !important;
9 | }
10 |
11 | .param-arguments {
12 | width: 20% !important;
13 | }
14 |
15 | .param-key {
16 | width: 20% !important;
17 | }
18 |
--------------------------------------------------------------------------------
/web/src/components/parameter/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/components/runner/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .runner-container {
4 | border-radius: 4px;
5 | border: 1px solid #DCDFE6;
6 | padding: 0;
7 | }
8 |
9 | .el-aside {
10 | border-radius: 4px;
11 | border: 1px solid #DCDFE6;
12 | padding: 10px;
13 | margin-left: 10px;
14 | }
15 |
16 | .el-form-item .el-form-item {
17 | margin-bottom: 22px;
18 | }
19 |
20 | .simple {
21 | display: inline-block;
22 | width: 20px;
23 | height: 20px;
24 | }
25 |
26 | .waiting {
27 | background: yellow;
28 | }
29 |
30 | .running {
31 | background: green;
32 | }
33 |
34 | .success {
35 | background: springgreen;
36 | }
37 |
38 | .failed {
39 | background: red;
40 | }
41 |
42 | .ignore {
43 | background: lightgray;
44 | }
45 |
46 | .warning {
47 | background: orange;
48 | }
49 |
50 | .runner-logger {
51 | word-break: break-word;
52 | }
53 |
54 | .running-history {
55 | text-align: center;
56 | padding: 5px 0;
57 | border-radius: 4px;
58 | border: 1px solid #DCDFE6;
59 |
60 | div {
61 | cursor: pointer;
62 | display: block;
63 | padding: 10px;
64 |
65 | &:hover {
66 | color: red;
67 | background: #ccc;
68 | }
69 | }
70 |
71 | .selected {
72 | background: #eee;
73 | }
74 |
75 | .el-icon-circle-check {
76 | color: green;
77 | }
78 |
79 | .el-icon-circle-close {
80 | color: red;
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/web/src/components/selector/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{
3 | right: 6px;
4 | }
5 |
6 |
--------------------------------------------------------------------------------
/web/src/components/table-editor/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .function-selector {
4 | position: absolute;
5 | display: none;
6 | width: 200px;
7 | }
8 |
9 | .work-flow-context-menu {
10 | position: absolute;
11 | list-style-type: none;
12 | left: -10000px;
13 | background-color: rgba(255, 255, 255, 0.9);
14 | border: 1px solid #e2e2e2;
15 | border-radius: 4px;
16 | font-size: 13px;
17 | color: #999;
18 | user-select: none;
19 | min-width: 70px;
20 | }
21 |
22 | .work-flow-context-menu li {
23 | cursor: pointer;
24 | list-style-type: none;
25 | list-style: none;
26 | margin-left: 0px;
27 | line-height: 30px;
28 | padding: 0 10px;
29 | }
30 |
31 | .work-flow-context-menu li:hover {
32 | color: #000;
33 | background: #eeee;
34 | font-weight: bold;
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/web/src/components/table-output-editor/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .edit-node-dialog .el-form-item {
4 | margin-bottom: 16px;
5 | }
6 |
7 | .param-value {
8 | width: 450px !important;
9 | }
10 |
11 | .param-key {
12 | width: 230px !important;
13 | }
14 |
15 | .param-label {
16 | width: 50px;
17 | }
18 |
--------------------------------------------------------------------------------
/web/src/components/table-selector/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .edit-node-dialog .el-form-item {
4 | margin-bottom: 16px;
5 | }
6 |
7 | .param-value {
8 | width: 450px !important;
9 | }
10 |
11 | .param-key {
12 | width: 230px !important;
13 | }
14 |
15 | .param-label {
16 | width: 50px;
17 | }
18 |
--------------------------------------------------------------------------------
/web/src/components/tree/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .tree-node {
4 | line-height: 22px;
5 | outline: none;
6 | }
7 |
8 | .editor {
9 | padding: 4px;
10 | border: 1px solid #ddd;
11 | }
12 |
13 | /*.tree-node:hover {
14 | background-color: #f5f7fa;
15 | }*/
16 | .list-group-item {
17 | margin-bottom: -1px;
18 | background-color: #fff;
19 | border: 1px solid #ddd;
20 | cursor: pointer;
21 | }
22 |
23 | .list-group-item .editable {
24 | visibility: hidden;
25 | position: absolute;
26 | right: 10px;
27 | line-height: 22px;
28 | }
29 |
30 | .list-group-item:not(.node-disabled):hover {
31 | background-color: #F5F5F5;
32 | border: 1px solid #ddd;
33 |
34 | .editable {
35 | visibility: visible;
36 | }
37 | }
38 |
39 | .list-group-item:focus {
40 | border: 1px solid #ddd;
41 | background-color: #F5F5F5;
42 | }
43 |
44 | .active {
45 | border: 1px solid #ddd;
46 | color: #FFFFFF !important;
47 | background-color: #428bca !important;
48 | }
49 |
50 | .icon {
51 | margin-right: 5px;
52 | font-weight: bold;
53 | }
54 |
55 | .list-group-item {
56 | margin-bottom: -1px;
57 | background-color: #fff;
58 | border: 1px solid #ddd;
59 | cursor: pointer;
60 | }
61 |
62 | .tree-node {
63 | line-height: 22px;
64 | outline: none;
65 | }
66 |
67 | .list-group-item:first-child {
68 | border-top-left-radius: 4px;
69 | border-top-right-radius: 4px;
70 | }
71 |
72 | .list-group-item {
73 | position: relative;
74 | display: block;
75 | padding: 10px 15px;
76 | margin-bottom: -1px;
77 | background-color: #fff;
78 | border: 1px solid #ddd;
79 | }
80 |
--------------------------------------------------------------------------------
/web/src/components/workflow/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .function-selector {
4 | position: absolute;
5 | display: none;
6 | width: 200px;
7 | }
8 |
9 | .work-flow-context-menu {
10 | position: absolute;
11 | list-style-type: none;
12 | left: -10000px;
13 | background-color: rgba(255, 255, 255, 0.9);
14 | border: 1px solid #e2e2e2;
15 | border-radius: 4px;
16 | font-size: 13px;
17 | color: #999;
18 | user-select: none;
19 | min-width: 70px;
20 | }
21 |
22 | .work-flow-context-menu li {
23 | cursor: pointer;
24 | list-style-type: none;
25 | list-style: none;
26 | margin-left: 0px;
27 | line-height: 30px;
28 | padding: 0 10px;
29 | }
30 |
31 | .work-flow-context-menu li:hover {
32 | color: #000;
33 | background: #eeee;
34 | font-weight: bold;
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/web/src/config/api/data-api.js:
--------------------------------------------------------------------------------
1 |
2 | const tableMap = {
3 | 1: {
4 | name: '订单主表',
5 | schema: 'order'
6 | },
7 | 2: {
8 | name: '订单商品主表',
9 | schema: 'order'
10 | },
11 | 3: {
12 | name: '商品主表',
13 | schema: 'order'
14 | },
15 | 4: {
16 | name: '优惠券主表',
17 | schema: 'order'
18 | }
19 | }
20 |
21 | export const tableListApi = (params) => {
22 | return Promise.resolve(Object.entries(tableMap)
23 | .map(s => {
24 | return {
25 | id: +s[0],
26 | name: s[1].name
27 | }
28 | })
29 | )
30 | }
31 |
32 | export const tableInfoApi = (tableId) => {
33 | return Promise.resolve({
34 | columns: [{
35 | name: '字段' + 1,
36 | column: 'column' + 1,
37 | type: '类型',
38 | comment: '备注' + Date.now()
39 | }, {
40 | name: '字段' + 2,
41 | column: 'column' + 2,
42 | type: '类型',
43 | comment: '备注' + Date.now()
44 | }, {
45 | name: '字段' + 3,
46 | column: 'column' + 3,
47 | type: '类型',
48 | comment: '备注' + Date.now()
49 | }, {
50 | name: '字段' + 4,
51 | column: 'column' + 4,
52 | type: '类型',
53 | comment: '备注' + Date.now()
54 | }],
55 | id: tableId,
56 | name: tableMap[tableId].name,
57 | description: '主表,相关的数据'
58 | })
59 | }
60 |
--------------------------------------------------------------------------------
/web/src/config/api/env.js:
--------------------------------------------------------------------------------
1 | export const INSERV_URL = '/'
2 |
--------------------------------------------------------------------------------
/web/src/config/api/http.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | import qs from 'query-string'
3 | import { removeBlank } from '@/config/utils'
4 | import { that } from '../../main.js'
5 |
6 | // 表示跨域请求时是否带cookie
7 | axios.defaults.withCredentials = true
8 | // 超时时间20s
9 | axios.defaults.timeout = 15000
10 | //
11 | axios.defaults.crossDomain = true
12 |
13 | // 添加请求拦截器
14 | axios.interceptors.request.use((config) => {
15 | const customHeaders = config.customHeaders || (config.params && config.params.customHeaders)
16 | // console.log(customHeaders)
17 | if (config.params) {
18 | delete config.params.customHeaders
19 | }
20 |
21 | if (customHeaders && customHeaders.length > 0) {
22 | customHeaders.filter(n => n.key).forEach(h => {
23 | config.headers[h.key] = h.value
24 | })
25 | }
26 | if (config.cookie === false || (config.params && config.params.cookie === false)) {
27 | config.withCredentials = false
28 | }
29 |
30 | config.paramsSerializer = params => qs.stringify(params)
31 | // 在发送请求之前做些什么
32 | if (['post', 'put', 'patch'].indexOf(config.method) >= 0) {
33 | if (config.type === 'updoad') {
34 | // do nothing
35 | } else if (config.type === 'json') {
36 | if (typeof config.data !== 'string') {
37 | config.data = JSON.stringify(config.data)
38 | }
39 | config.headers['Content-type'] = 'application/json'
40 | } else if (config.type === 'raw') {
41 | config.headers['Content-type'] = 'html/text'
42 | } else {
43 | config.data = qs.stringify(removeBlank(config.data))
44 | config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
45 | }
46 | } else if (config.method === 'get') {
47 | config.params = removeBlank(config.params)
48 | }
49 | return config
50 | }, error => Promise.reject(error))
51 |
52 | let alerted = false
53 |
54 | axios.interceptors.response.use((response) => {
55 | if (response.config.notice !== false) {
56 | // 判断http状态码
57 | if ([200, 304, 400].indexOf(response.status) === -1) {
58 | that.$alert('网络异常!', '提示', { type: 'error' })
59 | } else if (response.data.code === -401) {
60 | if (!alerted) {
61 | alerted = true
62 | that.$alert('登录超时', '提示', { type: 'error' }).then(() => that.$router.push('/login'))
63 |
64 | setTimeout(() => {
65 | alerted = false
66 | }, 5000)
67 | }
68 | } else if (response.data.code !== 0) {
69 | that.$alert(response.data.message || '请求失败!', '提示', { type: 'error' })
70 | }
71 | }
72 | return response
73 | }, error => Promise.reject(error))
74 |
75 | export const xhr = axios
76 |
--------------------------------------------------------------------------------
/web/src/config/cookie.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | const DEFAULT_CONFIG = {
4 | path: '/',
5 | expires: null,
6 | secure: null,
7 | };
8 |
9 | /**
10 | *
11 | * @param key
12 | * @param value
13 | * @param opts : {
14 | * expires : 过期时间当前时间往后多少秒(整数),不设置表示基于session级别(默认基于session)
15 | * domain : 作用域, 如果不传,区当前浏览器的一级域名;
16 | * path:路径(默认根目录,但是如果cookie只希望在部分目录下才生效,可以利用此字段), 默认根目录(domain下全网站生效)
17 | * secure: true => https下才会生效,false=>http下不生效; 默认false
18 | * }
19 | * 或者 opts直接是 expires(过期时间)
20 | */
21 | export const setCookie = (key, value, opts) => {
22 | if (typeof opts === 'number') {
23 | opts = { expires: opts };
24 | }
25 |
26 | opts = opts || ({
27 | expires: 7200
28 | });
29 |
30 | if (typeof opts.expires === 'number') {
31 | const date = new Date();
32 | date.setSeconds(date.getSeconds() + opts.expires);
33 | opts.expires = date.toGMTString();
34 | }
35 |
36 | const optString = Object.entries(Object.assign(DEFAULT_CONFIG, opts))
37 | .filter(s => s[1] != null)
38 | .map(s => `${s[0]}=${s[1]}`)
39 | .join('; ');
40 |
41 | document.cookie = `${key}=${value}; ${optString}`;
42 | };
43 |
44 | export const getCookie = (key) => (key = RegExp(`(^| )${key}=([^;]*)(;|$)`).exec(document.cookie)) ? key[2] : null;
45 |
46 | export const delCookie = (key) => {
47 | setCookie(key, '', -1);
48 | };
49 |
--------------------------------------------------------------------------------
/web/src/config/login.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | import { store } from '@/config/cache'
3 | import { delCookie, getCookie, setCookie } from '@/config/cookie'
4 |
5 | const USER_INFO = 'user_info';
6 | const USER_TOKEN = 'token';
7 |
8 | // 默认两个小时过期,在router/index.js中调用refresh刷新这个过期时间
9 | export const login = (user, time) => {
10 | store.set(USER_INFO, user, time);
11 | setCookie(USER_TOKEN, user.token, time);
12 | };
13 |
14 | export const refresh = () => {
15 | if (isLogin()) {
16 | const user = store.get(USER_INFO)
17 | login(user)
18 | }
19 | };
20 |
21 | export const isLogin = () => {
22 | return !!getCookie(USER_TOKEN) && !!store.get(USER_INFO)
23 | };
24 |
25 | export const logout = () => {
26 | store.clear(USER_INFO);
27 | delCookie(USER_TOKEN);
28 | };
29 |
30 | export const user = () => {
31 | return (store.get(USER_INFO) || {}).name;
32 | };
33 |
34 | export const isAdmin = (username) => {
35 | username = username || user()
36 | return username === 'admin'
37 | }
38 |
--------------------------------------------------------------------------------
/web/src/config/mapping.js:
--------------------------------------------------------------------------------
1 |
2 | export const ENV_DOMAIN_MAP = {
3 | devDomain: '开发环境',
4 | testDomain: '测试环境',
5 | // test2Domain: '测试环境2',
6 | prevDomain: '预发环境',
7 | onlineDomain: '生产环境'
8 | }
9 |
10 | export const ENV_DOMAIN_LOG_MAP = {
11 | devDomain: 'tgos-dev',
12 | testDomain: 'tgos-test'
13 | // test2Domain: '测试环境2',
14 | // prevDomain: 'tgos-pre',
15 | // onlineDomain: 'tgos-pro'
16 | }
17 |
--------------------------------------------------------------------------------
/web/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import 'element-ui/lib/theme-chalk/index.css'
4 | import ElementUI from 'element-ui'
5 | import VueClipboard from 'vue-clipboard2'
6 |
7 | import Vue from 'vue'
8 | import App from './App'
9 | import router from './router'
10 | import { transfer, success } from './config/utils'
11 | import VueQuillEditor from 'vue-quill-editor'
12 | import 'quill/dist/quill.core.css'
13 | import 'quill/dist/quill.snow.css'
14 | import 'quill/dist/quill.bubble.css'
15 |
16 | Vue.config.productionTip = false
17 | Vue.prototype.$transfer = transfer
18 | Vue.prototype.$success = success
19 |
20 | Vue.use(ElementUI)
21 | Vue.use(VueClipboard)
22 | Vue.use(VueQuillEditor)
23 | /* eslint-disable no-new */
24 | export const that = new Vue({
25 | el: '#app',
26 | router,
27 | template: '',
28 | components: { App }
29 | })
30 |
--------------------------------------------------------------------------------
/web/src/page/consumer/edit/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .param-value {
4 | width: 450px !important;
5 | }
6 |
7 | .param-key {
8 | width: 230px !important;
9 | }
10 |
11 | .param-label {
12 | width: 50px !important;
13 | }
14 |
--------------------------------------------------------------------------------
/web/src/page/consumer/list/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/flow/function/edit/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .result {
4 | padding: 10px;
5 | border: 1px solid #dcdfe6;
6 | }
7 |
8 | .el-textarea {
9 | width: 700px;
10 | }
11 |
--------------------------------------------------------------------------------
/web/src/page/flow/function/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/flow/testCase/edit/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .preset_params_key {
4 | width: 25%;
5 | }
6 |
7 | .preset_params_value {
8 | width: 35%;
9 | }
10 |
11 | .el-form-item .el-form-item {
12 | margin-bottom: 11px;
13 | }
14 |
15 | .preset_params_value_title {
16 | display: inline-block;
17 | width: 83px;
18 | height: 40px;
19 | position: relative;
20 | top: -1px;
21 | right: -6px;
22 | }
23 |
24 | .testcase_editor_container {
25 | border-radius: 4px;
26 | border: 1px solid #DCDFE6;
27 | }
28 |
--------------------------------------------------------------------------------
/web/src/page/flow/testCase/history/detail/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/flow/testCase/history/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/flow/testCase/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/flow/testCase/run/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/flow/testCase/run/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
执行用例
4 |
5 |
6 |
7 | {{name}}
8 |
9 |
10 |
12 |
13 |
14 | 返回
15 |
16 | 运行
17 | mock运行
18 | 保存执行结果
19 |
20 |
21 |
22 |
23 |
24 |
72 |
73 |
76 |
--------------------------------------------------------------------------------
/web/src/page/flow/testapi/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .mark {
4 | color: darkgray;
5 | font-style: italic;
6 | }
7 |
8 | .margin-bottom20 {
9 | margin-bottom: 20px;
10 | }
11 |
12 | .favorite-container {
13 | border: 1px solid #ddd;
14 | margin-right: 1%;
15 | }
16 |
17 | .api-list-item {
18 | width: 20%;
19 | }
20 |
--------------------------------------------------------------------------------
/web/src/page/flow/testapi/run/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .half_min_width {
4 | width: 30%;
5 | }
6 |
7 | .half_max_width {
8 | width: 60%;
9 | }
10 |
11 | .left {
12 | width: 46%;
13 | display: inline-block;
14 | vertical-align: top;
15 | padding-right: 1%;
16 | }
17 |
18 | .right {
19 | width: 52%;
20 | display: inline-block;
21 | vertical-align: top;
22 | }
23 |
--------------------------------------------------------------------------------
/web/src/page/index/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | .main_left_content_section_tit{
3 | padding: 15px;
4 | background: #FAFBFF;
5 | margin-top: 20px;
6 | line-height: 35px;
7 | border-radius: 4px 4px 0 0;
8 | border-bottom: 1px solid #ddd;
9 | p{
10 | font-size: 16px;
11 | color: #7F7F7F;
12 | }
13 | }
14 | .index-con{
15 | background: #fff;
16 | padding: 40px 50px;
17 | border-radius: 0 0 4px 4px;
18 | margin-bottom: 40px;
19 | .index-fans__1,.index-fans__2,.index-fans__3,.index-fans__4{
20 | >div{
21 | padding: 35px 0;
22 | color: #ffffff;
23 | border-radius: 5px;
24 | text-align: center;
25 | }
26 | p{
27 | padding-bottom: 20px;
28 | font-size: 18px;
29 | font-weight: 600;
30 | }
31 | h3{
32 | font-size: 24px;
33 | }
34 | }
35 | .index-fans__1>div{
36 | background: #68ddd5;
37 | }
38 | .index-fans__2>div{
39 | background: #F36175;
40 | }
41 | .index-fans__3>div{
42 | background: #F4C85B;
43 | }
44 | .index-fans__4>div{
45 | background: #81A2FF;
46 | }
47 | }
48 | .select-from{
49 | position: absolute;
50 | right: 0;
51 | width: 200px;
52 | top: -9px;
53 | text-indent: 0;
54 | }
55 |
56 |
--------------------------------------------------------------------------------
/web/src/page/index/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
24 |
25 |
26 |
29 |
--------------------------------------------------------------------------------
/web/src/page/interfaces/customer/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .customer .logs {
4 | span {
5 | color: #e76262;
6 | }
7 | }
8 |
9 | .customer .json {
10 | height: 475px;
11 | overflow: auto;
12 | padding: 20px;
13 | border: 4px solid #ddd;
14 | border-radius: 4px;
15 | line-height: 1.4;
16 | }
17 |
18 | .customer .header {
19 | position: fixed;
20 | z-index: 100;
21 | background: #4063ff;
22 | background-size: 100% 100%;
23 | width: 100%;
24 | height: 60px;
25 |
26 | & h3 {
27 | display: inline-block;
28 | margin: 0;
29 | top: -20px;
30 | position: relative;
31 | color: white;
32 | }
33 | }
34 |
35 | .customer .logo {
36 | height: 100%;
37 | padding: 12px;
38 | }
39 |
40 | .customer .menu {
41 | display: inline-block;
42 | }
43 |
44 | .customer .mark {
45 | white-space: pre;
46 | }
47 |
48 | .customer_container {
49 | width: 100%;
50 | text-align: center;
51 | padding: 50% 0;
52 | }
53 |
54 | .result-container {
55 | display: inline-block;
56 | .success {
57 | line-height: 30px;
58 | font-size: 50px;
59 | }
60 | .failed {
61 | line-height: 30px;
62 | font-size: 50px;
63 | color: red;
64 | }
65 | }
66 |
67 | .center {
68 | text-align: center;
69 | }
70 |
71 | .title {
72 | font-size: 20px;
73 | font-family: "黑体", serif;
74 | }
75 |
76 | .subtitle {
77 | font-size: 16px;
78 | margin: 25px 0 50px 0;
79 | }
80 |
81 | @media only screen and (max-width: 640px) {
82 | #app {
83 | background: #fff;
84 | min-width: inherit !important;
85 | }
86 |
87 | .customer .header {
88 | height: 50px;
89 |
90 | & h3 {
91 | font-size: 20px;
92 | top: -18px;
93 | }
94 | }
95 |
96 | .customer .index_more {
97 | background: #fff;
98 | }
99 |
100 | .customer .index_more .index_chunk {
101 | margin: 50px 0 0 0;
102 | padding: 10px 10px 10px !important;
103 | }
104 |
105 | .customer .el-form-item__label {
106 | font-size: 17px;
107 | margin-left: 1em;
108 | float: none;
109 | }
110 | .customer .el-form-item__content {
111 | margin-left: 1em !important;
112 | margin-right: 1em !important;
113 | word-break: break-all;
114 | }
115 |
116 | .json-container {
117 | padding: 0 20px !important;
118 | }
119 | }
120 |
121 |
--------------------------------------------------------------------------------
/web/src/page/interfaces/edit/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .el-input, .el-select {
4 | width: 400px;
5 | }
6 |
--------------------------------------------------------------------------------
/web/src/page/interfaces/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .mark {
4 | color: darkgray;
5 | font-style: italic;
6 | }
7 |
8 | .margin-bottom20 {
9 | margin-bottom: 20px;
10 | }
11 |
--------------------------------------------------------------------------------
/web/src/page/interfaces/view/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | .logs {
3 | span {
4 | color: #e76262;
5 | }
6 | }
7 |
8 | .json {
9 | height: 475px;
10 | overflow: auto;
11 | padding: 20px;
12 | border: 4px solid #ddd;
13 | border-radius: 4px;
14 | line-height: 1.4;
15 | }
16 |
17 | .history {
18 | color: #888d;
19 | font-style: italic;
20 | & a {
21 | color: inherit;
22 | }
23 | }
24 |
25 | .user, .pre, .date {
26 | display: inline-block;
27 | vertical-align: top;
28 | }
29 |
--------------------------------------------------------------------------------
/web/src/page/login/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | .login {
3 | @include bis('../../assets/img/bg.png');
4 | @include wh(100%, 100%);
5 | position: relative;
6 | min-height: 650px;
7 | .login-box {
8 | @include wh(520px, 610px);
9 | @include allcover;
10 | margin: auto;
11 | text-align: center;
12 | animation: bounceIn 600ms linear;
13 | min-height: 650px;
14 | .logo {
15 | width: 140px;
16 | height: auto;
17 | }
18 | .form {
19 | background: #fff;
20 | border-radius: 10px;
21 | padding: 70px 50px 40px 50px;
22 | width: 85%;
23 | margin: 20px auto 0;
24 | .el-form-item:last-child {
25 | margin: 0;
26 | .validate {
27 | height: 40px;
28 | text-align: right;
29 | .code-pic {
30 | cursor: pointer;
31 | }
32 | }
33 | }
34 | }
35 | .el-row {
36 | margin: 0;
37 | a {
38 | color: #409EFF;
39 | }
40 | }
41 | .el-button {
42 | width: 100%;
43 | }
44 | }
45 | }
46 |
47 | .logo_title {
48 | font-size: 28px;
49 | color: #fff;
50 | font-weight: 600;
51 | letter-spacing: 2px;
52 | }
53 |
54 | @keyframes bounceIn {
55 | 0% {
56 | opacity: 0;
57 | transform: scale(.3);
58 | }
59 | 50% {
60 | opacity: 1;
61 | transform: scale(1.05);
62 | }
63 | 70% {
64 | transform: scale(.9);
65 | }
66 | 100% {
67 | transform: scale(1);
68 | }
69 | }
70 |
71 | .mask {
72 | height: 100%;
73 | width: 100%;
74 | left: 0;
75 | top: 0;
76 | position: absolute;
77 | background: #000000aa;
78 | .mask-text {
79 | color: white;
80 | padding: 30% 10%;
81 | line-height: 3em;
82 | }
83 | }
84 |
85 | .qrcode-login-container {
86 | height: 220px;
87 | width: 220px;
88 | position: relative;
89 | margin: auto;
90 | }
91 |
--------------------------------------------------------------------------------
/web/src/page/package/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .mark {
4 | color: darkgray;
5 | font-style: italic;
6 | }
7 |
8 | .margin-bottom20 {
9 | margin-bottom: 20px;
10 | }
11 |
--------------------------------------------------------------------------------
/web/src/page/package/view/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .mark {
4 | white-space: pre;
5 | }
6 |
--------------------------------------------------------------------------------
/web/src/page/provider/edit/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .param-value {
4 | width: 450px !important;
5 | }
6 |
7 | .param-key {
8 | width: 230px !important;
9 | }
10 |
--------------------------------------------------------------------------------
/web/src/page/provider/list/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/sample/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
--------------------------------------------------------------------------------
/web/src/page/sample/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
创建表
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
46 |
47 |
48 |
51 |
--------------------------------------------------------------------------------
/web/src/page/system/user/edit/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .el-input {
4 | width: 440px;
5 | }
6 |
--------------------------------------------------------------------------------
/web/src/page/system/user/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .filters .el-input {
4 | width: 220px;
5 | }
6 |
--------------------------------------------------------------------------------
/web/src/page/test/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 | .half_min_width {
3 | width: 30%;
4 | }
5 |
6 | .half_max_width {
7 | width: 60%;
8 | }
9 |
10 | .left {
11 | width: 46%;
12 | display: inline-block;
13 | vertical-align: top;
14 | padding-right: 1%;
15 | }
16 |
17 | .right {
18 | width: 52%;
19 | display: inline-block;
20 | vertical-align: top;
21 | }
22 |
--------------------------------------------------------------------------------
/web/src/page/transfer/index.scss:
--------------------------------------------------------------------------------
1 | @charset "utf-8";
2 |
3 | .transfer_container {
4 | width: 100%;
5 | text-align: center;
6 | padding: 14% 0;
7 | }
8 |
9 | .result-container {
10 | display: inline-block;
11 | .success {
12 | line-height: 45px;
13 | font-size: 80px;
14 | color: #01c853;
15 | }
16 | .failed {
17 | line-height: 45px;
18 | font-size: 80px;
19 | color: red;
20 | }
21 | }
22 |
23 | .center {
24 | text-align: center;
25 | }
26 |
27 | .title {
28 | font-size: 20px;
29 | font-family: "黑体", serif;
30 | }
31 |
32 | .subtitle {
33 | font-size: 16px;
34 | margin: 25px 0 50px 0;
35 | }
36 |
--------------------------------------------------------------------------------
/web/src/page/transfer/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
操作结果
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
{{ data.title || '操作成功!' }}
13 |
{{ data.subtitle }}
14 |
15 |
16 |
17 | {{ btn.text }}
18 | {{ data.back || '返回' }}
19 |
20 |
21 |
22 |
23 |
24 | /**
25 | *
26 | * 调用方式:
27 | *
28 | * this.$transfer({
29 | * result: true/false; 如果为true显示成功样式,false显示失败样式 默认为true
30 | * back: '返回', // 如果不需要这个按钮,传false来, 默认为返回上一级
31 | * title: '操作成功!', // 默认显示 操作成功!
32 | * subtitle: 'xxxx', // 默认不显示
33 | * buttons: [{
34 | * text: '去列表',
35 | * link: '/system/role',
36 | * }, {}],
37 | * });
38 | *
39 | */
40 |
77 |
78 |
81 |
--------------------------------------------------------------------------------
/web/src/store/store.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 示例:
3 | get: this.$store.state.xxx
4 | set: this.$store.commit('xxx',xxx);
5 | */
6 | import Vuex from 'vuex'
7 | import Vue from 'vue'
8 |
9 | Vue.use(Vuex)
10 | export default new Vuex.Store({
11 | state: {
12 | // isValidator: true,
13 | toLink: ''
14 | },
15 | mutations: {
16 | // setValidator: (state, bool) => {
17 | // state.isValidator = bool;
18 | // },
19 | }
20 | })
21 |
--------------------------------------------------------------------------------
/web/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gomcarter/developer/2e03396a543a93a7b5bf340f5c2131bdee7e7cbf/web/static/.gitkeep
--------------------------------------------------------------------------------