提交 505edec8 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

check project path exist

上级 55d342b6
......@@ -59,6 +59,7 @@ type ErrMsg struct {
var (
NoErr = ErrMsg{0, "请求成功"}
CommonErr = ErrMsg{1001, "请求失败"}
NeedInitErr = ErrMsg{2001, "前往初始化数据库"}
AuthErr = ErrMsg{4001, "会话超时,请重新登录!"}
AuthExpireErr = ErrMsg{4002, "token 过期,请刷新token"}
......
......@@ -65,20 +65,17 @@ func (c *ProjectCtrl) Get(ctx iris.Context) {
// Create 添加
func (c *ProjectCtrl) Create(ctx iris.Context) {
req := model.Project{}
if err := ctx.ReadJSON(&req); err != nil {
errs := validate.ValidRequest(err)
if len(errs) > 0 {
logUtils.Errorf("参数验证失败", zap.String("错误", strings.Join(errs, ";")))
ctx.JSON(domain.Response{Code: domain.SystemErr.Code, Data: nil, Msg: strings.Join(errs, ";")})
return
}
err := ctx.ReadJSON(&req)
req.Path = strings.TrimSpace(req.Path)
if err != nil || req.Path == "" {
logUtils.Errorf("参数验证失败 %s", err.Error())
ctx.JSON(domain.Response{Code: domain.SystemErr.Code, Data: nil, Msg: err.Error()})
return
}
id, err := c.ProjectService.Create(req)
if err != nil {
ctx.JSON(domain.Response{
Code: c.ErrCode(err),
Data: nil,
})
ctx.JSON(domain.Response{Code: domain.CommonErr.Code, Msg: err.Error()})
return
}
......
package service
import (
"errors"
"fmt"
"github.com/aaronchen2k/deeptest/internal/pkg/domain"
fileUtils "github.com/aaronchen2k/deeptest/internal/pkg/lib/file"
logUtils "github.com/aaronchen2k/deeptest/internal/pkg/lib/log"
......@@ -33,8 +35,16 @@ func (s *ProjectService) FindById(id uint) (model.Project, error) {
return s.ProjectRepo.FindById(id)
}
func (s *ProjectService) Create(project model.Project) (uint, error) {
return s.ProjectRepo.Create(project)
func (s *ProjectService) Create(project model.Project) (id uint, err error) {
po, _ := s.ProjectRepo.FindByPath(fileUtils.AddPathSepIfNeeded(project.Path))
if po.ID != 0 {
err = errors.New(fmt.Sprintf("路径为%s的项目已存在。", project.Path))
return
}
id, _ = s.ProjectRepo.Create(project)
return
}
func (s *ProjectService) Update(id uint, project model.Project) error {
......
......@@ -12,9 +12,9 @@
</a-select>
<dir-selection
:visible="selectionFormVisible"
:onCancel="selectionCancel"
:onSubmit="selectionSubmit"
:visible="formVisible"
:onCancel="cancel"
:onSubmit="submit"
/>
</div>
</template>
......@@ -25,20 +25,21 @@ import {useStore} from "vuex";
import {ProjectData} from "@/store/project";
import DirSelection from "@/views/component/file/DirSelection.vue";
import {createProject} from "@/services/project";
interface RightTopProject {
projects: ComputedRef<any[]>;
currProject: ComputedRef;
selectProject: (value: string) => void;
selectionFormVisible: Ref<boolean>;
setSelectionFormVisible: (val: boolean) => void;
selectionSubmit: (parentDir: string) => Promise<void>;
selectionCancel: () => void;
formVisible: Ref<boolean>;
setFormVisible: (val: boolean) => void;
submit: (parentDir: string) => Promise<void>;
cancel: () => void;
}
export default defineComponent({
name: 'RightTopProjectSelection',
name: 'RightTopProject',
components: {DirSelection},
setup(): RightTopProject {
const store = useStore<{ project: ProjectData }>();
......@@ -56,37 +57,37 @@ export default defineComponent({
console.log('selectProject', value)
if (value === '') {
setSelectionFormVisible(true)
setFormVisible(true)
} else {
store.dispatch('project/fetchProject', value);
}
}
const selectionFormVisible = ref<boolean>(false);
const setSelectionFormVisible = (val: boolean) => {
selectionFormVisible.value = val;
const formVisible = ref<boolean>(false);
const setFormVisible = (val: boolean) => {
formVisible.value = val;
};
const selectionSubmit = async (parentDir: string) => {
console.log('selectionSubmit', parentDir)
await store.dispatch('project/fetchProject', parentDir);
setSelectionFormVisible(false);
const submit = async (parentDir: string) => {
console.log('submit', parentDir)
createProject(parentDir).then(() => {
store.dispatch('project/fetchProject', parentDir);
setFormVisible(false);
}).catch(err => { console.log('') })
}
const selectionCancel = () => {
const cancel = () => {
store.dispatch('project/fetchProject', currProject.value.path);
setSelectionFormVisible(false);
setFormVisible(false);
}
return {
selectProject,
projects,
currProject,
selectionFormVisible,
setSelectionFormVisible,
selectionSubmit,
selectionCancel,
formVisible,
setFormVisible,
submit,
cancel,
}
}
})
......
......@@ -11,3 +11,13 @@ export async function queryProject(currProjectPath: string): Promise<any> {
params,
});
}
export async function createProject(projectPath: string): Promise<any> {
const data = {path: projectPath}
return request({
url: `/${apiPath}`,
method: 'post',
data: data,
});
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册