优化代码生成

This commit is contained in:
zsvg
2022-06-22 05:17:39 +08:00
parent 660ac98524
commit 4e54295406
3 changed files with 227 additions and 19 deletions
+3 -1
View File
@@ -154,6 +154,8 @@ export const pageView = (url: string) => {
window.open(import.meta.env.VITE_PUBLIC_PATH + '#/page/' + url);
};
export const toFinish = () => {
window.alert("待完成");
};
+221 -16
View File
@@ -16,22 +16,84 @@
<el-tabs type='card' v-model='activeName'>
<el-tab-pane label='基本信息' name='tab1'>
<div class="yform-div">
<el-form-item label='表名称:' style="width: 25%" prop='name' :rules="[{ required: true, message: '名称不能为空'}]">
<el-input v-model='form.name'></el-input>
<el-form-item label='表名称:' prop='name' :rules="[{ required: true, message: '表名称不能为空'}]">
<el-input v-model='form.name' @keyup="nameChange"></el-input>
</el-form-item>
<el-form-item label='表描述:' style="width: 25%">
<el-form-item label='表描述:' prop='remark' :rules="[{ required: true, message: '表描述不能为空'}]">
<el-input v-model='form.remark'></el-input>
</el-form-item>
<el-form-item label='业务名:' style="width: 50%">
<el-form-item label='实体类:' style="width: 50%" prop='bunam' :rules="[{ required: true, message: '实体类不能为空'}]">
<el-input v-model='form.bunam'></el-input>
</el-form-item>
<el-form-item label='继承基类:' prop='baent' :rules="[{ required: true, message: '继承基类不能为空'}]">
<el-select v-model='form.baent' style='width: 100%'>
<el-option label='BaseMainEntity(主信息表)' value='BaseMainEntity' />
<el-option label='BaseCateEntity(分类表)' value='BaseCateEntity' />
<el-option label='BaseEntity(只含id,name)' value='BaseEntity' />
</el-select>
</el-form-item>
<el-form-item label='所属门户:'>
<el-select v-model='form.porid' style='width: 100%' clearable>
<el-option label='管理员门户' value='sys' />
<el-option label='营销门户' value='sa'/>
</el-select>
</el-form-item>
<el-form-item label='上级菜单:'>
<el-select v-model='form.pmeid' style='width: 100%' clearable>
<el-option label='待完成1' value='tf1' />
<el-option label='待完成2' value='tf2'/>
</el-select>
</el-form-item>
<el-form-item label='编辑页类型:' prop='edtyp' :rules="[{ required: true, message: '名称不能为空'}]">
<el-select v-model='form.edtyp' style='width: 100%'>
<el-option label='弹出框' value='popup' />
<el-option label='抽屉页' value='drawer' />
<el-option label='标签页' value='tab' />
</el-select>
</el-form-item>
<el-form-item label='每行列数:' prop='pecol' :rules="[{ required: true, message: '继承基类不能为空'}]">
<el-select v-model='form.pecol' style='width: 100%'>
<el-option label='1列' :value='1' />
<el-option label='2列' :value='2' />
<el-option label='4列' :value='4' />
</el-select>
</el-form-item>
<!-- <el-form-item label='排序号:' prop='ornum'>-->
<!-- <el-input-number v-model='form.ornum' controls-position='right' style='width: 100%' />-->
<!-- </el-form-item>-->
<el-form-item label='显示按钮:' prop='ornum' style='width: 100%'>
<el-checkbox v-model="form.addbt" label="新增" />
<el-checkbox v-model="form.delbt" label="删除" />
<el-checkbox v-model="form.impbt" label="导入" />
<el-checkbox v-model="form.expbt" label="导出" />
</el-form-item>
</div>
</el-tab-pane>
<el-tab-pane label='字段信息' name='tab2'>
<el-table border :data='form.fields' :row-style="{height: '36px'}" style='width: 100%'>
<el-table-column label='排序号' width='90'>
<div style="margin-bottom: 10px">
<el-button type='primary' @click.stop='addItem' plain>新 增</el-button>
<el-button type='primary' @click='upItem' plain>上 移</el-button>
<el-button type='primary' @click='downItem' plain>下 移</el-button>
<el-button type='primary' @click='copyItem' plain>复 制</el-button>
<el-button type='primary' @click='delsItem' plain>删 除</el-button>
<el-dropdown @command='testx' style='margin-left: 10px;top:1px'>
<el-button type='primary' plain>更 多</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command='test1'>测试1</el-dropdown-item>
<el-dropdown-item command='test2'>测试2</el-dropdown-item>
<el-dropdown-item command='test3'>测试3</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<el-table border :data='form.fields' :row-style="{height: '36px'}" style='width: 100%' @selection-change='itemSelect'>
<el-table-column type='selection' width='46' header-align="center" align='center' />
<el-table-column label='#' width='40' header-align="center" align='center'>
<template #default='scope'>
<el-input-number v-model='scope.row.ornum' controls-position='right' style='width: 100%'/>
<span>{{ scope.row.ornum }}</span>
</template>
</el-table-column>
<el-table-column label='字段名称' width='120'>
@@ -44,7 +106,7 @@
<el-input v-model='scope.row.remark' required></el-input>
</template>
</el-table-column>
<el-table-column label='字段类型' width='160'>
<el-table-column label='字段类型' width='140'>
<template #default='scope'>
<el-select v-model='scope.row.type' placeholder='请选择' style='width: 100%'>
<el-option :value="'string'" :label="'string'"></el-option>
@@ -56,9 +118,9 @@
</el-select>
</template>
</el-table-column>
<el-table-column label='字段长度' width='90'>
<el-table-column label='字段长度' width='80'>
<template #default='scope'>
<el-input v-model='scope.row.length' controls-position='right'/>
<el-input v-show='scope.row.type=="string"' v-model.number='scope.row.length' controls-position='right'/>
</template>
</el-table-column>
<el-table-column label='备注'>
@@ -74,7 +136,7 @@
</template>
<template #default='scope'>
<el-icon :size='22' style='top: 3px;cursor: pointer'>
<ele-CircleClose @click='form.fields.splice(scope.$index, 1)'/>
<ele-CircleClose @click='delItem(scope.$index)'/>
</el-icon>
</template>
</el-table-column>
@@ -112,6 +174,7 @@ import {getCurrentInstance, onMounted, reactive, ref, toRefs} from 'vue';
import {editInit, tabSave, tabClose} from '/@/comps/page/edit';
import {useRoute} from 'vue-router';
import {uuid} from '/@/utils/xutil';
import {ElMessage} from "element-plus";
const formRef = ref();
const route = useRoute();
@@ -119,7 +182,7 @@ const {proxy} = getCurrentInstance() as any;
const state = reactive({
url: '/ass/coge/table',
params: {path: '', query: ''},
params: {path: '', query: ''}, itemSelectedIds: [],
form: {avtag: true, fields: []} as any,
});
@@ -131,19 +194,161 @@ onMounted(async () => {
});
// 屏幕弹框逻辑
const nameChange=()=>{
let resStr=form.value.name.replace(/\_(\w)/g, (_, letter:any) => letter.toUpperCase());
resStr = resStr.slice(0, 1).toUpperCase() + resStr.slice(1);
form.value.bunam=resStr;
}
// // 字符串下划线转驼峰
// const formatToHump = (value) => {
// return value.replace(/\_(\w)/g, (_, letter:any) => letter.toUpperCase())
// }
//
// // 字符串驼峰转下划线
// const formatToLine = (value) => {
// return value.replace(/([A-Z])/g, '_$1').toLowerCase()
// }
// function asdf(arr:any){
// //判断下划线位置,下划线位置加一,调用js的大写方法toUpperCase();
// let a = arr.indexOf('_');
// let lit = arr.split('');
// lit[a+1] = lit[a+1].toUpperCase();
// arr = lit.join('');
// arr = arr.split('_').join('');
// }
//region-----字段逻辑-----
const addItem = () => {
let newOrnum = 1;
if (form.value.fields.length > 0) {
newOrnum = form.value.fields[form.value.fields.length - 1].ornum + 1;
}
if (form.value.id) {
form.value.fields.push({
id: uuid(), parid: form.value.id
id: uuid(), tabid: form.value.id,ornum: newOrnum,
})
} else {
form.value.fields.push({
id: uuid(),
id: uuid(),ornum: newOrnum,
})
}
};
//endregiton
const itemSelect = (selection: any) => {
state.itemSelectedIds = selection.map((item: any) => item.id);
};
const delItem = ($index: any) => {
form.value.fields.splice($index, 1);
for (let i = $index; i < form.value.fields.length; i++) {
form.value.fields[i].ornum = i + 1;
}
};
const delsItem = () => {
if (state.itemSelectedIds.length <= 0) {
ElMessage.warning('请选择后再进行删除');
return;
}
for (let index = form.value.fields.length - 1; index >= 0; index--) {
for (let i = 0; i < state.itemSelectedIds.length; i++) {
if (state.itemSelectedIds[i] == form.value.fields[index].id) {
form.value.fields.splice(index, 1);
break;
}
}
}
for (let i = 0; i < form.value.fields.length; i++) {
form.value.fields[i].ornum = i + 1;
}
};
const upItem = () => {
if (state.itemSelectedIds.length <= 0) {
ElMessage.warning('请选择后再进行操作');
return;
}
for (let i = 0; i <= form.value.fields.length - 1; i++) {
for (let j = 0; j < state.itemSelectedIds.length; j++) {
if (state.itemSelectedIds[j] == form.value.fields[i].id) {
if (i == 0) {
ElMessage.warning('已经是第一项');
return;
} else {
let swap = form.value.fields[i - 1];
form.value.fields[i - 1] = form.value.fields[i];
form.value.fields[i - 1].ornum--;
form.value.fields[i] = swap;
form.value.fields[i].ornum++;
}
break;
}
}
}
};
const downItem = () => {
if (state.itemSelectedIds.length <= 0) {
ElMessage.warning('请选择后再进行操作');
return;
}
for (let i = form.value.fields.length - 1; i >= 0; i--) {
for (let j = state.itemSelectedIds.length - 1; j >= 0; j--) {
if (state.itemSelectedIds[j] == form.value.fields[i].id) {
if (i == form.value.fields.length - 1) {
ElMessage.warning('已经是最后一项');
return;
} else {
let swap = form.value.fields[i + 1];
form.value.fields[i + 1] = form.value.fields[i];
form.value.fields[i + 1].ornum++;
form.value.fields[i] = swap;
form.value.fields[i].ornum--;
}
break;
}
}
}
};
const copyItem = () => {
if (state.itemSelectedIds.length <= 0) {
ElMessage.warning('请选择后再进行操作');
return;
}
for (let i = 0; i <= form.value.fields.length - 1; i++) {
for (let j = 0; j < state.itemSelectedIds.length; j++) {
if (state.itemSelectedIds[j] == form.value.fields[i].id) {
const newField: any = deepClone(form.value.fields[i]);
newField.id = uuid();
newField.edtag = false;
newField.ornum = form.value.fields.length + 1;
form.value.fields.push(newField);
break;
}
}
}
};
function deepClone(obj: any) {
if (obj === null)
return;
const newObj: any = obj.push ? [] : {};
for (const attr in obj) {
if (typeof obj[attr] == 'object')
newObj[attr] = deepClone(obj[attr]);
else
newObj[attr] = obj[attr];
}
return newObj;
}
//endregion
</script>
+3 -2
View File
@@ -10,7 +10,8 @@
</el-col>
<el-col :span='10' style='text-align: right'>
<el-button type='success' :icon='Plus' @click='tabAdd(state.url)' plain>新增</el-button>
<!-- <el-button type='info' :icon='Upload' plain>导入</el-button>-->
<el-button type='info' :icon='Upload' plain @click='toFinish'>从数据库导入</el-button>
<el-button type='info' :icon='Upload' plain @click='toFinish'>从Excel导入</el-button>
<el-button type='danger' :icon='Delete' :disabled='state.multiple' @click='listDelete(state)' plain>删除</el-button>
</el-col>
</el-row>
@@ -69,7 +70,7 @@ export default { name: 'AssCogeMain' };
<script lang='ts' setup>
import { Plus, Delete, ArrowDown, ArrowUp,Download,View} from '@element-plus/icons-vue';
import {onMounted, reactive, ref} from 'vue';
import { listQuery, listDelete, tabAdd, tabEdit, listSelect } from '/@/comps/page/index';
import { listQuery, listDelete, tabAdd, tabEdit, listSelect,toFinish} from '/@/comps/page/index';
import request from "/@/utils/request";
import Show from './show.vue';