Explorar el Código

生成代码20191011

suochencheng hace 6 años
padre
commit
ffc0fb86af

+ 19 - 0
src/main/java/com/izouma/zhumj/dto/gen/TableField.java

@@ -2,12 +2,14 @@ package com.izouma.zhumj.dto.gen;
 
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Data;
 
 @Data
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class TableField {
 
     /**
@@ -135,10 +137,27 @@ public class TableField {
      */
     private String sqlType;
 
+    /**
+     * 下拉框类型 1 枚举, 2 接口, 3 读表
+     */
     private String apiFlag;
 
+    /**
+     * 接口方法/表名
+     */
+    private String optionsMethod;
+
+    /**
+     * 选项值,在枚举是用该值解析
+     */
     private String optionsValue;
 
 
+    /**
+     * 显示值
+     */
+    private String optionsLabel;
+
+
 }
 

+ 9 - 0
src/main/java/com/izouma/zhumj/repo/HotelInfoRepo.java

@@ -0,0 +1,9 @@
+package com.izouma.zhumj.repo;
+
+import com.izouma.zhumj.domain.HotelInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface HotelInfoRepo extends JpaRepository<HotelInfo, Long>, JpaSpecificationExecutor<HotelInfo> {
+
+}

+ 14 - 0
src/main/java/com/izouma/zhumj/service/HotelInfoService.java

@@ -0,0 +1,14 @@
+package com.izouma.zhumj.service;
+
+import com.izouma.zhumj.domain.HotelInfo;
+import com.izouma.zhumj.repo.HotelInfoRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class HotelInfoService {
+
+    @Autowired
+    private HotelInfoRepo hotelInfoRepo;
+
+}

+ 62 - 0
src/main/java/com/izouma/zhumj/web/HotelInfoController.java

@@ -0,0 +1,62 @@
+package com.izouma.zhumj.web;
+import com.izouma.zhumj.domain.HotelInfo;
+import com.izouma.zhumj.service.HotelInfoService;
+import com.izouma.zhumj.dto.PageQuery;
+import com.izouma.zhumj.exception.BusinessException;
+import com.izouma.zhumj.repo.HotelInfoRepo;
+import com.izouma.zhumj.utils.ObjUtils;
+import com.izouma.zhumj.utils.excel.ExcelUtils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/hotelInfo")
+public class HotelInfoController extends BaseController {
+    /*generatedStart*/
+    @Autowired
+    private HotelInfoService hotelInfoService;
+
+    @Autowired
+    private HotelInfoRepo hotelInfoRepo;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    @PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public HotelInfo save(@RequestBody HotelInfo record) {
+        if (record.getId() != null) {
+            HotelInfo orig = hotelInfoRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return hotelInfoRepo.save(record);
+        }
+        return hotelInfoRepo.save(record);
+    }
+
+
+    @PreAuthorize("hasRole('ADMIN')")
+    @GetMapping("/all")
+    public Page<HotelInfo> all(PageQuery pageQuery) {
+        return hotelInfoRepo.findAll(toSpecification(pageQuery,HotelInfo.class), toPageRequest(pageQuery));
+    }
+
+    @GetMapping("/get/{id}")
+    public HotelInfo get(@PathVariable Long id) {
+        return hotelInfoRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<HotelInfo> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+    /*generatedEnd*/
+}
+

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
src/main/resources/genjson/HotelInfo.json


+ 11 - 1
src/main/vue/src/router.js

@@ -241,6 +241,16 @@ const router = new Router({
                     path: '/renewalList',
                     name: 'RenewalList',
                     component: () => import(/* webpackChunkName: "renewalEdit" */ '@/views/sale/RenewalList.vue')
+                },
+                {
+                    path: '/hotelInfoEdit',
+                    name: 'HotelInfoEdit',
+                    component: () => import(/* webpackChunkName: "hotelInfoList" */ '@/views/HotelInfoEdit.vue')
+                },
+                {
+                    path: '/hotelInfoList',
+                    name: 'HotelInfoList',
+                    component: () => import(/* webpackChunkName: "hotelInfoEdit" */ '@/views/HotelInfoList.vue')
                 }
                 /**INSERT_LOCATION**/,
             ],
@@ -290,4 +300,4 @@ router.beforeEach((to, from, next) => {
     }
 });
 
-export default router;
+export default router;

+ 6 - 62
src/main/vue/src/views/GenCodeEdit.vue

@@ -284,26 +284,14 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item label="显示">
-                    <el-select
-                        v-if="selectField.optionsMethod&&selectField.apiFlag==='2'"
-                        filterable clearable placeholder="显示"
-                        v-model="selectField.optionsLabel" class="filter-item">
-                        <el-option
-                            v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')"
-                            :label="item" :value="item" :key="item">
-                        </el-option>
-                    </el-select>
+                    <el-input
+                        v-model="selectField.optionsLabel">
+                    </el-input>
                 </el-form-item>
                 <el-form-item label="选项">
