zhangzaipeng 3 jaren geleden
commit
ece580f785

+ 49 - 0
single_table/dialog-controller.js.ftl

@@ -0,0 +1,49 @@
+import {invokeServer, msg, Scope} from 'yvan-ext'
+import _ from 'lodash'
+import vjson from "./${moduleName}.view"
+import model from "./${moduleName}.model"
+
+export default class ${moduleName} extends Scope {
+    constructor() {
+        super({model, vjson});
+    }
+
+    onLoad() {
+    }
+
+<#switch editType>
+    <#case 1>
+        <#break>
+    <#case 2>
+        add() {
+            this.refs.grid1.appendEditRow({}, 1)
+        }
+        remove() {
+            this.refs.grid1.removeEditRow()
+        }
+        save() {
+            let {newRows, modifyRows, removeRecords, rows, err} = system.getGridEditRows(this.refs.grid1)
+            if (err) {
+                return
+            }
+
+            this.setLoading(true)
+            invokeServer('/sys/dict/Dict@saveItems', {
+                newRows,
+                modifyRows,
+                removeRecords,
+            }).then(res => {
+                system.msg(res.msg)
+                this.refs.grid1.reload()
+            }).finally(() => {
+                this.setLoading(false)
+            })
+        }
+        <#break>
+    <#case 3>
+        <#break>
+    <#default>
+</#switch>
+
+}
+

+ 12 - 0
single_table/dialog-model.js.ftl

@@ -0,0 +1,12 @@
+export default {
+    data: {
+        queryGrid1: {
+    <#if queryList??>
+        <#list queryList as query>
+            ${query.columnName} : '',
+        </#list>
+    </#if>
+        }
+    }
+}
+

+ 115 - 0
single_table/dialog-view.js.ftl

@@ -0,0 +1,115 @@
+export default {
+    title: '${title}',
+    layout: 'fit',
+    referenceHolder: true,
+    items: [
+        {
+            layout: 'border',
+            items: [
+                {
+                    region: 'center',
+                    xtype: 'yvgrid',
+                    layout: 'fit',
+                    reference: 'grid1',
+                <#if pagination?? && pagination>
+                    pagination: true,
+                <#else>
+                    pagination: false,
+                </#if>
+                    selModel: {
+                        selType: 'rowmodel',
+                        mode: 'SINGLE',
+                    },
+                    dataSource: {
+                        method: 'invoke',
+                        url: '${invokeUrl}',
+                        params: {
+                    <#if queryList??>
+                        <#list queryList as query>
+                            ${query.columnName} : '{queryGrid1.${query.columnName}}',
+                        </#list>
+                    </#if>
+                        },
+                    },
+                    listeners: {
+                        selectionchange: 'scope.grid1Select'
+                    },
+                    tbar: {
+                        xtype: 'toolbar',
+                        items: [
+                            <#if editType?? && editType != 1>
+                                {
+                                    xtype: 'button',
+                                    text: '添加',
+                                    iconCls: 'x-fa fa-plus',
+                                    listeners: {
+                                        click: 'scope.add'
+                                    },
+                                },
+                                {
+                                    xtype: 'button',
+                                    text: '编辑',
+                                    iconCls: 'x-fa fa-edit',
+                                    bind: {
+                                        disabled: '{grid1.selection === null}'
+                                    },
+                                    listeners: {
+                                        click: 'scope.edit'
+                                    }
+                                },
+                            </#if>
+                            <#if delete?? && delete>
+                                {
+                                    xtype: 'button',
+                                    text: '删除',
+                                    iconCls: 'x-fa fa-remove',
+                                    bind: {
+                                        disabled: '{grid1.selection === null}'
+                                    },
+                                    listeners: {
+                                        click: 'scope.remove'
+                                    },
+                                },
+                            </#if>
+                            {
+                                xtype: 'button',
+                                text: '保存',
+                                iconCls: 'x-fa fa-save',
+                                bind: {
+                                    disabled: '{grid1.selection === null}'
+                                },
+                                listeners: {
+                                    click: 'scope.save'
+                                },
+                            },
+                        ]
+                    },
+                    columns: [
+                        {
+                            xtype: "rownumberer",
+                            header: "序号"
+                        },
+        <#if columnList??>
+            <#list columnList as column>
+                <#switch column.componentType>
+                    <#case 1>
+                        {
+                            dataIndex: "dict_type",
+                            header: "字典类别",
+                            fix: ['system.getDict("DICT_TYPE")']
+                        },
+                        <#break>
+                    <#case 2>
+                        { dataIndex: ${column.columnName}, header: ${column.chineseName}, },
+                        <#break>
+                    <#default>
+                        { dataIndex: ${column.columnName}, header: ${column.chineseName}, },
+                </#switch>
+            </#list>
+        </#if>
+                    ]
+                }
+            ]
+        }
+    ]
+}

