mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 16:03:25 +08:00
vue view code gen
This commit is contained in:
@@ -4,6 +4,22 @@
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="CrudTemplete\Vue\Api.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\DetailConfig.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\FormSchema.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\Index.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\Model.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\PageRouter.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\PageRouterIndex.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\Router.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\SearchField.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\Service.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\Store.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\StoreModulesIndex.tpl" />
|
||||
<None Remove="CrudTemplete\Vue\TableConfig.tpl" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="CrudTemplete\Controllers\Controller.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\DbModel\Model.tpl" />
|
||||
@@ -15,6 +31,19 @@
|
||||
<EmbeddedResource Include="CrudTemplete\View\Details.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\View\Edit.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\View\Index.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\Api.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\DetailConfig.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\FormSchema.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\Index.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\Model.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\PageRouter.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\PageRouterIndex.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\Router.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\SearchField.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\Service.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\Store.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\StoreModulesIndex.tpl" />
|
||||
<EmbeddedResource Include="CrudTemplete\Vue\TableConfig.tpl" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
4
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Api.tpl
Normal file
4
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Api.tpl
Normal file
@@ -0,0 +1,4 @@
|
||||
import { API_PROXY_PREFIX } from "../api";
|
||||
|
||||
export const GetPageListUrl: string = `${API_PROXY_PREFIX}/{{ModelClassName}}/GetPageList`;
|
||||
|
||||
19
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/DetailConfig.tpl
Normal file
19
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/DetailConfig.tpl
Normal file
@@ -0,0 +1,19 @@
|
||||
import { IData } from "@/components/data-detail-display";
|
||||
import { FieldTypeEnum } from "@/components/data-detail-display/enum";
|
||||
|
||||
const detailConfig: { title: string; dataField: string; fields: Array<IData> } = {
|
||||
title: "详情",
|
||||
dataField: "",
|
||||
fields: [
|
||||
{% for field in ModelFields %}
|
||||
{% if field.DbColumnName contains 'Image' or field.DbColumnName contains 'image' or field.DbColumnName contains 'thumbnail' or field.DbColumnName contains 'Thumbnail' %}
|
||||
{ label: "{{field.ColumnDescription}}", key: "{{field.DbColumnName}}",type:FieldTypeEnum.PICTURE },
|
||||
{% else %}
|
||||
{ label: "{{field.ColumnDescription}}", key: "{{field.DbColumnName}}" },
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
],
|
||||
};
|
||||
|
||||
//IData
|
||||
export default detailConfig;
|
||||
112
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/FormSchema.tpl
Normal file
112
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/FormSchema.tpl
Normal file
@@ -0,0 +1,112 @@
|
||||
import { ControlTypeEnum, validateTriggerEnum, validateTypeEnum, } from "@/components/coreshop-form/enum";
|
||||
import { IFormSchema } from "@/components/coreshop-form/type";
|
||||
|
||||
const formSchema: IFormSchema = {
|
||||
saveDataSourceKey: "{{ModelClassName}}/DoCreate",
|
||||
editDataSourceKey: "{{ModelClassName}}/DoEdit",
|
||||
queryDataSourceKey: "{{ModelClassName}}/GetEdit",
|
||||
filter: null,
|
||||
labelCol: { span: 3 },
|
||||
fieldValueModel: "model",
|
||||
fields: [
|
||||
{% for field in ModelFields %}
|
||||
|
||||
{% if field.DbColumnName contains 'Image' or field.DbColumnName contains 'image' or field.DbColumnName contains 'thumbnail' or field.DbColumnName contains 'Thumbnail' %}
|
||||
{
|
||||
key: "{{field.DbColumnName}}",
|
||||
name: "{{field.ColumnDescription}}",
|
||||
value: "",
|
||||
placeholder: "请上传{{field.ColumnDescription}}",
|
||||
type: ControlTypeEnum.FILE,
|
||||
},
|
||||
|
||||
{% elsif field.DataType == 'nvarchar' %}
|
||||
{
|
||||
key: "{{field.DbColumnName}}",
|
||||
name: "{{field.ColumnDescription}}",
|
||||
value: "",
|
||||
placeholder: "请输入{{field.ColumnDescription}}",
|
||||
type: ControlTypeEnum.STRING,
|
||||
config: {
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: "{{field.ColumnDescription}}不能为空",
|
||||
trigger: validateTriggerEnum.blur,
|
||||
type: validateTypeEnum.string,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
{% elsif field.DataType == 'int' or field.DataType == 'bigint' %}
|
||||
{
|
||||
key: "{{field.DbColumnName}}",
|
||||
name: "{{field.ColumnDescription}}",
|
||||
placeholder: "请输入{{field.ColumnDescription}}",
|
||||
type: ControlTypeEnum.NUMBER,
|
||||
value: 1000,
|
||||
config: {
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: "{{field.ColumnDescription}}不能为空",
|
||||
trigger: validateTriggerEnum.blur,
|
||||
type: validateTypeEnum.number,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
{% elsif field.DataType == 'datetime' %}
|
||||
{
|
||||
key: "{{field.DbColumnName}}",
|
||||
name: "请选择{{field.ColumnDescription}}",
|
||||
placeholder: "请选择{{field.ColumnDescription}}",
|
||||
type: ControlTypeEnum.DATE_PICKER,
|
||||
},
|
||||
|
||||
{% elsif field.DataType == 'bit' %}
|
||||
{
|
||||
key: "{{field.DbColumnName}}",
|
||||
name: "{{field.ColumnDescription}}",
|
||||
value: false,
|
||||
placeholder: "{{field.ColumnDescription}}",
|
||||
type: ControlTypeEnum.SWITCH,
|
||||
config: {
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: "{{field.ColumnDescription}}",
|
||||
trigger: validateTriggerEnum.blur,
|
||||
type: validateTypeEnum.boolean
|
||||
},
|
||||
],
|
||||
checkedLabel: "是",
|
||||
unCheckedLabel: "否",
|
||||
},
|
||||
},
|
||||
|
||||
{% else %}
|
||||
{
|
||||
key: "{{field.DbColumnName}}",
|
||||
name: "{{field.ColumnDescription}}",
|
||||
value: "",
|
||||
placeholder: "请输入{{field.ColumnDescription}}",
|
||||
type: ControlTypeEnum.STRING,
|
||||
config: {
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: "{{field.ColumnDescription}}不能为空",
|
||||
trigger: validateTriggerEnum.blur,
|
||||
type: validateTypeEnum.string,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
]}
|
||||
|
||||
export default formSchema;
|
||||
205
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Index.tpl
Normal file
205
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Index.tpl
Normal file
@@ -0,0 +1,205 @@
|
||||
<template>
|
||||
<DStandardTable
|
||||
:tableConfig="tableConfig"
|
||||
:dispatchKey="dispatchKey"
|
||||
:dataSource="dataSourceCmp"
|
||||
:searchFields="searchFields"
|
||||
:span="span"
|
||||
:selectedRowKeys="state.selectedRows"
|
||||
:rowKey="rowKey"
|
||||
:total="totalCmp"
|
||||
selectedRowKeyType="checkbox"
|
||||
:onSelectChange="onSelectRowChange"
|
||||
@onTableRefresh="onTableRefresh($event)"
|
||||
>
|
||||
<template #toolbar>
|
||||
<a-button type="primary" shape="round" @click="onAddData()"
|
||||
>新增</a-button
|
||||
>
|
||||
</template>
|
||||
{% for field in ModelFields %}{% if field.DbColumnName contains 'Image' or field.DbColumnName contains 'image' or field.DbColumnName contains 'thumbnail' or field.DbColumnName contains 'Thumbnail' %}
|
||||
<template #{{field.DbColumnName}}="{ record }">
|
||||
<Image :src="record.{{field.DbColumnName}}" :width="40" :height="40"></Image>
|
||||
</template>{% endif %}{% endfor %}
|
||||
<template #action="{ record }">
|
||||
<a-space>
|
||||
<a-button size="small" shape="round" @click="onViewDataDetail(record)"
|
||||
>查看</a-button
|
||||
>
|
||||
<a-button
|
||||
size="small"
|
||||
shape="round"
|
||||
type="primary"
|
||||
@click="onEdit(record)"
|
||||
>编辑</a-button
|
||||
>
|
||||
<a-button size="small" shape="round" danger @click="onDelete(record)"
|
||||
>删除</a-button
|
||||
>
|
||||
</a-space>
|
||||
</template>
|
||||
</DStandardTable>
|
||||
|
||||
<CoreShopFormModal
|
||||
:visible="state.editModalVisible"
|
||||
width="50%"
|
||||
:schema="state.formSchema"
|
||||
:modalVisible="onEditModalVisible"
|
||||
:onSuccess="onEditSuccess"
|
||||
:title="state.formModalTitle"
|
||||
></CoreShopFormModal>
|
||||
|
||||
<Modal
|
||||
:visible="state.dataDetailVisible"
|
||||
:onClose="onCloseDataDetailModal"
|
||||
:onCancel="onCloseDataDetailModal"
|
||||
:destroyOnClose="true"
|
||||
:title="state.dataDetailConfig?.title"
|
||||
:width="45"
|
||||
height="auto"
|
||||
>
|
||||
<DataDetailDisplay
|
||||
:data="state.dataDetailConfig.fields"
|
||||
:column="2"
|
||||
></DataDetailDisplay>
|
||||
</Modal>
|
||||
|
||||
<DeleteConfirmModal
|
||||
:visible="state.deleteConfirmModalVisible"
|
||||
:destroyOnClose="true"
|
||||
:content="state.deleteContentTip"
|
||||
:onCancel="onCancelDeleteDataModal"
|
||||
:onSuccess="onSuccessDeleteData"
|
||||
:DeleteUrl="state.deleteDataUrl"
|
||||
:params="state.deleteDataparams"
|
||||
>
|
||||
</DeleteConfirmModal>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import DStandardTable from "@/components/table/dStandardTable.vue";
|
||||
import { I{{ModelClassName}} } from "@/models/{{ModelClassName}}";
|
||||
import { computed, ComputedRef, reactive } from "vue";
|
||||
import { useStore } from "vuex";
|
||||
import tableConfig from "./table-config";
|
||||
import formSchema from "./form-schema";
|
||||
import { CoreShopFormModal } from "@/components/coreshop-form";
|
||||
import searchFields from "./search-field";
|
||||
import { cloneDeep } from "lodash";
|
||||
import { IFormSchema } from "@/components/coreshop-form/type";
|
||||
import dataDetailConfig from "./detail-config";
|
||||
import { DataDetailDisplay, IData } from "@/components/data-detail-display";
|
||||
import { buildDataDetail } from "@/utils/build-data-detail";
|
||||
import Modal from "@/components/modal";
|
||||
import DeleteConfirmModal from "@/components/coreshop-modal-delete/index";
|
||||
import Image from "@/components/coreshop-image";
|
||||
|
||||
/** 数据查询的接口 */
|
||||
const dispatchKey: string = "{{ModelClassName}}/getPageList";
|
||||
const span: number = 3;
|
||||
const rowKey: string = "id";
|
||||
// 表格刷新
|
||||
let handleTableRefreshFun: Function;
|
||||
|
||||
const state = reactive<{
|
||||
selectedRows: Array<any>;
|
||||
editModalVisible: boolean;
|
||||
formModalTitle: string;
|
||||
formSchema: IFormSchema;
|
||||
dataDetailVisible: boolean;
|
||||
dataDetailConfig: {
|
||||
title?: string;
|
||||
fields?: Array<IData>;
|
||||
};
|
||||
deleteConfirmModalVisible: boolean;
|
||||
deleteContentTip: string;
|
||||
deleteDataUrl: string;
|
||||
deleteDataparams: { [key: string]: any };
|
||||
}>({
|
||||
selectedRows: [],
|
||||
editModalVisible: false,
|
||||
formModalTitle: "编辑",
|
||||
formSchema: {},
|
||||
dataDetailVisible: false,
|
||||
dataDetailConfig: {
|
||||
title: "详情",
|
||||
fields: [],
|
||||
},
|
||||
deleteConfirmModalVisible: false,
|
||||
deleteContentTip: "确定删除?删除后将无法恢复。",
|
||||
deleteDataUrl: "",
|
||||
deleteDataparams: {},
|
||||
});
|
||||
|
||||
const store = useStore();
|
||||
const dataSourceCmp: ComputedRef<Array<I{{ModelClassName}}>> = computed(
|
||||
() => store.state.{{ModelClassName}}.{{ModelClassName}}.{{ModelClassName}}
|
||||
);
|
||||
const totalCmp: ComputedRef<number> = computed(
|
||||
() => store.state.{{ModelClassName}}.{{ModelClassName}}.count
|
||||
);
|
||||
|
||||
const onTableRefresh = (fun: Function) => {
|
||||
handleTableRefreshFun = fun;
|
||||
};
|
||||
|
||||
const onAddData = () => {
|
||||
state.editModalVisible = true;
|
||||
state.formModalTitle = "新增";
|
||||
state.formSchema = formSchema;
|
||||
};
|
||||
|
||||
const onEdit = (data: { [key: string]: any }) => {
|
||||
let editFormSchema: IFormSchema = cloneDeep(formSchema);
|
||||
state.editModalVisible = true;
|
||||
state.formModalTitle = "编辑";
|
||||
editFormSchema.filter = { id: data.id };
|
||||
state.formSchema = editFormSchema;
|
||||
};
|
||||
|
||||
/** 查看详情 */
|
||||
const onViewDataDetail = (data: { [key: string]: any }) => {
|
||||
dataDetailConfig.fields = buildDataDetail(dataDetailConfig.fields, data);
|
||||
state.dataDetailVisible = true;
|
||||
state.dataDetailConfig = dataDetailConfig;
|
||||
};
|
||||
|
||||
const onEditModalVisible = (visible: boolean) => {
|
||||
state.editModalVisible = visible;
|
||||
};
|
||||
|
||||
const onEditSuccess = () => {
|
||||
state.editModalVisible = false;
|
||||
handleTableRefreshFun && handleTableRefreshFun();
|
||||
};
|
||||
|
||||
const onCloseDataDetailModal = () => {
|
||||
state.dataDetailVisible = false;
|
||||
};
|
||||
|
||||
//#region 删除数据模态交互
|
||||
|
||||
const onDelete = (data: { [key: string]: any }) => {
|
||||
state.deleteConfirmModalVisible = true;
|
||||
state.deleteContentTip = "确定删除?删除后将无法恢复。";
|
||||
state.deleteDataUrl = "api/{{ModelClassName}}/DoDelete";
|
||||
state.deleteDataparams = { id: data.id };
|
||||
};
|
||||
|
||||
const onCancelDeleteDataModal = () => {
|
||||
state.deleteConfirmModalVisible = false;
|
||||
};
|
||||
|
||||
/** 删除数据后回调*/
|
||||
const onSuccessDeleteData = () => {
|
||||
store.commit("{{ModelClassName}}/deleteDataById", state.deleteDataparams.id);
|
||||
};
|
||||
|
||||
/** 选中数据 */
|
||||
const onSelectRowChange=(selectedRows:Array<number>)=>{
|
||||
state.selectedRows =selectedRows;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
</style>
|
||||
49
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Model.tpl
Normal file
49
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Model.tpl
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
/** {{ModelDescription}} */
|
||||
export interface I{{ModelClassName}}
|
||||
{
|
||||
{% for field in ModelFields %}
|
||||
/** {{field.ColumnDescription}} */
|
||||
{% if field.DataType == 'nvarchar' or field.DataType == 'varchar' or field.DataType == 'text' %}
|
||||
{{field.DbColumnName}}:string;
|
||||
{% elsif field.DataType == 'int' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:number;
|
||||
{% elsif field.DataType == 'int' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:number;
|
||||
{% elsif field.DataType == 'bigint' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:number;
|
||||
{% elsif field.DataType == 'bigint' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:number;
|
||||
{% elsif field.DataType == 'float' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:number;
|
||||
{% elsif field.DataType == 'float' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:number;
|
||||
{% elsif field.DataType == 'bit' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:boolean;
|
||||
{% elsif field.DataType == 'bit' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:boolean;
|
||||
{% elsif field.DataType == 'datetime' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:Date;
|
||||
{% elsif field.DataType == 'datetime' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:Date;
|
||||
{% elsif field.DataType == 'date' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:Date;
|
||||
{% elsif field.DataType == 'date' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:Date;
|
||||
{% elsif field.DataType == 'uniqueidentifier' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:string;
|
||||
{% elsif field.DataType == 'uniqueidentifier' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:string;
|
||||
{% elsif field.DataType == 'decimal' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:number;
|
||||
{% elsif field.DataType == 'decimal' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:number;
|
||||
{% elsif field.DataType == 'numeric' and field.IsNullable == false %}
|
||||
{{field.DbColumnName}}:number;
|
||||
{% elsif field.DataType == 'numeric' and field.IsNullable == true %}
|
||||
{{field.DbColumnName}}?:number;
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
13
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/PageRouter.tpl
Normal file
13
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/PageRouter.tpl
Normal file
@@ -0,0 +1,13 @@
|
||||
export const routers: Array<any> = [
|
||||
{
|
||||
path: "{{ModelClassName}}",
|
||||
name: "{{ModelDescription}}",
|
||||
meta: {
|
||||
page: {
|
||||
closable: false,
|
||||
},
|
||||
authority: "*",
|
||||
},
|
||||
component: () => import("./{{ModelClassName}}/index.vue"),
|
||||
}
|
||||
];
|
||||
@@ -0,0 +1,5 @@
|
||||
import { routers } from './router';
|
||||
|
||||
export {
|
||||
routers ,
|
||||
}
|
||||
13
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Router.tpl
Normal file
13
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Router.tpl
Normal file
@@ -0,0 +1,13 @@
|
||||
import { routers as {{ModelClassName}}Router } from "@/pages/{{ModelClassName}}";
|
||||
const routes = [
|
||||
{
|
||||
path: "{{ModelClassName}}",
|
||||
name: "{{ModelDescription}}管理",
|
||||
meta: {
|
||||
icon: FileTextOutlined,
|
||||
authority: "*",
|
||||
},
|
||||
component: CoreshopPageView,
|
||||
children: [...{{ModelClassName}}Router],
|
||||
},
|
||||
]
|
||||
32
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/SearchField.tpl
Normal file
32
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/SearchField.tpl
Normal file
@@ -0,0 +1,32 @@
|
||||
import { FieldTypeEnum, ISearchField } from "@/components/searchForm";
|
||||
import { markRaw } from "vue";
|
||||
const searchFields: Array<ISearchField> = markRaw([
|
||||
{% for field in ModelFields %}
|
||||
{% if field.DataType == 'bit' %}
|
||||
{
|
||||
field: "{{field.DbColumnName}}",
|
||||
type: FieldTypeEnum.SELECT,
|
||||
placeholder: "请选择{{field.ColumnDescription}}",
|
||||
options: [
|
||||
{ label: "是", value: true },
|
||||
{ label: "否", value: false },
|
||||
],
|
||||
},
|
||||
|
||||
{% elsif field.DataType == 'datetime' %}
|
||||
{
|
||||
field: "{{field.DbColumnName}}",
|
||||
type: FieldTypeEnum.DATE,
|
||||
placeholder: ['开始时间', '结束时间']
|
||||
},
|
||||
{% else %}
|
||||
{
|
||||
field: "{{field.DbColumnName}}",
|
||||
type: FieldTypeEnum.STRING,
|
||||
placeholder: "请输入{{field.ColumnDescription}}"
|
||||
},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
])
|
||||
|
||||
export default searchFields;
|
||||
8
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Service.tpl
Normal file
8
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Service.tpl
Normal file
@@ -0,0 +1,8 @@
|
||||
import { HttpMehtod } from "@/enum";
|
||||
import { request } from "@/utils/request";
|
||||
import { Observable } from "rxjs";
|
||||
import { GetPageListUrl } from "./api";
|
||||
|
||||
export function getPageList(params: any): Observable<any> {
|
||||
return request(GetPageListUrl, HttpMehtod.FORM_DATA, params)
|
||||
}
|
||||
52
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Store.tpl
Normal file
52
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/Store.tpl
Normal file
@@ -0,0 +1,52 @@
|
||||
import { I{{ModelClassName}} } from "@/models/{{ModelClassName}}";
|
||||
import * as {{ModelClassName}}Service from "@/services/{{ModelClassName}}Service";
|
||||
|
||||
export const Set_{{ModelClassName}}_List :string = "Set_{{ModelClassName}}_List";
|
||||
|
||||
interface I{{ModelClassName}}Entity {
|
||||
{{ModelClassName}}?: Array<I{{ModelClassName}}>;
|
||||
count: number;
|
||||
}
|
||||
|
||||
export interface IState {
|
||||
{{ModelClassName}}: I{{ModelClassName}}Entity;
|
||||
}
|
||||
|
||||
const state = (): IState => ({
|
||||
{{ModelClassName}}: {
|
||||
{{ModelClassName}}: [],
|
||||
count: 0,
|
||||
},
|
||||
});
|
||||
|
||||
const mutations: { [key: string]: Function } = {
|
||||
[Set_{{ModelClassName}}_List](state: IState, payload: { [key: string]: any }) {
|
||||
state.{{ModelClassName}}.{{ModelClassName}} = payload.data;
|
||||
state.{{ModelClassName}}.count = payload.count;
|
||||
},
|
||||
|
||||
/** 删除数据 */
|
||||
deleteDataById(state: IState, id: number| string) {
|
||||
state.{{ModelClassName}}.{{ModelClassName}}=state.{{ModelClassName}}.{{ModelClassName}}?.filter(x=>x.id!==id);
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
const getters: { [key: string]: Function } = {};
|
||||
|
||||
const actions = {
|
||||
/** 列表查询 */
|
||||
getPageList({ commit }: any, params: { [key: string]: any }) {
|
||||
{{ModelClassName}}Service.getPageList(params).subscribe((res) => {
|
||||
commit(Set_{{ModelClassName}}_List, res);
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
mutations,
|
||||
actions,
|
||||
getters,
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
import {{ModelClassName}} from "./{{ModelClassName}}";
|
||||
|
||||
export default {
|
||||
{{ModelClassName}},
|
||||
};
|
||||
42
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/TableConfig.tpl
Normal file
42
CoreCms.Net.CodeGenerator/CrudTemplete/Vue/TableConfig.tpl
Normal file
@@ -0,0 +1,42 @@
|
||||
import { ButtonEnum, ITableConfig } from "@/components/table";
|
||||
|
||||
const tableConfig: ITableConfig = {
|
||||
buildInButtons: [
|
||||
{
|
||||
buttonKey: ButtonEnum.selectExcelExport,
|
||||
dataSource: "api/{{ModelClassName}}/SelectExportExcel",
|
||||
},
|
||||
{
|
||||
buttonKey: ButtonEnum.queryExcelExport,
|
||||
dataSource: "api/{{ModelClassName}}/QueryExportExcel",
|
||||
},
|
||||
],
|
||||
columns: [
|
||||
{% for field in ModelFields %}
|
||||
{% if field.DbColumnName contains 'Image' or field.DbColumnName contains 'image' or field.DbColumnName contains 'thumbnail' or field.DbColumnName contains 'Thumbnail' %}
|
||||
{
|
||||
title: "{{field.ColumnDescription}}",
|
||||
key: "{{field.DbColumnName}}",
|
||||
dataIndex: "{{field.DbColumnName}}",
|
||||
slots: { customRender: "{{field.DbColumnName}}" },
|
||||
width: "5%",
|
||||
},{% else %}
|
||||
{
|
||||
title: "{{field.ColumnDescription}}",
|
||||
key: "{{field.DbColumnName}}",
|
||||
dataIndex: "{{field.DbColumnName}}",
|
||||
},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "action",
|
||||
key: "action",
|
||||
align: "center",
|
||||
width: "18%",
|
||||
slots: { customRender: "action" },
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export default tableConfig;
|
||||
@@ -23,7 +23,7 @@ namespace CoreCms.Net.CodeGenerator
|
||||
/// <param name="tableName">表名称</param>
|
||||
/// <param name="tableDescription">表说明</param>
|
||||
/// <param name="columns">表字段</param>
|
||||
public static byte[] CodeGenerator(string tableName, string tableDescription, List<DbColumnInfo> columns, string fileType)
|
||||
public static byte[] CodeGenerator(string tableName, string tableDescription, List<DbColumnInfo> columns, string fileType, bool isVue = false)
|
||||
{
|
||||
//ModelClassName
|
||||
//ModelName
|
||||
@@ -32,7 +32,7 @@ namespace CoreCms.Net.CodeGenerator
|
||||
byte[] data;
|
||||
var obj = new
|
||||
{
|
||||
ModelCreateTime= dt,
|
||||
ModelCreateTime = dt,
|
||||
ModelName = tableName,
|
||||
ModelDescription = tableDescription,
|
||||
ModelClassName = tableName,
|
||||
@@ -143,56 +143,17 @@ namespace CoreCms.Net.CodeGenerator
|
||||
}
|
||||
}
|
||||
|
||||
//CreateHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
|
||||
// 生成layUI 前端代码
|
||||
if (isVue == false)
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/create.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
CodeGeneratorForLayUI(obj, tableName, zip);
|
||||
}
|
||||
}
|
||||
//EditHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
|
||||
// 生成 vue 前端代码
|
||||
else
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/edit.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
CodeGeneratorForVue(obj, tableName, zip);
|
||||
}
|
||||
|
||||
//DetailsHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/details.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//IndexHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/index.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "EntityFiles":
|
||||
//Model
|
||||
@@ -235,55 +196,14 @@ namespace CoreCms.Net.CodeGenerator
|
||||
}
|
||||
break;
|
||||
case "ViewFiles":
|
||||
//CreateHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/create.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
//EditHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/edit.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//DetailsHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
|
||||
if (isVue == false)
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/details.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
CodeGeneratorForLayUI(obj, tableName, zip);
|
||||
}
|
||||
}
|
||||
|
||||
//IndexHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
|
||||
else
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/index.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
CodeGeneratorForVue(obj, tableName, zip);
|
||||
}
|
||||
break;
|
||||
case "InterFaceFiles":
|
||||
@@ -325,7 +245,7 @@ namespace CoreCms.Net.CodeGenerator
|
||||
/// <param name="tableName">表名称</param>
|
||||
/// <param name="tableDescription">表说明</param>
|
||||
/// <param name="columns">表字段</param>
|
||||
public static byte[] CodeGeneratorAll(List<DbTableInfoAndColumns> dbModels, string fileType)
|
||||
public static byte[] CodeGeneratorAll(List<DbTableInfoAndColumns> dbModels, string fileType, bool isVue = false)
|
||||
{
|
||||
//ModelClassName
|
||||
//ModelName
|
||||
@@ -446,55 +366,14 @@ namespace CoreCms.Net.CodeGenerator
|
||||
}
|
||||
}
|
||||
|
||||
//CreateHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
|
||||
// 生成
|
||||
if (isVue == false)
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/create.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
CodeGeneratorForLayUI(obj, item.Name, zip);
|
||||
}
|
||||
}
|
||||
//EditHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
|
||||
else
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/edit.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//DetailsHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/details.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//IndexHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/index.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
CodeGeneratorForVue(obj, item.Name, zip);
|
||||
}
|
||||
break;
|
||||
case "EntityFiles":
|
||||
@@ -538,55 +417,14 @@ namespace CoreCms.Net.CodeGenerator
|
||||
}
|
||||
break;
|
||||
case "ViewFiles":
|
||||
//CreateHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/create.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
//EditHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/edit.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//DetailsHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
|
||||
if (isVue == false)
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/details.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
CodeGeneratorForLayUI(obj, item.Name, zip);
|
||||
}
|
||||
}
|
||||
|
||||
//IndexHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
|
||||
else
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + item.Name.ToLower().ToLower() + "/index.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
CodeGeneratorForVue(obj, item.Name, zip);
|
||||
}
|
||||
break;
|
||||
case "InterFaceFiles":
|
||||
@@ -625,5 +463,271 @@ namespace CoreCms.Net.CodeGenerator
|
||||
return data;
|
||||
}
|
||||
|
||||
public static void CodeGeneratorForLayUI(object obj, string tableName, ZipArchive zip)
|
||||
{
|
||||
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly;
|
||||
string file;
|
||||
string result;
|
||||
Template template;
|
||||
//CreateHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/create.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
//EditHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/edit.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//DetailsHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/details.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
//IndexHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/index.html");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 生成vue 前端代码
|
||||
public static void CodeGeneratorForVue(object obj, string tableName, ZipArchive zip)
|
||||
{
|
||||
// 前端页面
|
||||
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly;
|
||||
string file;
|
||||
string result;
|
||||
Template template;
|
||||
//CreateHtml
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Index.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/index.vue");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 创建页面路由
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.PageRouter.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/router.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 导出页面路由
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.PageRouterIndex.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/index.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 创建路由
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Router.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("router.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 前端接口模型
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Model.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("models/" + tableName + "/index.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 前端服务(Service)
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Service.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("services/" + tableName + "Service/index.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 前端 服务端调用的API 地址
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Api.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("services/" + tableName + "Service/api.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 前端 数据状态
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Store.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("store/modules/" + tableName + "/index.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 前端 数据状态管理默认导出index
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.StoreModulesIndex.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("store/modules/index.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 创建数据表达配置
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.FormSchema.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/form-schema.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 创建查看详情配置
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.DetailConfig.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/detail-config.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
|
||||
// 创建表格搜索字段配置
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.SearchField.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/search-field.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
// 创建表格字段配置
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.TableConfig.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/table-config.ts");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void CodeGeneratorForInterFaceFiles(object obj, string tableName, ZipArchive zip)
|
||||
{
|
||||
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly;
|
||||
string file;
|
||||
string result;
|
||||
Template template;
|
||||
//IRespository
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + tableName + "Repository.cs");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry3.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
//Respository
|
||||
using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8))
|
||||
{
|
||||
file = reader.ReadToEnd();
|
||||
template = Template.Parse(file);
|
||||
result = template.Render(Hash.FromAnonymousObject(obj));
|
||||
ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + tableName + "Repository.cs");
|
||||
using (StreamWriter entryStream = new StreamWriter(entry1.Open()))
|
||||
{
|
||||
entryStream.Write(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace CoreCms.Net.IRepository
|
||||
///// </summary>
|
||||
///// <param name="model"></param>
|
||||
///// <returns></returns>
|
||||
byte[] CodeGen(string tableName, string fileType);
|
||||
byte[] CodeGen(string tableName, string fileType, bool isVue = false);
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -42,6 +42,6 @@ namespace CoreCms.Net.IRepository
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
byte[] CodeGenByAll(string fileType);
|
||||
byte[] CodeGenByAll(string fileType, bool isVue = false);
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,7 @@ namespace CoreCms.Net.IServices
|
||||
///// </summary>
|
||||
///// <param name="model"></param>
|
||||
///// <returns></returns>
|
||||
byte[] CodeGen(string tableName, string fileType);
|
||||
byte[] CodeGen(string tableName, string fileType, bool isVue = false);
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -42,6 +42,6 @@ namespace CoreCms.Net.IServices
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
byte[] CodeGenByAll(string fileType);
|
||||
byte[] CodeGenByAll(string fileType, bool isVue = false);
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,7 @@ namespace CoreCms.Net.Repository.CodeGenerator
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
public byte[] CodeGen(string tableName, string fileType)
|
||||
public byte[] CodeGen(string tableName, string fileType, bool isVue = false)
|
||||
{
|
||||
var tables = DbClient.DbMaintenance.GetTableInfoList(false);
|
||||
var views = DbClient.DbMaintenance.GetViewInfoList(false);
|
||||
@@ -66,7 +66,7 @@ namespace CoreCms.Net.Repository.CodeGenerator
|
||||
}
|
||||
|
||||
var columns = DbClient.DbMaintenance.GetColumnInfosByTableName(tb.Name, false);
|
||||
return GeneratorCodeHelper.CodeGenerator(tb.Name, tb.Description, columns, fileType);
|
||||
return GeneratorCodeHelper.CodeGenerator(tb.Name, tb.Description, columns, fileType, isVue);
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace CoreCms.Net.Repository.CodeGenerator
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
public byte[] CodeGenByAll(string fileType)
|
||||
public byte[] CodeGenByAll(string fileType, bool isVue = false)
|
||||
{
|
||||
var tables = DbClient.DbMaintenance.GetTableInfoList(false);
|
||||
var views = DbClient.DbMaintenance.GetViewInfoList(false);
|
||||
@@ -96,7 +96,7 @@ namespace CoreCms.Net.Repository.CodeGenerator
|
||||
|
||||
if (!allDb.Any())
|
||||
return null;
|
||||
return GeneratorCodeHelper.CodeGeneratorAll(allDb, fileType);
|
||||
return GeneratorCodeHelper.CodeGeneratorAll(allDb, fileType, isVue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,9 +52,9 @@ namespace CoreCms.Net.Services.CodeGenerator
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
public byte[] CodeGen(string tableName, string fileType)
|
||||
public byte[] CodeGen(string tableName, string fileType, bool isVue = false)
|
||||
{
|
||||
return _dal.CodeGen(tableName, fileType);
|
||||
return _dal.CodeGen(tableName, fileType, isVue);
|
||||
}
|
||||
|
||||
|
||||
@@ -65,10 +65,9 @@ namespace CoreCms.Net.Services.CodeGenerator
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
public byte[] CodeGenByAll(string fileType)
|
||||
public byte[] CodeGenByAll(string fileType, bool isVue = false)
|
||||
{
|
||||
|
||||
return _dal.CodeGenByAll(fileType);
|
||||
return _dal.CodeGenByAll(fileType, isVue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -128,6 +128,57 @@ namespace CoreCms.Net.Web.Admin.Controllers
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成代码
|
||||
/// </summary>
|
||||
/// <param name="tableName"></param>
|
||||
/// <param name="fileType"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[Description("生成代码Vue")]
|
||||
public IActionResult CodeGenDownVue([FromQuery] string tableName, [FromQuery] string fileType)
|
||||
{
|
||||
var jm = new AdminUiCallBack();
|
||||
if (string.IsNullOrEmpty(tableName))
|
||||
{
|
||||
jm.msg = "请选择数据库";
|
||||
return new JsonResult(jm);
|
||||
}
|
||||
if (string.IsNullOrEmpty(fileType))
|
||||
{
|
||||
jm.msg = "请选择要导出的文件类型";
|
||||
return new JsonResult(jm);
|
||||
}
|
||||
|
||||
if (tableName == "AllTable")
|
||||
{
|
||||
var data = _codeGeneratorServices.CodeGenByAll(fileType, true);
|
||||
if (data != null)
|
||||
{
|
||||
return File(data, System.Net.Mime.MediaTypeNames.Application.Zip, tableName + "-" + fileType + ".zip");
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = tableName + "获取数据库字段失败";
|
||||
return new JsonResult(jm);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var data = _codeGeneratorServices.CodeGen(tableName, fileType, true);
|
||||
if (data != null)
|
||||
{
|
||||
return File(data, System.Net.Mime.MediaTypeNames.Application.Zip, tableName + "-" + fileType + ".zip");
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = tableName + "获取数据库字段失败";
|
||||
return new JsonResult(jm);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region 获取所有表和表名并生成excel
|
||||
|
||||
|
||||
@@ -4299,6 +4299,14 @@
|
||||
<param name="fileType"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:CoreCms.Net.Web.Admin.Controllers.CodeGeneratorController.CodeGenDownVue(System.String,System.String)">
|
||||
<summary>
|
||||
生成代码
|
||||
</summary>
|
||||
<param name="tableName"></param>
|
||||
<param name="fileType"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:CoreCms.Net.Web.Admin.Controllers.CodeGeneratorController.GetDataBaseTablesToExcel">
|
||||
<summary>
|
||||
获取所有表和表名并生成excel
|
||||
|
||||
Reference in New Issue
Block a user