From 904897d888962511eb58b0dec9168983ecc1a439 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期二, 19 九月 2023 16:24:41 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS-WEB/src/api/integration/sysInfo.js | 8 Source/UBCS-WEB/src/page/login/index.vue | 12 Source/UBCS-WEB/src/page/login/userlogin.vue | 12 Source/UBCS-WEB/src/api/docking/data.js | 4 Source/UBCS-WEB/src/api/docking/task.js | 4 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/constant/CodeTableNameConstant.java | 5 Source/UBCS-WEB/src/views/integration/systemInfo.vue | 463 +++++++++++++++++++++-------------------- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java | 49 ++++ Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/SystemClassifyRole.java | 46 ++++ 9 files changed, 363 insertions(+), 240 deletions(-) diff --git a/Source/UBCS-WEB/src/api/docking/data.js b/Source/UBCS-WEB/src/api/docking/data.js index 94da0af..1093124 100644 --- a/Source/UBCS-WEB/src/api/docking/data.js +++ b/Source/UBCS-WEB/src/api/docking/data.js @@ -1,13 +1,13 @@ import request from '@/router/axios'; -export const getDataList = (page, size, params) => { +export const getDataList = (page, limit, params) => { return request({ url: '/api/ubcs-code/dockingManagement/gridDockingData', method: 'get', params: { ...params, page, - size + limit } }) } diff --git a/Source/UBCS-WEB/src/api/docking/task.js b/Source/UBCS-WEB/src/api/docking/task.js index fcb0acc..c2dc99a 100644 --- a/Source/UBCS-WEB/src/api/docking/task.js +++ b/Source/UBCS-WEB/src/api/docking/task.js @@ -1,13 +1,13 @@ import request from '@/router/axios'; -export const getTaskList = (page, size, params) => { +export const getTaskList = (page, limit, params) => { return request({ url: '/api/ubcs-code/dockingManagement/gridDockingTask', method: 'get', params: { ...params, page, - size + limit } }) } diff --git a/Source/UBCS-WEB/src/api/integration/sysInfo.js b/Source/UBCS-WEB/src/api/integration/sysInfo.js index 871ccdb..6292caa 100644 --- a/Source/UBCS-WEB/src/api/integration/sysInfo.js +++ b/Source/UBCS-WEB/src/api/integration/sysInfo.js @@ -1,11 +1,15 @@ import request from '@/router/axios'; // 闆嗘垚绯荤粺淇℃伅绠$悊鍒楄〃 -export const getSysInfoList = (params) => { +export const getSysInfoList = (size,current,params) => { return request({ url: '/api/ubcs-code/dockingManagement/gridDockingSystem', method: 'get', - params: params + params: { + size, + current, + ...params + } }) } // 闆嗘垚绯荤粺淇℃伅绠$悊鏂板 diff --git a/Source/UBCS-WEB/src/page/login/index.vue b/Source/UBCS-WEB/src/page/login/index.vue index 0e0b68e..1ec9a95 100644 --- a/Source/UBCS-WEB/src/page/login/index.vue +++ b/Source/UBCS-WEB/src/page/login/index.vue @@ -21,12 +21,12 @@ </h4> <userLogin v-if="activeName==='user'"></userLogin> <thirdLogin v-else-if="activeName==='third'"></thirdLogin> - <div class="login-menu"> - <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a> - <!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>--> - <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a> - <a :href="website.ssoUrl + website.redirectUri">{{ $t('login.ssoLogin') }}</a> - </div> +<!-- <div class="login-menu">--> +<!-- <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>--> +<!-- <a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>--> +<!-- <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>--> +<!-- <a :href="website.ssoUrl + website.redirectUri">{{ $t('login.ssoLogin') }}</a>--> +<!-- </div>--> </div> </div> diff --git a/Source/UBCS-WEB/src/page/login/userlogin.vue b/Source/UBCS-WEB/src/page/login/userlogin.vue index b08bc18..a8877c8 100644 --- a/Source/UBCS-WEB/src/page/login/userlogin.vue +++ b/Source/UBCS-WEB/src/page/login/userlogin.vue @@ -8,7 +8,7 @@ status-icon > <el-form-item prop="selectInput"> - <el-select v-model="loginForm.tenantId" placeholder="璇烽�夋嫨绉熸埛" style="width: 100%" @change="selectchange"> + <el-select v-model="loginForm.tenantId" placeholder="璇烽�夋嫨绉熸埛" style="width: 100%" @change="selectChange"> <i slot="prefix" class="el-icon-s-operation"/> <el-option v-for="(item,index) in loginForm.region" @@ -40,6 +40,7 @@ </el-form-item> <el-form-item> + <el-button @click="ChandleLogin">娴嬭瘯鍗曠偣鐧诲綍</el-button> <el-button class="login-submit" size="small" type="primary" @@ -62,7 +63,7 @@ </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="delok">鍙� 娑�</el-button> - <el-button type="primary" @click="addok">纭� 瀹�</el-button> + <el-button type="primary" @click="addHandler">纭� 瀹�</el-button> </div> </el-dialog> </div> @@ -192,6 +193,9 @@ }, props: [], methods: { + ChandleLogin(){ + + }, closehandle(){ removeToken() }, @@ -201,7 +205,7 @@ removeToken() }, // 鐐瑰嚮纭畾淇敼瀵嗙爜 - addok(){ + addHandler(){ this.dialogFormVisible = false updatePassword(md5(this.form.oldPassword), this.form.newPassword, this.form.newPassword1).then(res=>{ console.log(res) @@ -215,7 +219,7 @@ }) }, // 缁戝畾涓嬫媺鑿滃崟鍔ㄦ�両D - selectchange(value) { + selectChange(value) { this.loginForm.tenantId = value }, showPassword() { diff --git a/Source/UBCS-WEB/src/views/integration/systemInfo.vue b/Source/UBCS-WEB/src/views/integration/systemInfo.vue index c1cf5ae..2efc562 100644 --- a/Source/UBCS-WEB/src/views/integration/systemInfo.vue +++ b/Source/UBCS-WEB/src/views/integration/systemInfo.vue @@ -1,235 +1,252 @@ <template> - <basic-container> - <avue-crud ref="crud" :table-loading="loading" :data="data" :option="option" :page.sync="page" :search.sync="search" - @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit" - @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage" - @selection-change="selectionChange" @row-click="handleRowClick"> - <template slot="menuLeft"> - <!-- <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">鏌� 璇� - </el-button> --> - <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄� - </el-button> - </template> - <template slot="search" slot-scope="{row,size}"> - <el-select v-model="selectValue" size="small" @change="handleSelect"> - <el-option v-for="item in selectOption" :key="item.value" :label="item.label" :value="item.value"> - </el-option> - </el-select> - <el-input :placeholder="`璇疯緭鍏�${selectValue === 'id' ? '绯荤粺缂栧彿' : '绯荤粺鍚嶇О'}骞舵寜鍥炶溅鏌ヨ`" :size="size" - style="width:300px;margin-left: 10px;" v-model="search[selectValue]" clearable - @keyup.enter.native="handleEnter" @clear="handleClear"></el-input> - </template> - </avue-crud> - </basic-container> + <basic-container> + <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :search.sync="search" :table-loading="loading" + @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit" + @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage" + @selection-change="selectionChange" @row-click="handleRowClick"> + <template slot="menuLeft"> + <!-- <el-button icon="el-icon-search" size="small" type="primary" @click="handleStatus">鏌� 璇� + </el-button> --> + <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄� + </el-button> + </template> + <template slot="search" slot-scope="{row,size}"> + <el-select v-model="selectValue" size="small" @change="handleSelect"> + <el-option v-for="item in selectOption" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + <el-input v-model="search[selectValue]" :placeholder="`璇疯緭鍏�${selectValue === 'id' ? '绯荤粺缂栧彿' : '绯荤粺鍚嶇О'}骞舵寜鍥炶溅鏌ヨ`" + :size="size" clearable style="width:300px;margin-left: 10px;" + @clear="handleClear" @keyup.enter.native="handleEnter"></el-input> + </template> + <template #menu="{row,index,size}"> + <el-button type="text" icon="el-icon-menu" size="small" @click="classifyHandler">鍒嗙被鎺堟潈</el-button> + + </template> + </avue-crud> + <el-dialog :visible.sync="dialogVisible" append-to-body title="鍒嗙被鎺堟潈"> + </el-dialog> + </basic-container> </template> <script> -import { getSysInfoList, sysInfoAdd, sysInfoEdit, sysInfoDel } from '@/api/integration/sysInfo.js' -export default { - data() { - return { - loading: false, - page: { - currentPage: 1, - pageSize: 10, - total: 0 - }, - selectOption: [{ - value: 'id', - label: '绯荤粺缂栧彿' - }, { - value: 'name', - label: '绯荤粺鍚嶇О' - }], - selectValue: 'id', - search: {}, - delIds: [], - data: [], - option: { - height: "auto", - tip:false, - border: true, - align: 'center', - menuAlign: 'center', - index: true, - searchMenuSpan: 8, - searchBtn: false, - emptyBtn: false, - columnBtn: false, - defaultSort: { - prop: 'id,name', - order: 'descending' - }, - selection: true, - column: [ - { - label: '绯荤粺缂栧彿', - prop: 'id', - sortable: true, - rules: [{ - required: true, - message: '绯荤粺缂栧彿涓嶈兘涓虹┖', - trigger: 'blur' - }], - // maxlength: 30, //瀛楁暟闄愬埗 - }, { - label: '绯荤粺鍚嶇О', - prop: 'name', - sortable: true, - rules: [{ - required: true, - message: '绯荤粺鍚嶇О涓嶈兘涓虹┖', - trigger: 'blur' - }], - // maxlength: 30, //瀛楁暟闄愬埗 - }, - { - label: '绯荤粺鎻忚堪', - prop: 'description', - type: 'textarea' - } - ] - }, - } - }, - methods: { - // 鑾峰彇鍒楄〃 - async getDataList() { - this.loading = true - console.log(this.search) - const { pageSize, currentPage } = this.page - let param = { size: pageSize, current: currentPage } - this.search = Object.keys(this.search) - .filter((key) => this.search[key] !== null && this.search[key] !== undefined && this.search[key] !== "") - .reduce((acc, key) => ({ ...acc, [key]: this.search[key] }), {}); - const response = await getSysInfoList({ ...param, ...this.search }) - if (response.status === 200) { - console.log(response) - this.loading = false - const data = response.data.data - this.data = data.records - this.page.total = data.total - } else this.loading = false - }, - // 鏂板 - async handleSave(row, done, loading) { - try { - const response = await sysInfoAdd(row) - if (response.status === 200) { - this.$message({ - type: 'success', - message: '鏂板鏁版嵁鎴愬姛锛�' - }) - done(row) - // this.$refs.crud.refreshTable() - // this.getDataList() - } - } catch { - loading() - } - }, - // 缂栬緫 - async handleEdit(row, index, done, loading) { - try { - const { oid, id, name, description } = row - const response = await sysInfoEdit({ oid, id, name, description }) - if (response.status === 200) { - loading() - this.$message({ - type: 'success', - message: '淇敼鏁版嵁鎴愬姛锛�' - }) - done(row) - } - } catch { - loading() - } - }, - // 鍒犻櫎鍗曟潯 - handleDelete(row) { - const { oid } = row - this.deleteSysInfo({ oids: oid }) - }, - // 澶氭潯鏁版嵁鍒犻櫎 - handleDeleteByIds() { - const { oids } = this.delIds - if (this.$utilFunc.isEmpty(oids)) { - this.$message({ - type: "error", - message: "璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�!" - }) - } else { - this.deleteSysInfo(this.delIds) - } - }, - // 鍒犻櫎鎺ュ彛 - deleteSysInfo(param) { - this.$confirm('鏄惁纭畾鍒犻櫎閫夋嫨鐨勯泦鎴愮郴缁�?', '鎻愮ず', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning' - }).then(async () => { - const response = await sysInfoDel(param) - if (response.status === 200) { - console.log(response) - this.$message({ - type: 'success', - message: '鍒犻櫎鎴愬姛!' - }); - this.getDataList() - } - }) - }, - // 閫夋嫨妗嗗唴瀹归�夋嫨鍚� - handleSelect(event) { - this.selectValue = event - if (this.selectValue === 'id') { - this.search['name'] = '' - delete this.search['name'] - } else { - this.search['id'] = '' - delete this.search['id'] - } - }, - // enter鎼滅储 - handleEnter() { - if (this.search[this.selectValue] === '') return - else this.getDataList() +import {getSysInfoList, sysInfoAdd, sysInfoEdit, sysInfoDel} from '@/api/integration/sysInfo.js' +export default { + data() { + return { + loading: false, + dialogVisible:false, + page: { + currentPage: 1, + pageSize: 10, + total: 0 + }, + selectOption: [{ + value: 'id', + label: '绯荤粺缂栧彿' + }, { + value: 'name', + label: '绯荤粺鍚嶇О' + }], + selectValue: 'id', + search: {}, + delIds: [], + data: [], + option: { + height: "auto", + tip: false, + border: true, + align: 'center', + menuAlign: 'center', + index: true, + searchMenuSpan: 8, + searchBtn: false, + emptyBtn: false, + columnBtn: false, + defaultSort: { + prop: 'id,name', + order: 'descending' }, - // 杈撳叆妗嗘竻绌� - handleClear() { - this.search = {} - this.getDataList() - }, - // 鍒锋柊鎸夐挳 - handleRefresh() { - this.getDataList() - }, - handleSizePage(event) { - this.page.pageSize = event - }, - handleCurrentPage(event) { - this.page.currentPage = event - }, - // 鐐瑰嚮閫夋嫨 - handleRowClick(row) { - this.$refs.crud.toggleRowSelection(row, true) - }, - // 澶氶�� - selectionChange(list) { - console.log(list) - let newData = list.map(item => { - const { oid } = item - return oid - }) - this.delIds = { oids: newData.toString() } - console.log(this.delIds) - }, + selection: true, + column: [ + { + label: '绯荤粺缂栧彿', + prop: 'id', + sortable: true, + rules: [{ + required: true, + message: '绯荤粺缂栧彿涓嶈兘涓虹┖', + trigger: 'blur' + }], + // maxlength: 30, //瀛楁暟闄愬埗 + }, { + label: '绯荤粺鍚嶇О', + prop: 'name', + sortable: true, + rules: [{ + required: true, + message: '绯荤粺鍚嶇О涓嶈兘涓虹┖', + trigger: 'blur' + }], + // maxlength: 30, //瀛楁暟闄愬埗 + }, + { + label: '绯荤粺鎻忚堪', + prop: 'description', + type: 'textarea' + } + ] + }, } + }, + methods: { + //鍒嗙被鎺堟潈 + classifyHandler(){ + this.dialogVisible=true; + }, + async getDataList() { + this.loading = true; + console.log(this.search); + const { pageSize, currentPage } = this.page; + const conditions = {}; + if (Object.keys(this.search).length > 0) { + for (const key in this.search) { + if (this.search[key]) { + conditions[`conditionMap[${key}_like]`] = this.search[key]; + } + } + } + const response = await getSysInfoList(pageSize, currentPage, conditions); + if (response.status === 200) { + console.log(response); + this.loading = false; + const data = response.data.data; + this.data = data.records; + this.page.total = data.total; + } else { + this.loading = false; + } + }, + // 鏂板 + async handleSave(row, done, loading) { + try { + const response = await sysInfoAdd(row) + if (response.status === 200) { + this.$message({ + type: 'success', + message: '鏂板鏁版嵁鎴愬姛锛�' + }) + done(row) + // this.$refs.crud.refreshTable() + // this.getDataList() + } + } catch { + loading() + } + }, + // 缂栬緫 + async handleEdit(row, index, done, loading) { + try { + const {oid, id, name, description} = row + const response = await sysInfoEdit({oid, id, name, description}) + if (response.status === 200) { + loading() + this.$message({ + type: 'success', + message: '淇敼鏁版嵁鎴愬姛锛�' + }) + done(row) + } + } catch { + loading() + } + }, + // 鍒犻櫎鍗曟潯 + handleDelete(row) { + const {oid} = row + this.deleteSysInfo({oids: oid}) + }, + // 澶氭潯鏁版嵁鍒犻櫎 + handleDeleteByIds() { + const {oids} = this.delIds + if (this.$utilFunc.isEmpty(oids)) { + this.$message({ + type: "error", + message: "璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�!" + }) + } else { + this.deleteSysInfo(this.delIds) + } + }, + // 鍒犻櫎鎺ュ彛 + deleteSysInfo(param) { + this.$confirm('鏄惁纭畾鍒犻櫎閫夋嫨鐨勯泦鎴愮郴缁�?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(async () => { + const response = await sysInfoDel(param) + if (response.status === 200) { + console.log(response) + this.$message({ + type: 'success', + message: '鍒犻櫎鎴愬姛!' + }); + this.getDataList() + } + }) + }, + // 閫夋嫨妗嗗唴瀹归�夋嫨鍚� + handleSelect(event) { + this.selectValue = event + if (this.selectValue === 'id') { + this.search['name'] = '' + delete this.search['name'] + } else { + this.search['id'] = '' + delete this.search['id'] + } + }, + // enter鎼滅储 + handleEnter() { + if (this.search[this.selectValue] === '') return + else this.getDataList() + + }, + // 杈撳叆妗嗘竻绌� + handleClear() { + this.search = {} + this.getDataList() + }, + // 鍒锋柊鎸夐挳 + handleRefresh() { + this.getDataList() + }, + handleSizePage(event) { + this.page.pageSize = event + }, + handleCurrentPage(event) { + this.page.currentPage = event + }, + // 鐐瑰嚮閫夋嫨 + handleRowClick(row) { + this.$refs.crud.toggleRowSelection(row, true) + }, + // 澶氶�� + selectionChange(list) { + console.log(list) + let newData = list.map(item => { + const {oid} = item + return oid + }) + this.delIds = {oids: newData.toString()} + console.log(this.delIds) + }, + } } </script> <style lang="scss" scoped> ::v-deep(.avue-crud .el-select) { - width: 100px !important; + width: 100px !important; } </style> diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/SystemClassifyRole.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/SystemClassifyRole.java new file mode 100644 index 0000000..f8aaa3b --- /dev/null +++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/SystemClassifyRole.java @@ -0,0 +1,46 @@ +package com.vci.ubcs.code.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.vci.ubcs.starter.constant.CodeTableNameConstant; +import com.vci.ubcs.starter.revision.model.BaseModel; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 闆嗘垚绯荤粺鍒嗙被鎺堟潈 + * + * @author xiejun + * @since 2023-04-03 + */ +@Data +@TableName(CodeTableNameConstant.PL_CODE_SYSTEM_CLASSIFY_ROLE) +@ApiModel(value = "SystemClassifyRole瀵硅薄", description = "闆嗘垚绯荤粺鍒嗙被鎺堟潈") +@EqualsAndHashCode(callSuper = true) +public class SystemClassifyRole extends BaseModel { + /*** + * 闆嗘垚绯荤粺涓婚敭oid + */ + private String systemOid; + /** + * 闆嗘垚绯荤粺鏍囪瘑 + */ + private String systemId; + /*** + * 鍒嗙被oid + */ + private String classifyOid; + /*** + * 闆嗘垚绯荤粺鍒嗙被浠e彿 + */ + private String classifyId; + /** + * 鏄惁鏈夋潈闄� + */ + private boolean selected; + /** + * 鍒嗙被鐖惰妭鐐筼id + */ + private String classParentOid; + +} diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/constant/CodeTableNameConstant.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/constant/CodeTableNameConstant.java index a901b8e..b227b64 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/constant/CodeTableNameConstant.java +++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/constant/CodeTableNameConstant.java @@ -141,6 +141,9 @@ public static final String PL_CODE_DOCKINGTASK = "PL_CODE_DOCKINGTASK"; - + /** + * 闆嗘垚绯荤粺鎺堟潈鍒嗙被鏉冮檺琛� + */ + public static final String PL_CODE_SYSTEM_CLASSIFY_ROLE = "PL_CODE_SYSTEM_CLASSIFY_ROLE"; } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java new file mode 100644 index 0000000..805c7de --- /dev/null +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java @@ -0,0 +1,49 @@ +package com.vci.ubcs.code.controller; + + +import com.vci.ubcs.code.service.ICodeClassifyService; +import lombok.AllArgsConstructor; +import org.springblade.core.tool.api.R; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 涓婚搴撳畾涔夎〃 鎺у埗鍣� + * + * @author xiejun + * @since 2023-07-24 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/codeApplyWebManagementController") +public class CodeApplyWebManagementController { + /*** + * 鍒嗙被鏈嶅姟瀵硅薄 + */ + private final ICodeClassifyService codeClassifyService; + + /*** + * 鏍规嵁鍓嶇閫夋嫨鐨勫垎绫绘潈闄愭巿鏉冩巿鏉� + * @return + */ + private R saveClassifyRoleBySystemId(){ + + + + return R.success("鎴愬姛"); + } + + + + + /*** + * 鏍规嵁绯荤粺闆嗘垚鏍囪瘑鏌ヨ鍏峰鏉冮檺鐨勫垎绫绘暟鎹� + * @return + */ + public R selectCodeClassifyVOByParentId(String systemId){ + + return R.success("鏌ヨ鎴愬姛"); + } + + +} -- Gitblit v1.9.3