key1_beacon_back/src/views/business/Custom/Regions/index.vue

251 lines
7.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
* @Descripttion: (省市区数据表/tb_region)
* @version: (1.0)
* @Author: (admin)
* @Date: (2023-06-05)
* @LastEditors: (admin)
* @LastEditTime: (2023-06-05)
-->
<template>
<div class="app-container">
<el-row :gutter="24">
<!-- 搜索框 queryParams.需要搜索的字段 -->
<el-form :model="queryParams" label-position="left" style="margin:15px;" inline ref="queryForm" label-width="68px" v-show="showSearch"
@submit.prevent>
<el-form-item label="区划名称" prop="regionName">
<el-input v-model="queryParams.regionName" placeholder="请输入区划名称" clearable @keyup.enter="handleQuery"/>
</el-form-item>
<el-form-item label="区划编码" prop="regionCode">
<el-input v-model="queryParams.regionCode" placeholder="请输入区划编码" clearable @keyup.enter="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="handleQuery">{{ $t('btn.search') }}</el-button>
<el-button icon="refresh" @click="resetQuery">{{ $t('btn.reset') }}</el-button>
</el-form-item>
</el-form>
</el-row>
<!-- 工具按钮 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="info" plain icon="sort" @click="toggleExpandAll">展开/折叠</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="primary" v-hasPermi="['business:region:addOrUpdate']" plain icon="plus" @click="AddDialogVisible = true">
{{ $t('btn.add') }}
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" :disabled="multiple" v-hasPermi="['business:region:delete']" plain icon="delete" @click="handleDelete">
{{ $t('btn.delete') }}
</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="download" @click="handleExport" v-hasPermi="['business:region:export']">
{{ $t('btn.export') }}
</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 表格渲染 prop="对应的字段"-->
<el-table v-loading="loading" :data="dataList" ref="tableRef" highlight-current-row @selection-change="handleSelectionChange" v-if="refreshTable" :default-expand-all="isExpandAll" row-key="regionId" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
<!-- <el-table-column type="selection" width="50" align="center" /> -->
<el-table-column prop="regionName" label="区划名称" align="left" :show-overflow-tooltip="true" />
<el-table-column prop="regionCode" label="区划编码" align="center" :show-overflow-tooltip="true" />
<el-table-column prop="regionLevel" label="层级(1省级 2市级 3区/县级)" align="center" />
<!-- <el-table-column label="操作" width="350" fixed="right">
<template #default="scope">
<el-button type="primary" size="small" icon="edit" @click="handleUpdate(scope.row)"
v-hasPermi="['business:region:addOrUpdate']">编辑</el-button>
<el-button type="danger" size="small" icon="delete" @click="handleDelete(scope.row)"
v-hasPermi="['business:region:delete']">删除</el-button>
<el-button size="small" icon="view" @click="handleDetail(scope.row)">查看</el-button>
</template>
</el-table-column> -->
</el-table>
</div>
<!-- 添加 -->
<AddDialog v-model="AddDialogVisible" :done="() => resetQuery()"></AddDialog>
<!-- 编辑 -->
<EditDialog v-model="EditDialogVisible" :data="EditDialogRow" :done="() => resetQuery()"></EditDialog>
<!-- 详情 -->
<DetailDialog v-model="DetailDialogVisible" :data="DetailDialogRow" :done="() => resetQuery()"></DetailDialog>
</template>
<script setup name="region">
import { ElMessageBox } from 'element-plus'
import modal from '@/plugins/modal.js'
import { exportRegion, regionTreeList , delRegion } from '@/api/business/Custom/Regions/region.js'
import AddDialog from "./components/AddDialog.vue";
import EditDialog from "./components/EditDialog.vue";
import DetailDialog from "./components/DetailDialog.vue";
const AddDialogVisible = ref(false);
const EditDialogVisible = ref(false);
const EditDialogRow = ref({});
const DetailDialogVisible = ref(false);
const DetailDialogRow = ref({});
const { proxy } = getCurrentInstance()
// 选中categoryId数组数组
const ids = ref([])
// 非单选禁用
const single = ref(true)
// 非多个禁用
const multiple = ref(true)
// 显示搜索条件
const showSearch = ref(true)
// 数据列表
const dataList = ref([])
// 总记录数
const total = ref(0)
// 是否加载
const loading = ref(true)
// 是否展开默认全部折叠
const isExpandAll = ref(false)
const refreshTable = ref(true)
const data = reactive({
form: {},
queryParams: {
},
})
const { queryParams } = toRefs(data)
// 业务参数
// 业务方法
//基础方法
// 树形搜索
function selectChild(str, tag, res, parent) {
isExpandAll.value = true
for (let item of tag) {
if (item.regionName.indexOf(str) !== -1) {
if (parent) {
res.push(parent)
} else {
res.push(item)
}
} else if (item.children && item.children.length) {
selectChild(str, item.children, res, parent || item)
}
}
}
// 查询数据
function getList() {
loading.value = true
regionTreeList(queryParams.value).then((res) => {
if (res.code == 200) {
loading.value = false
if (queryParams.value.regionName == undefined) {
isExpandAll.value = false
dataList.value = res.data
} else {
dataList.value = []
selectChild(queryParams.value.regionName, res.data, dataList.value)
}
total.value = res.data.totalNum
}
})
}
// 折叠/展开
function toggleExpandAll() {
refreshTable.value = false
isExpandAll.value = !isExpandAll.value
nextTick(() => {
refreshTable.value = true
})
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.regionId)
single.value = selection.length != 1
multiple.value = !selection.length
}
/** 重置查询操作 */
function resetQuery() {
proxy.resetForm('queryForm')
handleQuery()
}
/** 搜索按钮操作 */
function handleQuery() {
getList()
}
/** 删除按钮操作 */
function handleDelete(row) {
const Ids = row.regionId || ids.value
ElMessageBox.confirm("是否确认删除?", "系统提示", {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: "warning",
})
.then(function () {
return delRegion(Ids)
})
.then(() => {
handleQuery()
modal.msgSuccess("删除成功")
})
.catch(() => { })
}
/** 导出按钮操作 */
function handleExport(row) {
const Ids = row.regionId || ids.value
const name = ref("所有")
if (Ids.length != 0) {
const ids = Object.values(Ids).map(value => String(value));
const str = ids.join(',');
queryParams.value.ids = str
name.value = "选中"
}
ElMessageBox.confirm('是否确认导出' + name.value + '数据?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(function () {
return exportRegion(queryParams.value)
})
.then((response) => {
proxy.download(response.data.path)
})
}
// 修改
function handleUpdate(row) {
EditDialogVisible.value = true
EditDialogRow.value = row
}
// 详情
function handleDetail(row) {
DetailDialogVisible.value = true
DetailDialogRow.value = row
}
handleQuery()
</script>