15 changed files with 725 additions and 8 deletions
			
			
		- 
					10src/assets/iconfonts/light/iconfont.css
 - 
					2src/assets/iconfonts/light/iconfont.js
 - 
					7src/assets/iconfonts/light/iconfont.json
 - 
					BINsrc/assets/iconfonts/light/iconfont.ttf
 - 
					BINsrc/assets/iconfonts/light/iconfont.woff
 - 
					BINsrc/assets/iconfonts/light/iconfont.woff2
 - 
					9src/views/collectReorganizi/batchConnection/index.vue
 - 
					40src/views/collectReorganizi/batchConnection/module/form.vue
 - 
					16src/views/system/baseConfig/index.vue
 - 
					16src/views/system/categoryConfig/index.vue
 - 
					303src/views/system/database/index.vue
 - 
					16src/views/system/fileLibraryConfig/index.vue
 - 
					16src/views/system/otherConfig/index.vue
 - 
					282src/views/system/remoteConnection/index.vue
 - 
					16src/views/system/serviceConfig/index.vue
 
						
							
						
						
							2
	
						
						src/assets/iconfonts/light/iconfont.js
						
							File diff suppressed because it is too large
							
							
								
									View File
								
							
						
					
				File diff suppressed because it is too large
							
							
								
									View File
								
							
						@ -0,0 +1,16 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <router-view /> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script> | 
				
			|||
