| @@ -0,0 +1,264 @@ | |||
| <template> | |||
| <div> | |||
| <v-dialog | |||
| v-model="progress" | |||
| persistent | |||
| width="300" | |||
| > | |||
| <v-card | |||
| color="primary" | |||
| dark | |||
| > | |||
| <v-card-text> | |||
| 載入中... | |||
| <v-progress-linear | |||
| indeterminate | |||
| color="white" | |||
| class="mb-0" | |||
| ></v-progress-linear> | |||
| </v-card-text> | |||
| </v-card> | |||
| </v-dialog> | |||
| <v-data-table class="" :headers="headers" :items="items" | |||
| disable-sort | |||
| fixed-header | |||
| :footer-props="{'items-per-page-options': [30, 40, 50, 60]}" | |||
| :items-per-page="30"> | |||
| <template v-slot:top> | |||
| <v-toolbar flat> | |||
| <v-toolbar-title class="title font-weight-bold">帳號管理</v-toolbar-title> | |||
| <v-divider | |||
| class="mx-4" | |||
| inset | |||
| vertical | |||
| /> | |||
| <v-spacer/> | |||
| <!--新增對話--> | |||
| <v-dialog | |||
| v-model="dialogInsert" | |||
| @click:outside="close" | |||
| max-width="500" | |||
| > | |||
| <template v-slot:activator="{ on, attrs }"> | |||
| <v-btn | |||
| color="white" | |||
| class="primary" | |||
| v-bind="attrs" | |||
| v-on="on" | |||
| icon | |||
| > | |||
| <v-icon>mdi-plus</v-icon> | |||
| </v-btn> | |||
| </template> | |||
| <v-card> | |||
| <v-card-title> | |||
| <span class="headline font-weight-bold">新增</span> | |||
| </v-card-title> | |||
| <v-card-text> | |||
| <v-container> | |||
| <v-text-field v-model="insertItem.id" outlined rounded label="員工編號" /> | |||
| <v-text-field v-model="insertItem.username" outlined rounded label="姓名" /> | |||
| <v-select v-model="insertItem.department" outlined rounded :items="departments" label="部門"/> | |||
| <v-text-field v-model="insertItem.account" outlined rounded label="帳號" /> | |||
| <v-text-field v-model="insertItem.pwd" outlined rounded label="密碼" /> | |||
| </v-container> | |||
| </v-card-text> | |||
| <v-card-actions> | |||
| <v-spacer></v-spacer> | |||
| <v-btn | |||
| color="blue darken-1" | |||
| text | |||
| @click="close" | |||
| > | |||
| 取消 | |||
| </v-btn> | |||
| <v-btn | |||
| color="blue darken-1" | |||
| text | |||
| @click="checkIdAndAccountRepeat(insertItem, '新增')" | |||
| > | |||
| 新增 | |||
| </v-btn> | |||
| </v-card-actions> | |||
| </v-card> | |||
| </v-dialog> | |||
| </v-toolbar> | |||
| </template> | |||
| <template v-slot:item.actions="{ item }"> | |||
| <div class="d-flex"> | |||
| <v-btn | |||
| icon | |||
| @click="openDialogModify(item)" | |||
| > | |||
| <v-icon>mdi-pencil</v-icon> | |||
| </v-btn> | |||
| <v-icon | |||
| small | |||
| @click="deleteOne(item)" | |||
| > | |||
| mdi-delete | |||
| </v-icon> | |||
| </div> | |||
| </template> | |||
| </v-data-table> | |||
| <!--修改對話--> | |||
| <v-dialog | |||
| v-model="dialogModify" | |||
| @click:outside="close" | |||
| :retain-focus="false" | |||
| max-width="500" | |||
| > | |||
| <v-card> | |||
| <v-card-title> | |||
| <span class="headline font-weight-bold">修改</span> | |||
| </v-card-title> | |||
| <v-card-text> | |||
| <v-container> | |||
| <v-text-field v-model="modifyItem.id" outlined rounded label="員工編號" /> | |||
| <v-text-field v-model="modifyItem.username" outlined rounded label="姓名" /> | |||
| <v-select v-model="modifyItem.department" outlined rounded :items="departments" label="部門"/> | |||
| <v-text-field v-model="modifyItem.account" outlined rounded label="帳號" /> | |||
| <v-text-field v-model="modifyItem.pwd" outlined rounded label="密碼" /> | |||
| </v-container> | |||
| </v-card-text> | |||
| <v-card-actions> | |||
| <v-spacer></v-spacer> | |||
| <v-btn | |||
| color="blue darken-1" | |||
| text | |||
| @click="close" | |||
| > | |||
| 取消 | |||
| </v-btn> | |||
| <v-btn | |||
| color="blue darken-1" | |||
| text | |||
| @click="checkIdAndAccountRepeat(modifyItem, '修改')" | |||
| > | |||
| 修改 | |||
| </v-btn> | |||
| </v-card-actions> | |||
| </v-card> | |||
| </v-dialog> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| name: '', | |||
| data() { | |||
| return { | |||
| fullHeight: 0, | |||
| dialogInsert: false, | |||
| dialogModify: false, | |||
| headers: [{'text': '', 'value': 'actions', fixed: true, sortable: false}, | |||
| {'text': '員工編號', 'value': 'id'}, | |||
| {'text': '姓名', 'value': 'username'}, | |||
| {'text': '部門', 'value': 'department'}, | |||
| // {'text': '型態', 'value': 'type'}, | |||
| {'text': '帳號', 'value': 'account'}, | |||
| {'text': '密碼', 'value': 'pwd'}], | |||
| items: [], | |||
| departments: [], | |||
| insertItem: { | |||
| account: "", | |||
| department: "", | |||
| level: "", | |||
| pwd: "", | |||
| username: "", | |||
| id: "", | |||
| }, | |||
| modifyItem: { | |||
| account: "", | |||
| department: "", | |||
| level: "", | |||
| pwd: "", | |||
| username: "", | |||
| id: "", | |||
| }, | |||
| progress: false, | |||
| } | |||
| }, | |||
| async mounted() { | |||
| this.progress = true; | |||
| this.getUsers(); | |||
| // this.getSelectItem(); | |||
| this.fullHeight = window.innerHeight; | |||
| window.onresize = () => { | |||
| this.fullHeight = window.innerHeight; | |||
| }; | |||
| this.getDepartments(); | |||
| }, | |||
| computed: { | |||
| }, | |||
| watch: { | |||
| }, | |||
| methods: { | |||
| openDialogModify(item) { | |||
| console.log(item.department); | |||
| this.modifyItem.username = item.username; | |||
| this.modifyItem.department = item.department; | |||
| this.modifyItem.account = item.account; | |||
| this.modifyItem.pwd = item.pwd; | |||
| this.modifyItem.level = item.level; | |||
| this.modifyItem.id = item.id; | |||
| this.dialogModify = true; | |||
| }, | |||
| async getUsers() { | |||
| await this.$axios.get(`/account/accounts`) | |||
| .then((resp) => { | |||
| this.items = []; | |||
| this.items = resp.data.data; | |||
| this.progress = false; | |||
| }); | |||
| }, | |||
| async getDepartments() { | |||
| await this.$axios.get(`/account/departments`).then((resp) => { | |||
| this.departments = resp.data.data; | |||
| }); | |||
| }, | |||
| checkIdAndAccountRepeat(item, next) { | |||
| this.$axios.get(`/account/checkIdAndAccountRepeat?id=${item.id}&&account=${item.account}`).then((resp) => { | |||
| if (resp.data.code !== 200) { | |||
| alert(resp.data.message); | |||
| } else { | |||
| if (next === '新增') { | |||
| this.insertOne(); | |||
| } else { | |||
| this.modifyOne(); | |||
| } | |||
| } | |||
| }); | |||
| }, | |||
| insertOne() { | |||
| this.$axios.post(`/account/account`, this.insertItem).then(() => { | |||
| delete this.insertItem.tablename; | |||
| this.getUsers(); | |||
| this.close(); | |||
| } | |||
| ); | |||
| }, | |||
| modifyOne() { | |||
| this.$axios.put(`/account/account`, this.modifyItem).then(() => { | |||
| this.getUsers(); | |||
| this.close(); | |||
| } | |||
| ); | |||
| }, | |||
| deleteOne(item) { | |||
| let yes = confirm('確定刪除'); | |||
| if (yes) { | |||
| this.$axios.delete(`/account/account?id=${item.id}`).then(() => { | |||
| this.getUsers(); | |||
| alert('已刪除'); | |||
| }); | |||
| } | |||
| }, | |||
| close() { | |||
| this.dialogInsert = false; | |||
| this.dialogModify = false; | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| @@ -514,8 +514,8 @@ | |||
| {'text': '文字框或選項', 'value': 'isselect'}, | |||
| {'text': '順序', 'value': 'index'}, | |||
| {'text': '必填', 'value': 'isrequire'}, | |||
| {'text': '可匯出', 'value': 'isexport'}, | |||
| {'text': '可搜尋', 'value': 'issearch'}, | |||
| // {'text': '可匯出', 'value': 'isexport'}, | |||
| // {'text': '可搜尋', 'value': 'issearch'}, | |||
| ], | |||
| allCols: [], | |||
| insertColItem: { | |||
| @@ -689,6 +689,8 @@ | |||
| }); | |||
| }, | |||
| insertCol() { | |||
| this.insertColItem.issearch = 'true'; | |||
| this.insertColItem.isexport = 'true'; | |||
| for (const key in this.insertColItem) { | |||
| if (this.insertColItem[key] === '' && key !== 'tablename') { | |||
| console.log(key); | |||
| @@ -180,25 +180,6 @@ | |||
| ], | |||
| } | |||
| }, | |||
| // data: () => ({ | |||
| // dialog: false, | |||
| // drawer: null, | |||
| // error: false, | |||
| // message: "", | |||
| // items: [{text: '資訊資產群組', route: '/asset_group'}], | |||
| // username: localStorage.getItem('username'), | |||
| // this1: this, | |||
| // menuitems: [ | |||
| // { | |||
| // icon: 'mdi-exit-to-app', | |||
| // href: '#', | |||
| // title: '登出', | |||
| // click: () => { | |||
| // this.logout(); | |||
| // }, | |||
| // }, | |||
| // ], | |||
| // }), | |||
| created() { | |||
| this.$root.$on('showError', (message) => { | |||
| this.error = true; | |||
| @@ -225,7 +206,11 @@ | |||
| route.text = item.descript; | |||
| route.route = `/inventory/${item.tablename}`; | |||
| this.items.push(route); | |||
| }); | |||
| if (localStorage.getItem('level') === '0') { | |||
| this.items.push({'text': '帳號管理', 'route': '/account'}); | |||
| } | |||
| console.log(this.items); | |||
| }); | |||
| }, | |||
| @@ -1,220 +0,0 @@ | |||
| <template> | |||
| <div> | |||
| <div> | |||
| <v-row justify="center" dense class="mt-1"> | |||
| <v-col cols="4"> | |||
| <v-text-field outlined rounded> | |||
| <template v-slot:append> | |||
| <v-icon @click="show = true">mdi-magnify</v-icon> | |||
| </template> | |||
| </v-text-field> | |||
| </v-col> | |||
| </v-row> | |||
| <v-toolbar flat v-if="show === true"> | |||
| <v-toolbar-title>搜尋結果</v-toolbar-title> | |||
| <v-tabs | |||
| v-model='currentTab' | |||
| centered | |||
| show-arrows | |||
| style="width: 80%" | |||
| > | |||
| <v-tab | |||
| v-for='item in assertGroup' | |||
| :key='item.text' | |||
| class=' font-weight-bold' | |||
| > | |||
| <v-icon small>{{ item.text }}</v-icon> | |||
| </v-tab> | |||
| <v-tabs-items v-model='currentTab'> | |||
| <v-tab-item | |||
| v-for='cols in inventoryItems' | |||
| :key='cols.index' | |||
| > | |||
| <v-data-table | |||
| :items='cols' | |||
| :headers='headers' | |||
| hide-default-footer | |||
| > | |||
| </v-data-table> | |||
| </v-tab-item> | |||
| </v-tabs-items> | |||
| </v-tabs> | |||
| <v-btn | |||
| color="white" | |||
| class="primary mr-5" | |||
| @click="exportFile" | |||
| icon | |||
| > | |||
| <v-icon >mdi-file-export-outline</v-icon> | |||
| </v-btn> | |||
| </v-toolbar> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| name: '', | |||
| data() { | |||
| return { | |||
| dialogInsert: false, | |||
| dialogModify: false, | |||
| dialogNewAssertGroup: false, | |||
| // dialogSearch: false, | |||
| title: '資訊資產群組', | |||
| headers: [ | |||
| {'text': '中文名稱', 'value': 'descript'}, | |||
| {'text': '資料庫欄位名稱', 'value': 'colname'}, | |||
| {'text': '型態', 'value': 'type'}, | |||
| {'text': '文字框或選項', 'value': 'select'}, | |||
| {'text': '順序', 'value': 'index'}, | |||
| {'text': '必填', 'value': 'require'}, | |||
| {'text': '', 'value': 'actions', sortable: false} | |||
| ], | |||
| inventoryItems: [], | |||
| insertCol: { | |||
| 'tablename': '', | |||
| 'colname': '', | |||
| 'level': null, | |||
| 'descript': '', | |||
| 'type': '', | |||
| 'select': '', | |||
| 'search': '', | |||
| 'export': '', | |||
| 'require': '' | |||
| }, | |||
| modifyCol: {}, | |||
| assertGroup: [], | |||
| currentTab: 0, | |||
| types: [], | |||
| // selectItem: {}, | |||
| // searchItem: {}, | |||
| assertGroupDescript: '', | |||
| assertGroupTablename: '', | |||
| show: false, | |||
| } | |||
| }, | |||
| async mounted() { | |||
| // this.getSelectItem(); | |||
| this.getTabs(); | |||
| this.getTypes(); | |||
| this.inventoryItems = []; | |||
| this.getInventoryItem(); | |||
| }, | |||
| computed: {}, | |||
| watch: { | |||
| currentTab() { | |||
| // // this.getTabs(); | |||
| console.log(this.assertGroup[this.currentTab].value); | |||
| this.getTypes(); | |||
| this.getInventoryItem(); | |||
| }, | |||
| }, | |||
| methods: { | |||
| log(col) { | |||
| console.log(col); | |||
| }, | |||
| oninput(item, key, val) { | |||
| this.$set(item, key, val); | |||
| }, | |||
| getTabs() { | |||
| this.$axios.get(`/assert/assertGroups`).then((resp) => { | |||
| resp.data.data.forEach((item) => { | |||
| let header = {'text': null, 'value': null}; | |||
| header.text = item.descript; | |||
| header.value = item.tablename; | |||
| this.assertGroup.push(header); | |||
| }); | |||
| // this.assertGroup.push({'text': 'mdi-plus', 'value': ''}); | |||
| }); | |||
| }, | |||
| getTypes() { | |||
| const tablename = this.assertGroup[this.currentTab] ? this.assertGroup[this.currentTab].value : 'hardware'; | |||
| this.$axios.get(`/assert/Types?tablename=${tablename}`).then((resp) => { | |||
| this.types = resp.data.data; | |||
| }); | |||
| }, | |||
| getInventoryItem() { | |||
| const tablename = this.assertGroup[this.currentTab] ? this.assertGroup[this.currentTab].value : 'hardware'; | |||
| this.$axios.get(`/assert/InventoryItems?tablename=${tablename}`).then((resp) => { | |||
| this.inventoryItems = resp.data.data; | |||
| }); | |||
| }, | |||
| insertOne() { | |||
| this.insertItem.tablename = this.tablename; | |||
| this.$axios.post(`/inventory?`, this.insertItem).then(() => { | |||
| delete this.insertItem.tablename; | |||
| this.getInventories(); | |||
| this.close(); | |||
| } | |||
| ); | |||
| }, | |||
| close() { | |||
| this.dialogInsert = false; | |||
| this.dialogModify = false; | |||
| this.dialogNewAssertGroup = false; | |||
| }, | |||
| isDisabled(key) { | |||
| const disabledKey = ['id']; | |||
| return disabledKey.indexOf(key) >= 0; | |||
| }, | |||
| isTextField(key) { | |||
| return this.select.indexOf(key) < 0; | |||
| }, | |||
| isSelect(key) { | |||
| return this.select.indexOf(key) >= 0; | |||
| }, | |||
| isRequire(key) { | |||
| return this.required.indexOf(key) >= 0; | |||
| }, | |||
| getSelectItem() { | |||
| this.$axios.get(`/selectItem?tablename=${this.tablename}`).then((resp) => { | |||
| this.selectItem = resp.data.data; | |||
| }); | |||
| }, | |||
| modifyOne(item) { | |||
| item.tablename = this.tablename; | |||
| this.$axios.put(`/inventory?`, item).then(() => { | |||
| this.getInventories(); | |||
| this.close(); | |||
| } | |||
| ); | |||
| }, | |||
| deleteOne(item) { | |||
| let yes = confirm('確定刪除'); | |||
| if (yes) { | |||
| this.$axios.delete(`/deleteOne?tablename=${this.tablename}&&id=${item.id}`).then(() => { | |||
| this.getInventories(); | |||
| alert('已刪除'); | |||
| }); | |||
| } | |||
| console.log(item); | |||
| }, | |||
| exportFile() { | |||
| let yes = confirm('確定匯出'); | |||
| if (yes) { | |||
| // this.$axios.delete(`/deleteOne?tablename=${this.tablename}&&id=${item.id}`).then(() => { | |||
| // this.getInventories(); | |||
| // }); | |||
| } | |||
| }, | |||
| mockInsertAssertGroup() { | |||
| // this.$axios.get(`/assert/assertGroups`).then((resp) => { | |||
| // resp.data.data.forEach((item) => { | |||
| // let header = {'text': null, 'value': null}; | |||
| // header.text = item.descript; | |||
| // header.value = item.tablename; | |||
| // this.assertGroup.push(header); | |||
| // }); | |||
| this.assertGroup.push({'text': this.assertGroupDescript, 'value': this.assertGroupTablename}); | |||
| console.log(this.assertGroup); | |||
| // }); | |||
| this.close(); | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| @@ -19,20 +19,22 @@ | |||
| </v-card-text> | |||
| </v-card> | |||
| </v-dialog> | |||
| <v-row justify="center" dense class="ma-0 pa-0"> | |||
| <v-col cols="4"> | |||
| <v-text-field v-model="text" dense outlined prepend-inner-icon="mdi-magnify" hide-details rounded v-on:keyup.enter="search"/> | |||
| </v-col> | |||
| </v-row> | |||
| <v-toolbar flat v-if="result !== null"> | |||
| <v-toolbar-title class="title font-weight-bold">搜尋結果</v-toolbar-title> | |||
| <v-toolbar flat > | |||
| <v-toolbar-title class="title font-weight-bold" v-if="result !== null">搜尋結果</v-toolbar-title> | |||
| <v-divider | |||
| v-if="result !== null" | |||
| class="mx-4" | |||
| inset | |||
| vertical | |||
| /> | |||
| <v-spacer/> | |||
| <v-row justify="start" dense class="ma-0 pa-0"> | |||
| <v-col cols="4"> | |||
| <v-text-field v-model="text" dense outlined prepend-inner-icon="mdi-magnify" hide-details rounded v-on:keyup.enter="search"/> | |||
| </v-col> | |||
| </v-row> | |||
| <v-btn | |||
| v-if="result !== null" | |||
| color="white" | |||
| class="primary mr-5" | |||
| @click="exportFile" | |||
| @@ -5,8 +5,7 @@ import Home from '../components/Home'; | |||
| import AssetGroup from '../components/AssetGroup'; | |||
| import Inventory from '../components/Inventory'; | |||
| import Search from '../components/Search'; | |||
| // import MockSearch from '../components/MockSearch'; | |||
| import account from '../components/AccountManage'; | |||
| Vue.use(Router); | |||
| export const constantRoutes = [ | |||
| @@ -35,6 +34,11 @@ export const constantRoutes = [ | |||
| name: 'search', | |||
| component: Search | |||
| }, | |||
| { | |||
| path: 'account', | |||
| name: 'account', | |||
| component: account | |||
| }, | |||
| ] | |||
| } | |||
| ]; | |||
| @@ -2,6 +2,7 @@ package com.moze.rms.controller; | |||
| import com.moze.rms.dao.AccountDAO; | |||
| import com.moze.rms.entity.model.Account; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| @@ -28,4 +29,49 @@ public class AccountController { | |||
| public JsonResult logout() { | |||
| return new JsonResult(StatusCode.SUCCESS, null); | |||
| } | |||
| @GetMapping("/accounts") | |||
| public JsonResult getAccounts() { | |||
| return new JsonResult(StatusCode.SUCCESS, accountDAO.findAll()); | |||
| } | |||
| @GetMapping("/checkIdAndAccountRepeat") | |||
| public JsonResult checkIdAndAccountRepeat(String id, String account) { | |||
| Integer a = accountDAO.findById(id); | |||
| Integer b = accountDAO.findByAccount(account); | |||
| if(a > 0) { | |||
| return new JsonResult(StatusCode.DUPLICATE_ID, null); | |||
| }else if (b > 0) { | |||
| return new JsonResult(StatusCode.DUPLICATE_ACCOUNT, null); | |||
| }else { | |||
| return new JsonResult(StatusCode.SUCCESS, null); | |||
| } | |||
| } | |||
| @PostMapping("/account") | |||
| public JsonResult insertAccount(@RequestBody Account account) { | |||
| accountDAO.insertOne(account); | |||
| return new JsonResult(StatusCode.SUCCESS, null); | |||
| } | |||
| @PutMapping("/account") | |||
| public JsonResult modifyAccount(@RequestBody Account account) { | |||
| accountDAO.modifyOne(account); | |||
| return new JsonResult(StatusCode.SUCCESS, null); | |||
| } | |||
| @DeleteMapping("/account") | |||
| public JsonResult deleteAccount(@RequestParam String id) { | |||
| accountDAO.deleteOne(id); | |||
| return new JsonResult(StatusCode.SUCCESS, null); | |||
| } | |||
| @GetMapping("/departments") | |||
| public JsonResult getDepartments() { | |||
| return new JsonResult(StatusCode.SUCCESS, accountDAO.finfDepartments()); | |||
| } | |||
| } | |||
| @@ -27,7 +27,13 @@ public enum StatusCode { | |||
| TOO_FREQUENT(445, "太頻繁的呼叫"), | |||
| /** 未知的錯誤 */ | |||
| UNKNOWN_ERROR(499, "未知錯誤"); | |||
| UNKNOWN_ERROR(499, "未知錯誤"), | |||
| DUPLICATE_ID(420, "員工編號重複"), | |||
| DUPLICATE_ACCOUNT(421, "帳號重複"); | |||
| private int code; | |||
| private String message; | |||
| @@ -1,10 +1,12 @@ | |||
| package com.moze.rms.dao; | |||
| import com.moze.rms.entity.model.Account; | |||
| import org.jdbi.v3.core.Handle; | |||
| import org.jdbi.v3.sqlobject.SqlObject; | |||
| import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; | |||
| import org.jdbi.v3.sqlobject.statement.SqlQuery; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| public interface AccountDAO extends SqlObject { | |||
| @@ -15,4 +17,59 @@ public interface AccountDAO extends SqlObject { | |||
| String sql = "select * from account where account = '" + account + "'"; | |||
| return handle.createQuery(sql).mapToMap().one(); | |||
| } | |||
| @RegisterBeanMapper(Account.class) | |||
| @SqlQuery("select * from account order by id;") | |||
| List<Account> findAll(); | |||
| @RegisterBeanMapper(List.class) | |||
| @SqlQuery("select * from department;") | |||
| List<String> finfDepartments(); | |||
| default void insertOne(Account a) { | |||
| Handle handle = this.getHandle(); | |||
| String sql = "insert into account(pwd, username, department, account, level, id) values ("; | |||
| sql += "'" + a.getPwd() +"',"; | |||
| sql += "'" + a.getUsername() +"',"; | |||
| sql += "'" + a.getDepartment() +"',"; | |||
| sql += "'" + a.getAccount() +"',"; | |||
| sql += "'1',"; | |||
| sql += "'" + a.getId() +"')"; | |||
| handle.createUpdate(sql).execute(); | |||
| } | |||
| default void modifyOne(Account a) { | |||
| Handle handle = this.getHandle(); | |||
| String sql = "update account set "; | |||
| sql += "pwd = '" + a.getPwd() + "',"; | |||
| sql += "username = '" + a.getUsername() + "',"; | |||
| sql += "department = '" + a.getDepartment() + "',"; | |||
| sql += "account = '" + a.getAccount() + "',"; | |||
| sql += "level = '" + a.getLevel() + "'"; | |||
| sql += "where id = '" + a.getId() + "'"; | |||
| handle.createUpdate(sql).execute(); | |||
| } | |||
| default void deleteOne(String id) { | |||
| Handle handle = this.getHandle(); | |||
| String sql = "delete from account where id = '" + id + "'"; | |||
| handle.createUpdate(sql).execute(); | |||
| } | |||
| @SqlQuery("select count(*) from account where id = ?;") | |||
| Integer findById(String id); | |||
| @SqlQuery("select count(*) from account where account = ?;") | |||
| Integer findByAccount(String account); | |||
| } | |||
| @@ -0,0 +1,22 @@ | |||
| package com.moze.rms.entity.model; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @NoArgsConstructor | |||
| public class Account { | |||
| private String id; | |||
| private String username; | |||
| private String account; | |||
| private String pwd; | |||
| private String department; | |||
| private String level; | |||
| } | |||
| @@ -231,7 +231,7 @@ public class ExcelExpoter { | |||
| public void expoerDataExcelMultiSheet(HttpServletResponse response, Map<String, ArrayList<String>> titleKeyLists, Map<String, Map<String, String>> titleMaps, Map<String, List<Map<String, Object>>> src_lists, String filename) throws IOException { | |||
| String xlsFile_name = "資產清冊.xls"; //輸出xls檔名稱 | |||
| String xlsFile_name = "SeverList.xls"; //輸出xls檔名稱 | |||
| //記憶體中只建立100個物件 | |||
| Workbook wb = new SXSSFWorkbook(100); //關鍵語句 | |||
| Iterator<Map.Entry<String, List<Map<String, Object>>>> iterator = src_lists.entrySet().iterator(); | |||