+ 136 - 0
single_table/groovy.ftl

@@ -0,0 +1,136 @@
+package ${packagePath}
+
+import com.yvan.core.DbConv
+import com.yvan.data.jdbc.DaoFactory
+import com.yvan.model.response.Model
+import com.yvan.model.response.ModelOps
+import org.slf4j.LoggerFactory
+import static com.galaxis.wms.query.Q${camelName1(tableName)}.${camelName(tableName)}
+
+class ${moduleName} {
+
+    static def log = LoggerFactory.getLogger(${moduleName}.class)
+    static def queryDsl = DaoFactory.getQueryDSL()
+    static def mybatis = DaoFactory.getMyBatis(${moduleName}.class)
+
+    static def query(params) {
+        <#if pagination>
+            def list = mybatis.queryByPage("query", YvanExt.getQueryByPage(), params)
+        <#else>
+            def list = mybatis.queryMany("query", params)
+        </#if>
+        return Model.newSuccess(list)
+    }
+
+    static def saveItems(params) {
+        long rowEffect = 0
+        def primary_key = DbConv.asString(params.primary_key)
+
+        // 获取 queryDsl 针对某张表的 insert/update/remove 的操作对象
+        def insert = queryDsl.insert(${camelName(tableName)}) // insert 操作对象
+        def update = queryDsl.update(${camelName(tableName)}) // update 操作对象
+        def remove = queryDsl.delete(${camelName(tableName)}) // remove 操作对象
+        def i = 0  // 插入行计数
+        def u = 0  // 更新行计数
+        def d = 0  // 删除行计数
+        def msg = ""    // 异常提示文本
+
+        for (def row : params.removeRecords) {
+            // 提取 removeRecords 全部删除的数据
+            if (row._origin[primary_key] != null) {
+            // 构建删除条件,添加到 "批量执行(addBatch)" 的缓存中
+            remove.where(
+        ${camelName(tableName)}.${camelName(primary_key)}.eq(DbConv.asString(row._origin[primary_key]))
+            ).addBatch()
+                d++ // 计数
+            }
+        }
+
+        for (def row : params.newRows) {
+            // 提取 newRows 全部新加的数据
+            // 构建insert的queryDsl语句,并添加到 "批量执行(addBatch)" 的缓存中
+            insert
+<#if columnList??>
+    <#list columnList as column>
+        <#switch column.dataType>
+            <#case 1>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asString(row.${column.columnName}))
+                <#break>
+            <#case 2>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asInteger(row.${column.columnName}) as Integer)
+                <#break>
+            <#case 3>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asLong(row.${column.columnName}) as Long)
+                <#break>
+            <#case 4>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asDate(row.${column.columnName}) as Date)
+                <#break>
+            <#default>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asString(row.${column.columnName}))
+        </#switch>
+    </#list>
+</#if>
+            .addBatch()
+            i++ // 计数
+        }
+
+        for (def row : params.modifyRows) {
+            // 提取 modifyRows 全部修改的数据
+            // 构建update的queryDsl语句,并添加到 "批量执行(addBatch)" 的缓存中
+            if (row._origin.dict_value != null) {
+                update
+<#if columnList??>
+    <#list columnList as column>
+        <#switch column.dataType>
+            <#case 1>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asString(row.${column.columnName}))
+                <#break>
+            <#case 2>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asInteger(row.${column.columnName}) as Integer)
+                <#break>
+            <#case 3>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asLong(row.${column.columnName}) as Long)
+                <#break>
+            <#case 4>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asDate(row.${column.columnName}) as Date)
+                <#break>
+            <#default>
+                .set(${camelName(tableName)}.${camelName(column.columnName)}, DbConv.asString(row.${column.columnName}))
+        </#switch>
+    </#list>
+</#if>
+                    .where(
+                        // row._origin.xxx 就是修改前 xxx 属性的值
+                        ${camelName(tableName)}.${camelName(primary_key)}.eq(DbConv.asString(row._origin[primary_key]))
+                    ).addBatch()
+                u++ // 计数
+            }
+        }
+
+        // 构建提示语句
+        if (i > 0) {
+            rowEffect += insert.execute()
+            msg += ",插入" + i + "行"
+        }
+        if (u > 0) {
+            rowEffect += update.execute()
+            msg += ",更新" + u + "行"
+        }
+        if (d > 0) {
+            rowEffect += remove.execute()
+            msg += ",删除" + d + "行"
+        }
+
+        if (rowEffect <= 0) {
+            return ModelOps.newSuccess().setMsg("没有要更新的内容")
+        }
+
+        // 返回前端
+        return Model.newSuccess([
+            update   : u,
+            insert   : i,
+            delete   : d,
+            rowEffect: rowEffect
+        ]).setMsg("保存成功" + msg)
+    }
+}

+ 9 - 0
single_table/mybatis.xml.ftl

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="Dict">
+
+    <select id="query">
+        ${sql!''}
+    </select>
+
+</mapper>

+ 64 - 0
single_table/single-controller.js.ftl

@@ -0,0 +1,64 @@
+import {invokeServer, msg, Scope} from 'yvan-ext'
+import _ from 'lodash'
+import vjson from "./${moduleName}.view"
+import model from "./${moduleName}.model"
+
+export default class ${moduleName} extends Scope {
+
+    path = '${invokeUrl!""}'
+
+    constructor() {
+        super({model, vjson});
+    }
+
+    onLoad() {
+    }
+
+    grid1Select(sender, selected) {
+        this.viewModel.set('${primary_key}', selected[0]?.data?.${primary_key})
+    }
+
+<#switch editType>
+    <#case 1>
+        <#break>
+    <#case 2>
+        add() {
+            this.refs.grid1.appendEditRow({}, 1)
+        }
+        <#break>
+    <#case 3>
+        <#break>
+    <#default>
+</#switch>
+
+<#if delete>
+    remove() {
+        this.refs.grid1.removeEditRow()
+    }
+</#if>
+
+<#if editType != 1 || delete>
+    save() {
+        let {newRows, modifyRows, removeRecords, rows, err} = system.getGridEditRows(this.refs.grid1)
+        if (err) {
+            return
+        }
+
+        const primary_key = this.viewModel.get('primary_key')
+        this.setLoading(true)
+        invokeServer('${invokeUrl!''}@saveItems', {
+            primary_key,
+            newRows,
+            modifyRows,
+            removeRecords,
+        }).then(res => {
+            system.msg(res.msg)
+            this.refs.grid1.reload()
+        }).finally(() => {
+            this.setLoading(false)
+        })
+    }
+</#if>
+
+}
+

+ 16 - 0
single_table/single-model.js.ftl

@@ -0,0 +1,16 @@
+export default {
+    data: {
+        primary_key : '${primary_key}',
+        queryGrid1: {
+    <#if queryList??>
+        <#list queryList as query>
+            ${query.columnName} : '',
+        </#list>
+    </#if>
+        },
+        form : {
+
+        }
+    }
+}
+

+ 141 - 0
single_table/single-view.js.ftl

@@ -0,0 +1,141 @@
+export default {
+    title: '${menuName!"默认名称"}',
+    layout: 'fit',
+    referenceHolder: true,
+    items: [
+        {
+            layout: 'border',
+            items: [
+                {
+                    region: 'center',
+                    xtype: 'yvgrid',
+                    layout: 'fit',
+                    reference: 'grid1',
+                <#if pagination?? && pagination>
+                    pagination: true,
+                <#else>
+                    pagination: false,
+                </#if>
+                    selModel: {
+                        selType: 'rowmodel',
+                        mode: 'SINGLE',
+                    },
+                    dataSource: {
+                        method: 'invoke',
+                        url: '${invokeUrl!""}@query',
+                        params: {
+                    <#if queryList??>
+                        <#list queryList as query>
+                            ${query.columnName} : '{queryGrid1.${query.columnName}}',
+                        </#list>
+                    </#if>
+                        },
+                    },
+                    <#if editType != 1 || delete>
+                    listeners: {
+                        selectionchange: 'scope.grid1Select'
+                    },
+                    </#if>
+                    tbar: {
+                        xtype: 'toolbar',
+                        items: [
+                        <#switch editType>
+                            <#case 1>
+                                <#break>
+                            <#case 2>
+                            {
+                                xtype: 'button',
+                                text: '添加',
+                                iconCls: 'x-fa fa-plus',
+                                listeners: {
+                                    click: 'scope.add'
+                                },
+                            },
+                                <#break>
+                            <#case 3>
+                            {
+                                xtype: 'button',
+                                text: '添加',
+                                iconCls: 'x-fa fa-plus',
+                                listeners: {
+                                    click: 'scope.add'
+                                },
+                            },
+                            {
+                                xtype: 'button',
+                                text: '编辑',
+                                iconCls: 'x-fa fa-edit',
+                                bind: {
+                                    disabled: '{grid1.selection === null}'
+                                },
+                                listeners: {
+                                    click: 'scope.edit'
+                                }
+                            },
+                            <#break>
+                            <#default>
+                        </#switch>
+                        <#if delete?? && delete>
+                            {
+                                xtype: 'button',
+                                text: '删除',
+                                iconCls: 'x-fa fa-remove',
+                                bind: {
+                                    disabled: '{grid1.selection === null}'
+                                },
+                                listeners: {
+                                    click: 'scope.remove'
+                                },
+                            },
+                        </#if>
+                        <#if editType != 1 || delete>
+                            {
+                                xtype: 'button',
+                                text: '保存',
+                                iconCls: 'x-fa fa-save',
+                                bind: {
+                                },
+                                listeners: {
+                                    click: 'scope.save'
+                                },
+                            },
+                        </#if>
+                        ]
+                    },
+                    columns: [
+                        {
+                            xtype: "rownumberer",
+                            header: "序号"
+                        },
+        <#if columnList??>
+            <#list columnList as column>
+                <#switch column.componentType>
+                    <#case 1>
+                        { dataIndex: "${column.columnName}", header: "${column.chineseName}", fix: ['system.getDict("${column.dictKey}")'],
+                        <#break>
+                    <#case 2>
+                        { dataIndex: "${column.columnName}", header: "${column.chineseName}",
+                        <#break>
+                    <#default>
+                        { dataIndex: "${column.columnName}", header: "${column.chineseName}",
+                </#switch>
+
+                <#if editorList?seq_contains(column.columnName)>
+                    editor: {
+                        <#if column.componentType == 1>
+                            xtype : 'combo',
+                            fix: ['system.getDict("DICT_TYPE")']
+                        <#elseif column.componentType == 2>
+                            xtype : 'textfield',
+                        </#if>
+                    }
+                </#if>
+                },
+            </#list>
+        </#if>
+                    ]
+                }
+            ]
+        }
+    ]
+}

+ 18 - 0
single_table/single_form.json

@@ -0,0 +1,18 @@
+{
+  "menuName": "字典管理",
+  "moduleName": "Dict",
+  "sql": "",
+  "columns": [
+    {"columnName": "dict_code","chineseName": "字典编码", "componentType": 2, "columnType": 3},
+    {"columnName": "dict_value","chineseName": "字典描述", "componentType": 2, "columnType": 3},
+    {"columnName": "dict_type","chineseName": "字典类别", "componentType": 1, "columnType": 2, "dictKey": "DICT_TYPE"}
+  ],
+  "pagination": false,
+  "editType": 2,
+  "delete": true,
+  "deleteTips" : "真的要删除?",
+  "deleteColumn" : "dict_code",
+  "packagePath": "",
+  "fileSavePath": "",
+  "invokeUrl": ""
+}