export default { | 
				
			|||
  name: 'BaseConfig', | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
<style scoped> | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <router-view /> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script> | 
				
			|||
export default { | 
				
			|||
  name: 'CategoryConfig', | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
<style scoped> | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,303 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="app-container  row-container"> | 
				
			|||
    <div class="head-container"> | 
				
			|||
      <div class="head-search"> | 
				
			|||
        <!-- 搜索 --> | 
				
			|||
        <el-input v-model="query.search" clearable size="small" placeholder="输入关键字搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> | 
				
			|||
        <date-range-picker v-model="blurryTime" class="date-item" /> | 
				
			|||
        <rrOperation> | 
				
			|||
          <template v-slot:right> | 
				
			|||
            <el-button class="filter-item  filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button> | 
				
			|||
          </template> | 
				
			|||
        </rrOperation> | 
				
			|||
      </div> | 
				
			|||
      <crudOperation :permission="permission"> | 
				
			|||
        <template v-slot:middle> | 
				
			|||
          <el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toVerify('del')"> | 
				
			|||
            <i class="iconfont icon-shanchu" /> | 
				
			|||
            删除 | 
				
			|||
          </el-button> | 
				
			|||
        </template> | 
				
			|||
        <template v-slot:right> | 
				
			|||
          <el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length !== 1" @click="toVerify('download')"> | 
				
			|||
            <i class="iconfont icon-daochu" /> | 
				
			|||
            导出 | 
				
			|||
          </el-button> | 
				
			|||
          <el-button size="mini" :disabled="crud.selections.length !== 1" @click="toVerify('return')"> | 
				
			|||
            <i class="iconfont icon-huifu" /> | 
				
			|||
            还原 | 
				
			|||
          </el-button> | 
				
			|||
        </template> | 
				
			|||
      </crudOperation> | 
				
			|||
    </div> | 
				
			|||
    <div class="container-wrap"> | 
				
			|||
      <span class="right-top-line" /> | 
				
			|||
      <span class="left-bottom-line" /> | 
				
			|||
      <!--表格渲染--> | 
				
			|||
      <el-table | 
				
			|||
        ref="table" | 
				
			|||
        v-loading="crud.loading" | 
				
			|||
        :data="crud.data" | 
				
			|||
        style="width: 100%;" | 
				
			|||
        @selection-change="crud.selectionChangeHandler" | 
				
			|||
      > | 
				
			|||
        <el-table-column type="selection" align="center" width="55" /> | 
				
			|||
        <el-table-column prop="name" :show-overflow-tooltip="true" label="备份文件名" min-width="240" /> | 
				
			|||
        <el-table-column prop="remark" :show-overflow-tooltip="true" label="备注" min-width="200" /> | 
				
			|||
        <el-table-column prop="file_size" label="大小" min-width="85"> | 
				
			|||
          <!-- <template slot-scope="scope"> | 
				
			|||
            {{ getFileSize(scope.row.file_size) }} | 
				
			|||
          </template> --> | 
				
			|||
        </el-table-column> | 
				
			|||
        <el-table-column prop="createBy" label="操作人" align="center" width="100" /> | 
				
			|||
        <el-table-column prop="createTime" label="操作时间" align="center" width="180"> | 
				
			|||
          <template slot-scope="scope"> | 
				
			|||
            <div>{{ scope.row.createTime | parseTime }}</div> | 
				
			|||
          </template> | 
				
			|||
        </el-table-column> | 
				
			|||
      </el-table> | 
				
			|||
      <!--分页组件--> | 
				
			|||
      <pagination /> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <el-dialog class="tip-dialog tip-middle-dialog" title="操作提示" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="verifyDialogVisible" :before-close="handleClose"> | 
				
			|||
      <div class="setting-dialog"> | 
				
			|||
        <div class="tip-content"> | 
				
			|||
          <p class="tipMsg">这里为技术人员维护系统时使用,普通用户无需设置</p> | 
				
			|||
          <p class="delt-tip"><span>注意:强行修改会导致系统数据异常或丢失!如因用户强行修改,本系统不负责因此导致的相关后果!</span></p> | 
				
			|||
        </div> | 
				
			|||
        <el-form :model="form" style="margin-top:30px;" @submit.native.prevent> | 
				
			|||
          <el-form-item label="维护验证码" label-width="110px"> | 
				
			|||
            <el-input v-model="form.verifyCode" show-password style="width: 480px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
        </el-form> | 
				
			|||
        <div slot="footer" class="dialog-footer"> | 
				
			|||
          <el-button @click="verifyDialogVisible=false">取消 </el-button> | 
				
			|||
          <el-button type="primary" @click.native="handleConfirm">确定</el-button> | 
				
			|||
        </div> | 
				
			|||
      </div> | 
				
			|||
    </el-dialog> | 
				
			|||
 | 
				
			|||
    <!-- form --> | 
				
			|||
    <el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title"> | 
				
			|||
      <span class="dialog-right-top" /> | 
				
			|||
      <span class="dialog-left-bottom" /> | 
				
			|||
      <div class="setting-dialog"> | 
				
			|||
        <el-form ref="form" :rules="rules" :model="form" size="small" label-width="100px"> | 
				
			|||
          <el-form-item label="备份名称" prop="name"> | 
				
			|||
            <el-input v-model="form.name" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="备注" prop="remark"> | 
				
			|||
            <el-input v-model="form.remark" type="textarea" :rows="4" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
        </el-form> | 
				
			|||
        <div slot="footer" class="dialog-footer"> | 
				
			|||
          <el-button type="text" @click="crud.cancelCU">取消</el-button> | 
				
			|||
          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">保存</el-button> | 
				
			|||
        </div> | 
				
			|||
      </div> | 
				
			|||
    </el-dialog> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import { verifyMaintenance } from '@/api/system/field' | 
				
			|||
import { encrypt } from '@/utils/rsaEncrypt' | 
				
			|||
import crudNotify from '@/api/system/notify' | 
				
			|||
import CRUD, { presenter, header, form, crud } from '@crud/crud' | 
				
			|||
import crudOperation from '@crud/CRUD.operation' | 
				
			|||
import rrOperation from '@crud/RR.operation' | 
				
			|||
import DateRangePicker from '@/components/DateRangePicker' | 
				
			|||
import pagination from '@crud/Pagination' | 
				
			|||
import { mapGetters } from 'vuex' | 
				
			|||
// import { exportFile } from '@/utils/index' | 
				
			|||
// import qs from 'qs' | 
				
			|||
 | 
				
			|||
const defaultForm = { id: null, name: '', remark: null } | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  name: 'Database', | 
				
			|||
  components: { crudOperation, rrOperation, DateRangePicker, pagination }, | 
				
			|||
  cruds() { | 
				
			|||
    return CRUD({ | 
				
			|||
      title: '数据备份', | 
				
			|||
      url: 'api/notice/initNotice', | 
				
			|||
      crudMethod: { ...crudNotify }, | 
				
			|||
      sort: [], | 
				
			|||
      optShow: { | 
				
			|||
        add: true, | 
				
			|||
        edit: false, | 
				
			|||
        del: false, | 
				
			|||
        download: false, | 
				
			|||
        group: false, | 
				
			|||
        reset: false | 
				
			|||
      } | 
				
			|||
    }) | 
				
			|||
  }, | 
				
			|||
  mixins: [presenter(), header(), form(defaultForm), crud()], | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      permission: { | 
				
			|||
        add: ['admin', 'database:add'], | 
				
			|||
        edit: ['admin', 'database:edit'], | 
				
			|||
        del: ['admin', 'database:del'] | 
				
			|||
      }, | 
				
			|||
      verifyDialogVisible: false, | 
				
			|||
      form: { | 
				
			|||
        verifyCode: '' | 
				
			|||
      }, | 
				
			|||
      btn: '', | 
				
			|||
      showVerifyDialog: true, | 
				
			|||
      blurryTime: null, | 
				
			|||
      rules: { | 
				
			|||
        name: [ | 
				
			|||
          { required: true, message: '备份名称不可为空', trigger: 'blur' } | 
				
			|||
        ] | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  computed: { | 
				
			|||
    ...mapGetters([ | 
				
			|||
      'baseApi' | 
				
			|||
    ]) | 
				
			|||
  }, | 
				
			|||
  created() { | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    [CRUD.HOOK.beforeToCU](crud, form, btn) { | 
				
			|||
      if (this.showVerifyDialog) { | 
				
			|||
        // 打开输入验证码对话框 | 
				
			|||
        this.verifyDialogVisible = true | 
				
			|||
        this.btn = btn | 
				
			|||
        return false | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    getFileSize(fileSize) { | 
				
			|||
      const fileSizeInKB = (fileSize / 1024).toFixed(2) + 'kB' | 
				
			|||
      const fileSizeInB = fileSize + 'B' | 
				
			|||
      return (fileSize / 1024) <= 0.01 ? fileSizeInB : fileSizeInKB | 
				
			|||
    }, | 
				
			|||
    [CRUD.HOOK.beforeRefresh]() { | 
				
			|||
      if (this.blurryTime) { | 
				
			|||
        this.crud.query.startTime = this.blurryTime[0] | 
				
			|||
        this.crud.query.endTime = this.blurryTime[1] | 
				
			|||
      } else { | 
				
			|||
        this.crud.query.startTime = null | 
				
			|||
        this.crud.query.endTime = null | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    // 提交前的验证 | 
				
			|||
    [CRUD.HOOK.afterValidateCU](crud) { | 
				
			|||
      console.log(crud.form) | 
				
			|||
      return true | 
				
			|||
    }, | 
				
			|||
    resetQuery() { | 
				
			|||
      this.crud.query.search = '' | 
				
			|||
      this.blurryTime = null | 
				
			|||
      this.crud.query.startTime = null | 
				
			|||
      this.crud.query.endTime = null | 
				
			|||
      this.crud.toQuery() | 
				
			|||
    }, | 
				
			|||
    toVerify(btn) { | 
				
			|||
      if (this.showVerifyDialog) { | 
				
			|||
        // 打开输入验证码对话框 | 
				
			|||
        this.verifyDialogVisible = true | 
				
			|||
        this.btn = btn | 
				
			|||
        return false | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    handleConfirm() { | 
				
			|||
      verifyMaintenance(encrypt(this.form.verifyCode)).then((res) => { | 
				
			|||
        if (res) { | 
				
			|||
          // 关闭输入验证码对话框 | 
				
			|||
          this.verifyDialogVisible = false | 
				
			|||
          this.form.verifyCode = '' | 
				
			|||
          this.showVerifyDialog = false | 
				
			|||
          if (this.btn === 'add') { | 
				
			|||
            this.crud.toAdd() | 
				
			|||
          } else if (this.btn === 'edit') { | 
				
			|||
            this.crud.toEdit(this.crud.selections[0]) | 
				
			|||
          } else if (this.btn === 'del') { | 
				
			|||
            this.toDelete(this.crud.selections) | 
				
			|||
          } else if (this.btn === 'download') { | 
				
			|||
            this.doExport(this.crud.selections[0]) | 
				
			|||
          } else if (this.btn === 'return') { | 
				
			|||
            this.toReturn(this.crud.selections[0]) | 
				
			|||
          } | 
				
			|||
          this.showVerifyDialog = true | 
				
			|||
        } else { | 
				
			|||
          this.$message({ message: '验证码错误!', type: 'error', offset: 8 }) | 
				
			|||
        } | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    handleClose(done) { | 
				
			|||
      this.form.verifyCode = '' | 
				
			|||
      done() | 
				
			|||
    }, | 
				
			|||
    toDelete(data) { | 
				
			|||
      this.$confirm('此操作将删除当前所选数据' + '<span>你是否还要继续?</span>', '提示', { | 
				
			|||
        confirmButtonText: '继续', | 
				
			|||
        cancelButtonText: '取消', | 
				
			|||
        type: 'warning', | 
				
			|||
        dangerouslyUseHTMLString: true | 
				
			|||
      }).then(() => { | 
				
			|||
        // const ids = data.map(item => item.id) | 
				
			|||
        // const params = { | 
				
			|||
        //   'ids': ids, | 
				
			|||
        //   'operator': this.user.username | 
				
			|||
        // } | 
				
			|||
        // crudEditing.del(params).then((res) => { | 
				
			|||
        //   console.log(res) | 
				
			|||
        //   if (res.code !== 500) { | 
				
			|||
        //     this.$message({ message: '删除成功', type: 'success', offset: 8 }) | 
				
			|||
        //   } else { | 
				
			|||
        //     this.$message({ message: res.message, type: 'error', offset: 8 }) | 
				
			|||
        //   } | 
				
			|||
        //   this.initData() | 
				
			|||
        // }).catch(err => { | 
				
			|||
        //   console.log(err) | 
				
			|||
        // }) | 
				
			|||
      }).catch(() => { | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    doExport(data) { | 
				
			|||
      // 只可导出一个 | 
				
			|||
      this.crud.downloadLoading = true | 
				
			|||
      this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', { | 
				
			|||
        confirmButtonText: '继续', | 
				
			|||
        cancelButtonText: '取消', | 
				
			|||
        type: 'warning', | 
				
			|||
        dangerouslyUseHTMLString: true | 
				
			|||
      }).then(() => { | 
				
			|||
        // const params = { | 
				
			|||
        //   'isType': this.isType | 
				
			|||
        // } | 
				
			|||
        // exportFile(this.baseApi + '/api/categoryField/download?' + qs.stringify(params, { indices: false })) | 
				
			|||
        this.crud.downloadLoading = false | 
				
			|||
      }).catch(() => { | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    toReturn(data) { | 
				
			|||
      // 只可恢复一个 | 
				
			|||
      this.$confirm('此操作将还原当前所选备份' + '<span>你是否还要继续?</span>', '提示', { | 
				
			|||
        confirmButtonText: '继续', | 
				
			|||
        cancelButtonText: '取消', | 
				
			|||
        type: 'warning', | 
				
			|||
        dangerouslyUseHTMLString: true | 
				
			|||
      }).then(() => { | 
				
			|||
        // const params = { | 
				
			|||
        //   'isType': this.isType | 
				
			|||
        // } | 
				
			|||
        // exportFile(this.baseApi + '/api/categoryField/download?' + qs.stringify(params, { indices: false })) | 
				
			|||
      }).catch(() => { | 
				
			|||
      }) | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
::v-deep div.el-dialog__footer { | 
				
			|||
  text-align: center; | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <router-view /> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script> | 
				
			|||
export default { | 
				
			|||
  name: 'FileLibraryConfig', | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
<style scoped> | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <router-view /> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script> | 
				
			|||
export default { | 
				
			|||
  name: 'OtherConfig', | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
<style scoped> | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,282 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="app-container  row-container"> | 
				
			|||
    <div class="head-container"> | 
				
			|||
      <div class="head-search"> | 
				
			|||
        <!-- 搜索 --> | 
				
			|||
        <el-input v-model="query.search" clearable size="small" placeholder="输入关键字搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> | 
				
			|||
        <el-select v-model="query.type" placeholder="请选择协议" style="width: 140px;" @change="crud.toQuery"> | 
				
			|||
          <el-option | 
				
			|||
            v-for="item in options" | 
				
			|||
            :key="item.value" | 
				
			|||
            :label="item.label" | 
				
			|||
            :value="item.value" | 
				
			|||
          /> | 
				
			|||
        </el-select> | 
				
			|||
        <date-range-picker v-model="blurryTime" class="date-item" /> | 
				
			|||
        <rrOperation> | 
				
			|||
          <template v-slot:right> | 
				
			|||
            <el-button class="filter-item  filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button> | 
				
			|||
          </template> | 
				
			|||
        </rrOperation> | 
				
			|||
      </div> | 
				
			|||
      <crudOperation :permission="permission"> | 
				
			|||
        <template v-slot:middle> | 
				
			|||
          <el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)"> | 
				
			|||
            <i class="iconfont icon-shanchu" /> | 
				
			|||
            删除 | 
				
			|||
          </el-button> | 
				
			|||
        </template> | 
				
			|||
        <template v-slot:right> | 
				
			|||
          <el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)"> | 
				
			|||
            <i class="iconfont icon-daochu" /> | 
				
			|||
            导出 | 
				
			|||
          </el-button> | 
				
			|||
        </template> | 
				
			|||
      </crudOperation> | 
				
			|||
    </div> | 
				
			|||
    <!--表格渲染--> | 
				
			|||
    <div class="container-wrap"> | 
				
			|||
      <span class="right-top-line" /> | 
				
			|||
      <span class="left-bottom-line" /> | 
				
			|||
      <el-table | 
				
			|||
        ref="table" | 
				
			|||
        v-loading="crud.loading" | 
				
			|||
        :data="crud.data" | 
				
			|||
        style="width: 100%;" | 
				
			|||
        @selection-change="crud.selectionChangeHandler" | 
				
			|||
      > | 
				
			|||
        <el-table-column type="selection" align="center" width="55" /> | 
				
			|||
        <el-table-column prop="name" label="名称" min-width="160" /> | 
				
			|||
        <el-table-column prop="type" label="协议" min-width="100" /> | 
				
			|||
        <el-table-column prop="location" label="地址" min-width="100" /> | 
				
			|||
        <el-table-column prop="port" label="端口" min-width="85" /> | 
				
			|||
        <el-table-column prop="file_size" label="根目录" min-width="85" /> | 
				
			|||
        <el-table-column prop="createBy" label="操作人" align="center" width="100" /> | 
				
			|||
        <el-table-column prop="createTime" label="操作时间" align="center" width="180"> | 
				
			|||
          <template slot-scope="scope"> | 
				
			|||
            <div>{{ scope.row.createTime | parseTime }}</div> | 
				
			|||
          </template> | 
				
			|||
        </el-table-column> | 
				
			|||
      </el-table> | 
				
			|||
      <!--分页组件--> | 
				
			|||
      <pagination /> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <!-- form --> | 
				
			|||
    <el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title"> | 
				
			|||
      <span class="dialog-right-top" /> | 
				
			|||
      <span class="dialog-left-bottom" /> | 
				
			|||
      <div class="setting-dialog"> | 
				
			|||
        <el-form ref="form" :rules="rules" :model="form" size="small" label-width="100px"> | 
				
			|||
          <el-form-item label="名称" prop="name"> | 
				
			|||
            <el-input v-model="form.name" placeholder="请输入" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="协议" prop="protocol"> | 
				
			|||
            <el-radio-group v-model="form.protocol" style="width: 580px;"> | 
				
			|||
              <el-radio :label="0">服务器磁盘</el-radio> | 
				
			|||
              <el-radio :label="1">FTP</el-radio> | 
				
			|||
              <el-radio :label="2">SFTP</el-radio> | 
				
			|||
            </el-radio-group> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="地址" prop="location"> | 
				
			|||
            <el-input v-model="form.location" placeholder="请输入" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="端口" prop="port"> | 
				
			|||
            <el-input v-model="form.port" placeholder="请输入" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="账号" prop="account"> | 
				
			|||
            <el-input v-model="form.account" placeholder="请输入" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="密码" prop="password"> | 
				
			|||
            <el-input v-model="form.password" placeholder="请输入" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="根目录" prop="root"> | 
				
			|||
            <el-input v-model="form.root" placeholder="请输入" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="成功后操作" prop="operate"> | 
				
			|||
            <el-radio-group v-model="form.operate"> | 
				
			|||
              <el-radio :label="0">保留文件</el-radio> | 
				
			|||
              <el-radio :label="1">移除文件</el-radio> | 
				
			|||
            </el-radio-group> | 
				
			|||
          </el-form-item> | 
				
			|||
          <el-form-item label="备注" prop="remark"> | 
				
			|||
            <el-input v-model="form.remark" type="textarea" placeholder="请输入" :rows="4" style="width: 580px;" /> | 
				
			|||
          </el-form-item> | 
				
			|||
        </el-form> | 
				
			|||
        <div slot="footer" class="dialog-footer"> | 
				
			|||
          <el-button type="text" @click="crud.cancelCU">取消</el-button> | 
				
			|||
          <el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">保存</el-button> | 
				
			|||
        </div> | 
				
			|||
      </div> | 
				
			|||
    </el-dialog> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import crudNotify from '@/api/system/notify' | 
				
			|||
import CRUD, { presenter, header, form, crud } from '@crud/crud' | 
				
			|||
import crudOperation from '@crud/CRUD.operation' | 
				
			|||
import rrOperation from '@crud/RR.operation' | 
				
			|||
import DateRangePicker from '@/components/DateRangePicker' | 
				
			|||
import pagination from '@crud/Pagination' | 
				
			|||
import { mapGetters } from 'vuex' | 
				
			|||
// import { exportFile } from '@/utils/index' | 
				
			|||
// import qs from 'qs' | 
				
			|||
 | 
				
			|||
const defaultForm = { id: null, name: '', protocol: 0, location: null, port: null, account: null, password: null, root: null, operate: null, remark: null } | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  name: 'RemoteConnection', | 
				
			|||
  components: { crudOperation, rrOperation, DateRangePicker, pagination }, | 
				
			|||
  cruds() { | 
				
			|||
    return CRUD({ | 
				
			|||
      title: '远程设置', | 
				
			|||
      url: 'api/notice/initNotice', | 
				
			|||
      crudMethod: { ...crudNotify }, | 
				
			|||
      sort: [], | 
				
			|||
      optShow: { | 
				
			|||
        add: true, | 
				
			|||
        edit: true, | 
				
			|||
        del: false, | 
				
			|||
        download: false, | 
				
			|||
        group: false, | 
				
			|||
        reset: false | 
				
			|||
      } | 
				
			|||
    }) | 
				
			|||
  }, | 
				
			|||
  mixins: [presenter(), header(), form(defaultForm), crud()], | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      permission: { | 
				
			|||
        add: ['admin', 'remoteConnection:add'], | 
				
			|||
        edit: ['admin', 'remoteConnection:edit'], | 
				
			|||
        del: ['admin', 'remoteConnection:del'] | 
				
			|||
      }, | 
				
			|||
      blurryTime: null, | 
				
			|||
      options: [ | 
				
			|||
        { | 
				
			|||
          value: 1, | 
				
			|||
          label: '服务端磁盘' | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          value: 2, | 
				
			|||
          label: 'FTP' | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          value: 3, | 
				
			|||
          label: 'SFTP' | 
				
			|||
        } | 
				
			|||
      ], | 
				
			|||
      rules: { | 
				
			|||
        name: [ | 
				
			|||
          { required: true, message: '名称不可为空', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        protocol: [ | 
				
			|||
          { required: true, message: '请选择', trigger: 'change' } | 
				
			|||
        ], | 
				
			|||
        location: [ | 
				
			|||
          { required: true, message: '地址不可为空', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        port: [ | 
				
			|||
          { required: true, message: '端口不可为空', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        account: [ | 
				
			|||
          { required: true, message: '账号不可为空', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        password: [ | 
				
			|||
          { required: true, message: '密码不可为空', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        root: [ | 
				
			|||
          { required: true, message: '根目录不可为空', trigger: 'blur' } | 
				
			|||
        ], | 
				
			|||
        operate: [ | 
				
			|||
          { required: true, message: '请选择', trigger: 'change' } | 
				
			|||
        ] | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  computed: { | 
				
			|||
    ...mapGetters([ | 
				
			|||
      'baseApi' | 
				
			|||
    ]) | 
				
			|||
  }, | 
				
			|||
  created() { | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    [CRUD.HOOK.beforeRefresh]() { | 
				
			|||
      if (this.blurryTime) { | 
				
			|||
        this.crud.query.startTime = this.blurryTime[0] | 
				
			|||
        this.crud.query.endTime = this.blurryTime[1] | 
				
			|||
      } else { | 
				
			|||
        this.crud.query.startTime = null | 
				
			|||
        this.crud.query.endTime = null | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    // 提交前的验证 | 
				
			|||
    [CRUD.HOOK.afterValidateCU](crud) { | 
				
			|||
      console.log(crud.form) | 
				
			|||
      return true | 
				
			|||
    }, | 
				
			|||
    resetQuery() { | 
				
			|||
      this.crud.query.search = '' | 
				
			|||
      this.crud.query.type = null | 
				
			|||
      this.blurryTime = null | 
				
			|||
      this.crud.query.startTime = null | 
				
			|||
      this.crud.query.endTime = null | 
				
			|||
      this.crud.toQuery() | 
				
			|||
    }, | 
				
			|||
    toDelete(data) { | 
				
			|||
      this.$confirm('此操作将删除当前所选设置' + '<span>你是否还要继续?</span>', '提示', { | 
				
			|||
        confirmButtonText: '继续', | 
				
			|||
        cancelButtonText: '取消', | 
				
			|||
        type: 'warning', | 
				
			|||
        dangerouslyUseHTMLString: true | 
				
			|||
      }).then(() => { | 
				
			|||
        // const ids = data.map(item => item.id) | 
				
			|||
        // const params = { | 
				
			|||
        //   'ids': ids, | 
				
			|||
        //   'operator': this.user.username | 
				
			|||
        // } | 
				
			|||
        // crudEditing.del(params).then((res) => { | 
				
			|||
        //   console.log(res) | 
				
			|||
        //   if (res.code !== 500) { | 
				
			|||
        //     this.$message({ message: '删除成功', type: 'success', offset: 8 }) | 
				
			|||
        //   } else { | 
				
			|||
        //     this.$message({ message: res.message, type: 'error', offset: 8 }) | 
				
			|||
        //   } | 
				
			|||
        //   this.initData() | 
				
			|||
        // }).catch(err => { | 
				
			|||
        //   console.log(err) | 
				
			|||
        // }) | 
				
			|||
      }).catch(() => { | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    doExport(data) { | 
				
			|||
      this.crud.downloadLoading = true | 
				
			|||
      this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', { | 
				
			|||
        confirmButtonText: '继续', | 
				
			|||
        cancelButtonText: '取消', | 
				
			|||
        type: 'warning', | 
				
			|||
        dangerouslyUseHTMLString: true | 
				
			|||
      }).then(() => { | 
				
			|||
        // const params = { | 
				
			|||
        //   'isType': this.isType | 
				
			|||
        // } | 
				
			|||
        // exportFile(this.baseApi + '/api/categoryField/download?' + qs.stringify(params, { indices: false })) | 
				
			|||
        this.crud.downloadLoading = false | 
				
			|||
      }).catch(() => { | 
				
			|||
        this.crud.downloadLoading = false | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    handleClose(done) { | 
				
			|||
      done() | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
::v-deep div.el-dialog__footer { | 
				
			|||
  text-align: center; | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,16 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <router-view /> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script> | 
				
			|||
export default { | 
				
			|||
  name: 'ServiceConfig', | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
<style scoped> | 
				
			|||
</style> | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue