zhangwei
3 天以前 9488f2bcb346c32c64f2c4eb5814fece8726b363
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<template>
    <div class="sys-region-container">
        <splitpanes class="default-theme">
            <pane size="20">
                <RegionTree ref="regionTreeRef" @node-click="nodeClick" />
            </pane>
            <pane size="80">
                <el-card class="full-table" shadow="hover">
                    <el-form :model="state.queryParams" ref="queryForm" :inline="true">
                        <el-form-item label="行政名称">
                            <el-input v-model="state.queryParams.name" placeholder="行政名称" clearable />
                        </el-form-item>
                        <el-form-item label="行政代码">
                            <el-input v-model="state.queryParams.code" placeholder="行政代码" clearable />
                        </el-form-item>
                        <el-form-item>
                            <el-button-group>
                                <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysRegion:page'"> 查询 </el-button>
                                <el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
                            </el-button-group>
                        </el-form-item>
                        <el-form-item>
                            <el-button type="primary" icon="ele-Plus" @click="openAddRegion" v-auth="'sysRegion:add'"> 新增 </el-button>
                            <el-button type="danger" icon="ele-Lightning" @click="handlSync" v-auth="'sysRegion:sync'"> 同步统计局 </el-button>
                        </el-form-item>
                    </el-form>
                    <el-table :data="state.regionData" style="width: 100%" v-loading="state.loading" row-key="id" default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" border>
                        <el-table-column prop="name" label="行政名称" align="center" show-overflow-tooltip />
                        <el-table-column prop="code" label="行政代码" align="center" show-overflow-tooltip />
                        <el-table-column prop="cityCode" label="区号" align="center" show-overflow-tooltip />
                        <el-table-column prop="orderNo" label="排序" width="70" align="center" show-overflow-tooltip />
                        <el-table-column prop="remark" label="备注" header-align="center" show-overflow-tooltip />
                        <el-table-column label="操作" width="140" fixed="right" align="center" show-overflow-tooltip>
                            <template #default="scope">
                                <el-button icon="ele-Edit" size="small" text type="primary" @click="openEditRegion(scope.row)" v-auth="'sysRegion:update'"> 编辑 </el-button>
                                <el-button icon="ele-Delete" size="small" text type="danger" @click="delRegion(scope.row)" v-auth="'sysRegion:delete'"> 删除 </el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                    <el-pagination
                        v-model:currentPage="state.tableParams.page"
                        v-model:page-size="state.tableParams.pageSize"
                        :total="state.tableParams.total"
                        :page-sizes="[10, 20, 50, 100]"
                        size="small"
                        background
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        layout="total, sizes, prev, pager, next, jumper"
                    />
                </el-card>
            </pane>
        </splitpanes>
 
        <EditRegion ref="editRegionRef" :title="state.editRegionTitle" @handleQuery="handleQuery" />
    </div>
</template>
 
<script lang="ts" setup name="sysRegion">
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage, ElNotification } from 'element-plus';
import { Splitpanes, Pane } from 'splitpanes';
import 'splitpanes/dist/splitpanes.css';
 
import RegionTree from '/@/views/system/region/component/regionTree.vue';
import EditRegion from '/@/views/system/region/component/editRegion.vue';
 
import { getAPI } from '/@/utils/axios-utils';
import { SysRegionApi } from '/@/api-services/api';
import { SysRegion } from '/@/api-services/models';
 
const editRegionRef = ref<InstanceType<typeof EditRegion>>();
const regionTreeRef = ref<InstanceType<typeof RegionTree>>();
const state = reactive({
    loading: false,
    regionData: [] as Array<SysRegion>, // 列表数据
    queryParams: {
        id: -1,
        pid: undefined,
        name: undefined,
        code: undefined,
    },
    tableParams: {
        page: 1,
        pageSize: 50,
        total: 0 as any,
    },
    editRegionTitle: '',
});
 
onMounted(async () => {
    await handleQuery();
});
 
// 查询操作
const handleQuery = async () => {
    state.loading = true;
    let params = Object.assign(state.queryParams, state.tableParams);
    let res = await getAPI(SysRegionApi).apiSysRegionPagePost(params);
    state.regionData = res.data.result?.items ?? [];
    state.tableParams.total = res.data.result?.total;
    state.loading = false;
};
 
// 重置操作
const resetQuery = async () => {
    state.queryParams.id = -1;
    state.queryParams.pid = undefined;
    state.queryParams.name = undefined;
    state.queryParams.code = undefined;
    await handleQuery();
};
 
// 打开新增页面
const openAddRegion = () => {
    state.editRegionTitle = '添加行政区域';
    editRegionRef.value?.openDialog({ orderNo: 100 });
};
 
// 打开编辑页面
const openEditRegion = (row: any) => {
    state.editRegionTitle = '编辑行政区域';
    editRegionRef.value?.openDialog(row);
};
 
// 删除
const delRegion = (row: any) => {
    ElMessageBox.confirm(`确定删除行政区域:【${row.name}】?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
    })
        .then(async () => {
            await getAPI(SysRegionApi).apiSysRegionDeletePost({ id: row.id });
            await handleQuery();
            // 编辑删除后更新机构数据
            regionTreeRef.value?.initTreeData();
            ElMessage.success('删除成功');
        })
        .catch(() => {});
};
 
// 树组件点击
const nodeClick = async (node: any) => {
    state.queryParams.pid = node.id;
    state.queryParams.name = undefined;
    state.queryParams.code = undefined;
    await handleQuery();
};
 
// 同步国家统计局操作
const handlSync = async () => {
    ElMessageBox.confirm('确认同步国家统计局行政区域数据?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
    })
        .then(async () => {
            ElNotification({
                title: '提示',
                message: '后台努力同步中...',
                type: 'success',
                position: 'bottom-right',
            });
            await getAPI(SysRegionApi).apiSysRegionSyncPost({ timeout: 1000 * 60 * 30 });
        })
        .catch(() => {});
};
 
// 改变页面容量
const handleSizeChange = async (val: number) => {
    state.tableParams.pageSize = val;
    await handleQuery();
};
 
// 改变页码序号
const handleCurrentChange = async (val: number) => {
    state.tableParams.page = val;
    await handleQuery();
};
</script>