#
Junjie
2024-07-01 4d3b655509f84e4afa334eeff20f7aab053e5900
#
5个文件已修改
303 ■■■■■ 已修改文件
zy-asrs-admin/src/router/index.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/system/userLogin/edit.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/VueGenerator.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-framework/src/main/resources/templates/vue/Edit.txt 137 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-framework/src/main/resources/templates/vue/Index.txt 30 ●●●●● 补丁 | 查看 | 原始文档 | 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>