Merge remote-tracking branch 'origin/master' into master

This commit is contained in:
chendaze 2024-04-08 13:50:24 +08:00
commit 1d6f9dc191
5 changed files with 221 additions and 142 deletions

BIN
src/assets/logo-white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -12,7 +12,7 @@
<!-- 1.0.0+ 版本 pro-layout 提供 API我们推荐使用这种方式进行 LOGO title 自定义 --> <!-- 1.0.0+ 版本 pro-layout 提供 API我们推荐使用这种方式进行 LOGO title 自定义 -->
<template v-slot:menuHeaderRender> <template v-slot:menuHeaderRender>
<div> <div>
<img src="~@/assets/logo.png" style='width: 32px ; height: auto'> <img src="~@/assets/logo-white.png" style='width: 32px ; height: auto'>
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
</div> </div>
</template> </template>

View File

@ -1,29 +1,28 @@
<template> <template>
<div id="userLayout" :class="['user-layout-wrapper', isMobile && 'mobile']"> <div id='userLayout' :class="['user-layout-wrapper', isMobile && 'mobile']">
<div class="container"> <div class='container'>
<div class="top"> <div class='top'>
<div class="header"> <div class='header'>
<a href="/"> <div class='logoView'>
<!-- <img src="~@/assets/logo.png" class="logo" alt="logo">--> <img src='~@/assets/logo.png' class='logo' alt='logo'>
<img src="~@/assets/logo.png" class="logo" alt="logo"> <span class='title'>园区管理系统</span>
<span class="title">园区管理系统</span> </div>
</a>
</div> </div>
<div class="desc"> <div class='desc'>
</div> </div>
</div> </div>
<router-view /> <router-view />
<div class="footer"> <div class='footer'>
<div class="links"> <div class='links'>
<a href="_self">帮助</a> <a href='_self'>帮助</a>
<a href="_self">隐私</a> <a href='_self'>隐私</a>
<a href="_self">条款</a> <a href='_self'>条款</a>
</div> </div>
<div class="copyright"> <div class='copyright'>
<a target="_blank" href="https://beian.miit.gov.cn">浙ICP备2021888888号</a> <a target='_blank' href='https://beian.miit.gov.cn'>浙ICP备2021888888号</a>
</div> </div>
</div> </div>
</div> </div>
@ -36,62 +35,55 @@ import { deviceMixin } from '@/store/device-mixin'
export default { export default {
name: 'UserLayout', name: 'UserLayout',
mixins: [deviceMixin], mixins: [deviceMixin],
mounted () { mounted() {
document.body.classList.add('userLayout') document.body.classList.add('userLayout')
}, },
beforeDestroy () { beforeDestroy() {
document.body.classList.remove('userLayout') document.body.classList.remove('userLayout')
} }
} }
</script> </script>
<style lang="less" scoped> <style lang='less' scoped>
#userLayout.user-layout-wrapper { #userLayout.user-layout-wrapper {
height: 100%; height: 100%;
&.mobile { &.mobile {
.container { .container {
.main { .main {
max-width: 368px; max-width: 368px;
width: 98%; width: 98%;
}
} }
} }
}
.container { .container {
width: 100%; width: 100%;
min-height: 100%; min-height: 100%;
background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%; background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
background-size: 100%; background-size: 100%;
padding: 110px 0 144px; padding: 110px 0 144px;
position: relative; position: relative;
a { a {
text-decoration: none; text-decoration: none;
} }
.top { .top {
text-align: center; text-align: center;
.header { .header {
height: 44px; height: 44px;
line-height: 44px; line-height: 44px;
.badge { .logoView {
position: absolute; display: flex;
display: inline-block; justify-content: center;
line-height: 1; align-items: center;
vertical-align: middle;
margin-left: -12px;
margin-top: -10px;
opacity: 0.8;
}
.logo { .logo {
height: 44px; height: 34px;
vertical-align: top;
margin-right: 16px; margin-right: 16px;
border-style: none;
} }
.title { .title {
@ -99,48 +91,51 @@ export default {
color: rgba(0, 0, 0, .85); color: rgba(0, 0, 0, .85);
font-family: Avenir, 'Helvetica Neue', Arial, Helvetica, sans-serif; font-family: Avenir, 'Helvetica Neue', Arial, Helvetica, sans-serif;
font-weight: 600; font-weight: 600;
position: relative;
top: 2px;
} }
} }
.desc {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
margin-top: 12px;
margin-bottom: 40px;
}
} }
.main { .desc {
min-width: 260px; font-size: 14px;
width: 368px; color: rgba(0, 0, 0, 0.45);
margin: 0 auto; margin-top: 12px;
margin-bottom: 40px;
} }
}
.footer { .main {
position: absolute; min-width: 260px;
width: 100%; width: 368px;
bottom: 0; margin: 0 auto;
padding: 0 16px; }
margin: 48px 0 24px;
text-align: center;
.links { .footer {
margin-bottom: 8px; position: absolute;
font-size: 14px; width: 100%;
a { bottom: 0;
color: rgba(0, 0, 0, 0.45); padding: 0 16px;
transition: all 0.3s; margin: 48px 0 24px;
&:not(:last-child) { text-align: center;
margin-right: 40px;
} .links {
margin-bottom: 8px;
font-size: 14px;
a {
color: rgba(0, 0, 0, 0.45);
transition: all 0.3s;
&:not(:last-child) {
margin-right: 40px;
} }
} }
.copyright { }
color: rgba(0, 0, 0, 0.45);
font-size: 14px; .copyright {
} color: rgba(0, 0, 0, 0.45);
font-size: 14px;
} }
} }
} }
}
</style> </style>

View File

@ -1,61 +1,84 @@
<template> <template>
<a-card :bordered="false"> <a-card :bordered='false'>
<div class="table-page-search-wrapper"> <div class='table-page-search-wrapper'>
<a-form layout="inline"> <a-form layout='inline'>
<a-row :gutter="48"> <a-row :gutter='48'>
<a-col :md="5" :sm="15"> <a-col :md='5' :sm='15'>
<a-form-item label="企业名称"> <a-form-item label='所属地区'>
<a-input placeholder="请输入企业名称" v-model="queryParam.name"/> <a-select v-model='queryParam.tenantId' @change='selectTenant'>
<a-select-option v-for='item in tenantList' :key='item.id'>{{ item.name }}</a-select-option>
</a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="5" :sm="15"> <a-col :md='5' :sm='15'>
<a-form-item label="联系人"> <a-form-item label='所属园区'>
<a-input placeholder="请输入联系人" v-model="queryParam.contacts"/> <a-select v-model='queryParam.parkId' @change='selectPark'>
<a-select-option v-for='item in parkList' :key='item.id'>{{ item.name }}</a-select-option>
</a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="5" :sm="15">
<a-form-item label="联系电话"> <a-col :md='5' :sm='15'>
<a-input placeholder="请输入联系电话" v-model="queryParam.phone"/> <a-form-item label='所属楼宇'>
<a-select v-model='queryParam.buildingId' @change='selectBuilding'>
<a-select-option v-for='item in buildingList' :key='item.id'>{{ item.buildingName }}</a-select-option>
</a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24">
<span class="table-page-search-submitButtons"> <a-col :md='5' :sm='15'>
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button> <a-form-item label='企业名称'>
<a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button> <a-input placeholder='请输入企业名称' v-model='queryParam.name' />
</a-form-item>
</a-col>
<a-col :md='5' :sm='15'>
<a-form-item label='联系人'>
<a-input placeholder='请输入联系人' v-model='queryParam.contacts' />
</a-form-item>
</a-col>
<a-col :md='5' :sm='15'>
<a-form-item label='联系电话'>
<a-input placeholder='请输入联系电话' v-model='queryParam.phone' />
</a-form-item>
</a-col>
<a-col :md='8' :sm='24'>
<span class='table-page-search-submitButtons'>
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
<a-button style='margin-left: 8px' @click='() => queryParam = {}'>重置</a-button>
</span> </span>
</a-col> </a-col>
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
<div class="table-operator"> <div class='table-operator'>
<a-button v-if="addEnable" type="primary" icon="plus" @click="handleAdd()">新建</a-button> <a-button v-if='addEnable' type='primary' icon='plus' @click='handleAdd()'>新建</a-button>
<a-dropdown v-if="removeEnable&&selectedRowKeys.length > 0"> <a-dropdown v-if='removeEnable&&selectedRowKeys.length > 0'>
<a-button type="danger" icon="delete" @click="delByIds(selectedRowKeys)">删除</a-button> <a-button type='danger' icon='delete' @click='delByIds(selectedRowKeys)'>删除</a-button>
</a-dropdown> </a-dropdown>
</div> </div>
<s-table <s-table
size="default" size='default'
ref="table" ref='table'
rowKey="id" rowKey='id'
showPagination="true" showPagination='true'
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}'
:columns="columns" :columns='columns'
:data="loadData" :data='loadData'
:scroll="{ x: true }" :scroll='{ x: true }'
> >
<span slot="type" slot-scope="text"> <span slot='type' slot-scope='text'>
{{ text | typeFilter }} {{ text | typeFilter }}
</span> </span>
<span slot="customerStatus" slot-scope="text"> <span slot='customerStatus' slot-scope='text'>
{{ text | customerStatusFilter }} {{ text | customerStatusFilter }}
</span> </span>
<span slot="action" slot-scope="text, record"> <span slot='action' slot-scope='text, record'>
<a v-if="editEnabel" @click="handleEdit(record.id)">编辑</a> <a v-if='editEnabel' @click='handleEdit(record.id)'>编辑</a>
<a-divider type="vertical" /> <a-divider type='vertical' />
<a v-if="removeEnable" @click="delByIds([record.id])">删除</a> <a v-if='removeEnable' @click='delByIds([record.id])'>删除</a>
</span> </span>
</s-table> </s-table>
<customer-modal ref="modal" @ok="handleOk"/> <customer-modal ref='modal' @ok='handleOk' />
</a-card> </a-card>
</template> </template>
@ -63,13 +86,17 @@
import { STable } from '@/components' import { STable } from '@/components'
import { getCustomerList, delCustomer } from '@/api/admin/customer' import { getCustomerList, delCustomer } from '@/api/admin/customer'
import { checkPermission } from '@/utils/permissions' import { checkPermission } from '@/utils/permissions'
import { getTenantList } from '@/api/tenant'
import { getParkList } from '@/api/admin/park'
import { getBuildingList } from '@/api/admin/building'
import { getBuildingDetailList } from '@/api/admin/buildingDetail'
export default { export default {
name: 'TableList', name: 'TableList',
components: { components: {
STable STable
}, },
data () { data() {
return { return {
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
@ -84,17 +111,31 @@ export default {
// / // /
advanced: false, advanced: false,
// //
queryParam: {}, queryParam: {
tenantId: null,
parkId: null,
buildingId: null,
name: null,
contacts: null,
phone: null
},
// //
columns: [ columns: [
{
title: '所属地区',
dataIndex: 'tenantName'
},
{ {
title: '所属园区', title: '所属园区',
dataIndex: 'park.name', dataIndex: 'park.name'
fixed: 'left' },
{
title: '所属楼宇',
dataIndex: 'buildingName'
}, },
{ {
title: '企业名称', title: '企业名称',
dataIndex: 'name' dataIndex: 'name',
}, },
{ {
title: '企业类型', title: '企业类型',
@ -167,18 +208,21 @@ export default {
selectedRows: [], selectedRows: [],
addEnable: checkPermission('admin:customer:add'), addEnable: checkPermission('admin:customer:add'),
editEnabel: checkPermission('admin:customer:edit'), editEnabel: checkPermission('admin:customer:edit'),
removeEnable: checkPermission('admin:customer:remove') removeEnable: checkPermission('admin:customer:remove'),
tenantList: [], //
parkList: [], //
buildingList: [] //
} }
}, },
filters: { filters: {
typeFilter (type) { typeFilter(type) {
const typeMap = { const typeMap = {
'COMPANY': '公司', 'COMPANY': '公司',
'PERSON': '个人' 'PERSON': '个人'
} }
return typeMap[type] return typeMap[type]
}, },
customerStatusFilter (customerStatus) { customerStatusFilter(customerStatus) {
const customerStatusMap = { const customerStatusMap = {
'POTENTIAL': '潜在企业', 'POTENTIAL': '潜在企业',
'PURPOSE': '意向企业', 'PURPOSE': '意向企业',
@ -188,24 +232,64 @@ export default {
return customerStatusMap[customerStatus] return customerStatusMap[customerStatus]
} }
}, },
created () { created() {
//
this.getTenantData()
}, },
methods: { methods: {
onSelectChange (selectedRowKeys, selectedRows) { //
getTenantData() {
getTenantList().then(res => {
this.tenantList = res.rows
})
},
// ->
selectTenant(id) {
console.log('selectTenant', id)
//
this.queryParam.parkId = null //
this.queryParam.buildingId = null //
//
getParkList({
tenantId: id
}).then(res => {
this.parkList = res.rows
})
},
// ->
selectPark(id) {
console.log('selectPark', id)
//
this.queryParam.buildingId = null //
//
getBuildingList({
parkId: id
}).then(res => {
this.buildingList = res.rows
})
},
// ->
selectBuilding(id) {
console.log('selectBuilding', id)
console.log('this.queryParam', this.queryParam)
},
onSelectChange(selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys this.selectedRowKeys = selectedRowKeys
this.selectedRows = selectedRows this.selectedRows = selectedRows
}, },
handleAdd () { handleAdd() {
this.handleEdit() this.handleEdit()
}, },
handleEdit (customerId) { handleEdit(customerId) {
this.$router.push({ name: 'customerEdit', query: { customerId: customerId } }) this.$router.push({ name: 'customerEdit', query: { customerId: customerId } })
}, },
handleOk () { handleOk() {
this.$refs.table.refresh(true) this.$refs.table.refresh(true)
console.log('handleSaveOk') console.log('handleSaveOk')
}, },
delByIds (ids) { delByIds(ids) {
delCustomer({ ids: ids.join(',') }).then(res => { delCustomer({ ids: ids.join(',') }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success('删除成功') this.$message.success('删除成功')
@ -221,7 +305,7 @@ export default {
</script> </script>
<style scoped> <style scoped>
.ant-table td { .ant-table td {
white-space: nowrap; white-space: nowrap;
} }
</style> </style>

View File

@ -35,7 +35,7 @@
</a-input-password> </a-input-password>
</a-form-item> </a-form-item>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="tab2" tab="手机号登录"> <a-tab-pane key="tab2" tab="手机号登录" v-if='false'>
<a-form-item> <a-form-item>
<a-input <a-input
size="large" size="large"