From c41e6fff7f768923ee87fc136f348f2467576dd5 Mon Sep 17 00:00:00 2001
From: gaoshp <291585735@qq.com>
Date: 星期日, 02 六月 2024 15:19:41 +0800
Subject: [PATCH] update

---
 src/views/dnc/setting/FTP.vue     |   68 +++++
 src/components/scDialog/index.vue |  152 ++++++++-----
 src/components/scForm/index.vue   |  353 ++++++++++++++++---------------
 src/views/vab/dialog/index.vue    |   79 +++---
 4 files changed, 375 insertions(+), 277 deletions(-)

diff --git a/src/components/scDialog/index.vue b/src/components/scDialog/index.vue
index cfd065d..4c83821 100644
--- a/src/components/scDialog/index.vue
+++ b/src/components/scDialog/index.vue
@@ -9,76 +9,108 @@
 
 <template>
 	<div class="sc-dialog" ref="scDialog">
-	<el-dialog ref="dialog" v-model="dialogVisible" :fullscreen="isFullscreen" v-bind="$attrs" :show-close="false">
-		<template #header>
-			<slot name="header">
-				<span class="el-dialog__title">{{ title }}</span>
-			</slot>
-			<div class="sc-dialog__headerbtn">
-				<button v-if="showFullscreen" aria-label="fullscreen" type="button" @click="setFullscreen">
-					<el-icon v-if="isFullscreen" class="el-dialog__close"><el-icon-bottom-left /></el-icon>
-					<el-icon v-else class="el-dialog__close"><el-icon-full-screen /></el-icon>
-				</button>
-				<button v-if="showClose" aria-label="close" type="button" @click="closeDialog">
-					<el-icon class="el-dialog__close"><el-icon-close /></el-icon>
-				</button>
+		<el-dialog ref="dialog" v-model="dialogVisible" :fullscreen="isFullscreen" v-bind="$attrs" :show-close="false">
+			<template #header>
+				<slot name="header">
+					<span class="el-dialog__title">{{ title }}</span>
+				</slot>
+				<div class="sc-dialog__headerbtn">
+					<button v-if="showFullscreen" aria-label="fullscreen" type="button" @click="setFullscreen">
+						<el-icon v-if="isFullscreen" class="el-dialog__close"><el-icon-bottom-left /></el-icon>
+						<el-icon v-else class="el-dialog__close"><el-icon-full-screen /></el-icon>
+					</button>
+					<button v-if="showClose" aria-label="close" type="button" @click="closeDialog">
+						<el-icon class="el-dialog__close"><el-icon-close /></el-icon>
+					</button>
+				</div>
+			</template>
+			<div v-loading="loading">
+				<slot></slot>
 			</div>
-		</template>
-		<div v-loading="loading">
-			<slot></slot>
-		</div>
-		<template #footer>
-			<slot name="footer"></slot>
-		</template>
-	</el-dialog>
+			<template #footer>
+				<slot name="footer"></slot>
+			</template>
+		</el-dialog>
 	</div>
 </template>
 
 <script>
