|
@@ -63,46 +63,88 @@
|
|
|
center
|
|
center
|
|
|
>
|
|
>
|
|
|
<template>
|
|
<template>
|
|
|
- <el-form ref="form" :model="form" label-width="80px">
|
|
|
|
|
- <el-form-item label="打包类型">
|
|
|
|
|
- <el-select v-model="form.type" placeholder="选择打包类型">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="(item, index) in packTypes"
|
|
|
|
|
- :key="index"
|
|
|
|
|
- :label="item.label"
|
|
|
|
|
- :value="item.value"
|
|
|
|
|
- />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="打包名字" style="width: 70%; padding-right: 2px">
|
|
|
|
|
- <el-input v-model="form.name" style="width: 70%; padding-right: 2px" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <div v-if="form.type === 'docker'">
|
|
|
|
|
- <el-form-item label="docker 仓库">
|
|
|
|
|
- <el-select v-model="form.dockerRegistry" placeholder="选择 docker 仓库">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="(item, index) in registryList"
|
|
|
|
|
- :key="index"
|
|
|
|
|
- :label="item.label"
|
|
|
|
|
- :value="item.value"
|
|
|
|
|
- />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="存放位置" style="width: 70%; padding-right: 2px">
|
|
|
|
|
- <el-input v-model="form.targetPath" style="width: 70%; padding-right: 2px" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div v-else>
|
|
|
|
|
- <el-form-item label="bin 目录路径" style="width: 70%; padding-right: 2px">
|
|
|
|
|
- <el-input v-model="form.binDirname" style="width: 70%; padding-right: 2px" />
|
|
|
|
|
|
|
+ <div class="compiler-config-steps">
|
|
|
|
|
+ <el-steps :active="active" finish-status="success" simple style="margin-bottom: 30px">
|
|
|
|
|
+ <el-step title="配置基础环境" icon="el-icon-monitor" />
|
|
|
|
|
+ <el-step title="配置打包" icon="el-icon-edit" />
|
|
|
|
|
+ </el-steps>
|
|
|
|
|
+
|
|
|
|
|
+ <el-form ref="form" :model="form" :rules="dynamicRules" label-width="130px">
|
|
|
|
|
+ <div v-show="active === 0">
|
|
|
|
|
+ <el-form-item label="打包类型" prop="type">
|
|
|
|
|
+ <el-select v-model="form.type" placeholder="请选择打包类型" style="width: 100%">
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="(item, index) in packTypes"
|
|
|
|
|
+ :key="index"
|
|
|
|
|
+ :label="item.label"
|
|
|
|
|
+ :value="item.value"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="配置名称" prop="name">
|
|
|
|
|
+ <el-input v-model="form.name" placeholder="例如 docker-pack" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div v-show="active === 1">
|
|
|
|
|
+ <div v-if="form.type === 'docker'">
|
|
|
|
|
+ <el-form-item label="docker 仓库" prop="dockerRegistry">
|
|
|
|
|
+ <div style="display: flex; align-items: center;">
|
|
|
|
|
+ <el-select v-model="form.dockerRegistry" placeholder="请选择 docker 仓库" style="width: 100%">
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="(item, index) in registryList"
|
|
|
|
|
+ :key="index"
|
|
|
|
|
+ :label="item.label"
|
|
|
|
|
+ :value="item.value"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ <el-tooltip content="添加 docker 仓库" placement="top">
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ icon="el-icon-plus"
|
|
|
|
|
+ circle
|
|
|
|
|
+ size="mini"
|
|
|
|
|
+ style="margin-left: 10px"
|
|
|
|
|
+ @click="goToAddRegistry"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-tooltip>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="form-tip">构建生成的镜像会推送到该仓库</div>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-else-if="form.type === 'staticFiles'">
|
|
|
|
|
+ <el-form-item label="构建产物路径" prop="binDirname">
|
|
|
|
|
+ <el-input v-model="form.binDirname" placeholder="例如 /dist" />
|
|
|
|
|
+ <div class="form-tip">源码根目录下的相对路径</div>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="存储位置" prop="targetPath">
|
|
|
|
|
+ <el-input v-model="form.targetPath" placeholder="例如 registry.cn-chengdu.aliyuncs.com/reghao" />
|
|
|
|
|
+ <div class="form-tip">shell 类型需要使用绝对路径</div>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-else>
|
|
|
|
|
+ <el-form-item label="提示">
|
|
|
|
|
+ <el-input value="dockerBuild 类型可能还需要设置 dockerfile 中的参数变量" readonly />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <el-form-item style="margin-top: 40px">
|
|
|
|
|
+ <el-button v-if="active > 0" @click="active--">上一步</el-button>
|
|
|
|
|
+ <el-button v-if="active < 1" type="primary" @click="nextStep">下一步</el-button>
|
|
|
|
|
+ <el-button v-if="active === 1" type="success" @click="onAddPacker">提交保存</el-button>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- </div>
|
|
|
|
|
- <el-form-item>
|
|
|
|
|
- <el-button type="primary" @click="onAddPacker">确定</el-button>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-form>
|
|
|
|
|
|
|
+ </el-form>
|
|
|
|
|
+ </div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
+ <el-dialog
|
|
|
|
|
+ title="添加 docker 仓库"
|
|
|
|
|
+ append-to-body
|
|
|
|
|
+ :visible.sync="showAddRegistryDialog"
|
|
|
|
|
+ center
|
|
|
|
|
+ >
|
|
|
|
|
+ </el-dialog>
|
|
|
</el-container>
|
|
</el-container>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -124,16 +166,35 @@ export default {
|
|
|
totalSize: 0,
|
|
totalSize: 0,
|
|
|
dataList: [],
|
|
dataList: [],
|
|
|
// **********************************************************************
|
|
// **********************************************************************
|
|
|
|
|
+ active: 0,
|
|
|
showAddDialog: false,
|
|
showAddDialog: false,
|
|
|
form: {
|
|
form: {
|
|
|
type: '',
|
|
type: '',
|
|
|
name: '',
|
|
name: '',
|
|
|
- binDirname: '/',
|
|
|
|
|
|
|
+ binDirname: '',
|
|
|
targetPath: '',
|
|
targetPath: '',
|
|
|
dockerRegistry: ''
|
|
dockerRegistry: ''
|
|
|
},
|
|
},
|
|
|
packTypes: [],
|
|
packTypes: [],
|
|
|
- registryList: []
|
|
|
|
|
|
|
+ registryList: [],
|
|
|
|
|
+ // **********************************************************************
|
|
|
|
|
+ showAddRegistryDialog: false,
|
|
|
|
|
+ registryForm: {
|
|
|
|
|
+ registryUrl: ''
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ dynamicRules() {
|
|
|
|
|
+ const baseRules = {
|
|
|
|
|
+ type: [{ required: true, message: '请选择类型', trigger: 'blur' }],
|
|
|
|
|
+ name: [{ required: true, message: '请输入名称', trigger: 'blur' }]
|
|
|
|
|
+ }
|
|
|
|
|
+ // 根据选择的类型增加特定规则
|
|
|
|
|
+ if (this.form.type === 'docker') {
|
|
|
|
|
+ baseRules.dockerRegistry = [{ required: true, message: 'docker 类型必须指定使用的仓库', trigger: 'blur' }]
|
|
|
|
|
+ }
|
|
|
|
|
+ return baseRules
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
created() {
|
|
created() {
|
|
@@ -174,7 +235,7 @@ export default {
|
|
|
this.$message.error(error.message)
|
|
this.$message.error(error.message)
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
- onAddPacker() {
|
|
|
|
|
|
|
+ onAddPacker1() {
|
|
|
const formData = new FormData()
|
|
const formData = new FormData()
|
|
|
formData.append('type', this.form.type)
|
|
formData.append('type', this.form.type)
|
|
|
formData.append('name', this.form.name)
|
|
formData.append('name', this.form.name)
|
|
@@ -190,6 +251,39 @@ export default {
|
|
|
this.showAddDialog = false
|
|
this.showAddDialog = false
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
|
|
+ // 异步校验并跳转
|
|
|
|
|
+ async nextStep() {
|
|
|
|
|
+ const stepFields = ['type', 'name'] // 第一步需要校验的字段
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 关键:将所有字段的校验转为 Promise 数组
|
|
|
|
|
+ const checkActions = stepFields.map(field => {
|
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
|
+ this.$refs.form.validateField(field, error => {
|
|
|
|
|
+ if (error) reject(error)
|
|
|
|
|
+ else resolve()
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ await Promise.all(checkActions)
|
|
|
|
|
+ this.active++ // 只有全部校验成功才加 1
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ this.$message.warning('请检查基础配置是否填写完整')
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ onAddPacker() {
|
|
|
|
|
+ this.$refs.form.validate((valid) => {
|
|
|
|
|
+ if (valid) {
|
|
|
|
|
+ // 这里发起 API 请求
|
|
|
|
|
+ console.log('Final Data:', this.form)
|
|
|
|
|
+ this.$message.success('打包配置添加成功!')
|
|
|
|
|
+ // 逻辑处理,如关闭弹窗或跳转列表
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
handleEdit(index, row) {
|
|
handleEdit(index, row) {
|
|
|
this.$confirm('确定要删除 ' + row.name + '?', '提示', {
|
|
this.$confirm('确定要删除 ' + row.name + '?', '提示', {
|
|
|
confirmButtonText: '确定',
|
|
confirmButtonText: '确定',
|
|
@@ -210,6 +304,9 @@ export default {
|
|
|
message: '已取消'
|
|
message: '已取消'
|
|
|
})
|
|
})
|
|
|
})
|
|
})
|
|
|
|
|
+ },
|
|
|
|
|
+ goToAddRegistry() {
|
|
|
|
|
+ this.showAddRegistryDialog = true
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|