mirror of
https://github.com/certd/certd.git
synced 2026-04-30 01:07:28 +08:00
chore: 企业管理模式初步
This commit is contained in:
@@ -65,6 +65,8 @@ export class SysPublicSettings extends BaseSettings {
|
|||||||
}> = {};
|
}> = {};
|
||||||
|
|
||||||
notice?: string;
|
notice?: string;
|
||||||
|
|
||||||
|
adminMode?: "enterprise" | "saas" = "saas";
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SysPrivateSettings extends BaseSettings {
|
export class SysPrivateSettings extends BaseSettings {
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ export class AccessEntity {
|
|||||||
@Column({ name: 'encrypt_setting', comment: '已加密设置', length: 10240, nullable: true })
|
@Column({ name: 'encrypt_setting', comment: '已加密设置', length: 10240, nullable: true })
|
||||||
encryptSetting: string;
|
encryptSetting: string;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ export class AddonEntity {
|
|||||||
@Column({ name: 'is_default', comment: '是否默认', nullable: false, default: false })
|
@Column({ name: 'is_default', comment: '是否默认', nullable: false, default: false })
|
||||||
isDefault: boolean;
|
isDefault: boolean;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
|
|||||||
@@ -861,4 +861,8 @@ export default {
|
|||||||
select: "Select",
|
select: "Select",
|
||||||
placeholder: "select please",
|
placeholder: "select please",
|
||||||
},
|
},
|
||||||
|
adminMode: {
|
||||||
|
enterpriseMode: "Enterprise Mode",
|
||||||
|
saasMode: "SaaS Mode",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -876,4 +876,8 @@ export default {
|
|||||||
select: "选择",
|
select: "选择",
|
||||||
placeholder: "请选择",
|
placeholder: "请选择",
|
||||||
},
|
},
|
||||||
|
adminMode: {
|
||||||
|
enterpriseMode: "企业模式",
|
||||||
|
saasMode: "SaaS模式",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ export type SysPublicSetting = {
|
|||||||
>;
|
>;
|
||||||
// 系统通知
|
// 系统通知
|
||||||
notice?: string;
|
notice?: string;
|
||||||
|
|
||||||
|
// 管理员模式
|
||||||
|
adminMode?: "enterprise" | "saas";
|
||||||
};
|
};
|
||||||
export type SuiteSetting = {
|
export type SuiteSetting = {
|
||||||
enabled?: boolean;
|
enabled?: boolean;
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
<a-tab-pane key="pipeline" :tab="t('certd.sys.setting.pipelineSetting')">
|
<a-tab-pane key="pipeline" :tab="t('certd.sys.setting.pipelineSetting')">
|
||||||
<SettingPipeline v-if="activeKey === 'pipeline'" />
|
<SettingPipeline v-if="activeKey === 'pipeline'" />
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
|
<a-tab-pane key="mode" :tab="t('certd.adminMode')">
|
||||||
|
<SettingMode v-if="activeKey === 'mode'" />
|
||||||
|
</a-tab-pane>
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
</div>
|
</div>
|
||||||
</fs-page>
|
</fs-page>
|
||||||
@@ -39,6 +42,8 @@ import SettingSafe from "/@/views/sys/settings/tabs/safe.vue";
|
|||||||
import SettingCaptcha from "/@/views/sys/settings/tabs/captcha.vue";
|
import SettingCaptcha from "/@/views/sys/settings/tabs/captcha.vue";
|
||||||
import SettingPipeline from "/@/views/sys/settings/tabs/pipeline.vue";
|
import SettingPipeline from "/@/views/sys/settings/tabs/pipeline.vue";
|
||||||
import SettingOauth from "/@/views/sys/settings/tabs/oauth.vue";
|
import SettingOauth from "/@/views/sys/settings/tabs/oauth.vue";
|
||||||
|
import SettingMode from "/@/views/sys/settings/tabs/mode.vue";
|
||||||
|
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
import { useSettingStore } from "/@/store/settings";
|
import { useSettingStore } from "/@/store/settings";
|
||||||
|
|||||||
@@ -34,7 +34,9 @@
|
|||||||
<a-select-option value="ipv4first">{{ t("certd.ipv4Priority") }}</a-select-option>
|
<a-select-option value="ipv4first">{{ t("certd.ipv4Priority") }}</a-select-option>
|
||||||
<a-select-option value="ipv6first">{{ t("certd.ipv6Priority") }}</a-select-option>
|
<a-select-option value="ipv6first">{{ t("certd.ipv6Priority") }}</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
<div class="helper">{{ t("certd.dualStackNetworkHelper") }}, <a href="https://certd.docmirror.cn/guide/use/setting/ipv6.html" target="_blank">{{ t("certd.helpDocLink") }}</a></div>
|
<div class="helper">
|
||||||
|
{{ t("certd.dualStackNetworkHelper") }}, <a href="https://certd.docmirror.cn/guide/use/setting/ipv6.html" target="_blank">{{ t("certd.helpDocLink") }}</a>
|
||||||
|
</div>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item :label="t('certd.sys.setting.showRunStrategy')" :name="['public', 'showRunStrategy']">
|
<a-form-item :label="t('certd.sys.setting.showRunStrategy')" :name="['public', 'showRunStrategy']">
|
||||||
@@ -68,8 +70,6 @@ import { useSettingStore } from "/@/store/settings";
|
|||||||
import { notification } from "ant-design-vue";
|
import { notification } from "ant-design-vue";
|
||||||
import { util } from "/@/utils";
|
import { util } from "/@/utils";
|
||||||
import { useI18n } from "/src/locales";
|
import { useI18n } from "/src/locales";
|
||||||
import AddonSelector from "../../../certd/addon/addon-selector/index.vue";
|
|
||||||
import CaptchaInput from "/@/components/captcha/captcha-input.vue";
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<template>
|
||||||
|
<div class="sys-settings-form sys-settings-mode">
|
||||||
|
<a-form :model="formState" name="basic" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" autocomplete="off" @finish="onFinish">
|
||||||
|
<a-form-item :label="t('certd.adminMode')" :name="['public', 'adminMode']">
|
||||||
|
<fs-dict-radio v-model:checked="formState.public.adminMode" :dict="adminModeDict" />
|
||||||
|
</a-form-item>
|
||||||
|
|
||||||
|
<a-form-item label=" " :colon="false" :wrapper-col="{ span: 8 }">
|
||||||
|
<a-button :loading="saveLoading" type="primary" html-type="submit">{{ t("certd.saveButton") }}</a-button>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="tsx">
|
||||||
|
import { reactive, ref } from "vue";
|
||||||
|
import { SysSettings } from "/@/views/sys/settings/api";
|
||||||
|
import * as api from "/@/views/sys/settings/api";
|
||||||
|
import { merge } from "lodash-es";
|
||||||
|
import { useSettingStore } from "/@/store/settings";
|
||||||
|
import { notification } from "ant-design-vue";
|
||||||
|
import { useI18n } from "/src/locales";
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: "SettingMode",
|
||||||
|
});
|
||||||
|
|
||||||
|
const adminModeDict = [
|
||||||
|
{
|
||||||
|
label: t("certd.adminMode.enterpriseMode"),
|
||||||
|
value: "enterprise",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t("certd.adminMode.saasMode"),
|
||||||
|
value: "saas",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const formState = reactive<Partial<SysSettings>>({
|
||||||
|
public: {},
|
||||||
|
private: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
async function loadSysSettings() {
|
||||||
|
const data: any = await api.SysSettingsGet();
|
||||||
|
merge(formState, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveLoading = ref(false);
|
||||||
|
loadSysSettings();
|
||||||
|
const settingsStore = useSettingStore();
|
||||||
|
const onFinish = async (form: any) => {
|
||||||
|
try {
|
||||||
|
saveLoading.value = true;
|
||||||
|
|
||||||
|
await api.SysSettingsSave(form);
|
||||||
|
await settingsStore.loadSysSettings();
|
||||||
|
notification.success({
|
||||||
|
message: t("certd.saveSuccess"),
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
saveLoading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="less"></style>
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
CREATE TABLE "cd_project"
|
||||||
|
(
|
||||||
|
"id" integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
"user_id" integer NOT NULL,
|
||||||
|
"name" varchar(512) NOT NULL,
|
||||||
|
"disabled" boolean NOT NULL DEFAULT (false),
|
||||||
|
"create_time" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP),
|
||||||
|
"update_time" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
CREATE INDEX "index_project_user_id" ON "cd_project" ("user_id");
|
||||||
|
INSERT INTO cd_project (id, user_id, "name", "disabled") VALUES (1, 0, 'default', false);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE cd_cert_info ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_cert_project_id" ON "cd_cert_info" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE cd_site_info ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_site_project_id" ON "cd_site_info" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE cd_site_ip ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_site_ip_project_id" ON "cd_site_ip" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE cd_open_key ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_open_key_project_id" ON "cd_open_key" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE cd_access ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_access_project_id" ON "cd_access" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE cd_addon ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_addon_project_id" ON "cd_addon" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE pi_pipeline ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_pipeline_project_id" ON "cd_pipeline" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE pi_pipeline_group ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_pipeline_group_project_id" ON "cd_pipeline_group" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE pi_storage ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_storage_project_id" ON "cd_storage" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE pi_notification ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_notification_project_id" ON "cd_notification" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE pi_history ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_history_project_id" ON "cd_history" ("project_id");
|
||||||
|
|
||||||
|
ALTER TABLE pi_history_log ADD COLUMN project_id integer;
|
||||||
|
CREATE INDEX "index_history_log_project_id" ON "cd_history_log" ("project_id");
|
||||||
|
|
||||||
|
|
||||||
@@ -42,6 +42,9 @@ export class CertInfoEntity {
|
|||||||
@Column({ name: 'cert_file', comment: '证书下载' })
|
@Column({ name: 'cert_file', comment: '证书下载' })
|
||||||
certFile: string;
|
certFile: string;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -71,6 +71,9 @@ export class SiteInfoEntity {
|
|||||||
@Column({ name: 'group_id', comment: '分组id' })
|
@Column({ name: 'group_id', comment: '分组id' })
|
||||||
groupId: number;
|
groupId: number;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
|
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
@Column({ name: 'update_time', comment: '修改时间', default: () => 'CURRENT_TIMESTAMP' })
|
@Column({ name: 'update_time', comment: '修改时间', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ export class SiteIpEntity {
|
|||||||
remark: string;
|
remark: string;
|
||||||
@Column({ name: "disabled", comment: "禁用启用" })
|
@Column({ name: "disabled", comment: "禁用启用" })
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
|
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ export class OpenKeyEntity {
|
|||||||
@Column({ name: 'scope', comment: '权限范围' })
|
@Column({ name: 'scope', comment: '权限范围' })
|
||||||
scope: string; // open 仅开放接口、 user 用户所有权限
|
scope: string; // open 仅开放接口、 user 用户所有权限
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
|
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ export class HistoryLogEntity {
|
|||||||
@Column({ comment: '日志内容', length: 40960, nullable: true })
|
@Column({ comment: '日志内容', length: 40960, nullable: true })
|
||||||
logs: string;
|
logs: string;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ export class HistoryEntity {
|
|||||||
})
|
})
|
||||||
endTime: Date;
|
endTime: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
@@ -38,6 +41,7 @@ export class HistoryEntity {
|
|||||||
default: () => 'CURRENT_TIMESTAMP',
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
})
|
})
|
||||||
updateTime: Date;
|
updateTime: Date;
|
||||||
|
|
||||||
|
|
||||||
pipelineTitle: string;
|
pipelineTitle: string;
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ export class NotificationEntity {
|
|||||||
@Column({ name: 'is_default', comment: '是否默认' })
|
@Column({ name: 'is_default', comment: '是否默认' })
|
||||||
isDefault: boolean;
|
isDefault: boolean;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ export class PipelineGroupEntity {
|
|||||||
@Column({ name: 'favorite', comment: '收藏' })
|
@Column({ name: 'favorite', comment: '收藏' })
|
||||||
favorite: boolean;
|
favorite: boolean;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ export class PipelineEntity {
|
|||||||
@Column({name: 'order', comment: '排序', nullable: true,})
|
@Column({name: 'order', comment: '排序', nullable: true,})
|
||||||
order: number;
|
order: number;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({name: 'create_time',comment: '创建时间', default: () => 'CURRENT_TIMESTAMP',})
|
@Column({name: 'create_time',comment: '创建时间', default: () => 'CURRENT_TIMESTAMP',})
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
@Column({
|
@Column({
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ export class StorageEntity {
|
|||||||
@Column({ comment: 'value', length: 40960, nullable: true })
|
@Column({ comment: 'value', length: 40960, nullable: true })
|
||||||
value: string;
|
value: string;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ export class TemplateEntity {
|
|||||||
})
|
})
|
||||||
order: number;
|
order: number;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: '项目id' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
name: 'create_time',
|
name: 'create_time',
|
||||||
comment: '创建时间',
|
comment: '创建时间',
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
@Entity('cd_audit_log')
|
||||||
|
export class AuditLogEntity {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ name: 'user_id', comment: 'UserId' })
|
||||||
|
userId: number;
|
||||||
|
|
||||||
|
@Column({ name: 'user_name', comment: '用户名' })
|
||||||
|
userName: string;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: 'ProjectId' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
|
@Column({ name: 'project_name', comment: '项目名称' })
|
||||||
|
projectName: string;
|
||||||
|
|
||||||
|
@Column({ name: 'action', comment: '操作' })
|
||||||
|
action: string;
|
||||||
|
|
||||||
|
@Column({ name: 'content', comment: '内容' })
|
||||||
|
content: string;
|
||||||
|
|
||||||
|
@Column({ name: 'ip_address', comment: 'IP地址' })
|
||||||
|
ipAddress: string;
|
||||||
|
|
||||||
|
@Column({
|
||||||
|
name: 'create_time',
|
||||||
|
comment: '创建时间',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
|
createTime: Date;
|
||||||
|
@Column({
|
||||||
|
name: 'update_time',
|
||||||
|
comment: '修改时间',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
|
updateTime: Date;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
@Entity('cd_project_user')
|
||||||
|
export class ProjectUserEntity {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ name: 'user_id', comment: 'UserId' })
|
||||||
|
userId: number;
|
||||||
|
|
||||||
|
@Column({ name: 'project_id', comment: 'ProjectId' })
|
||||||
|
projectId: number;
|
||||||
|
|
||||||
|
@Column({ name: 'permission', comment: '权限' })
|
||||||
|
permission: string; // read / write
|
||||||
|
|
||||||
|
@Column({
|
||||||
|
name: 'create_time',
|
||||||
|
comment: '创建时间',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
|
createTime: Date;
|
||||||
|
@Column({
|
||||||
|
name: 'update_time',
|
||||||
|
comment: '修改时间',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
|
updateTime: Date;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
@Entity('cd_project')
|
||||||
|
export class ProjectEntity {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ name: 'user_id', comment: 'UserId' })
|
||||||
|
userId: number;
|
||||||
|
|
||||||
|
@Column({ name: 'name', comment: '项目名称' })
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({ name: 'disabled', comment: '禁用' })
|
||||||
|
disabled: boolean;
|
||||||
|
|
||||||
|
@Column({
|
||||||
|
name: 'create_time',
|
||||||
|
comment: '创建时间',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
|
createTime: Date;
|
||||||
|
@Column({
|
||||||
|
name: 'update_time',
|
||||||
|
comment: '修改时间',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
|
updateTime: Date;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user