Commit e9238d4f by 李耀琨

连接获取节点

parent 5a14ffb7
ENV = 'development'
#VUE_APP_BASE_API = 'http://192.168.0.2:9888/'
#VUE_APP_WS_API = 'ws://192.168.0.2:9888/'
VUE_APP_BASE_API = 'http://192.168.0.2:9888/'
VUE_APP_WS_API = 'ws://192.168.0.2:9888/'
VUE_APP_BASE_API = 'http://192.168.0.44:9882/'
VUE_APP_WS_API = 'ws://192.168.0.44:9882/'
#VUE_APP_BASE_API = 'http://192.168.0.44:9882/'
#VUE_APP_WS_API = 'ws://192.168.0.44:9882/'
......
......@@ -212,6 +212,27 @@ export function randomValueFunc(data){
//数据库表路径
export function explorer(data){
return request({
url: 'etlweb/database/explorer',
data,
method: 'post'
})
}
//获取数据库信息
export function listDatabases(data){
return request({
url: 'etlweb/database/listDatabases',
data,
method: 'post'
})
}
import Vue from 'vue'
export default new Vue;
\ No newline at end of file
......@@ -66,7 +66,7 @@
<script>
import { systemDataTypes } from "@/api/kettle/link";
export default {
props: ["information"],
props: [],
data() {
return {
form: {},
......@@ -106,6 +106,7 @@ export default {
})
.catch((_) => {});
},
handleClick(val) {
this.addField = !this.addField;
this.form = val;
......
......@@ -5,7 +5,7 @@
<el-form-item>
<el-row :gutter="10">
<el-col :span="13">
<el-select v-model="form.type" style="width: 100%">
<el-select v-model="form.connection" style="width: 100%" @change="getField(form.connection)">
<el-option
v-for="item in ComboBox"
:key="item.id"
......@@ -18,13 +18,13 @@
<el-button size="mini">编辑</el-button></el-col
>
<el-col class="line" :span="2">
<el-button size="mini">新建</el-button></el-col
<el-button size="mini" >新建</el-button></el-col
>
<el-col class="line" :span="2">
<el-button size="mini">向导</el-button></el-col
>
<el-col class="line" :span="5">
<el-button size="mini">获取SQL查询语句</el-button></el-col
<el-button size="mini" @click="SQLPopup">获取SQL查询语句</el-button></el-col
>
</el-row>
</el-form-item>
......@@ -35,47 +35,71 @@
<el-form ref="form" :model="form" label-width="160px">
<el-form-item label="允许简易转换:">
<el-checkbox v-model="form.wLazyConversion"></el-checkbox>
<el-checkbox v-model="form.lazy_conversion_active"></el-checkbox>
</el-form-item>
<el-form-item label="替换SQL语句里的变量:">
<el-checkbox v-model="form.wVariables"></el-checkbox>
<el-checkbox v-model="form.variables_active"></el-checkbox>
</el-form-item>
<el-form-item label="从步骤插入数据:">
<el-select v-model="form.space" style="width: 100%">
<el-option label="不去掉空格" value="none"></el-option>
<el-option label="去掉左空格" value="left"></el-option>
<el-option label="去掉右空格" value="right"></el-option>
<el-option label="去掉左右两端空格" value="both"></el-option>
<el-select v-model="form.lookup" style="width: 100%">
<el-option v-for="item in connectionNode"
:key="item.id"
:label="item.name"
:value="item.name"/>
</el-select>
</el-form-item>
<el-form-item label="执行每一行:">
<el-checkbox v-model="form.wEachRow"></el-checkbox>
<el-checkbox v-model="form.execute_each_row"></el-checkbox>
</el-form-item>
<el-form-item label="记录数量限制:">
<el-input v-model="form.currency"></el-input>
<el-input v-model="form.limit"></el-input>
</el-form-item>
</el-form>
<el-dialog
title="数据库浏览"
:visible.sync="browsing"
width="500px"
:before-close="handleClose"
:modal="false"
>
<span slot="footer" class="dialog-footer">
<el-button @click="browsing = false">取 消</el-button>
<el-button type="primary" @click="browsing = false">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { listNames } from "@/api/kettle/link";
import { listNames,explorer,listDatabases } from "@/api/kettle/link";
export default {
props: ["table"],
props: ["connectionNode"],//从父组件传过来的值
data() {
return {
browsing:false,
form: {
wLazyConversion:false,
wVariables:false,
wEachRow:false,
},
ComboBox: {},
libraryName:[],
};
},
......@@ -84,12 +108,44 @@ export default {
},
methods: {
getField(val){
console.log(val);
listDatabases({name:val}).then(res=>{
console.log(res);
})
// this.libraryName = val
},
SQLPopup(){
if (this.form.connection) {
this.browsing = !this.browsing
explorer({databaseInfo:{name:this.libraryName}}).then(res=>{
console.log(res);
})
}else{
this.$message.error("请选择数据库");
}
},
handleClose(done) {
this.browsing = !this.browsing
// this.$confirm("确认关闭?")
// .then((_) => {
// done();
// })
// .catch((_) => {});
},
listNamesFun() {
let pamer = new FormData(); // 创建form对象
pamer.append("query", "");
listNames(pamer).then((res) => {
this.ComboBox = res;
});
console.log(this.connectionNode);
},
},
};
......
......@@ -31,10 +31,21 @@
@click="saveFlow"
></el-button>
</el-tooltip>
<!--<el-divider direction="vertical"></el-divider>-->
<!--<el-tooltip class="item" effect="dark" :open-delay="300" content="生产流程图片" placement="bottom">-->
<!--<el-button type="text" icon="el-icon-picture" size="large" @click="downloadData"></el-button>-->
<!--</el-tooltip>-->
<el-divider direction="vertical"></el-divider>
<el-tooltip
class="item"
effect="dark"
:open-delay="300"
content="生产流程图片"
placement="bottom"
>
<el-button
type="text"
icon="el-icon-picture"
size="large"
@click="downloadData"
></el-button>
</el-tooltip>
<el-divider direction="vertical"></el-divider>
<el-tooltip
class="item"
......@@ -146,10 +157,10 @@
>
<div id="ExcelInputDialog"></div>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<el-tabs v-model="activeName" type="border-card" @tab-click="tapClick">
<el-tab-pane label="文件" name="file">
......@@ -220,9 +231,9 @@
</el-form-item>
<el-form-item label="从哪个步骤读文化名:">
<el-select
v-model="form.region"
v-model="form.wAccStep"
style="width: 100%"
:disabled="form.checked"
:disabled="!form.checked"
>
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
......@@ -231,9 +242,9 @@
<el-form-item label="保存文件的字段:">
<el-select
v-model="form.region"
v-model="form.wAccField"
style="width: 100%"
:disabled="form.checked"
:disabled="!form.checked"
>
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
......@@ -248,22 +259,18 @@
<el-form ref="form" :model="form" label-width="160px">
<el-form-item label="要读取的工作表列表:">
<el-card class="box-card">
<el-table :data="tableData" style="width: 100%">
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="工作表名称" width="120">
</el-table-column>
<el-table-column prop="filemask" label="起始行">
<el-table-column prop="startrow" label="起始行">
</el-table-column>
<el-table-column
prop="exclude_filemask"
label="起始列"
>
<el-table-column prop="startcol" label="起始列">
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
@click="handleClick(scope.row)"
@click="workClick(scope.row)"
type="text"
size="small"
>编辑</el-button
......@@ -284,28 +291,28 @@
<el-tab-pane label="内容" name="content">
<el-form ref="form" :model="form" label-width="200px">
<el-form-item label="头部:">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox v-model="form.header"></el-checkbox>
</el-form-item>
<el-form-item label="没有空行:">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox v-model="form.noempty"></el-checkbox>
</el-form-item>
<el-form-item label="停在空白记录:">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox v-model="form.stoponempty"></el-checkbox>
</el-form-item>
<el-form-item label="限制:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.limit"></el-input>
</el-form-item>
<el-form-item label="编码:">
<el-select v-model="form.region" style="width: 100%">
<el-select v-model="form.encoding" style="width: 100%">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="添加文件名">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox v-model="form.add_to_result_filenames"></el-checkbox>
</el-form-item>
</el-form>
</el-tab-pane>
......@@ -313,23 +320,32 @@
<el-tab-pane label="错误处理" name="handling">
<el-form ref="form" :model="form" label-width="130px">
<el-form-item label="严格类型:">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox v-model="form.strict_types"></el-checkbox>
</el-form-item>
<el-form-item label="忽略错误:">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox v-model="form.ignore"></el-checkbox>
</el-form-item>
<el-form-item label="跳过错误行:">
<el-checkbox v-model="form.checked"></el-checkbox>
<el-checkbox
v-model="form.errorLineSkipped"
:disabled="!this.form.ignore"
></el-checkbox>
</el-form-item>
<el-form-item label="警文件目录:">
<el-row :gutter="10">
<el-col :span="8">
<el-input v-model="form.name"></el-input>
<el-input
v-model="form.bad_line_files_destination_directory"
:disabled="!this.form.ignore"
></el-input>
</el-col>
<el-col class="line" :span="2.5">扩展名</el-col>
<el-col :span="8">
<el-input v-model="form.name"></el-input>
<el-input
v-model="form.warningFilesExtension"
:disabled="!this.form.ignore"
></el-input>
</el-col>
<el-col class="line" :span="2.5">
<el-button size="mini">变量</el-button></el-col
......@@ -343,11 +359,17 @@
<el-form-item label="错误件目录:">
<el-row :gutter="10">
<el-col :span="8">
<el-input v-model="form.name"></el-input>
<el-input
v-model="form.errorFilesDestinationDirectory"
:disabled="!this.form.ignore"
></el-input>
</el-col>
<el-col class="line" :span="2.5">扩展名</el-col>
<el-col :span="8">
<el-input v-model="form.name"></el-input>
<el-input
v-model="form.errorFilesExtension"
:disabled="!this.form.ignore"
></el-input>
</el-col>
<el-col class="line" :span="2.5">
<el-button size="mini">变量</el-button></el-col
......@@ -361,11 +383,17 @@
<el-form-item label="失败行数文件目录:">
<el-row :gutter="10">
<el-col :span="8">
<el-input v-model="form.name"></el-input>
<el-input
v-model="form.lineNumberFilesDestinationDirectory"
:disabled="!this.form.ignore"
></el-input>
</el-col>
<el-col class="line" :span="2.5">扩展名</el-col>
<el-col :span="8">
<el-input v-model="form.name"></el-input>
<el-input
v-model="form.lineNumberFilesExtension"
:disabled="!this.form.ignore"
></el-input>
</el-col>
<el-col class="line" :span="2.5">
<el-button size="mini">变量</el-button></el-col
......@@ -379,57 +407,97 @@
</el-tab-pane>
<el-tab-pane label="字段" name="field">
<el-card class="box-card"> </el-card>
<el-button type="primary" @click="addField(true)">添加字段</el-button>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="type" label="类型"> </el-table-column>
<el-table-column prop="length" label="长度"> </el-table-column>
<el-table-column prop="precision" label="精度"> </el-table-column>
<el-table-column prop="trim_type" label="去除空格类型">
</el-table-column>
<el-table-column prop="repeat" label="重复"> </el-table-column>
<el-table-column prop="format" label="格式"> </el-table-column>
<el-table-column prop="currency" label="货币"> </el-table-column>
<el-table-column prop="decimal" label="小数"> </el-table-column>
<el-table-column prop="group" label="分组"> </el-table-column>
<el-table-column label="操作" width="100px">
<template slot-scope="scope">
<el-button
@click="fieldClick(scope.row)"
type="text"
size="small"
>编辑</el-button
>
<el-button
type="text"
size="small"
@click="deleteRow(scope.$index, tableData)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="其他输出字段" name="oher ">
<el-form ref="form" :model="form" label-width="150px">
<el-form-item label="文件名称字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.filefield"></el-input>
</el-form-item>
<el-form-item label="Sheet名称字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.sheetfield"></el-input>
</el-form-item>
<el-form-item label="Sheet的行号列:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.sheetrownumfield"></el-input>
</el-form-item>
<el-form-item label="行号列:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.rownumfield"></el-input>
</el-form-item>
<el-form-item label="文件名字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.shortFileFieldName"></el-input>
</el-form-item>
<el-form-item label="扩展名字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.extensionFieldName"></el-input>
</el-form-item>
<el-form-item label="路径字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.pathFieldName"></el-input>
</el-form-item>
<el-form-item label="文件大小字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.sizeFieldName"></el-input>
</el-form-item>
<el-form-item label="是否为隐藏文件字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.hiddenFieldName"></el-input>
</el-form-item>
<el-form-item label="最后修改时间字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.lastModificationTimeFieldName"></el-input>
</el-form-item>
<el-form-item label="Uri字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.uriNameFieldName"></el-input>
</el-form-item>
<el-form-item label="Root uri字段:">
<el-input v-model="form.name"></el-input>
<el-input v-model="form.rootUriNameFieldName"></el-input>
</el-form-item>
</el-form>
</el-tab-pane>
......@@ -582,55 +650,49 @@
</span>
</el-dialog>
<!-- 表输入-->
<!-- 表输入-->
<el-dialog
title="表输入"
:visible.sync="TableInputDialog"
width="800px"
:before-close="handleClose"
>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<tableInput
:disabled="true">
</tableInput>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<tableInput :disabled="true" :connectionNode="connectionNode"> </tableInput>
<span slot="footer" class="dialog-footer">
<el-button @click="TableInputDialog = false">取 消</el-button>
<el-button type="primary" @TableInputDialog="work = false">确 定</el-button>
<el-button type="primary" @TableInputDialog="work = false"
>确 定</el-button
>
</span>
</el-dialog>
<!-- 获取系统信息-->
<!-- 获取系统信息-->
<el-dialog
title="获取系统信息"
:visible.sync="SystemInfoDialog"
width="800px"
:before-close="handleClose"
>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<getSystemInformation
:disabled="true">
</getSystemInformation>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<getSystemInformation :disabled="true"> </getSystemInformation>
<span slot="footer" class="dialog-footer">
<el-button @click="SystemInfoDialog = false">取 消</el-button>
<el-button type="primary" @click="SystemInfoDialog = false">确 定</el-button>
<el-button type="primary" @click="SystemInfoDialog = false"
>确 定</el-button
>
</span>
</el-dialog>
......@@ -641,24 +703,22 @@
width="800px"
:before-close="handleClose"
>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<customConstant
:disabled="true">
</customConstant>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<customConstant :disabled="true"> </customConstant>
<span slot="footer" class="dialog-footer">
<el-button @click="ConstantDialog = false">取 消</el-button>
<el-button type="primary" @click="ConstantDialog = false">确 定</el-button>
<el-button type="primary" @click="ConstantDialog = false"
>确 定</el-button
>
</span>
</el-dialog>
<!-- 自定义常量数据-->
<el-dialog
title="自定义常量数据"
......@@ -666,23 +726,21 @@
width="800px"
:before-close="handleClose"
>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<randomNumber
:disabled="true">
</randomNumber>
<el-form ref="stepName" :model="stepName" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="stepName.name"></el-input>
</el-form-item>
</el-form>
<randomNumber :disabled="true"> </randomNumber>
<span slot="footer" class="dialog-footer">
<el-button @click="RandomValueDialog = false">取 消</el-button>
<el-button type="primary" @click="RandomValueDialog = false">确 定</el-button>
<el-button type="primary" @click="RandomValueDialog = false"
>确 定</el-button
>
</span>
</el-dialog>
</div>
</template>
......@@ -710,20 +768,18 @@ import getSystemInformation from "../appBulletFrame/getSystemInformation";
import customConstant from "../appBulletFrame/customConstant";
import randomNumber from "../appBulletFrame/randomNumber";
export default {
data() {
return {
TableInputDialog:false,
SystemInfoDialog:false,
ConstantDialog:false,
RandomValueDialog:false,
fieldType:{},
fieldFormat:{},
stepName:{},
connectionNode:[], //获取连接节点
publicData: [], //全部连接
TableInputDialog: false,
SystemInfoDialog: false,
ConstantDialog: false,
RandomValueDialog: false,
fieldType: {},
fieldFormat: {},
stepName: {},
tableData: [
{
filemask: "",
......@@ -757,13 +813,13 @@ export default {
},
zoom: 0.5,
workForm:{},
fieldForm:{},
workForm: {},
fieldForm: {},
excelLnput: false,
edit: false,
work:false,
field:false,
work: false,
field: false,
form: {
checked: true,
},
......@@ -779,7 +835,7 @@ export default {
nodeMenu,
getSystemInformation,
customConstant,
randomNumber
randomNumber,
// FlowNodeForm
},
//自定义指令 https://www.jb51.net/article/108047.htm
......@@ -888,11 +944,14 @@ export default {
});
},
methods: {
addSheet(){},
addSheet() {},
fileChnageInput(e) {
console.log(e);
},
addField() {
this.field = !this.field;
this.from = {};
},
// 上传
handleChange(file, fileList) {
// console.log(file);
......@@ -923,6 +982,15 @@ export default {
this.edit = !this.edit;
this.form = val;
},
fieldClick(val) {
this.field = !this.field;
this.form = val;
},
workClick(val) {
this.work = !this.work;
this.form = val;
},
// 关闭弹框
handleClose(done) {
this.$confirm("确认关闭?")
......@@ -974,6 +1042,7 @@ export default {
// 删除连线回调
this.jsPlumb.bind("connectionDetached", (evt) => {
this.deleteLine(evt.sourceId, evt.targetId);
console.log(evt);
});
// 改变线的连接节点
......@@ -1004,6 +1073,22 @@ export default {
return false;
}
this.$message.success("连接成功");
let flowObj = this.flowData;
console.log(flowObj);
let obj = flowObj.nodeList.find((e) => {
return e.id == from;
}); //获取连接节点
if (this.publicData[to]) {
this.publicData[to].push(obj);
} else {
this.publicData[to] = [obj];
}
console.log(this.publicData)
return true;
});
......@@ -1112,11 +1197,16 @@ export default {
},
// 删除线
deleteLine(from, to) {
delete this.publicData[to]
this.flowData.lineList = this.flowData.lineList.filter(function (line) {
if (line.from == from && line.to == to) {
return false;
}
return true;
});
},
// 改变连线
......@@ -1263,7 +1353,7 @@ export default {
* 这里可以进行业务判断、是否能够添加该节点
*/
this.flowData.nodeList.push(node);
this.$nextTick(function () {
this.jsPlumb.makeSource(nodeId, this.jsplumbSourceOptions);
this.jsPlumb.makeTarget(nodeId, this.jsplumbTargetOptions);
......@@ -1310,9 +1400,11 @@ export default {
},
clickNode(node) {
console.log("点击节点操作", node);
this.stepName.name = node.name
this.stepName.name = node.name;
this.connectionNode = this.publicData[node.id]
console.log(this.connectionNode);
this.isShowR = true;
this.activeElement.type = "node";
this.activeElement.nodeId = node.id;
......@@ -1329,36 +1421,32 @@ export default {
});
let pamer2 = new FormData(); // 创建form对象
pamer2.append("valueType","all");
pamer2.append("valueType", "all");
valueFormat(pamer2).then((res) => {
this.fieldFormat = res;
});
valueMeta().then(res=>{
this.fieldType = res
})
valueMeta().then((res) => {
this.fieldType = res;
});
previousSteps().then((res) => {});
inputOutputFields().then((res) => {});
if (node.ids == "step1") {
this.excelLnput = !this.excelLnput;
}else if (node.ids == "step7") {
this.TableInputDialog = !this.TableInputDialog;
}else if (node.ids == "step6") {
this.SystemInfoDialog = !this.SystemInfoDialog
}else if (node.ids == "step5") {
this.ConstantDialog = !this.ConstantDialog
}if (node.ids == "step4") {
this.RandomValueDialog = !this.RandomValueDialog
return;
}
this.excelLnput = !this.excelLnput;
} else if (node.ids == "step7") {
this.TableInputDialog = !this.TableInputDialog;
} else if (node.ids == "step6") {
this.SystemInfoDialog = !this.SystemInfoDialog;
} else if (node.ids == "step5") {
this.ConstantDialog = !this.ConstantDialog;
}
if (node.ids == "step4") {
this.RandomValueDialog = !this.RandomValueDialog;
return;
}
},
// 是否具有该线
hasLine(from, to) {
......@@ -1478,6 +1566,7 @@ export default {
var datastr =
"data:text/json;charset=utf-8," +
encodeURIComponent(JSON.stringify(this.flowData, null, "\t"));
console.log(this.flowData);
var downloadAnchorNode = document.createElement("a");
downloadAnchorNode.setAttribute("href", datastr);
downloadAnchorNode.setAttribute("download", "flowData.json");
......
......@@ -520,6 +520,7 @@ import {
export default {
components: {
FlowDesigner,
......@@ -792,13 +793,23 @@ export default {
};
},
mounted () {
this.dragControllerDiv();//左右窗体调整宽度
// this.treeRevert(this.jobTreeList);
this.accessData();//页面一加载就获取连接类型
this.explorer('');//获取文件夹列表
},
},
methods: {
//文件夹列表
explorer(path){
var formData = new FormData();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment