|
@@ -0,0 +1,293 @@
|
|
|
+<template>
|
|
|
+ <div class="__normal-page">
|
|
|
+ <div class="__normal-content">
|
|
|
+ <CusContent
|
|
|
+ v-model:tableHead="tableHead"
|
|
|
+ @handleReset="handleReset"
|
|
|
+ @handleSearch="onSearch"
|
|
|
+ v-model:full="isFull"
|
|
|
+ >
|
|
|
+ <template #fieldOut>
|
|
|
+ <CusForm labelWidth="100px" @handleEnter="onSearch">
|
|
|
+ <CusFormColumn
|
|
|
+ filterSpan="1"
|
|
|
+ label="名称"
|
|
|
+ v-model:param="queryForm.name"/>
|
|
|
+ <CusSearchButtons
|
|
|
+ @handleReset="handleReset"
|
|
|
+ @handleSearch="onSearch"
|
|
|
+ />
|
|
|
+ </CusForm>
|
|
|
+ </template>
|
|
|
+ <template #buttons>
|
|
|
+ <btn-add @click="onAdd"/>
|
|
|
+ <btn-delete @click="onDel()"/>
|
|
|
+ </template>
|
|
|
+ <template #table>
|
|
|
+ <CusTable
|
|
|
+ v-loading="loading"
|
|
|
+ ref="ref_cusTable"
|
|
|
+ :tableData="queryResult.tableData"
|
|
|
+ :tableHead="tableHead"
|
|
|
+ :total="queryResult.total"
|
|
|
+ :page="queryPage.pageNum"
|
|
|
+ :pageSize="queryPage.pageSize"
|
|
|
+ @handlePage="handlePage"
|
|
|
+ @handleSort="handleSort"
|
|
|
+ v-model:selected="selected"
|
|
|
+ v-model:full="isFull"
|
|
|
+ >
|
|
|
+ <template #wkt-column-value="{ scope }">
|
|
|
+ <el-link
|
|
|
+ class="__text-ellipsis"
|
|
|
+ href="javascript:;"
|
|
|
+ type="primary"
|
|
|
+ @click="onMapView(scope.row)"
|
|
|
+ >{{scope.row.wkt}}</el-link>
|
|
|
+ </template>
|
|
|
+ <template #color-column-value="{ scope }">
|
|
|
+ <div :style="`width: 100%;height: 10px;background-color: ${scope.row.color};`"></div>
|
|
|
+ </template>
|
|
|
+ <template #name-column-value="{ scope }">
|
|
|
+ <el-link
|
|
|
+ class="__text-ellipsis"
|
|
|
+ href="javascript:;"
|
|
|
+ type="primary"
|
|
|
+ @click="onView(scope.row)"
|
|
|
+ >{{scope.row.name}}</el-link>
|
|
|
+ </template>
|
|
|
+ <template #caozuo-column-value="{ scope }">
|
|
|
+ <el-link
|
|
|
+ href="javascript:;"
|
|
|
+ type="primary"
|
|
|
+ @click="onEdit(scope.row)"
|
|
|
+ >编辑</el-link>
|
|
|
+ <el-link
|
|
|
+ href="javascript:;"
|
|
|
+ type="danger"
|
|
|
+ @click="onDel(scope.row)"
|
|
|
+ >删除</el-link>
|
|
|
+ </template>
|
|
|
+ </CusTable>
|
|
|
+ </template>
|
|
|
+ </CusContent>
|
|
|
+ </div>
|
|
|
+ <DetailCom v-model:show="showDetail" :transfer="transfer" @refresh="refreshSearch"/>
|
|
|
+ <MapDrawCom v-model:show="showMapDraw" :transfer="transferMapDraw"/>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts">
|
|
|
+import {
|
|
|
+ defineComponent,
|
|
|
+ onMounted,
|
|
|
+ ref,
|
|
|
+ toRefs,
|
|
|
+ reactive,
|
|
|
+ watch,
|
|
|
+ getCurrentInstance,
|
|
|
+ ComponentInternalInstance,
|
|
|
+ computed,
|
|
|
+} from "vue";
|
|
|
+import { useStore } from "vuex";
|
|
|
+import { useRouter, useRoute } from "vue-router";
|
|
|
+import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
+import DetailCom from './detail.vue'
|
|
|
+import MapDrawCom from "./map-draw.vue";
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: "",
|
|
|
+ components: {
|
|
|
+ MapDrawCom,
|
|
|
+ DetailCom,
|
|
|
+ },
|
|
|
+ setup(props, {emit}) {
|
|
|
+ const store = useStore();
|
|
|
+ const that = (getCurrentInstance() as ComponentInternalInstance).appContext.config.globalProperties;
|
|
|
+ const state = reactive({
|
|
|
+ // 加载中
|
|
|
+ loading: false,
|
|
|
+ // 查询分页参数
|
|
|
+ queryPage: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10
|
|
|
+ },
|
|
|
+ // 查询结果
|
|
|
+ queryResult: {
|
|
|
+ total: 0,
|
|
|
+ tableData: []
|
|
|
+ },
|
|
|
+ // 查询表单参数
|
|
|
+ queryForm: <any>{},
|
|
|
+ // 查询表单参数备份
|
|
|
+ back_queryForm: {},
|
|
|
+ // 查询表格排序
|
|
|
+ querySort: {},
|
|
|
+ // 表格可选的情况下,绑定的数组
|
|
|
+ selected: [],
|
|
|
+ // 表格表头
|
|
|
+ tableHead: [
|
|
|
+ {value: 'id', label: 'ID', show:true,},
|
|
|
+ {value: 'name', label: '名称', show:true,},
|
|
|
+ {value: 'wkt', label: 'WKT', show:true,},
|
|
|
+ {value: 'color', label: 'color', show:true,},
|
|
|
+ {value: 'sort', label: '排序', show:true, sort: true},
|
|
|
+ {value: 'updateTime', label: '更新时间', show:true, sort: true},
|
|
|
+ {value: 'caozuo', label: '操作', show:true}
|
|
|
+ ],
|
|
|
+ isFull: false,
|
|
|
+ transfer: {},
|
|
|
+ showDetail: false,
|
|
|
+ showMapDraw: false,
|
|
|
+ transferMapDraw: {}
|
|
|
+ });
|
|
|
+ const ref_cusTable = ref()
|
|
|
+ // 获取字典
|
|
|
+ const initDictionary = () => {
|
|
|
+ }
|
|
|
+ // 查询分页参数改变处理方法
|
|
|
+ const handlePage = ({page, pageSize}: any) => {
|
|
|
+ state.queryPage.pageNum = page
|
|
|
+ state.queryPage.pageSize = pageSize
|
|
|
+ handleSearch(page, pageSize)
|
|
|
+ }
|
|
|
+ // 查询排序参数改变处理方法
|
|
|
+ const handleSort = ({key, value}: any) => {
|
|
|
+ state.querySort = key ? {[key]: value} : {}
|
|
|
+ refreshSearch()
|
|
|
+ }
|
|
|
+ // 列表刷新方法
|
|
|
+ const refreshSearch = () => {
|
|
|
+ state.queryPage.pageNum = 1
|
|
|
+ handleSearch(state.queryPage.pageNum, state.queryPage.pageSize)
|
|
|
+ }
|
|
|
+ // 重置查询表单方法
|
|
|
+ const handleReset = () => {
|
|
|
+ ref_cusTable.value?.reset()
|
|
|
+ state.querySort = {}
|
|
|
+ state.queryForm = {}
|
|
|
+ state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
|
|
|
+ refreshSearch()
|
|
|
+ }
|
|
|
+ // 查询方法
|
|
|
+ const handleSearch = (page = 1, pageSize = 10) => {
|
|
|
+ // 添加分页参数
|
|
|
+ const queryParams: any = {
|
|
|
+ pageNum: page,
|
|
|
+ pageSize: pageSize,
|
|
|
+ }
|
|
|
+ // 添加排序参数
|
|
|
+ for (const [k, v] of Object.entries(state.querySort)) {
|
|
|
+ if (that.$util.isValue(v)) {
|
|
|
+ queryParams['orderByColumn'] = k
|
|
|
+ queryParams['isAsc'] = v === "ascending"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 添加表单参数
|
|
|
+ for (const [k, v] of Object.entries(state.back_queryForm)) {
|
|
|
+ if (that.$util.isValue(v)) {
|
|
|
+ queryParams[k] = v
|
|
|
+ }
|
|
|
+ }
|
|
|
+ state.loading = true
|
|
|
+ that.$api.shipTestStaticPage(queryParams).then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ state.queryResult.tableData = res.data.data
|
|
|
+ state.queryResult.total = res.data.total
|
|
|
+ } else {
|
|
|
+ ElMessage.error(res.msg)
|
|
|
+ }
|
|
|
+ state.loading = false
|
|
|
+ }).catch(() => {
|
|
|
+ state.loading = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 点击查询按钮后
|
|
|
+ const onSearch = () => {
|
|
|
+ state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
|
|
|
+ refreshSearch()
|
|
|
+ }
|
|
|
+ const onAdd = () => {
|
|
|
+ state.transfer = {
|
|
|
+ method: 'add',
|
|
|
+ }
|
|
|
+ state.showDetail = true
|
|
|
+ }
|
|
|
+ const onEdit = (row) => {
|
|
|
+ state.transfer = {
|
|
|
+ method: 'edit',
|
|
|
+ id: row.id
|
|
|
+ }
|
|
|
+ state.showDetail = true
|
|
|
+ }
|
|
|
+ const onView = (row) => {
|
|
|
+ state.transfer = {
|
|
|
+ method: 'view',
|
|
|
+ id: row.id
|
|
|
+ }
|
|
|
+ state.showDetail = true
|
|
|
+ }
|
|
|
+ const onDel = (row: any = null) => {
|
|
|
+ const arr = row ? [row] : state.selected
|
|
|
+ if (arr.length > 0) {
|
|
|
+ ElMessageBox.confirm(`是否删除${arr.length === 1 ? arr[0].name : `${arr.length}条记录`}?`, "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ state.loading = true
|
|
|
+ that.$api.shipTestStaticDel(arr.map(v => v.id).join(',')).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ ElMessage.success('删除成功')
|
|
|
+ refreshSearch()
|
|
|
+ } else {
|
|
|
+ ElMessage.error(res.msg)
|
|
|
+ state.loading = false
|
|
|
+ }
|
|
|
+ }).catch(() => {
|
|
|
+ state.loading = false
|
|
|
+ })
|
|
|
+ }).catch(() => {
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ ElMessage.warning('请至少选择一条记录!')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const onMapView = (row) => {
|
|
|
+ state.transferMapDraw = {
|
|
|
+ isView: true,
|
|
|
+ name: row.name,
|
|
|
+ mapDrawParams: {
|
|
|
+ wkt: row.wkt,
|
|
|
+ pointColor: row.color,
|
|
|
+ featureType: 'Point',
|
|
|
+ text: row.name
|
|
|
+ }
|
|
|
+ }
|
|
|
+ state.showMapDraw = true
|
|
|
+ }
|
|
|
+ onMounted(() => {
|
|
|
+ state.back_queryForm = JSON.parse(JSON.stringify(state.queryForm))
|
|
|
+ initDictionary()
|
|
|
+ refreshSearch()
|
|
|
+ })
|
|
|
+ return {
|
|
|
+ ref_cusTable,
|
|
|
+ ...toRefs(state),
|
|
|
+ handleSearch,
|
|
|
+ refreshSearch,
|
|
|
+ handlePage,
|
|
|
+ handleSort,
|
|
|
+ handleReset,
|
|
|
+ onSearch,
|
|
|
+ onAdd,
|
|
|
+ onEdit,
|
|
|
+ onView,
|
|
|
+ onDel,
|
|
|
+ onMapView
|
|
|
+ }
|
|
|
+ },
|
|
|
+});
|
|
|
+</script>
|
|
|
+<style scoped lang="scss">
|
|
|
+</style>
|