Merge branch 'feature-system-renpy'

This commit is contained in:
任珮宇 2023-09-21 18:46:14 +08:00
commit 36cc9afcaa
7 changed files with 819 additions and 4 deletions

View File

@ -105,7 +105,6 @@ export function getFileAction(url, parameter) {
headers: signHeader
})
}
//deleteAction
export function deleteAction(url, parameter) {
return axios({

View File

@ -720,6 +720,50 @@
border-left: 0;
}
}
.ant-menu-submenu{
background: rgba(58, 236, 240, .22) !important;
border-bottom: none !important;
margin-right: 10px;
height: 30px;
line-height: 30px;
padding: 0 16px;
letter-spacing: 2px;
position: relative;
&-title {
color: #c9f6f6;
font-weight: bold;
font-family: BookmanOldStyle;
padding: 0;
}
&-active,
&-selected {
> a {
color: #2affdf !important;
}
&::before,
&::after {
border-color: #0cecca !important;
}
}
&::before,
&::after {
content: '';
position: absolute;
border: 2px solid #569e9e;
width: 7px;
height: 30px;
top: 0;
}
&::before {
left: 0;
border-right: 0;
}
&::after {
right: 0;
border-left: 0;
}
}
}
}
.global-content {
@ -785,4 +829,30 @@
}
}
}
.ant-menu-submenu-popup .ant-menu-item{
display: block !important;
width: 100%;
padding: 0 16px !important;
height: 32px !important;
line-height: 32px !important;
color: #fff;
font-family: Arial;
margin-bottom: 0 !important;
}
.ant-menu-submenu-popup .ant-menu{
height: auto;
width: 220px;
position: absolute;
left: -16px;
a{
color: white;
&:hover{
color: white;
}
}
}
.ant-menu-submenu-popup{
position: relative;
}
</style>

View File

@ -17,7 +17,7 @@
:loading="loading"
@change="handleTableChange"
:selectedRowKeys.sync="selectedRowKeys"
:scroll="{ x: true, y: 'calc(100vh - 410px)' }"
:scroll="{ x: true, y: 'calc(100vh - 415px)' }"
>
<template slot="index" slot-scope="{ index }">
{{ index + 1 }}

View File