-                    <el-select
-                        v-if="selectField.optionsMethod&&selectField.apiFlag==='2'"
-                        filterable clearable placeholder="选项"
-                        v-model="selectField.optionsValue" class="filter-item">
-                        <el-option
-                            v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')"
-                            :label="item" :value="item" :key="item">
-                        </el-option>
-                    </el-select>
+                    <el-input
+                        v-model="selectField.optionsValue">
+                    </el-input>
                 </el-form-item>
             </el-form>
             <span slot="footer" class="dialog-footer">
@@ -312,50 +300,6 @@
             </span>
         </el-dialog>
 
-        <el-dialog title="表选项" :visible.sync="showTableSelectDialog">
-            <el-form :model="selectField" label-position="right"
-                label-width="80px">
-                <el-form-item label="表名">
-                    <el-select placeholder="表名" clearable filterable
-                        v-model="selectField.optionsMethod"
-                        @change="changeOptionsTableName" class="filter-item">
-                        <el-option v-for="item in optionsTableList"
-                            :label="item" :value="item" :key="item"></el-option>
-                    </el-select>
-                </el-form-item>
-
-                <el-form-item label="显示">
-                    <el-select
-                        v-if="selectField.optionsMethod&&selectField.apiFlag==='3'"
-                        filterable clearable placeholder="显示"
-                        v-model="selectField.optionsLabel" class="filter-item">
-                        <el-option v-for="item in optionsFields"
-                            :label="item.name" :value="item.name"
-                            :key="item.name">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
-
-                <el-form-item label="选项">
-                    <el-select
-                        v-if="selectField.optionsMethod&&selectField.apiFlag==='3'"
-                        filterable clearable placeholder="选项"
-                        v-model="selectField.optionsValue" class="filter-item">
-                        <el-option v-for="item in optionsFields"
-                            :label="item.name" :value="item.name"
-                            :key="item.name">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item>
-
-                </el-form-item>
-            </el-form>
-            <span slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="selectMappingSubmit">确定
-                </el-button>
-            </span>
-        </el-dialog>
         <gen-option-dialog :visible.sync="showGenOptionsDialog"
             v-model="tempRow.optionsValue"></gen-option-dialog>
     </div>

+ 155 - 0
src/main/vue/src/views/HotelInfoEdit.vue

