zy-asrs-admin/src/router/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-admin/src/views/system/userLogin/edit.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-framework/src/main/resources/templates/vue/Edit.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-framework/src/main/resources/templates/vue/Index.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-asrs-admin/src/router/index.js
@@ -3,6 +3,7 @@ import MenuView from '../views/system/menu/index.vue' import LoginView from '../views/login/LoginView.vue' import UserLoginView from '../views/system/userLogin/index.vue' import UserView from '../views/system/user/index.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -36,6 +37,14 @@ keepAlive: true // 设置keepAlive,让此路由页面被缓存 }, }, { path: '/system/user', name: '用户管理', component: UserView, meta: { keepAlive: true // 设置keepAlive,让此路由页面被缓存 }, }, ] }) zy-asrs-admin/src/views/system/userLogin/edit.vue
@@ -70,7 +70,7 @@ </a-form-item> <a-form-item label="类型" name="type" style="width: 250px;" :rules="[{ required: true, message: '类型不能为空!' }]"> <a-select ref="select" v-model:value="formData.type" :options="[ <a-select v-model:value="formData.type" :options="[ { label: '登录成功', value: 0 }, { label: '登录失败', value: 1 }, { label: '退出登录', value: 2 }, zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java
@@ -120,12 +120,12 @@ break; case "Index": pass = vue; directory = frontendPrefixPath + "/src/views/" + simpleEntityName + "/"; directory = frontendPrefixPath + "/src/views/" + itemName + "/" + simpleEntityName + "/"; fileName = "index.vue"; break; case "Edit": pass = vue; directory = frontendPrefixPath + "/src/views/" + simpleEntityName + "/"; directory = frontendPrefixPath + "/src/views/" + itemName + "/" + simpleEntityName + "/"; fileName = "edit.vue"; break; default: @@ -787,18 +787,19 @@ } sb.append("',\n") .append(" width: 140,\n"); if (!Cools.isEmpty(column.getEnums())) { sb.append(" customRender: (column) => {\n"); sb.append(" let typeMap = {"); for (Map<String, Object> map : column.getEnums()) { for (Map.Entry<String, Object> entry : map.entrySet()){ sb.append(" ").append(entry.getKey()).append(": "); sb.append(" { text: '").append(entry.getValue()).append("'").append(" },\n"); } } sb.append(" }\n"); sb.append(" }\n"); } // if (!Cools.isEmpty(column.getEnums())) { // sb.append(" customRender: (column) => {\n"); // sb.append(" let typeMap = {"); // for (Map<String, Object> map : column.getEnums()) { // for (Map.Entry<String, Object> entry : map.entrySet()){ // sb.append(" ").append(entry.getKey()).append(": "); // sb.append(" { text: '").append(entry.getValue()).append("'").append(" },\n"); // } // } // sb.append(" }\n"); // sb.append(" return typeMap[column.value].text;"); // sb.append(" }\n"); // } sb.append(" },\n"); } return sb.toString(); @@ -846,8 +847,6 @@ private String createFormEditColumns() { StringBuilder sb = new StringBuilder(); int times = 0; boolean has = false;boolean init = false; for (Column column : columns) { if (column.isPrimaryKey() || column.getHumpName().equals("deleted") @@ -855,99 +854,55 @@ ) { continue; } if (times%2 == 0) { sb.append(" <ProForm.Group>\n"); has = true;init=true; } String itemType = "ProFormText"; String precision = ""; switch (column.getType()) { case "Boolean": itemType = "ProFormText"; break; case "Short": itemType = "ProFormDigit"; precision = "0"; break; case "Integer": itemType = "ProFormDigit"; precision = "0"; break; case "Long": itemType = "ProFormDigit"; precision = "0"; break; case "Double": itemType = "ProFormDigit"; precision = "2"; break; case "String": itemType = "ProFormText"; break; case "Date": itemType = "ProFormDateTimePicker"; break; default: break; } if (!Cools.isEmpty(column.getEnums())) { itemType = "ProFormSelect"; } if (!Cools.isEmpty(column.getForeignKey())) { itemType = "ProFormSelect"; } sb.append(" <").append(itemType).append("\n") .append(" name=\"").append(column.getHumpName()).append("\"\n") .append(" label=\"").append(column.getComment()).append("\"\n") .append(" colProps={{ md: 12, xl: 12 }}\n"); // 数字小数点 if (!Cools.isEmpty(precision) && Cools.isEmpty(column.getEnums())) { sb.append(" fieldProps={{ precision: ").append(precision).append(" }}\n"); } sb.append(" <a-form-item \n"); sb.append(" label=\"").append(column.getComment()).append("\" \n"); sb.append(" name=\"").append(column.getHumpName()).append("\" \n"); sb.append(" style=\"width: 250px;\" \n"); // 非空 if (column.isNotNull()) { sb.append(" rules={[{ required: true }]}\n"); sb.append(" :rules=\"[{ required: true }]\"\n"); } sb.append(" >\n"); // 枚举 if (!Cools.isEmpty(column.getEnums())) { sb.append(" options={[\n"); sb.append(" <a-select \n"); sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); sb.append(" :options=\"[\n"); for (Map<String, Object> map : column.getEnums()) { for (Map.Entry<String, Object> entry : map.entrySet()){ sb.append(" { label: '").append(entry.getValue()).append("', value: ").append(entry.getKey()).append(" },\n"); } } sb.append(" ]}\n"); sb.append(" ]\"\n"); sb.append(" >\n"); sb.append(" </a-select>\n"); } // 时间 if ("Date".equals(column.getType())) { sb.append(" transform={(value) => moment(value).toISOString()}\n"); sb.append(" <a-select \n"); sb.append(" v-model:value=\"formData.").append(column.getHumpName()).append("\" \n"); sb.append(" show-time \n"); sb.append(" format=\"YYYY-MM-DD HH:mm:ss\" \n"); sb.append(" value-format=\"YYYY-MM-DD HH:mm:ss\" \n"); sb.append(" /> \n"); } // 关联表 if (!Cools.isEmpty(column.getForeignKey())) { sb.append(" showSearch\n") .append(" debounceTime={300}\n") .append(" request={async ({ keyWords }) => {\n") .append(" const resp = await Http.doPostForm('api/").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("/query', { condition: keyWords });\n") .append(" return resp.data;\n") .append(" }}\n"); // sb.append(" showSearch\n") // .append(" debounceTime={300}\n") // .append(" request={async ({ keyWords }) => {\n") // .append(" const resp = await Http.doPostForm('api/").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("/query', { condition: keyWords });\n") // .append(" return resp.data;\n") // .append(" }}\n"); } sb.append(" />\n"); sb.append(" </a-form-item>\n"); if (times%2 != 0) { sb.append(" </ProForm.Group>\n"); has = false; } times++; } if (init && has) { sb.append(" </ProForm.Group>\n"); } return sb.toString(); } zy-asrs-framework/src/main/resources/templates/vue/Edit.txt
@@ -1,72 +1,71 @@ import React, { useState, useRef, useEffect } from 'react'; import { ProForm, ProFormDigit, ProFormText, ProFormSelect, ProFormDateTimePicker } from '@ant-design/pro-components'; import { Form, Modal } from 'antd'; import { FormattedMessage, useIntl } from '@umijs/max'; import moment from 'moment'; import Http from '@/utils/http'; <script setup> import { ref, nextTick } from 'vue'; import { get, post } from '@/utils/request.js' import { formatMessage } from '@/utils/localeUtils.js'; const Edit = (props) => { const intl = useIntl(); const [form] = Form.useForm(); const { } = props; useEffect(() => { form.resetFields(); form.setFieldsValue({ ...props.values }) }, [form, props]) const handleCancel = () => { props.onCancel(); }; const handleOk = () => { form.submit(); } const handleFinish = async (values) => { props.onSubmit({ ...values }); } return ( <> <Modal title={ Object.keys(props.values).length > 0 ? intl.formatMessage({ id: 'page.edit', defaultMessage: '编辑' }) : intl.formatMessage({ id: 'page.add', defaultMessage: '添加' }) } width={640} forceRender destroyOnClose open={props.open} onCancel={handleCancel} onOk={handleOk} > <ProForm form={form} submitter={false} onFinish={handleFinish} layout="horizontal" grid={true} > <ProFormDigit name="id" disabled hidden={true} /> @{FORMEDITCOLUMNS} </ProForm> </Modal> </> ) const submitButton = ref(null); const isSave = ref(true); const open = ref(false); const initFormData = { name: null } let formData = ref(initFormData); const treeData = ref(null); export default Edit; const emit = defineEmits(['tableReload']) const handleOk = (e) => { nextTick(() => { setTimeout(() => { submitButton.value.$el.click(); }, 100); }); }; const onFinish = values => { // console.log('Success:', values); open.value = false; post(isSave.value ? '/api/@{SIMPLEENTITYNAME}/save' : '/api/@{SIMPLEENTITYNAME}/update', formData.value).then((result) => { console.log(result); emit('tableReload', 'reload') }) }; const onFinishFailed = errorInfo => { console.log('Failed:', errorInfo); }; defineExpose({ open, formData, initFormData, treeData, isSave, }) </script> <script> export default { name: '@{TABLEDESC}-edit' } </script> <template> <div> <a-modal v-model:open="open" :title="isSave ? formatMessage('page.add', '添加') : formatMessage('page.edit', '编辑')" @ok="handleOk" style="width: 600px;"> <a-form :model="formData" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }" style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed"> @{FORMEDITCOLUMNS} <a-form-item> <a-button type="primary" html-type="submit" ref="submitButton" style="visibility: hidden;">Submit</a-button> </a-form-item> </a-form> </a-modal> </div> </template> <style></style> zy-asrs-framework/src/main/resources/templates/vue/Index.txt
@@ -118,37 +118,9 @@ <script> export default { name: '@{fullEntityName}' name: '@{TABLEDESC}' } </script> <template> <div> <EditView ref="editChild" @tableReload="handleTableReload" /> <div class="table-header"> <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '请输入')" style="width: 200px;" @search="onSearch" /> <div class="table-header-right"> <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '添加') }}</a-button> <a-button @click="handleExport">{{ formatMessage('page.export', '导出') }}</a-button> </div> </div> <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }" :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id" :pagination="{ total: tableData.total, onChange: onPageChange }" :scroll="{ y: 768, scrollToFirstRowOnChange: true }"> @{TABLECOLUMNS} <a-table-column title="类型" key="type" data-index="type" /> <a-table-column title="操作" key="oper" data-index="oper"> <template #default="{ record }"> <div style="display: flex;justify-content: space-evenly;"> <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '编辑') }}</a-button> <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '删除') }}</a-button> </div> </template> </a-table-column> </a-table> </div> </template> <template> <div>