@ -0,0 +1,340 @@
<template>
<div style="height: 100%;">
<div class="header">
<a-button type="primary" @click="handleAdd">
<img src="@/assets/images/global/add.png" alt="" />
Edit
</a-button>
</div>
<!-- 列表 -->
<div>
<custom-table
size="middle"
rowKey="id"
:columns="columns"
:list="dataSource"
:pagination="ipagination"
:loading="loading"
@change="handleTableChange"
:scroll="{ y: 'calc(100vh - 370px)' }"
>
<template slot="index" slot-scope="{ index }">
{{ index + 1 }}
</template>
<template slot="roles" slot-scope="{ text }">
<span v-for="role of text" :key="role.id">
{{ role.roleName }}
</span>
</template>
</custom-table>
</div>
<!-- 列表结束 -->
<a-modal
title='Edit'
:width="845"
v-model="visible"
@ok="handleOk"
destroy-on-close
>
<a-spin :spinning="spinning">
<div class="group-assign">
<a-transfer
:dataSource="dataList"
:target-keys="targetKeys"
show-search
:render="item => item.title"
:operations="['Assign', 'Remove']"
:titles="['Total Nuclides', 'User Nuclides']"
@change="handleChange"
@search="handleSearch"
>
</a-transfer>
</div>
</a-spin>
<template slot="footer">
<slot name="custom-footer"></slot>
<a-space class="operators" :size="20">
<a-button type="success" @click="handleOk" >Save</a-button>
<a-button type="warn" @click="onCancel">Cancel</a-button>
</a-space>
</template>
</a-modal>
</div>
</template>
<script>
import { getAction } from '@/api/manage'
const columns = [
{
title: 'NO',
align: 'left',
width: 170,
scopedSlots: {
customRender: 'index'
},
customHeaderCell: () => {
return {
style: {
'padding-left': '60px !important'
}
}
},
customCell: () => {
return {
style: {
'padding-left': '60px !important'
}
}
}
},
{
title: 'NUCLIDE NAME',
align: 'left',
dataIndex: 'nuclideName'
},
{
title: 'CREATE TIME',
align: 'left',
dataIndex: 'createTime'
},
]
export default {
data() {
return {
columns,
dataSource: [],
url: {
list: '/sys/defaultNuclide/findPage',
},
ipagination:{
current: 1,
pageSize: 10,
pageSizeOptions: ['10', '20', '30'],
showTotal: (total, range) => {
const { current, pageSize } = this.ipagination
return `Total ${total} items Page ${current} / ${Math.ceil(total / pageSize)}`
},
showQuickJumper: true,
showSizeChanger: true,
total: 0
},
loading: false,
targetKeys: [],
visible: false,
dataList: [],
spinning: false
}
},
mounted () {
this.getRulesList();
},
methods: {
getRulesList() {
this.loading = true
let params = {
pageNo: this.ipagination.current,
pageSize: this.ipagination.pageSize,
useType: 2
}
getAction(this.url.list, params).then(res => {
this.loading = false
if (res.success) {
this.dataSource = res.result.records
this.ipagination.total = res.result.total
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
handleTableChange(pagination, filters, sorter) {
this.ipagination.current = pagination.current
this.ipagination.pageSize = pagination.pageSize
this.getRulesList();
},
handleAdd() {
this.visible = true
this.spinning = true
this.getNuclideListAll()
this.getNuclideList()
},
getNuclideListAll() {
getAction("/gardsNuclLib/allName").then(res => {
this.spinning = false
if (res.success) {
if (res.result.length > 0) {
this.dataList = res.result.map((item,index) => {
return {
key: item,
title: item
}
})
} else {
this.dataList = []
}
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
getNuclideList() {
getAction("/sys/defaultNuclide/allName",{useType:2}).then(res => {
if (res.success) {
if (res.result.length > 0) {
this.targetKeys = res.result.map(item => item)
} else {
this.targetKeys = []
}
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
handleChange(targetKeys, direction, moveKeys) {
this.targetKeys= targetKeys;
},
handleSearch(dir, value) {
console.log('search:', dir, value)
},
handleOk() {
let params = {
nuclideNames: this.targetKeys,
useType: 2
}
getAction("/sys/defaultNuclide/add",params).then(res => {
this.visible = false
if (res.success) {
this.$message.success(res.message)
this.getRulesList()
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
onCancel() {
this.visible = false
},
},
}
</script>
<style lang="less" scoped>
.header{
height: 54px;
border-top: 1px solid rgba(12, 235, 201, 0.3);
border-bottom: 1px solid rgba(12, 235, 201, 0.3);
display: flex;
align-items: center;
background-color: rgba(12, 235, 201, 0.05);
padding: 0 10px;
margin-bottom: 18px;
}
.operators {
width: 100%;
justify-content: center;
.ant-btn {
width: 92px;
}
}
.group-assign{
position: relative;
width: 690px;
margin: 0 auto;
.ant-transfer {
margin-bottom: 10px;
::v-deep {
.ant-transfer-list {
width: 291px;
height: 411px;
padding-top: 0;
&-header {
height: 37px;
&-selected {
span:first-child {
display: none;
}
}
&-title {
left: 16px;
}
}
&-body{
height: calc(100% - 37px);
}
&-content {
&-item {
&:hover {
background-color: transparent;
}
}
}
&:last-child {
height: 411px;
position: relative;
// top: 35px;
}
}
.ant-transfer-operation {
.ant-btn {
width: 92px;
height: 26px;
padding: 0;
.anticon {
display: none;
}
span {
margin-left: 0;
}
&:first-child {
margin-bottom: 52px;
&::after {
display: inline-block;
margin-left: 13px;
content: '';
width: 18px;
height: 10px;
background: url(~@/assets/images/system/transfer-right.png) no-repeat;
background-size: contain;
}
}
&:nth-child(2) {
&::before {
display: inline-block;
margin-right: 6px;
content: '';
width: 18px;
height: 10px;
background: url(~@/assets/images/system/transfer-left.png) no-repeat;
background-size: contain;
position: static;
opacity: initial;
}
}
}
}
.ant-transfer-list-header{
position: relative;
.ant-checkbox-wrapper{
position: absolute;
right: 10px;
}
}
.ant-transfer-list-content-item{
position: relative;
.ant-checkbox-wrapper{
position: absolute;
right: 10px;
}
}
.ant-transfer-list-content-item-text{
padding-left: 22px;
}
}
}
}
/deep/.ant-modal-title{
letter-spacing: 1px;
}
</style>

View File

@ -0,0 +1,406 @@
<template>
<div style="height: 100%;">
<div class="header">
<div>
<span class="item-label">Nuclide Type</span>
<a-select
style="width: 180px;display: inline-block;"
v-model="type"
:options="typeOptions"
show-arrow
allowClear
placeholder="select..."
@change="onTypeChange"
>
<img slot="suffixIcon" src="@/assets/images/global/select-down.png" alt="" />
</a-select>
</div>
<a-button type="primary" @click="handleAdd">
<img src="@/assets/images/global/add.png" alt="" />
Edit
</a-button>
</div>
<!-- 列表 -->
<div>
<custom-table
size="middle"
rowKey="id"
:columns="columns"
:list="dataSource"
:pagination="ipagination"
:loading="loading"
@change="handleTableChange"
:scroll="{ y: 'calc(100vh - 370px)' }"
>
<template slot="index" slot-scope="{ index }">
{{ index + 1 }}
</template>
<template slot="roles" slot-scope="{ text }">
<span v-for="role of text" :key="role.id">
{{ role.roleName }}
</span>
</template>
</custom-table>
</div>
<!-- 列表结束 -->
<a-modal
title='Edit'
:width="845"
v-model="visible"
@ok="handleOk"
destroy-on-close
>
<a-spin :spinning="spinning">
<div style="padding-left: 52px;margin-bottom: 20px;">
<span class="item-label">Nuclide Type</span>
<a-select
style="width: 180px;display: inline-block;"
v-model="currType"
:options="typeOptions"
show-arrow
allowClear
placeholder="select..."
@change="onCurrTypeChange"
>
<img slot="suffixIcon" src="@/assets/images/global/select-down.png" alt="" />
</a-select>
</div>
<div class="group-assign">
<a-transfer
:dataSource="dataList"
:target-keys="targetKeys"
show-search
:render="item => item.title"
:operations="['Assign', 'Remove']"
:titles="['Total Nuclides', 'User Nuclides']"
@change="handleChange"
@search="handleSearch"
>
</a-transfer>
</div>
</a-spin>
<template slot="footer">
<slot name="custom-footer"></slot>
<a-space class="operators" :size="20">
<a-button type="success" @click="handleOk" >Save</a-button>
<a-button type="warn" @click="onCancel">Cancel</a-button>
</a-space>
</template>
</a-modal>
</div>
</template>
<script>
import { getAction } from '@/api/manage'
const columns = [
{
title: 'NO',
align: 'left',
width: 170,
scopedSlots: {
customRender: 'index'
},
customHeaderCell: () => {
return {
style: {
'padding-left': '60px !important'
}
}
},
customCell: () => {
return {
style: {
'padding-left': '60px !important'
}
}
}
},
{
title: 'NUCLIDE NAME',
align: 'left',
dataIndex: 'nuclideName'
},
{
title: 'NUCLIDE TYPE',
align: 'left',
dataIndex: 'nuclideType'
},
{
title: 'CREATE TIME',
align: 'left',
dataIndex: 'createTime'
},
]
export default {
data() {
return {
columns,
dataSource: [],
url: {
list: '/sys/defaultNuclide/findPage',
},
ipagination:{
current: 1,
pageSize: 10,
pageSizeOptions: ['10', '20', '30'],
showTotal: (total, range) => {
const { current, pageSize } = this.ipagination
return `Total ${total} items Page ${current} / ${Math.ceil(total / pageSize)}`
},
showQuickJumper: true,
showSizeChanger: true,
total: 0
},
loading: false,
typeOptions: [
{
label: "P",
value: "P"
},
{
label: "G",
value: "G"
}
],
type: undefined,
currType: "P",
targetKeys: [],
visible: false,
dataList: [],
spinning: false
}
},
mounted () {
this.getAuroPeocessList();
},
methods: {
getAuroPeocessList() {
this.loading = true
let params = {
pageNo: this.ipagination.current,
pageSize: this.ipagination.pageSize,
useType: 1,
nuclideType: this.type || ""
}
getAction(this.url.list, params).then(res => {
this.loading = false
if (res.success) {
this.dataSource = res.result.records
this.ipagination.total = res.result.total
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
handleTableChange(pagination, filters, sorter) {
this.ipagination.current = pagination.current
this.ipagination.pageSize = pagination.pageSize
this.getAuroPeocessList();
},
onTypeChange(val) {
this.type = val
this.getAuroPeocessList();
},
onCurrTypeChange(val) {
this.currType = val
this.getNuclideList()
},
handleAdd() {
this.visible = true
this.spinning = true
this.getNuclideListAll()
this.getNuclideList()
},
getNuclideListAll() {
getAction("/gardsNuclLib/allName").then(res => {
this.spinning = false
if (res.success) {
if (res.result.length > 0) {
this.dataList = res.result.map((item,index) => {
return {
key: item,
title: item
}
})
} else {
this.dataList = []
}
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
getNuclideList() {
getAction("/sys/defaultNuclide/allName",{useType:1,nuclideType: this.currType}).then(res => {
if (res.success) {
if (res.result.length > 0) {
this.targetKeys = res.result.map(item => item)
} else {
this.targetKeys = []
}
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
handleChange(targetKeys, direction, moveKeys) {
console.log(targetKeys, direction, moveKeys);
this.targetKeys= targetKeys;
},
handleSearch(dir, value) {
console.log('search:', dir, value)
},
handleOk() {
let params = {
nuclideNames: this.targetKeys,
nuclideType: this.currType,
useType: 1
}
getAction("/sys/defaultNuclide/add",params).then(res => {
this.visible = false
if (res.success) {
this.$message.success(res.message)
this.getAuroPeocessList()
} else {
this.$message.warning("This operation fails. Contact your system administrator")
}
})
},
onCancel() {
this.visible = false
},
},
}
</script>
<style lang="less" scoped>
.header{
height: 54px;
border-top: 1px solid rgba(12, 235, 201, 0.3);
border-bottom: 1px solid rgba(12, 235, 201, 0.3);
display: flex;
align-items: center;
justify-content: space-between;
background-color: rgba(12, 235, 201, 0.05);
padding: 0 10px;
margin-bottom: 18px;
}
.item-label{
display: inline-block;
font-size: 16px;
font-family: ArialMT;
color: #ade6ee;
line-height: 32px;
height: 32px;
margin-right: 10px;
}
.operators {
width: 100%;
justify-content: center;
.ant-btn {
width: 92px;
}
}
.group-assign{
position: relative;
width: 690px;
margin: 0 auto;
.ant-transfer {
margin-bottom: 10px;
::v-deep {
.ant-transfer-list {
width: 291px;
height: 411px;
padding-top: 0;
&-header {
height: 37px;
&-selected {
span:first-child {
display: none;
}
}
&-title {
left: 16px;
}
}
&-body{
height: calc(100% - 37px);
}
&-content {
&-item {
&:hover {
background-color: transparent;
}
}
}
&:last-child {
height: 411px;
position: relative;
// top: 35px;
}
}
.ant-transfer-operation {
.ant-btn {
width: 92px;
height: 26px;
padding: 0;
.anticon {
display: none;
}
span {
margin-left: 0;
}
&:first-child {
margin-bottom: 52px;
&::after {
display: inline-block;
margin-left: 13px;
content: '';
width: 18px;
height: 10px;
background: url(~@/assets/images/system/transfer-right.png) no-repeat;
background-size: contain;
}
}
&:nth-child(2) {
&::before {
display: inline-block;
margin-right: 6px;
content: '';
width: 18px;
height: 10px;
background: url(~@/assets/images/system/transfer-left.png) no-repeat;
background-size: contain;
position: static;
opacity: initial;
}
}
}
}
.ant-transfer-list-header{
position: relative;
.ant-checkbox-wrapper{
position: absolute;
right: 10px;
}
}
.ant-transfer-list-content-item{
position: relative;
.ant-checkbox-wrapper{
position: absolute;
right: 10px;
}
}
.ant-transfer-list-content-item-text{
padding-left: 22px;
}
}
}
}
/deep/.ant-modal-title{
letter-spacing: 1px;
}
</style>

View File

@ -39,7 +39,7 @@
:pagination="ipagination"
:loading="loading"
:rowSelection="{ selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type: 'radio' }"
:scroll="{ y: 'calc(100vh - 365px)' }"
:scroll="{ y: 'calc(100vh - 370px)' }"
@change="handleTableChange"
>
<span slot="action" slot-scope="text, record">

View File

@ -33,7 +33,7 @@
:loading="loading"
@change="handleTableChange"
:selectedRowKeys.sync="selectedRowKeys"
:scroll="{ y: 'calc(100vh - 365px)' }"
:scroll="{ y: 'calc(100vh - 370px)' }"
>
<template slot="index" slot-scope="{ index }">
{{ index + 1 }}