@@ -0,0 +1,155 @@
+<template>
+    <div class="edit-view">
+        <el-form :model="formData" :rules="rules" ref="form" label-width="120px" label-position="right" size="small"
+                 style="max-width: 500px;">
+                            <el-form-item prop="hotelName" label="门店名称">
+                            <el-input v-model="formData.hotelName"></el-input>
+                </el-form-item>
+                <el-form-item prop="city" label="城市">
+                            <el-input v-model="formData.city"></el-input>
+                </el-form-item>
+                <el-form-item prop="propertyCompanyId" label="物业公司">
+                            <el-select v-model="formData.propertyCompanyId" clearable filterable  placeholder="请选择">
+                                <el-option
+                                        v-for="item in propertyCompanyIdOptions"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                </el-option>
+                            </el-select>
+                </el-form-item>
+                <el-form-item prop="address" label="地址">
+                            <el-input v-model="formData.address"></el-input>
+                </el-form-item>
+                <el-form-item prop="openingTime" label="开业时间">
+                            <el-date-picker
+                                    v-model="formData.openingTime"
+                                    type="datetime"
+                                    value-format="yyyy-MM-dd HH:mm:ss"
+                                    placeholder="选择日期时间">
+                            </el-date-picker>
+                </el-form-item>
+                <el-form-item prop="cooperationType" label="经营类型">
+                            <el-input v-model="formData.cooperationType"></el-input>
+                </el-form-item>
+                <el-form-item prop="hotelStatus" label="状态">
+                            <el-input v-model="formData.hotelStatus"></el-input>
+                </el-form-item>
+                <el-form-item prop="principal" label="负责人">
+                            <el-input v-model="formData.principal"></el-input>
+                </el-form-item>
+                <el-form-item prop="telephone" label="联系电话">
+                            <el-input v-model="formData.telephone"></el-input>
+                </el-form-item>
+                <el-form-item prop="fax" label="传真">
+                            <el-input v-model="formData.fax"></el-input>
+                </el-form-item>
+                <el-form-item prop="postalCode" label="邮编">
+                            <el-input v-model="formData.postalCode"></el-input>
+                </el-form-item>
+                <el-form-item prop="shortName" label="简称">
+                            <el-input v-model="formData.shortName"></el-input>
+                </el-form-item>
+                <el-form-item prop="shortCode" label="简码">
+                            <el-input v-model="formData.shortCode"></el-input>
+                </el-form-item>
+                <el-form-item prop="remark" label="备注">
+                            <el-input v-model="formData.remark"></el-input>
+                </el-form-item>
+                <el-form-item prop="enabled" label="enabled">
+                            <el-switch v-model="formData.enabled"></el-switch>
+                </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="$store.state.fetchingData"
+                           type="primary">保存</el-button>
+                <el-button @click="onDelete" :loading="$store.state.fetchingData"
+                           type="danger" v-if="formData.id">删除
+                </el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    export default {
+        name: 'HotelInfoEdit',
+        created() {
+            if (this.$route.query.id) {
+                this.$http
+                    .get('hotelInfo/get/'+this.$route.query.id)
+                    .then(res => {
+                        this.formData = res;
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
+            }
+            this.$http.get({
+                url: '/propertyCompany/all'
+            }).then(res => {
+                if (res.length > 0) {
+                    res.forEach(item => {
+                        this.propertyCompanyIdOptions.push({
+                            label: item.companyName,
+                            value: item.id
+                        });
+                    })
+                }
+            }).catch(e => {
+                console.log(e);
+            });
+        },
+        data() {
+            return {
+                saving: false,
+                formData: {
+                },
+                rules: {
+                },
+                            propertyCompanyIdOptions:[],
+            }
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.submit();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            submit() {
+                let data = {...this.formData};
+
+
+                this.$http
+                    .post('/hotelInfo/save', data, {body: 'json'})
+                    .then(res => {
+                        this.$message.success('成功');
+                        this.$router.go(-1);
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
+            },
+            onDelete() {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post('/hotelInfo/del', {id: this.formData.id})
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                }).catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 284 - 0
src/main/vue/src/views/HotelInfoList.vue

@@ -0,0 +1,284 @@
+<template>
+    <div  class="list-view">
+        <div class="filters-container">
+            <el-input placeholder="输入关键字" v-model="search" clearable
+                      class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" icon="el-icon-search"
+                       class="filter-item">搜索
+            </el-button>
+            <el-button @click="addRow" type="primary" icon="el-icon-plus"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="download" type="primary" icon="el-icon-download"
+                       :loading="downloading" class="filter-item">导出EXCEL
+            </el-button>
+        </div>
+        <el-table :data="tableData" row-key="id" ref="table"
+                  header-row-class-name="table-header-row"
+                  header-cell-class-name="table-header-cell"
+                  row-class-name="table-row" cell-class-name="table-cell">
+            <el-table-column v-if="multipleMode" align="center" type="selection"
+                             width="50">
+            </el-table-column>
+            <el-table-column prop="id" label="ID" width="100">
+                <template slot="header" slot-scope="{column}">
+                    <sortable-header :column="column" :current-sort="sort"
+                                     @changeSort="changeSort">
+                    </sortable-header>
+                </template>
+            </el-table-column>
+                                <el-table-column prop="hotelName" label="门店名称"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="city" label="城市"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="propertyCompanyId" label="物业公司"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="address" label="地址"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="openingTime" label="开业时间"
+                            :formatter="datetimeFormatter"
+                        >
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="cooperationType" label="经营类型"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="hotelStatus" label="状态"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="principal" label="负责人"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="telephone" label="联系电话"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="fax" label="传真"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="postalCode" label="邮编"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="shortName" label="简称"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="shortCode" label="简码"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="remark" label="备注"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="enabled" label="enabled"
+>
+                        <template slot="header" slot-scope="{column}">
+                            <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
+                            </sortable-header>
+                        </template>
+                            <template slot-scope="{row}">
+                                <el-tag :type="row.enabled?'':'info'">{{row.enabled}}</el-tag>
+                            </template>
+                    </el-table-column>
+            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150">
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode"
+                           @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div>
+            <el-pagination background @size-change="onSizeChange"
+                           @current-change="onCurrentChange" :current-page="page"
+                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
+                           layout="total, sizes, prev, pager, next, jumper"
+                           :total="totalElements">
+            </el-pagination>
+        </div>
+
+    </div>
+</template>
+<script>
+    import { mapState } from "vuex";
+    import pageableTable from "@/mixins/pageableTable";
+
+    export default {
+        name: 'HotelInfoList',
+        mixins: [pageableTable],
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                multipleMode: false,
+                search: "",
+                url: "/hotelInfo/all",
+                downloading: false
+            }
+        },
+        computed: {
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            beforeGetData() {
+                if (this.search) {
+                    return { search: this.search };
+                }
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            addRow() {
+                this.$router.push({
+                    path: "/hotelInfoEdit",
+                    query: {
+                    ...this.$route.query
+                    }
+                });
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: "/hotelInfoEdit",
+                    query: {
+                    id: row.id
+                    }
+                });
+            },
+            download() {
+                this.downloading = true;
+                this.$axios
+                    .get("/hotelInfo/excel", { responseType: "blob" })
+                    .then(res => {
+                        console.log(res);
+                        this.downloading = false;
+                        const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                        const link = document.createElement("a");
+                        link.href = downloadUrl;
+                        link.setAttribute(
+                            "download",
+                            res.headers["content-disposition"].split("filename=")[1]
+                        );
+                        document.body.appendChild(link);
+                        link.click();
+                        link.remove();
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.downloading = false;
+                        this.$message.error(e.error);
+                    });
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post({
+                        url: '/hotelInfo/del',
+                        data: {id: row.id}
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+.pageable-list {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    .el-table {
+        flex-grow: 1;
+        flex-basis: 0;
+    }
+}
+</style>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio