Add common address page
This commit is contained in:
49
src/api/basic/common-address.js
Normal file
49
src/api/basic/common-address.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function fetchCommonAddressPage(params) {
|
||||
return request({
|
||||
url: '/api/basic/common-address/page',
|
||||
method: 'get',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchCommonAddressDetail(id) {
|
||||
return request({
|
||||
url: `/api/basic/common-address/${id}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function createCommonAddress(data) {
|
||||
return request({
|
||||
url: '/api/basic/common-address/save',
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
export function updateCommonAddress(data) {
|
||||
return request({
|
||||
url: '/api/basic/common-address/update',
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteCommonAddress(ids) {
|
||||
return request({
|
||||
url: '/api/basic/common-address/delete',
|
||||
method: 'post',
|
||||
data: ids,
|
||||
})
|
||||
}
|
||||
|
||||
export function exportCommonAddress(params) {
|
||||
return request({
|
||||
url: '/api/basic/common-address/export',
|
||||
method: 'get',
|
||||
params,
|
||||
responseType: 'blob',
|
||||
})
|
||||
}
|
||||
9
src/router/modules/basic/common-address.js
Normal file
9
src/router/modules/basic/common-address.js
Normal file
@@ -0,0 +1,9 @@
|
||||
export default {
|
||||
path: '/basic/common-address',
|
||||
name: 'CommonAddress',
|
||||
component: () => import('@/views/basic/address/index.vue'),
|
||||
meta: {
|
||||
title: '常用地址',
|
||||
icon: 'location',
|
||||
},
|
||||
}
|
||||
582
src/views/basic/address/index.vue
Normal file
582
src/views/basic/address/index.vue
Normal file
@@ -0,0 +1,582 @@
|
||||
<template>
|
||||
<div class="common-address-page">
|
||||
<el-card class="page-card" shadow="never">
|
||||
<template #header>
|
||||
<div class="page-header">
|
||||
<span>常用地址</span>
|
||||
<div class="actions">
|
||||
<el-button type="primary" @click="handleAdd">新增常用地址</el-button>
|
||||
<el-button @click="handleExport">批量导出</el-button>
|
||||
<el-button type="danger" plain @click="handleBatchDelete">批量删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-form :inline="true" :model="query" class="search-form">
|
||||
<el-form-item label="地址名称">
|
||||
<el-input v-model="query.addressName" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="query.addressType" placeholder="全部" clearable style="width: 150px">
|
||||
<el-option label="常规地址" value="NORMAL" />
|
||||
<el-option label="港口/码头" value="PORT" />
|
||||
<el-option label="铁路车站" value="RAIL" />
|
||||
<el-option label="空港机场" value="AIRPORT" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="详细地址">
|
||||
<el-input v-model="query.detailAddress" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="行政区划">
|
||||
<el-input v-model="query.regionName" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="站点编码">
|
||||
<el-input v-model="query.stationCode" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="组织">
|
||||
<el-select v-model="query.orgId" filterable clearable placeholder="默认当前组织" style="width: 180px">
|
||||
<el-option label="桂物物流" value="1" />
|
||||
<el-option label="运输事业部" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人">
|
||||
<el-input v-model="query.contactName" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系方式">
|
||||
<el-input v-model="query.contactPhone" placeholder="请输入" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="fetchList">查询</el-button>
|
||||
<el-button @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
:data="tableData"
|
||||
border
|
||||
stripe
|
||||
v-loading="loading"
|
||||
@selection-change="onSelectionChange"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column type="selection" width="44" />
|
||||
<el-table-column type="index" label="序号" width="60" />
|
||||
<el-table-column prop="addressName" label="地址名称" min-width="140" />
|
||||
<el-table-column prop="addressNo" label="地址编号" min-width="120" />
|
||||
<el-table-column prop="addressType" label="类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ formatType(row.addressType) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="stationCode" label="站点编码" min-width="110" />
|
||||
<el-table-column prop="detailAddress" label="详细地址" min-width="220" />
|
||||
<el-table-column prop="longitude" label="经度" min-width="110" />
|
||||
<el-table-column prop="latitude" label="纬度" min-width="110" />
|
||||
<el-table-column prop="regionName" label="行政区划" min-width="180" />
|
||||
<el-table-column prop="contactName" label="联系人" min-width="110" />
|
||||
<el-table-column prop="contactPhone" label="联系方式" min-width="140" />
|
||||
<el-table-column prop="orgName" label="组织" min-width="120" />
|
||||
<el-table-column prop="remark" label="备注" min-width="140" />
|
||||
<el-table-column prop="updateTime" label="更新时间" min-width="170" />
|
||||
<el-table-column prop="createTime" label="创建时间" min-width="170" />
|
||||
<el-table-column fixed="right" label="操作" width="160">
|
||||
<template #default="{ row }">
|
||||
<el-button type="text" size="small" @click="openDetail(row)">查看</el-button>
|
||||
<el-button type="text" size="small" @click="openEdit(row)">编辑</el-button>
|
||||
<el-button type="text" size="small" class="danger-text" @click="removeRow(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div class="pager">
|
||||
<el-pagination
|
||||
:current-page="page.current"
|
||||
:page-size="page.size"
|
||||
:total="page.total"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@current-change="handleCurrentChange"
|
||||
@size-change="handleSizeChange"
|
||||
/>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="920px" destroy-on-close>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="90px" :disabled="dialogMode === 'detail'">
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="类型" prop="addressType">
|
||||
<el-radio-group v-model="form.addressType" @change="handleTypeChange">
|
||||
<el-radio label="NORMAL">常规</el-radio>
|
||||
<el-radio label="PORT">港口/码头</el-radio>
|
||||
<el-radio label="RAIL">铁路车站</el-radio>
|
||||
<el-radio label="AIRPORT">空港机场</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="地址名称" prop="addressName">
|
||||
<el-input v-model="form.addressName" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人" prop="contactName">
|
||||
<el-input v-model="form.contactName" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系方式" prop="contactPhone">
|
||||
<el-input v-model="form.contactPhone" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="详细地址" prop="detailAddress">
|
||||
<el-input v-model="form.detailAddress" placeholder="常规地址通过地图选择带出,其他类型从主数据带出" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="站点编码" prop="stationCode">
|
||||
<el-input v-model="form.stationCode" :disabled="form.addressType === 'NORMAL'" placeholder="常规地址显示 /" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织" prop="orgName">
|
||||
<el-select v-model="form.orgId" filterable placeholder="请选择">
|
||||
<el-option label="桂物物流" value="1" />
|
||||
<el-option label="运输事业部" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" :rows="3" maxlength="500" show-word-limit />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div v-if="form.addressType === 'NORMAL'" class="map-panel">
|
||||
<div class="map-panel__header">
|
||||
<span>地图选点</span>
|
||||
<el-input
|
||||
v-model="mapKeyword"
|
||||
placeholder="请输入地址关键字"
|
||||
style="width: 260px"
|
||||
clearable
|
||||
@keyup.enter="searchLocation"
|
||||
/>
|
||||
<el-button type="primary" @click="searchLocation">搜索</el-button>
|
||||
</div>
|
||||
<div class="map-panel__body">
|
||||
<div class="result-list">
|
||||
<div
|
||||
v-for="item in locationOptions"
|
||||
:key="item.key"
|
||||
:class="['result-item', { active: selectedLocationKey === item.key }]"
|
||||
@click="selectLocation(item)"
|
||||
>
|
||||
<div class="result-item__title">{{ item.title }}</div>
|
||||
<div class="result-item__sub">{{ item.address }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="map-placeholder">
|
||||
<div>地图区域</div>
|
||||
<div>这里对接真实地图 SDK 后可实现点击选点、拖拽定位、逆地址解析。</div>
|
||||
<div>当前示例同时回填经度、纬度、行政区划、详细地址。</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-row :gutter="16" class="coords-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="经度" prop="longitude">
|
||||
<el-input v-model="form.longitude" placeholder="自动回填" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="纬度" prop="latitude">
|
||||
<el-input v-model="form.latitude" placeholder="自动回填" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="行政区划" prop="regionName">
|
||||
<el-input v-model="form.regionName" placeholder="自动回填" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<div v-else class="library-panel">
|
||||
<el-alert type="info" :closable="false" title="其他类型地址请从主数据选择后回填站点编码、详细地址、行政区划及坐标。" />
|
||||
<div class="library-panel__actions">
|
||||
<el-button @click="chooseLibraryAddress('PORT')">选择港口/码头</el-button>
|
||||
<el-button @click="chooseLibraryAddress('RAIL')">选择铁路车站</el-button>
|
||||
<el-button @click="chooseLibraryAddress('AIRPORT')">选择空港机场</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||
<el-button v-if="dialogMode !== 'detail'" type="primary" @click="submitForm">确认</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
createCommonAddress,
|
||||
deleteCommonAddress,
|
||||
exportCommonAddress,
|
||||
fetchCommonAddressDetail,
|
||||
fetchCommonAddressPage,
|
||||
updateCommonAddress,
|
||||
} from '@/api/basic/common-address'
|
||||
|
||||
const EMPTY_FORM = {
|
||||
id: null,
|
||||
addressType: 'NORMAL',
|
||||
addressName: '',
|
||||
contactName: '',
|
||||
contactPhone: '',
|
||||
detailAddress: '',
|
||||
stationCode: '/',
|
||||
regionName: '',
|
||||
longitude: '',
|
||||
latitude: '',
|
||||
orgId: '1',
|
||||
orgName: '桂物物流',
|
||||
remark: '',
|
||||
}
|
||||
|
||||
export default {
|
||||
name: 'CommonAddressPage',
|
||||
data() {
|
||||
return {
|
||||
query: {
|
||||
addressName: '',
|
||||
addressType: '',
|
||||
detailAddress: '',
|
||||
regionName: '',
|
||||
stationCode: '',
|
||||
orgId: '',
|
||||
contactName: '',
|
||||
contactPhone: '',
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
page: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
total: 0,
|
||||
},
|
||||
loading: false,
|
||||
tableData: [],
|
||||
selectionRows: [],
|
||||
dialogVisible: false,
|
||||
dialogMode: 'create',
|
||||
dialogTitle: '新建常用地址',
|
||||
form: { ...EMPTY_FORM },
|
||||
mapKeyword: '',
|
||||
locationOptions: [],
|
||||
selectedLocationKey: '',
|
||||
rules: {
|
||||
addressType: [{ required: true, message: '请选择类型', trigger: 'change' }],
|
||||
addressName: [{ required: true, message: '请输入地址名称', trigger: 'blur' }],
|
||||
detailAddress: [{ required: true, message: '请输入详细地址', trigger: 'blur' }],
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.fetchList()
|
||||
},
|
||||
methods: {
|
||||
formatType(type) {
|
||||
const map = {
|
||||
NORMAL: '常规地址',
|
||||
PORT: '港口/码头',
|
||||
RAIL: '铁路车站',
|
||||
AIRPORT: '空港机场',
|
||||
}
|
||||
return map[type] || type || '-'
|
||||
},
|
||||
fetchList() {
|
||||
this.loading = true
|
||||
const params = {
|
||||
...this.query,
|
||||
current: this.page.current,
|
||||
size: this.page.size,
|
||||
}
|
||||
fetchCommonAddressPage(params)
|
||||
.then((res) => {
|
||||
const data = res?.data || res || {}
|
||||
this.tableData = data.records || []
|
||||
this.page.total = data.total || 0
|
||||
})
|
||||
.finally(() => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
resetQuery() {
|
||||
this.query = {
|
||||
addressName: '',
|
||||
addressType: '',
|
||||
detailAddress: '',
|
||||
regionName: '',
|
||||
stationCode: '',
|
||||
orgId: '',
|
||||
contactName: '',
|
||||
contactPhone: '',
|
||||
current: 1,
|
||||
size: 10,
|
||||
}
|
||||
this.page.current = 1
|
||||
this.fetchList()
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.page.current = val
|
||||
this.fetchList()
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.page.size = val
|
||||
this.page.current = 1
|
||||
this.fetchList()
|
||||
},
|
||||
onSelectionChange(rows) {
|
||||
this.selectionRows = rows
|
||||
},
|
||||
handleAdd() {
|
||||
this.dialogMode = 'create'
|
||||
this.dialogTitle = '新建常用地址'
|
||||
this.form = { ...EMPTY_FORM }
|
||||
this.locationOptions = []
|
||||
this.mapKeyword = ''
|
||||
this.selectedLocationKey = ''
|
||||
this.dialogVisible = true
|
||||
},
|
||||
openEdit(row) {
|
||||
this.dialogMode = 'edit'
|
||||
this.dialogTitle = '编辑常用地址'
|
||||
fetchCommonAddressDetail(row.id).then((res) => {
|
||||
this.form = { ...EMPTY_FORM, ...(res?.data || res || {}) }
|
||||
this.dialogVisible = true
|
||||
})
|
||||
},
|
||||
openDetail(row) {
|
||||
this.dialogMode = 'detail'
|
||||
this.dialogTitle = '常用地址详情'
|
||||
fetchCommonAddressDetail(row.id).then((res) => {
|
||||
this.form = { ...EMPTY_FORM, ...(res?.data || res || {}) }
|
||||
this.dialogVisible = true
|
||||
})
|
||||
},
|
||||
handleTypeChange(val) {
|
||||
if (val === 'NORMAL') {
|
||||
this.form.stationCode = '/'
|
||||
} else if (!this.form.stationCode || this.form.stationCode === '/') {
|
||||
this.form.stationCode = ''
|
||||
}
|
||||
},
|
||||
searchLocation() {
|
||||
const base = [
|
||||
{ key: 'a', title: `${this.mapKeyword || 'XX园区'}`, address: '广西南宁市江南区龙岗大道21号', lng: '108.348610', lat: '22.721864', regionName: '广西壮族自治区/南宁市/江南区' },
|
||||
{ key: 'b', title: `${this.mapKeyword || 'XX园区'}A门`, address: '广西南宁市江南区龙岗大道21号', lng: '108.349020', lat: '22.722012', regionName: '广西壮族自治区/南宁市/江南区' },
|
||||
{ key: 'c', title: `${this.mapKeyword || 'XX园区'}C门`, address: '广西南宁市江南区龙岗大道21号', lng: '108.347800', lat: '22.721400', regionName: '广西壮族自治区/南宁市/江南区' },
|
||||
]
|
||||
this.locationOptions = base
|
||||
this.selectLocation(base[0])
|
||||
},
|
||||
selectLocation(item) {
|
||||
this.selectedLocationKey = item.key
|
||||
this.form.addressName = this.form.addressType === 'NORMAL' ? item.title : this.form.addressName
|
||||
this.form.detailAddress = item.address
|
||||
this.form.longitude = item.lng
|
||||
this.form.latitude = item.lat
|
||||
this.form.regionName = item.regionName
|
||||
},
|
||||
chooseLibraryAddress(type) {
|
||||
const map = {
|
||||
PORT: {
|
||||
addressName: '舟山港',
|
||||
stationCode: 'CNNGB',
|
||||
detailAddress: '浙江省舟山市普陀区沈家门街道港口大道18号',
|
||||
regionName: '浙江省/舟山市/普陀区',
|
||||
longitude: '122.320000',
|
||||
latitude: '29.988000',
|
||||
},
|
||||
RAIL: {
|
||||
addressName: '柳州站',
|
||||
stationCode: 'LZZ',
|
||||
detailAddress: '广西柳州市柳北区站前路',
|
||||
regionName: '广西壮族自治区/柳州市/柳北区',
|
||||
longitude: '109.410000',
|
||||
latitude: '24.327000',
|
||||
},
|
||||
AIRPORT: {
|
||||
addressName: '成都双流机场',
|
||||
stationCode: 'CTU',
|
||||
detailAddress: '四川省成都市双流区机场路',
|
||||
regionName: '四川省/成都市/双流区',
|
||||
longitude: '103.956000',
|
||||
latitude: '30.578000',
|
||||
},
|
||||
}
|
||||
const picked = map[type]
|
||||
if (picked) {
|
||||
this.form.addressType = type
|
||||
this.form.addressName = picked.addressName
|
||||
this.form.stationCode = picked.stationCode
|
||||
this.form.detailAddress = picked.detailAddress
|
||||
this.form.regionName = picked.regionName
|
||||
this.form.longitude = picked.longitude
|
||||
this.form.latitude = picked.latitude
|
||||
}
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
const action = this.form.id ? updateCommonAddress : createCommonAddress
|
||||
action(this.form).then(() => {
|
||||
this.dialogVisible = false
|
||||
this.fetchList()
|
||||
this.$message.success('保存成功')
|
||||
})
|
||||
})
|
||||
},
|
||||
removeRow(row) {
|
||||
this.$confirm('确认删除该常用地址吗?删除后不可恢复。', '提示', { type: 'warning' })
|
||||
.then(() => deleteCommonAddress([row.id]))
|
||||
.then(() => {
|
||||
this.$message.success('删除成功')
|
||||
this.fetchList()
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
handleBatchDelete() {
|
||||
const ids = this.selectionRows.map((item) => item.id)
|
||||
if (!ids.length) {
|
||||
this.$message.warning('请选择要删除的数据')
|
||||
return
|
||||
}
|
||||
this.$confirm('确认批量删除选中的常用地址吗?', '提示', { type: 'warning' })
|
||||
.then(() => deleteCommonAddress(ids))
|
||||
.then(() => {
|
||||
this.$message.success('删除成功')
|
||||
this.fetchList()
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
handleExport() {
|
||||
exportCommonAddress(this.query).then(() => {
|
||||
this.$message.success('已发起导出')
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.page-card {
|
||||
min-height: calc(100vh - 32px);
|
||||
}
|
||||
|
||||
.page-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.search-form {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.pager {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 16px 0 0;
|
||||
}
|
||||
|
||||
.danger-text {
|
||||
color: #f56c6c;
|
||||
}
|
||||
|
||||
.map-panel {
|
||||
margin-top: 8px;
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 4px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.map-panel__header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.map-panel__body {
|
||||
display: grid;
|
||||
grid-template-columns: 260px 1fr;
|
||||
gap: 12px;
|
||||
min-height: 260px;
|
||||
}
|
||||
|
||||
.result-list {
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.result-item {
|
||||
padding: 10px 12px;
|
||||
border-bottom: 1px solid #f0f2f5;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.result-item.active {
|
||||
background: #ecf5ff;
|
||||
}
|
||||
|
||||
.result-item__title {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.result-item__sub {
|
||||
margin-top: 4px;
|
||||
color: #909399;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.map-placeholder {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 1px dashed #dcdfe6;
|
||||
border-radius: 4px;
|
||||
color: #606266;
|
||||
gap: 8px;
|
||||
background: #fafcff;
|
||||
}
|
||||
|
||||
.coords-row {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.library-panel {
|
||||
margin-top: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.library-panel__actions {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user