From 496e7e1ddb2f7fbff5759fa59c3a33bec5b9fd9d Mon Sep 17 00:00:00 2001 From: XiaoRuby <3114200645@qq.com> Date: 星期三, 23 八月 2023 18:03:46 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/chart/work/index.vue | 210 +++++++++++++++++++++++ src/api/laboratory/role.js | 9 + src/views/laboratory/role/index.vue | 287 +++++++++++++++---------------- 3 files changed, 357 insertions(+), 149 deletions(-) diff --git a/src/api/laboratory/role.js b/src/api/laboratory/role.js new file mode 100644 index 0000000..64a2930 --- /dev/null +++ b/src/api/laboratory/role.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getMenusTree(params) { + return request({ + url: '/role-manager/getMenusTree', + method: 'get', + params + }) + } \ No newline at end of file diff --git a/src/views/chart/work/index.vue b/src/views/chart/work/index.vue index 1b667ad..59b9b32 100644 --- a/src/views/chart/work/index.vue +++ b/src/views/chart/work/index.vue @@ -1,13 +1,219 @@ <template> - <div>宸ヤ綔缁熻鍥�</div> + <div class="work-main" style="overflow: scroll;width:100%;height:100vh"> + <div class="work-head"> + <el-row :gutter="10"> + <el-col :span="24"> + <el-card> + <el-form :inline="true" :model="formInline" class="demo-form-inline"> + <el-form-item> + <p><span>*</span>妫�娴嬫棩鏈�:</p> + <el-date-picker + v-model="dateTime" + type="daterange" + range-separator="鑷�" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡"> + </el-date-picker> + </el-form-item> + <el-form-item> + <p><span>*</span>妫�楠岀被鍨�:</p> + <el-select v-model="formInline.region" placeholder="閲囪喘鍏ュ簱"> + <el-option label="鍖哄煙涓�" value="shanghai"></el-option> + <el-option label="鍖哄煙浜�" value="beijing"></el-option> + </el-select> + </el-form-item> + <el-form-item class="buttons"> + <el-button>娓呯┖</el-button> + <el-button type="primary" @click="onSubmit">鏌ヨ</el-button> + </el-form-item> + </el-form> + </el-card> + </el-col> + </el-row> + </div> + <div class="work-center" > + <el-row :gutter="20"> + <el-col :span="12"> + <el-card> + <p>璐熻矗浜虹粺璁�</p> + <div id="leaderStati" style="width:100%;height:400px;"></div> + </el-card> + </el-col> + <el-col :span="12"> + <el-card> + <p>瀹為獙鍛樼粺璁�</p> + <div id="testerStati" style="width:100%;height:400px;"></div> + </el-card> + </el-col> + <el-col :span="12"> + <el-card> + <p>璐熻矗浜哄強鏃剁巼</p> + <div id="leaderTimly" style="width:100%;height:400px;"></div> + </el-card> + </el-col> + <el-col :span="12"> + <el-card> + <p>瀹為獙鍛樺強鏃剁巼</p> + <div id="testerTimly" style="width:100%;height:400px;"></div> + </el-card> + </el-col> + </el-row> + </div> + <div class="work-foot"></div> + </div> </template> <script> +import * as echarts from 'echarts'; export default { + data() { + return { + formInline: { + user: '', + region: '' + }, + dateTime: '', + } + }, + mounted(){ + this.initLeaderStatiChart('leaderStati'); + this.initLeaderTimlyChart(); + this.initLeaderStatiChart('testerStati'); + this.initTesterTimlyChart(); + }, + methods: { + onSubmit() { + console.log('submit!'); + }, + initLeaderStatiChart(id){ + var chartDom = document.getElementById(id); + var myChart = echarts.init(chartDom); + var option; + let xAxisData = []; + let data1 = []; + let data2 = []; + let data3 = []; + let data4 = []; + for (let i = 0; i < 10; i++) { + xAxisData.push('Class' + i); + data1.push(+(Math.random() * 2).toFixed(2)); + data2.push(+(Math.random() * 5).toFixed(2)); + data3.push(+(Math.random() + 0.3).toFixed(2)); + data4.push(+Math.random().toFixed(2)); + } + var emphasisStyle = { + itemStyle: { + shadowBlur: 10, + shadowColor: 'rgba(0,0,0,0.3)' + } + }; + option = { + legend: { + data: ['bar', 'bar2'], + left: 'center' + }, + tooltip: {}, + xAxis: { + data: xAxisData, + name: '濮撳悕', + axisLine: { onZero: true }, + splitLine: { show: false }, + splitArea: { show: false } + }, + yAxis: {}, + grid: { + bottom: 100 + }, + series: [ + { + name: 'bar', + type: 'bar', + stack: 'one', + emphasis: emphasisStyle, + data: data1 + }, + { + name: 'bar2', + type: 'bar', + stack: 'one', + emphasis: emphasisStyle, + data: data2 + } + ] + }; + myChart.on('brushSelected', function (params) { + var brushed = []; + var brushComponent = params.batch[0]; + for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) { + var rawIndices = brushComponent.selected[sIdx].dataIndex; + brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', ')); + } + myChart.setOption({ + title: { + backgroundColor: '#333', + text: 'SELECTED DATA INDICES: \n' + brushed.join('\n'), + bottom: 0, + right: '10%', + width: 100, + textStyle: { + fontSize: 12, + color: '#fff' + } + } + }); + }); + + option && myChart.setOption(option); + }, + initTesterStatiChart(){ + + }, + initLeaderTimlyChart(){ + + }, + initTesterTimlyChart(){ + + }, + } } </script> <style lang="scss" scoped> - + .work-main{ + width:100%; + margin:0; + padding: 0; + .work-head{ + width:94%; + height:100; + margin: 5px 10px; + position: fixed; + z-index: 10; + .demo-form-inline{ + margin: 0px 10px; + p{ + margin: 0; + font-size: 16px; + font-weight: bold; + span{ + font-size: 16px; + font-weight: bold; + color: red; + } + } + .buttons{ + margin: 40px 0px 0px 900px; + } + } + } + .work-center{ + margin: 0px 0px 5px 10px; + padding: 18vh 0px 5px 0px; + .el-card{ + margin: 5px 0px; + height:500px; + } + } + } </style> diff --git a/src/views/laboratory/role/index.vue b/src/views/laboratory/role/index.vue index 1c01efc..494b9da 100644 --- a/src/views/laboratory/role/index.vue +++ b/src/views/laboratory/role/index.vue @@ -1,140 +1,105 @@ <template> <div> - <div class="content-main"> - <div class="top-bar"> - <el-form ref="form" :inline="true" :model="searchData"> - <el-form-item label="瑙掕壊鍚嶇О锛�" class="sermargin"> - <el-input - v-model="searchData.roleName" - class="input-form" - placeholder="璇疯緭鍏ヨ鑹插悕绉�" - style="width:250px" - > - </el-input> - </el-form-item> - <el-form-item label="鏉冮檺锛�" class="sermargin"> - <el-input - v-model="searchData.permission" - class="input-form" - placeholder="璇疯緭鍏ユ潈闄�" - style="width:250px" - > - </el-input> - </el-form-item> - <el-form-item class="rightBtn"> - <el-button type="primary" @click="search">鏌ヨ</el-button> - <el-button type="primary" plain @click="reset">閲嶇疆</el-button> - </el-form-item> - </el-form> - <el-form> - <el-form-item class="rightBtn"> - <el-button type="primary" @click="addRole" icon="el-icon-plus">鏂板鏉冮檺</el-button> - </el-form-item> - </el-form> - </el-form> - </div> - <div class="library-table"> - <div class="table-box"> - <el-table - :max-height="800" - :cell-style="{textAlign: 'center'}" - :header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}" - :data="roleTable" - style="width: 100%" - > - <el-table-column - type="selection" - min-width="8%" - /> - <el-table-column - prop="rolename" - label="瑙掕壊鍚嶇О" - min-width="20%" - /> - <el-table-column - prop="permission" - label="鏉冮檺" - min-width="20%" - /> - <el-table-column - prop="create_time" - label="鍒涘缓鏃堕棿" - min-width="20%" - /> - <el-table-column - prop="update_time" - label="鏇存柊鏃堕棿" - min-width="20%" - /> - <el-table-column - label="鎿嶄綔" - min-width="12%" - > - <template slot-scope="scope"> - <el-button type="text" size="small" >缂栬緫</el-button> - <el-button type="text" size="small" >鍒犻櫎</el-button> - </template> - </el-table-column> - </el-table> - <!-- 鍒嗛〉鍣� --> - <div class="pagination"> - <el-pagination - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - :current-page="currentPage" - :page-sizes="[5, 10, 20]" - :page-size="pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="total"> - </el-pagination> - </div> - </div> - </div> - </div> - <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogTableVisible" width="30%"> - <el-form :model="updateData" ref="updateData" label-position="right" label-width="100px"> - <el-form-item label="鍘熷瘑鐮侊細"> - <el-input style="width: 300px" v-model="updateData.oldPassWord" placeholder="璇疯緭鍏ュ師瀵嗙爜" > + <div class="content-main"> + <div class="top-bar"> + <el-form ref="form" :inline="true" :model="searchData"> + <el-form-item label="瑙掕壊鍚嶇О锛�" class="sermargin"> + <el-input v-model="searchData.roleName" class="input-form" placeholder="璇疯緭鍏ヨ鑹插悕绉�" style="width:250px"> </el-input> </el-form-item> - <el-form-item label="鏂板瘑鐮侊細"> - <el-input style="width: 300px" v-model="updateData.newPassWord" placeholder="璇疯緭鍏ユ柊瀵嗙爜"> + <el-form-item label="鏉冮檺锛�" class="sermargin"> + <el-input v-model="searchData.permission" class="input-form" placeholder="璇疯緭鍏ユ潈闄�" style="width:250px"> </el-input> </el-form-item> - <el-form-item label="纭瀵嗙爜锛�"> - <el-input style="width: 300px" v-model="updateData.confirmPassWord" placeholder="鍐嶆杈撳叆瀵嗙爜"> - </el-input> + <el-form-item class="rightBtn"> + <el-button type="primary">鏌ヨ</el-button> + <el-button type="primary" plain>閲嶇疆</el-button> </el-form-item> </el-form> - <span slot="footer" class="dialog-footer"> - <el-button @click="dialogTableVisible = false">鍙� 娑�</el-button> - <el-button type="primary" @click="changePassword">纭� 瀹�</el-button> - </span> - </el-dialog> + <el-form> + <el-form-item class="rightBtn"> + <el-button type="primary" @click="addClickRole" icon="el-icon-plus">鏂板瑙掕壊</el-button> + </el-form-item> + </el-form> + </el-form> + </div> + <div class="library-table"> + <div class="table-box"> + <el-table :max-height="800" :cell-style="{ textAlign: 'center' }" + :header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'center' }" + :data="roleTable" style="width: 100%"> + <el-table-column type="selection" min-width="8%" /> + <el-table-column prop="rolename" label="瑙掕壊鍚嶇О" min-width="20%" /> + <el-table-column prop="permission" label="鏉冮檺" min-width="20%" /> + <el-table-column prop="create_time" label="鍒涘缓鏃堕棿" min-width="20%" /> + <el-table-column prop="update_time" label="鏇存柊鏃堕棿" min-width="20%" /> + <el-table-column label="鎿嶄綔" min-width="12%"> + <template slot-scope="scope"> + <el-button type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + <!-- 鍒嗛〉鍣� --> + <div class="pagination"> + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" + :current-page="currentPage" :page-sizes="[5, 10, 20]" :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" :total="total"> + </el-pagination> + </div> + </div> + </div> + </div> + <el-dialog title="鏂板瑙掕壊" :visible.sync="dialogTableVisible" width="60%"> + <el-form :model="roleAdd" ref="roleAdd" label-position="right" label-width="100px"> + <el-form-item label="瑙掕壊鍚�:"> + <el-input style="width: 300px" v-model="roleAdd.roleName" placeholder="璇疯緭鍏ヨ鑹插悕"> + </el-input> + </el-form-item> + <el-form-item label="鍔熻兘閫夋嫨:"> + <el-cascader size="medium " v-model="roleAdd.menuData" :options="menuInfo"> + <template slot-scope="{ node, data }"> + <span>{{ data.label }}</span> + <span v-if="!node.isLeaf"> ({{ }}) </span> + </template> + </el-cascader> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogTableVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="addRole">纭� 瀹�</el-button> + </span> + </el-dialog> </div> </template> <script> -import { getPlanPageList, getStandingPageList } from '@/api/laboratory/measure' +import { getMenusTree } from '@/api/laboratory/role' export default { data() { return { - searchData:{ + props: { multiple: true }, + roleAdd: { + roleName: null, + menuData: null + }, + searchData: { roleName: '', permission: '' }, - roleTable:[{ + menuInfo: [], + roleTable: [{ rolename: '閮ㄩ暱', permission: 'ROOT', create_time: '2023-07-04 12:12:12', update_time: '2023-07-04 12:12:12' - },{ + }, { rolename: '缁勯暱', permission: '--', create_time: '2023-07-04 12:12:12', update_time: '2023-07-04 12:12:12' }], - updateData:{ + updateData: { oldPassWord: '', newPassWord: '', confirmPassWord: '' @@ -145,13 +110,37 @@ total: 20 } }, - created(){ - + created() { + }, methods: { - addRole(){ + async addClickRole() { + let res = await getMenusTree(); + this.menuInfo = res.data + this.menuInfo.forEach(item => { + item.select = false + item.add = false + item.update = false + item.delete = false + if (item.children.length == 0) { + delete item['children'] + } else { + item.children.forEach(c => { + c.select = false + c.add = false + c.update = false + c.delete = false + if (c.children.length == 0) { + delete c['children'] + } + }) + } + }) this.dialogTableVisible = true // console.log(this.dialogTableVisible) + }, + addRole() { + console.log(this.roleAdd); }, // search(){}, // reset(){}, @@ -170,44 +159,48 @@ </script> <style scoped> +.top-bar { + margin: -25px -15px; + background: #fff; + display: flex; + justify-content: space-between; + padding: 5px 24px 0px 24px; -.top-bar{ - margin: -25px -15px; + .sermargin { + margin-right: 60px; + } +} + +.rightBtn { + margin-right: 50px +} + +.library-table { + background-color: #fff; + flex: 1; + margin: 0px -15px; + margin-top: 40px; + display: flex; + flex-direction: column; + + .table-box { + padding: 10px 20px; + margin-top: 0px; + flex: 1; background: #fff; + /* padding: 20px 20px 10px 20px; */ display: flex; - justify-content: space-between; - padding: 5px 24px 0px 24px; - .sermargin{ - margin-right: 60px; + flex-direction: column; + + .el-table { + flex: 1; } } -.rightBtn{ - margin-right: 50px -} -.library-table{ - background-color: #fff; - flex: 1; - margin: 0px -15px; - margin-top: 40px; - display: flex; - flex-direction: column; - .table-box{ - padding: 10px 20px; - margin-top: 0px; - flex: 1; - background: #fff; - /* padding: 20px 20px 10px 20px; */ - display: flex; - flex-direction: column; - .el-table { - flex: 1; - } - } - .pagination{ - display:flex; - justify-content:end; - margin-top: 20px - } - } + .pagination { + display: flex; + justify-content: end; + margin-top: 20px + } +} </style> -- Gitblit v1.9.3