-	export default {
-		props: {
-			modelValue: { type: Boolean, default: false },
-			title: { type: String, default: "" },
-			showClose: { type: Boolean, default: true },
-			showFullscreen: { type: Boolean, default: true },
-			loading: { type: Boolean, default: false }
-		},
-		data() {
-			return {
-				dialogVisible: false,
-				isFullscreen: false
-			}
-		},
-		watch:{
-			modelValue(){
-				this.dialogVisible = this.modelValue
-				if(this.dialogVisible){
-					this.isFullscreen = false
-				}
-			}
-		},
-		mounted() {
+export default {
+	props: {
+		modelValue: { type: Boolean, default: false },
+		title: { type: String, default: "" },
+		showClose: { type: Boolean, default: true },
+		showFullscreen: { type: Boolean, default: true },
+		loading: { type: Boolean, default: false }
+	},
+	data() {
+		return {
+			dialogVisible: false,
+			isFullscreen: false
+		}
+	},
+	watch: {
+		modelValue() {
 			this.dialogVisible = this.modelValue
-		},
-		methods: {
-			//鍏抽棴
-			closeDialog(){
-				this.dialogVisible = false
-			},
-			//鏈�澶у寲
-			setFullscreen(){
-				this.isFullscreen = !this.isFullscreen
+			if (this.dialogVisible) {
+				this.isFullscreen = false
 			}
 		}
+	},
+	mounted() {
+		this.dialogVisible = this.modelValue
+	},
+	methods: {
+		//鍏抽棴
+		closeDialog() {
+			this.dialogVisible = false
+		},
+		//鏈�澶у寲
+		setFullscreen() {
+			this.isFullscreen = !this.isFullscreen
+		}
 	}
+}
 </script>
 
 <style scoped>
-	.sc-dialog__headerbtn {position: absolute;top: var(--el-dialog-padding-primary);right: var(--el-dialog-padding-primary);}
-	.sc-dialog__headerbtn button {padding: 0;background: transparent;border: none;outline: none;cursor: pointer;font-size: var(--el-message-close-size,16px);margin-left: 15px;color: var(--el-color-info);}
-	.sc-dialog__headerbtn button:hover .el-dialog__close {color: var(--el-color-primary);}
-	.sc-dialog:deep(.el-dialog).is-fullscreen {display: flex;flex-direction: column;top:0px !important;left:0px !important;}
-	.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__header {}
-	.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__body {flex:1;overflow: auto;}
-	.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__footer {padding-bottom: 10px;border-top: 1px solid var(--el-border-color-base);}
+.sc-dialog__headerbtn {
+	position: absolute;
+	top: var(--el-dialog-padding-primary);
+	right: var(--el-dialog-padding-primary);
+}
+
+.sc-dialog__headerbtn button {
+	padding: 0;
+	background: transparent;
+	border: none;
+	outline: none;
+	cursor: pointer;
+	font-size: var(--el-message-close-size, 16px);
+	margin-left: 15px;
+	color: var(--el-color-info);
+}
+
+.sc-dialog__headerbtn button:hover .el-dialog__close {
+	color: var(--el-color-primary);
+}
+
+.sc-dialog:deep(.el-dialog).is-fullscreen {
+	display: flex;
+	flex-direction: column;
+	top: 0px !important;
+	left: 0px !important;
+}
+
+.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__header {}
+
+.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__body {
+	flex: 1;
+	overflow: auto;
+}
+
+.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__footer {
+	padding-bottom: 10px;
+	border-top: 1px solid var(--el-border-color-base);
+}
 </style>
diff --git a/src/components/scForm/index.vue b/src/components/scForm/index.vue
index 146acdf..e3f1d76 100644
--- a/src/components/scForm/index.vue
+++ b/src/components/scForm/index.vue
@@ -3,46 +3,51 @@
  * @version: 1.0
  * @Author: sakuya
  * @Date: 2021骞�9鏈�22鏃�09:26:25
- * @LastEditors:
- * @LastEditTime:
+ * @LastEditors: Sneed
+ * @LastEditTime: 2024-06-02 15:06:45
 -->
 
 <template>
-	<el-skeleton v-if="renderLoading || Object.keys(form).length==0" animated />
+	<el-skeleton v-if="renderLoading || Object.keys(form).length == 0" animated />
 
-	<el-form v-else ref="form" :model="form" :label-width="config.labelWidth" :label-position="config.labelPosition" v-loading="loading" element-loading-text="Loading...">
+	<el-form v-else ref="form" :model="form" :label-width="config.labelWidth" :label-position="config.labelPosition"
+		v-loading="loading" element-loading-text="Loading...">
 		<el-row :gutter="15">
 			<template v-for="(item, index) in config.formItems" :key="index">
 				<el-col :span="item.span || 24" v-if="!hideHandle(item)">
-					<sc-title  v-if="item.component=='title'"  :title="item.label"></sc-title>
+					<sc-title v-if="item.component == 'title'" :title="item.label"></sc-title>
 					<el-form-item v-else :prop="item.name" :rules="rulesHandle(item)">
 						<template #label>
-							{{item.label}}
+							{{ item.label }}
 							<el-tooltip v-if="item.tips" :content="item.tips">
 								<el-icon><el-icon-question-filled /></el-icon>
 							</el-tooltip>
 						</template>
 						<!-- input -->
-						<template v-if="item.component=='input'" >
-							<el-input v-model="form[item.name]" :placeholder="item.options.placeholder" clearable :maxlength="item.options.maxlength" show-word-limit></el-input>
+						<template v-if="item.component == 'input'">
+							<el-input v-model="form[item.name]" :placeholder="item.options.placeholder" clearable
+								:maxlength="item.options.maxlength" show-word-limit></el-input>
 						</template>
 						<!-- checkbox -->
-						<template v-else-if="item.component=='checkbox'" >
-							<template v-if="item.name" >
-								<el-checkbox v-model="form[item.name][_item.name]" :label="_item.label"  v-for="(_item, _index) in item.options.items" :key="_index"></el-checkbox>
+						<template v-else-if="item.component == 'checkbox'">
+							<template v-if="item.name">
+								<el-checkbox v-model="form[item.name][_item.name]" :label="_item.label"
+									v-for="(_item, _index) in item.options.items" :key="_index"></el-checkbox>
 							</template>
-							<template v-else >
-								<el-checkbox v-model="form[_item.name]" :label="_item.label"  v-for="(_item, _index) in item.options.items" :key="_index"></el-checkbox>
+							<template v-else>
+								<el-checkbox v-model="form[_item.name]" :label="_item.label"
+									v-for="(_item, _index) in item.options.items" :key="_index"></el-checkbox>
 							</template>
 						</template>
 						<!-- checkboxGroup -->
-						<template v-else-if="item.component=='checkboxGroup'" >
+						<template v-else-if="item.component == 'checkboxGroup'">
 							<el-checkbox-group v-model="form[item.name]">
-								<el-checkbox v-for="_item in item.options.items" :key="_item.value" :label="_item.value">{{_item.label}}</el-checkbox>
+								<el-checkbox v-for="_item in item.options.items" :key="_item.value"
+									:label="_item.value">{{ _item.label }}</el-checkbox>
 							</el-checkbox-group>
 						</template>
 						<!-- upload -->
-						<template v-else-if="item.component=='upload'" >
+						<template v-else-if="item.component == 'upload'">
 							<el-col v-for="(_item, _index) in item.options.items" :key="_index">
 								<el-form-item :prop="_item.name">
 									<sc-upload v-model="form[_item.name]" :title="_item.label"></sc-upload>
@@ -50,58 +55,65 @@
 							</el-col>
 						</template>
 						<!-- switch -->
-						<template v-else-if="item.component=='switch'" >
+						<template v-else-if="item.component == 'switch'">
 							<el-switch v-model="form[item.name]" />
 						</template>
 						<!-- select -->
-						<template v-else-if="item.component=='select'" >
-							<el-select v-model="form[item.name]" :multiple="item.options.multiple" :placeholder="item.options.placeholder" clearable filterable style="width: 100%;">
-								<el-option v-for="option in item.options.items" :key="option.value" :label="option.label" :value="option.value"></el-option>
+						<template v-else-if="item.component == 'select'">
+							<el-select v-model="form[item.name]" :multiple="item.options.multiple"
+								:placeholder="item.options.placeholder" clearable filterable style="width: 100%;">
+								<el-option v-for="option in item.options.items" :key="option.value"
+									:label="option.label" :value="option.value"></el-option>
 							</el-select>
 						</template>
 						<!-- cascader -->
-						<template v-else-if="item.component=='cascader'" >
-							<el-cascader v-model="form[item.name]" :options="item.options.items" clearable></el-cascader>
+						<template v-else-if="item.component == 'cascader'">
+							<el-cascader v-model="form[item.name]" :options="item.options.items"
+								clearable></el-cascader>
 						</template>
 						<!-- date -->
-						<template v-else-if="item.component=='date'" >
-							<el-date-picker v-model="form[item.name]" :type="item.options.type" :shortcuts="item.options.shortcuts" :default-time="item.options.defaultTime" :value-format="item.options.valueFormat" :placeholder="item.options.placeholder || '璇烽�夋嫨'"></el-date-picker>
+						<template v-else-if="item.component == 'date'">
+							<el-date-picker v-model="form[item.name]" :type="item.options.type"
+								:shortcuts="item.options.shortcuts" :default-time="item.options.defaultTime"
+								:value-format="item.options.valueFormat"
+								:placeholder="item.options.placeholder || '璇烽�夋嫨'"></el-date-picker>
 						</template>
 						<!-- number -->
-						<template v-else-if="item.component=='number'" >
+						<template v-else-if="item.component == 'number'">
 							<el-input-number v-model="form[item.name]" controls-position="right"></el-input-number>
 						</template>
 						<!-- radio -->
-						<template v-else-if="item.component=='radio'" >
+						<template v-else-if="item.component == 'radio'">
 							<el-radio-group v-model="form[item.name]">
-								<el-radio v-for="_item in item.options.items" :key="_item.value" :label="_item.value">{{_item.label}}</el-radio>
+								<el-radio v-for="_item in item.options.items" :key="_item.value"
+									:label="_item.value">{{ _item.label }}</el-radio>
 							</el-radio-group>
 						</template>
 						<!-- color -->
-						<template v-else-if="item.component=='color'" >
+						<template v-else-if="item.component == 'color'">
 							<el-color-picker v-model="form[item.name]" />
 						</template>
 						<!-- rate -->
-						<template v-else-if="item.component=='rate'" >
+						<template v-else-if="item.component == 'rate'">
 							<el-rate style="margin-top: 6px;" v-model="form[item.name]"></el-rate>
 						</template>
 						<!-- slider -->
-						<template v-else-if="item.component=='slider'" >
+						<template v-else-if="item.component == 'slider'">
 							<el-slider v-model="form[item.name]" :marks="item.options.marks"></el-slider>
 						</template>
 						<!-- tableselect -->
-						<template v-else-if="item.component=='tableselect'" >
+						<template v-else-if="item.component == 'tableselect'">
 							<tableselect-render v-model="form[item.name]" :item="item"></tableselect-render>
 						</template>
 						<!-- editor -->
-						<template v-else-if="item.component=='editor'" >
+						<template v-else-if="item.component == 'editor'">
 							<sc-editor v-model="form[item.name]" placeholder="璇疯緭鍏�" :height="400"></sc-editor>
 						</template>
 						<!-- noComponent -->
 						<template v-else>
-							<el-tag type="danger">[{{item.component}}] Component not found</el-tag>
+							<el-tag type="danger">[{{ item.component }}] Component not found</el-tag>
 						</template>
-						<div v-if="item.message" class="el-form-item-msg">{{item.message}}</div>
+						<div v-if="item.message" class="el-form-item-msg">{{ item.message }}</div>
 					</el-form-item>
 				</el-col>
 			</template>
@@ -117,156 +129,155 @@
 </template>
 
 <script>
-	import http from "@/utils/request"
+import http from "@/utils/request"
 
-	import { defineAsyncComponent } from 'vue'
-	const tableselectRender = defineAsyncComponent(() => import('./items/tableselect'))
-	const scEditor = defineAsyncComponent(() => import('@/components/scEditor'))
+import { defineAsyncComponent } from 'vue'
+const tableselectRender = defineAsyncComponent(() => import('./items/tableselect'))
+const scEditor = defineAsyncComponent(() => import('@/components/scEditor'))
 
-	export default {
-		props: {
-			modelValue: { type: Object, default: () => {} },
-			config: { type: Object, default: () => {} },
-			loading: { type: Boolean, default: false },
-		},
-		components: {
-			tableselectRender,
-			scEditor
-		},
-		data() {
-			return {
-				form: {},
-				renderLoading: false
+export default {
+	props: {
+		modelValue: { type: Object, default: () => { } },
+		config: { type: Object, default: () => { } },
+		loading: { type: Boolean, default: false },
+	},
+	components: {
+		tableselectRender,
+		scEditor
+	},
+	data() {
+		return {
+			form: {},
+			renderLoading: false
+		}
+	},
+	watch: {
+		modelValue() {
+			if (this.hasConfig) {
+				this.deepMerge(this.form, this.modelValue)
 			}
 		},
-		watch:{
-			modelValue(){
-				if(this.hasConfig){
-					this.deepMerge(this.form, this.modelValue)
-				}
-			},
-			config(){
-				this.render()
-			},
-			form:{
-				handler(val){
-					this.$emit("update:modelValue", val)
-				},
-				deep: true
-			}
+		config() {
+			this.render()
 		},
-		computed: {
-			hasConfig(){
-				return Object.keys(this.config).length>0
+		form: {
+			handler(val) {
+				this.$emit("update:modelValue", val)
 			},
-			hasValue(){
-				return Object.keys(this.modelValue).length>0
-			}
+			deep: true
+		}
+	},
+	computed: {
+		hasConfig() {
+			return Object.keys(this.config).length > 0
 		},
-		created() {
+		hasValue() {
+			return Object.keys(this.modelValue).length > 0
+		}
+	},
+	created() {
 
-		},
-		mounted() {
-			if(this.hasConfig){
-				this.render()
-			}
-		},
-		methods: {
-			//鏋勫缓form瀵硅薄
-			render() {
-				this.config.formItems.forEach((item) => {
-					if(item.component == 'checkbox'){
-						if(item.name){
-							const value = {}
-							item.options.items.forEach((option) => {
-								 value[option.name] = option.value
-							})
-							this.form[item.name] = value
-						}else{
-							item.options.items.forEach((option) => {
-								 this.form[option.name] = option.value
-							})
-						}
-					}else if(item.component == 'upload'){
-						if(item.name){
-							const value = {}
-							item.options.items.forEach((option) => {
-								 value[option.name] = option.value
-							})
-							this.form[item.name] = value
-						}else{
-							item.options.items.forEach((option) => {
-								 this.form[option.name] = option.value
-							})
-						}
-					}else{
-						this.form[item.name] = item.value
-					}
-				})
-				if(this.hasValue){
-					this.form = this.deepMerge(this.form, this.modelValue)
-				}
-				this.getData()
-			},
-			//澶勭悊杩滅▼閫夐」鏁版嵁
-			getData() {
-				this.renderLoading = true
-				var remoteData = []
-				this.config.formItems.forEach((item) => {
-					if(item.options && item.options.remote){
-						var req = http.get(item.options.remote.api, item.options.remote.data).then(res=>{
-							item.options.items = res.data
+	},
+	mounted() {
+		if (this.hasConfig) {
+			this.render()
+		}
+	},
+	methods: {
+		//鏋勫缓form瀵硅薄
+		render() {
+			this.config.formItems.forEach((item) => {
+				if (item.component == 'checkbox') {
+					if (item.name) {
+						const value = {}
+						item.options.items.forEach((option) => {
+							value[option.name] = option.value
 						})
-						remoteData.push(req)
+						this.form[item.name] = value
+					} else {
+						item.options.items.forEach((option) => {
+							this.form[option.name] = option.value
+						})
 					}
-				})
-				Promise.all(remoteData).then(()=>{
-					this.renderLoading = false
-				})
-			},
-			//鍚堝苟娣辩粨鏋勫璞�
-			deepMerge(obj1, obj2) {
-				let key;
-				for (key in obj2) {
-					obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" && (obj2[key] && obj2[key].toString() === "[object Object]") ? this.deepMerge(obj1[key], obj2[key]) : (obj1[key] = obj2[key])
+				} else if (item.component == 'upload') {
+					if (item.name) {
+						const value = {}
+						item.options.items.forEach((option) => {
+							value[option.name] = option.value
+						})
+						this.form[item.name] = value
+					} else {
+						item.options.items.forEach((option) => {
+							this.form[option.name] = option.value
+						})
+					}
+				} else {
+					this.form[item.name] = item.value
 				}
-				return obj1
-				//return JSON.parse(JSON.stringify(obj1))
-			},
-			//澶勭悊鍔ㄦ�侀殣钘�
-			hideHandle(item){
-				if(item.hideHandle){
-					const exp = eval(item.hideHandle.replace(/\$/g,"this.form"))
-					return exp
-				}
-				return false
-			},
-			//澶勭悊鍔ㄦ�佸繀濉�
-			rulesHandle(item){
-				if(item.requiredHandle){
-					const exp = eval(item.requiredHandle.replace(/\$/g,"this.form"))
-					var requiredRule = item.rules.find(t => 'required' in t)
-					requiredRule.required = exp
-				}
-				return item.rules
-			},
-			//鏁版嵁楠岃瘉
-			validate(valid, obj){
-				return this.$refs.form.validate(valid, obj)
-			},
-			scrollToField(prop){
-				return this.$refs.form.scrollToField(prop)
-			},
-			resetFields(){
-				return this.$refs.form.resetFields()
-			},
-			//鎻愪氦
-			submit(){
-				this.$emit("submit", this.form)
+			})
+			if (this.hasValue) {
+				this.form = this.deepMerge(this.form, this.modelValue)
 			}
+			this.getData()
+		},
+		//澶勭悊杩滅▼閫夐」鏁版嵁
+		getData() {
+			this.renderLoading = true
+			var remoteData = []
+			this.config.formItems.forEach((item) => {
+				if (item.options && item.options.remote) {
+					var req = http.get(item.options.remote.api, item.options.remote.data).then(res => {
+						item.options.items = res.data
+					})
+					remoteData.push(req)
+				}
+			})
+			Promise.all(remoteData).then(() => {
+				this.renderLoading = false
+			})
+		},
+		//鍚堝苟娣辩粨鏋勫璞�
+		deepMerge(obj1, obj2) {
+			let key;
+			for (key in obj2) {
+				obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" && (obj2[key] && obj2[key].toString() === "[object Object]") ? this.deepMerge(obj1[key], obj2[key]) : (obj1[key] = obj2[key])
+			}
+			return obj1
+			//return JSON.parse(JSON.stringify(obj1))
+		},
+		//澶勭悊鍔ㄦ�侀殣钘�
+		hideHandle(item) {
+			if (item.hideHandle) {
+				const exp = eval(item.hideHandle.replace(/\$/g, "this.form"))
+				return exp
+			}
+			return false
+		},
+		//澶勭悊鍔ㄦ�佸繀濉�
+		rulesHandle(item) {
+			if (item.requiredHandle) {
+				const exp = eval(item.requiredHandle.replace(/\$/g, "this.form"))
+				var requiredRule = item.rules.find(t => 'required' in t)
+				requiredRule.required = exp
+			}
+			return item.rules
+		},
+		//鏁版嵁楠岃瘉
+		validate(valid, obj) {
+			return this.$refs.form.validate(valid, obj)
+		},
+		scrollToField(prop) {
+			return this.$refs.form.scrollToField(prop)
+		},
+		resetFields() {
+			return this.$refs.form.resetFields()
+		},
+		//鎻愪氦
+		submit() {
+			this.$emit("submit", this.form)
 		}
 	}
+}
 </script>
 
-<style>
-</style>
+<style></style>
diff --git a/src/views/dnc/setting/FTP.vue b/src/views/dnc/setting/FTP.vue
index dca0e80..8d196c8 100644
--- a/src/views/dnc/setting/FTP.vue
+++ b/src/views/dnc/setting/FTP.vue
@@ -1,21 +1,25 @@
 <!--
  * @Date: 2024-05-26 22:26:35
  * @LastEditors: Sneed
- * @LastEditTime: 2024-05-26 22:40:36
+ * @LastEditTime: 2024-06-02 15:16:59
  * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/dnc/setting/FTP.vue
 -->
 <template>
     <el-container>
         <el-header>
-            <el-button type="primary">鍒涘缓FTP鐩綍</el-button>
+            <el-button type="primary" @click="addFtp">鍒涘缓FTP鐩綍</el-button>
             <el-button type="primary" style="margin-right: auto;">鍏宠仈宸ヤ綅</el-button>
         </el-header>
         <el-main>
             <el-row :gutter="20" style="width: 100%;">
                 <el-col :span="12">
                     <el-table :data="tableData" style="width: 100%">
-                        <el-table-column label="鐩綍鍚嶇О" prop="" width=""></el-table-column>
-                        <el-table-column label="鍏宠仈宸ヤ綅" prop="" width=""></el-table-column>
+                        <el-table-column label="鐩綍鍚嶇О" prop="name" width=""></el-table-column>
+                        <el-table-column label="鍏宠仈宸ヤ綅" prop="" width="">
+                            <template #default="scope">
+                                <span class="">{{ scope.row.workstationDTOS.map(v => v.name).join(';') }}</span>
+                            </template>
+                        </el-table-column>
                         <el-table-column label="鎿嶄綔" prop="" width=""></el-table-column>
                     </el-table>
                 </el-col>
@@ -24,14 +28,66 @@
                     <div>509</div>
                 </el-col>
             </el-row>
-
         </el-main>
+        <scDialog v-model="showAdd">
+            <scForm :config="config" :rules="rules">
+
+            </scForm>
+        </scDialog>
     </el-container>
 </template>
 
 <script>
-export default {
 
+export default {
+    data() {
+        return {
+            tableData: [],
+            showAdd: false,
+            rules: {
+                name: [
+                    { required: true, message: '璇疯緭鍏ュ鍚�' }
+                ]
+            },
+            config: {
+                labelWidth: 120,
+
+                formItems: [
+                    {
+                        component: 'input',
+                        label: '鍚嶇О',
+                        name: 'name',
+                        options: {
+                            placeholder: '',
+                            maxlength: 100,
+                        }
+                    },
+                    {
+                        component: 'input',
+                        label: '鍏宠仈宸ヤ綅',
+                        name: 'workstationIds',
+                        options: {
+                            placeholder: '',
+                            maxlength: 100,
+                        }
+                    }
+                ]
+            }
+        }
+    },
+    created() {
+        this.getList()
+    },
+    methods: {
+        getList() {
+            this.$HTTP.post(`/api/blade-dnc/ftp-director/ftp-workstation-list`, { name: '', workstationIds: [] }).then(res => {
+                this.tableData = res.data
+            })
+        },
+        addFtp() {
+            this.showAdd = true
+        }
+    },
 }
 </script>
 
diff --git a/src/views/vab/dialog/index.vue b/src/views/vab/dialog/index.vue
index f03de4f..c455b23 100644
--- a/src/views/vab/dialog/index.vue
+++ b/src/views/vab/dialog/index.vue
@@ -52,50 +52,49 @@
 </template>
 
 <script>
-	import { defineAsyncComponent } from 'vue'
+import { defineAsyncComponent } from 'vue'
 
-	export default {
-		name: 'dialogExtend',
-		components: {
-			dialog1: defineAsyncComponent(() => import("./dialog1")),
-			dialog2: defineAsyncComponent(() => import("./dialog2"))
-		},
-		data() {
-			return {
-				dialog1: false,
-				dialog2: false,
-				dialog3: false,
-				dialog2Loading: false,
-				asynDialog1: false,
-				asynDialog2: false,
-			}
-		},
-		mounted() {
+export default {
+	name: 'dialogExtend',
+	components: {
+		dialog1: defineAsyncComponent(() => import("./dialog1")),
+		dialog2: defineAsyncComponent(() => import("./dialog2"))
+	},
+	data() {
+		return {
+			dialog1: false,
+			dialog2: false,
+			dialog3: false,
+			dialog2Loading: false,
+			asynDialog1: false,
+			asynDialog2: false,
+		}
+	},
+	mounted() {
 
+	},
+	methods: {
+		open1() {
+			this.dialog1 = true
 		},
-		methods: {
-			open1(){
-				this.dialog1 = true
-			},
-			open2(){
-				this.dialog2 = true
-				this.dialog2Loading = true
-				setTimeout(()=>{
-					this.dialog2Loading = false
-				}, 1000)
-			},
-			open3(){
-				this.dialog3 = true
-			},
-			asyn1(){
-				this.asynDialog1 = true
-			},
-			asyn2(){
-				this.asynDialog2 = true
-			}
+		open2() {
+			this.dialog2 = true
+			this.dialog2Loading = true
+			setTimeout(() => {
+				this.dialog2Loading = false
+			}, 1000)
+		},
+		open3() {
+			this.dialog3 = true
+		},
+		asyn1() {
+			this.asynDialog1 = true
+		},
+		asyn2() {
+			this.asynDialog2 = true
 		}
 	}
+}
 </script>
 
-<style>
-</style>
+<style></style>

--
Gitblit v1.9.3