|
@@ -1,81 +1,122 @@
|
|
|
<template>
|
|
|
- <n-divider dashed title-placement="left">测站点</n-divider>
|
|
|
<div class="hc-layout-box">
|
|
|
- <n-card class="hc-card-overflow-p-box" :segmented="{content: true}">
|
|
|
+ <HcCard :scrollbar="false" actionSize="lg">
|
|
|
<template #header>
|
|
|
- <div class="hc-card-header flex items-center">
|
|
|
- <div class="w-60">
|
|
|
- <n-input v-model:value="searchForm.name" type="text" placeholder="请输入测站点或关键字进行搜索" clearable/>
|
|
|
- </div>
|
|
|
- <n-button type="primary" class="px-5 ml-3" @click="searchChange">搜索</n-button>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_add?.textInfo" v-if="btn_add">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-10" @click="AddRowClick">新增</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_add?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_import?.textInfo" v-if="btn_import">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-3" @click="importModalClick">导入</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_import?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_export?.textInfo" v-if="btn_export">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-3" @click="exportModalClick">导出</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_export?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
+ <HcTooltip keys="gauge-station-add">
|
|
|
+ <el-button type="primary" hc-btn @click="AddRowClick">
|
|
|
+ <HcIcon name="drive_folder_upload"/>
|
|
|
+ <span>新增</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-station-import">
|
|
|
+ <el-button hc-btn @click="importModalClick">
|
|
|
+ <HcIcon name="download"/>
|
|
|
+ <span>导入</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-station-export">
|
|
|
+ <el-button hc-btn :loading="downloadLoading" @click="exportModalClick">
|
|
|
+ <HcIcon name="print"/>
|
|
|
+ <span>导出</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <div class="w-60 ml-6">
|
|
|
+ <el-input v-model="searchForm.name" size="large" placeholder="请输入测站点或关键字进行搜索" clearable @keyup="keyUpEvent"/>
|
|
|
+ </div>
|
|
|
+ <div class="ml-2">
|
|
|
+ <el-button type="primary" size="large" @click="searchClick">搜索</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <template #header-extra>
|
|
|
- <HcTabs :datas="tabsTypeData" :keys="tabsTypeKey" @change="tabsTypeChange"/>
|
|
|
+ <template #extra>
|
|
|
+ <HcNewSwitch :datas="tabsTypeData" :keys="tabsTypeKey" @change="tabsTypeChange"/>
|
|
|
</template>
|
|
|
- <div v-if="tabsTypeKey==='1'">
|
|
|
- <n-data-table :columns="traverseColumns" :data="traverseTable" :pagination="false" :row-key="row => row.name" :single-line="false" striped/>
|
|
|
- </div>
|
|
|
- <div v-if="tabsTypeKey==='0'">
|
|
|
- <n-data-table :columns="levelColumns" :data="levelTable" :pagination="false" :row-key="row => row.name" :single-line="false" striped/>
|
|
|
- </div>
|
|
|
+ <el-scrollbar>
|
|
|
+ <div class="hc-table-ref-box" v-if="tabsTypeKey === '0'">
|
|
|
+ <el-table ref="recycleTableRef" hc :data="levelTable" :loading="tableLoading" stripe>
|
|
|
+ <el-table-column prop="num" label="序号" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ {{scope.$index + 1}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="name" label="测站点名称" />
|
|
|
+ <el-table-column prop="h" label="高程(m)"/>
|
|
|
+ <el-table-column prop="level" label="等级"/>
|
|
|
+ <el-table-column prop="remark" label="备注"/>
|
|
|
+ <el-table-column label="操作" align="center" width="130">
|
|
|
+ <template #default="scope">
|
|
|
+ <HcTooltip keys="gauge-station-edit">
|
|
|
+ <el-button type="primary" size="small" text @click="handleLevelEdit(scope.row)">编辑</el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-station-del">
|
|
|
+ <el-button type="danger" size="small" text @click="handleLevelDelete(scope.row)">删除</el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <div class="hc-table-ref-box" v-if="tabsTypeKey === '1'">
|
|
|
+ <el-table ref="recycleTableRef" hc :data="traverseTable" :loading="tableLoading" stripe>
|
|
|
+ <el-table-column prop="num" label="序号" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ {{scope.$index + 1}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="name" label="测站点名称" />
|
|
|
+ <el-table-column prop="x" label="X坐标(m)"/>
|
|
|
+ <el-table-column prop="y" label="Y坐标(m)"/>
|
|
|
+ <el-table-column prop="h" label="高程(m)"/>
|
|
|
+ <el-table-column prop="level" label="等级"/>
|
|
|
+ <el-table-column prop="remark" label="备注"/>
|
|
|
+ <el-table-column label="操作" align="center" width="130">
|
|
|
+ <template #default="scope">
|
|
|
+ <HcTooltip keys="gauge-station-edit">
|
|
|
+ <el-button type="primary" size="small" text @click="handleTraverseEdit(scope.row)">编辑</el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-station-del">
|
|
|
+ <el-button type="danger" size="small" text @click="handleTraverseDelete(scope.row)">删除</el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-scrollbar>
|
|
|
<template #action>
|
|
|
- <HcPage :pages="searchForm" @change="pageChange"/>
|
|
|
+ <HcPages :pages="searchForm" @change="pageChange"/>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </div>
|
|
|
- <!--新增/编辑 弹框-->
|
|
|
- <n-modal v-model:show="showRowModal">
|
|
|
- <n-card class="w-750" :title="rowModalTitle()" :segmented="{content: true}">
|
|
|
- <n-form ref="formRowRef" :model="formRowValue" :rules="rulesRow" label-placement="left" label-width="auto" size="large">
|
|
|
- <n-form-item label="点名称" path="name">
|
|
|
- <n-input class="flex-1" v-model:value="formRowValue.name" placeholder="请输入点名称"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="X坐标(m)" path="x" v-if="tabsTypeKey === '1'">
|
|
|
- <n-input class="flex-1" v-model:value="formRowValue.x" placeholder="请输入X坐标(m)"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="Y坐标(m)" path="y" v-if="tabsTypeKey === '1'">
|
|
|
- <n-input class="flex-1" v-model:value="formRowValue.y" placeholder="请输入Y坐标(m)"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="高程(m)" path="h">
|
|
|
- <n-input class="flex-1" v-model:value="formRowValue.h" placeholder="请输入高程(m)"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="等级">
|
|
|
- <n-select class="flex-1" v-model:value="formRowValue.level" :options="personData" placeholder="请选择等级"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="备注">
|
|
|
- <n-input v-model:value="formRowValue.remark" placeholder="请输入文字说明" type="textarea" :autosize="{minRows: 3,maxRows: 5}"/>
|
|
|
- </n-form-item>
|
|
|
- </n-form>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showRowModal = false">取消</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-4" :loading="saveFormLoading" @click="saveFormClick">保存</n-button>
|
|
|
+ </HcCard>
|
|
|
+ <!--新增/编辑 弹框-->
|
|
|
+ <el-dialog v-model="showRowModal" :title="`${formRowValue?.id ? '编辑' : '新增'}${tabsTypeKey==='1'?'导线点':'水准点'}`" width="47rem" custom-class="hc-modal-border">
|
|
|
+ <el-form ref="formRowRef" :model="formRowValue" :rules="rulesRow" label-width="auto" size="large">
|
|
|
+ <el-form-item label="点名称" prop="name">
|
|
|
+ <el-input v-model="formRowValue.name" placeholder="请输入点名称"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="X坐标(m)" prop="x" v-if="tabsTypeKey === '1'">
|
|
|
+ <el-input v-model="formRowValue.x" placeholder="请输入X坐标(m)"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="Y坐标(m)" prop="y" v-if="tabsTypeKey === '1'">
|
|
|
+ <el-input v-model="formRowValue.y" placeholder="请输入Y坐标(m)"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="高程(m)" prop="h">
|
|
|
+ <el-input v-model="formRowValue.h" placeholder="请输入高程(m)"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="等级">
|
|
|
+ <el-select v-model="formRowValue.level" block>
|
|
|
+ <el-option v-for="item in personData" :label="item.label" :value="item.value" placeholder="请选择等级"/>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注">
|
|
|
+ <el-input type="textarea" v-model="formRowValue.remark" placeholder="请输入文字说明" :autosize="{ minRows: 3, maxRows: 5 }"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button size="large" @click="showRowModal = false">取消</el-button>
|
|
|
+ <el-button type="primary" hc-btn :loading="saveFormLoading" @click="saveFormClick">提交</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
- <!--导入 弹框-->
|
|
|
- <n-modal v-model:show="showImportModal">
|
|
|
- <n-card class="w-750" :title="'导入' + getModalTitle()" :segmented="{content: true}">
|
|
|
+ </el-dialog>
|
|
|
+ <!--导入 弹框-->
|
|
|
+ <el-dialog v-model="showImportModal" :title="`导入${tabsTypeKey==='1'?'导线点':'水准点'}`" width="47rem" custom-class="hc-modal-border">
|
|
|
<div class="hc-import-modal-box">
|
|
|
<div class="tip-box">
|
|
|
<span>请先下载导入模板(</span>
|
|
@@ -84,9 +125,12 @@
|
|
|
<span> ),按模板样式编辑测站点后,再点击"选择文件"按钮选择编辑好的文件,并点击底部的"确认导入"按钮即可导入成功!</span>
|
|
|
</div>
|
|
|
<div class="upload-box">
|
|
|
- <n-upload ref="uploadRef" :action="action" :headers="getTokenHeader()" :data="upData" :max="1" :accept="accept" :default-upload="false" multiple @change="handleUploadChange" @finish="uploadFinish">
|
|
|
- <n-button type="primary" class="px-4">选择文件</n-button>
|
|
|
- </n-upload>
|
|
|
+ <el-upload ref="uploadRef" :action="action" :headers="getTokenHeader()" :accept="accept" :data="addition" :limit="1" :auto-upload="false" v-model:file-list="fileList"
|
|
|
+ :on-exceed="handleUploadExceed" :on-progress="handleUploadProgress" :on-success="handleUploadFinish" :on-error="handleUploadError">
|
|
|
+ <template #trigger>
|
|
|
+ <el-button type="primary" :loading="importLoading">选择文件</el-button>
|
|
|
+ </template>
|
|
|
+ </el-upload>
|
|
|
</div>
|
|
|
<div class="text-orange">导入模板格式示例:</div>
|
|
|
<div class="demo-img-box" v-if="tabsTypeKey==='1'">
|
|
@@ -96,396 +140,350 @@
|
|
|
<img src="../../assets/view/152211@2x.png" alt="">
|
|
|
</div>
|
|
|
</div>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-4" @click="showImportModal = false">取消</n-button>
|
|
|
- <n-button type="primary" :disabled="!fileListLength" :loading="importLoading" class="px-4 ml-4" @click="handleImportClick">确认导入</n-button>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button size="large" @click="showImportModal = false">取消</el-button>
|
|
|
+ <el-button type="primary" hc-btn :disabled="fileList.length <= 0" :loading="importLoading" @click="handleImportClick">确认导入</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import {ref,watch,onMounted} from "vue";
|
|
|
+import {ref,onMounted} from "vue";
|
|
|
+import {useRouter, useRoute} from 'vue-router'
|
|
|
import {useAppStore} from "~src/store/index";
|
|
|
-import HcTabs from "~com/plugins/naive/HcTabs.vue"
|
|
|
-import HcPage from "~com/plugins/naive/HcPage.vue"
|
|
|
-//import {renderTableEditDelButton} from "~src/plugins/renderele";
|
|
|
+import stationApi from '~api/gauge/station';
|
|
|
import {getTokenHeader} from '~src/api/request/header';
|
|
|
-import station from '~api/gauge/station';
|
|
|
-import {download} from "~src/utils/lib/tools";
|
|
|
+import {getArrValue, downloadBlob, formValidate} from "vue-utils-plus"
|
|
|
+import { genFileId } from 'element-plus'
|
|
|
|
|
|
//初始变量
|
|
|
+const router = useRouter()
|
|
|
+const useRoutes = useRoute()
|
|
|
const useAppState = useAppStore()
|
|
|
-const projectId = ref(useAppState.getProjectId);
|
|
|
-const contractId = ref(useAppState.getContractId);
|
|
|
|
|
|
-//按钮气泡开关
|
|
|
-const bubbleVal = ref(useAppState.getBubble);
|
|
|
+//路由参数
|
|
|
+const routerQuery = useRoutes?.query;
|
|
|
+const typeName = routerQuery?.type || '0'
|
|
|
|
|
|
-//监听
|
|
|
-watch(() => [
|
|
|
- useAppState.getProjectId,
|
|
|
- useAppState.getContractId,
|
|
|
- useAppState.getBubble,
|
|
|
-], ([UserProjectId,UserContractId,Bubble]) => {
|
|
|
- projectId.value = UserProjectId
|
|
|
- contractId.value = UserContractId
|
|
|
- //按钮气泡开关
|
|
|
- bubbleVal.value = Bubble
|
|
|
-})
|
|
|
-
|
|
|
-//获取气泡数据
|
|
|
-const getButtonsVal = (value) => {
|
|
|
- return useAppState.getButtonsVal(value)
|
|
|
-}
|
|
|
-
|
|
|
-//气泡数据
|
|
|
-const btn_add = ref(getButtonsVal('gauge-station-add'))
|
|
|
-const btn_import = ref(getButtonsVal('gauge-station-import'))
|
|
|
-const btn_export = ref(getButtonsVal('gauge-station-export'))
|
|
|
-const btn_edit = ref(getButtonsVal('gauge-station-edit'))
|
|
|
-const btn_del = ref(getButtonsVal('gauge-station-del'))
|
|
|
-
|
|
|
-//搜索表单
|
|
|
-const searchForm = ref({
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- name: null, type: '1',
|
|
|
- current: 1, size: 20, total: 0
|
|
|
-})
|
|
|
+//全局变量
|
|
|
+const projectId = ref(useAppState.getProjectId);
|
|
|
+const contractId = ref(useAppState.getContractId);
|
|
|
|
|
|
-//结构类型tab数据和相关处理
|
|
|
-const tabsTypeKey = ref('1')
|
|
|
+//类型tab数据和相关处理
|
|
|
+const tabsTypeKey = ref(typeName)
|
|
|
const tabsTypeData = ref([
|
|
|
{key:'0', name: '水准点'},
|
|
|
{key:'1', name: '导线点'}
|
|
|
]);
|
|
|
-const tabsTypeChange = (value) => {
|
|
|
- tabsTypeKey.value = value;
|
|
|
- searchForm.value.type = value;
|
|
|
+const tabsTypeChange = (item) => {
|
|
|
+ tabsTypeKey.value = item?.key
|
|
|
+ searchForm.value.type = item?.key
|
|
|
searchForm.value.current = 1
|
|
|
getTableData()
|
|
|
+ //路由跳转
|
|
|
+ router.push({
|
|
|
+ path: useRoutes.path,
|
|
|
+ query: {
|
|
|
+ type: item?.key
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
-
|
|
|
//渲染完成
|
|
|
onMounted(() => {
|
|
|
+ searchForm.value.type = typeName
|
|
|
getTableData()
|
|
|
})
|
|
|
|
|
|
-//新增编辑
|
|
|
-const showRowModal = ref(false)
|
|
|
-const formRowRef = ref(null)
|
|
|
-const formRowValue = ref({
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- type: tabsTypeKey.value,
|
|
|
- name: '', x: '', y: '', h: '', level: null, remark: null
|
|
|
+//搜索表单
|
|
|
+const searchForm = ref({
|
|
|
+ projectId: projectId.value, contractId: contractId.value, name: null, type: '0',
|
|
|
+ current: 1, size: 20, total: 0
|
|
|
})
|
|
|
+
|
|
|
+//回车搜索
|
|
|
+const keyUpEvent = (e) => {
|
|
|
+ if (e.key === "Enter") {
|
|
|
+ searchForm.value.current = 1;
|
|
|
+ getTableData()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//重新搜索数据
|
|
|
+const searchClick = () => {
|
|
|
+ searchForm.value.current = 1
|
|
|
+ getTableData()
|
|
|
+}
|
|
|
+
|
|
|
+//分页被点击
|
|
|
+const pageChange = ({current, size}) => {
|
|
|
+ searchForm.value.current = current
|
|
|
+ searchForm.value.size = size
|
|
|
+ getTableData()
|
|
|
+}
|
|
|
+
|
|
|
+//获取数据
|
|
|
+const traverseTable = ref([]) //导线点
|
|
|
+const levelTable = ref([]) //水准点
|
|
|
+const tableLoading = ref(false)
|
|
|
+const getTableData = async () => {
|
|
|
+ tableLoading.value = true
|
|
|
+ const { error, code, data } = await stationApi.queryListData({
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ ...searchForm.value
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ tableLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ let records = getArrValue(data['records'])
|
|
|
+ if (tabsTypeKey.value === '0') {
|
|
|
+ levelTable.value = records
|
|
|
+ } else if (tabsTypeKey.value === '1') {
|
|
|
+ traverseTable.value = records
|
|
|
+ }
|
|
|
+ searchForm.value.total = data.total || 0
|
|
|
+ } else {
|
|
|
+ levelTable.value = []
|
|
|
+ traverseTable.value = []
|
|
|
+ searchForm.value.total = 0
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//等级
|
|
|
const personData = ref([
|
|
|
{label: "一级", value: "一级"}, {label: "二级", value: "二级"},
|
|
|
{label: "三级", value: "三级"}, {label: "四级", value: "四级"}
|
|
|
])
|
|
|
+
|
|
|
+//新增 / 编辑 配置
|
|
|
+const showRowModal = ref(false)
|
|
|
+const formRowRef = ref(null)
|
|
|
+const formRowValue = ref({name: '', x: '', y: '', h: '', level: null, remark: null})
|
|
|
const rulesRow = {
|
|
|
name: {
|
|
|
required: true,
|
|
|
- trigger: ["blur", "input"],
|
|
|
+ trigger: "blur",
|
|
|
message: "请输入测站点名称"
|
|
|
},
|
|
|
x: {
|
|
|
required: true,
|
|
|
- trigger: ["blur", "input"],
|
|
|
+ trigger: "blur",
|
|
|
message: "请输入X坐标(m)"
|
|
|
},
|
|
|
y: {
|
|
|
required: true,
|
|
|
- trigger: ["blur", "input"],
|
|
|
+ trigger: "blur",
|
|
|
message: "请输入Y坐标(m)"
|
|
|
},
|
|
|
h: {
|
|
|
required: true,
|
|
|
- trigger: ["blur", "input"],
|
|
|
+ trigger: "blur",
|
|
|
message: "请输入高程(m)"
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//卡片弹窗标题
|
|
|
-const rowModalTitle = () => {
|
|
|
- let formType = '新增', tabType = '异常了';
|
|
|
- if (formRowValue.value.id) {
|
|
|
- formType = '编辑'
|
|
|
- }
|
|
|
- if (tabsTypeKey.value === '1') {
|
|
|
- tabType = '导线点'
|
|
|
- } else if (tabsTypeKey.value === '0') {
|
|
|
- tabType = '水准点'
|
|
|
- }
|
|
|
- return formType + tabType
|
|
|
-}
|
|
|
-
|
|
|
-//导线点的 表格表头
|
|
|
-const createTraverseColumns = ({edit,del}) => {
|
|
|
- return [
|
|
|
- {title: '序号', key: 'num', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '测站点名称', key: 'name'},
|
|
|
- {title: 'X坐标(m)', key: 'x'},
|
|
|
- {title: 'Y坐标(m)', key: 'y'},
|
|
|
- {title: '高程(m)', key: 'h'},
|
|
|
- {title: '等级', key: 'level'},
|
|
|
- {title: '备注', key: 'remark'},
|
|
|
- {title: "操作", key: "actions", width: 160, align: 'center',
|
|
|
- render(row) {
|
|
|
- /*return renderTableEditDelButton({
|
|
|
- bubble: bubbleVal.value,
|
|
|
- btn_edit: btn_edit.value,
|
|
|
- btn_del: btn_del.value,
|
|
|
- edit_event: edit,
|
|
|
- del_event: del,
|
|
|
- row:row
|
|
|
- })*/
|
|
|
- }
|
|
|
- }
|
|
|
- ];
|
|
|
-};
|
|
|
-const traverseColumns = createTraverseColumns({
|
|
|
- edit(row) {
|
|
|
- let form = JSON.parse(JSON.stringify(row));
|
|
|
- let mile = ['name', 'x', 'y', 'h', 'level', 'remark']
|
|
|
- mile.forEach((key) => {
|
|
|
- formRowValue.value[key] = form[key] + '';
|
|
|
- })
|
|
|
- formRowValue.value['id'] = form.id;
|
|
|
- formRowValue.value['projectId'] = projectId.value;
|
|
|
- formRowValue.value['contractId'] = contractId.value;
|
|
|
- showRowModal.value = true
|
|
|
- },
|
|
|
- del(row) {
|
|
|
- station.delData({
|
|
|
- ids: row.id
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- window?.$message?.success('删除成功')
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error('删除失败')
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
-})
|
|
|
-const traverseTable = ref([]);
|
|
|
-
|
|
|
-//水准点的 表格表头
|
|
|
-const createLevelColumns = ({edit,del}) => {
|
|
|
- return [
|
|
|
- {title: '序号', key: 'num', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '测站点名称', key: 'name'},
|
|
|
- {title: '高程(m)', key: 'h'},
|
|
|
- {title: '等级', key: 'level'},
|
|
|
- {title: '备注', key: 'remark'},
|
|
|
- {title: "操作", key: "actions", width: 160, align: 'center',
|
|
|
- render(row) {
|
|
|
- /*return renderTableEditDelButton({
|
|
|
- bubble: bubbleVal.value,
|
|
|
- btn_edit: btn_edit.value,
|
|
|
- btn_del: btn_del.value,
|
|
|
- edit_event: edit,
|
|
|
- del_event: del,
|
|
|
- row:row
|
|
|
- })*/
|
|
|
- }
|
|
|
- }
|
|
|
- ];
|
|
|
-};
|
|
|
-const levelColumns = createLevelColumns({
|
|
|
- edit(row) {
|
|
|
- let form = JSON.parse(JSON.stringify(row));
|
|
|
- let mile = ['name', 'h', 'level', 'remark'];
|
|
|
- mile.forEach((key) => {
|
|
|
- formRowValue.value[key] = form[key] + '';
|
|
|
- })
|
|
|
- formRowValue.value['id'] = form.id;
|
|
|
- formRowValue.value['projectId'] = projectId.value;
|
|
|
- formRowValue.value['contractId'] = contractId.value;
|
|
|
- showRowModal.value = true
|
|
|
- },
|
|
|
- del(row) {
|
|
|
- station.delData({
|
|
|
- ids: row.id
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- window?.$message?.success('删除成功')
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error('删除失败')
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
-})
|
|
|
-//表格数据
|
|
|
-const levelTable = ref([]);
|
|
|
-
|
|
|
//新增
|
|
|
const AddRowClick = () => {
|
|
|
- if (tabsTypeKey.value === '0') {
|
|
|
- formRowValue.value = {
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- type: tabsTypeKey.value,
|
|
|
- name: '', h: '', level: null, remark: null
|
|
|
- }
|
|
|
- } else if (tabsTypeKey.value === '1') {
|
|
|
- formRowValue.value = {
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- type: tabsTypeKey.value,
|
|
|
- name: '', x: '', y: '', h: '', level: null, remark: null
|
|
|
- }
|
|
|
+ const type = tabsTypeKey.value
|
|
|
+ const obj = {
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ type: tabsTypeKey.value,
|
|
|
+ name: '', h: '', level: null, remark: null
|
|
|
}
|
|
|
+ if (type === '0') {
|
|
|
+ formRowValue.value = obj
|
|
|
+ } else if (type === '1') {
|
|
|
+ formRowValue.value = {...obj, x: '', y: ''}
|
|
|
+ }
|
|
|
+ saveFormLoading.value = false
|
|
|
showRowModal.value = true
|
|
|
}
|
|
|
|
|
|
-//保存表单
|
|
|
+//新增/编辑 保存
|
|
|
const saveFormLoading = ref(false)
|
|
|
-const saveFormClick = () => {
|
|
|
- const form = formRowValue.value
|
|
|
- if (!!form.id) {
|
|
|
- saveFormLoading.value = true
|
|
|
- station.updateSave(formRowValue.value).then(({data}) => {
|
|
|
+const saveFormClick = async () => {
|
|
|
+ const validate = await formValidate(formRowRef.value)
|
|
|
+ if (validate) {
|
|
|
+ const form = formRowValue.value
|
|
|
+ if (!!form.id) {
|
|
|
+ saveFormLoading.value = true
|
|
|
+ const {error, code} = await stationApi.updateSave(form,false)
|
|
|
+ //判断状态
|
|
|
saveFormLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- getTableData()
|
|
|
+ if (!error && code === 200) {
|
|
|
showRowModal.value = false
|
|
|
window?.$message?.success('保存成功')
|
|
|
+ getTableData()
|
|
|
} else {
|
|
|
window?.$message?.error('保存失败')
|
|
|
}
|
|
|
- }).catch(() => {
|
|
|
- saveFormLoading.value = false
|
|
|
- })
|
|
|
- } else {
|
|
|
- saveFormLoading.value = true
|
|
|
- station.addSave(formRowValue.value).then(({data}) => {
|
|
|
+ } else {
|
|
|
+ saveFormLoading.value = true
|
|
|
+ const {error, code} = await stationApi.addSave(form,false)
|
|
|
+ //判断状态
|
|
|
saveFormLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- getTableData()
|
|
|
+ if (!error && code === 200) {
|
|
|
showRowModal.value = false
|
|
|
window?.$message?.success('新增成功')
|
|
|
+ getTableData()
|
|
|
} else {
|
|
|
window?.$message?.error('新增失败')
|
|
|
}
|
|
|
- }).catch(() => {
|
|
|
- saveFormLoading.value = false
|
|
|
- })
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//导入弹窗
|
|
|
+//导入配置
|
|
|
const showImportModal = ref(false)
|
|
|
-const fileListLength = ref(0);
|
|
|
-const uploadRef = ref(null);
|
|
|
const importLoading = ref(false)
|
|
|
+
|
|
|
+//上传配置
|
|
|
+const uploadRef = ref(null)
|
|
|
+const addition = ref({})
|
|
|
+const fileList = ref([])
|
|
|
const action = '/api/blade-business/dap/import';
|
|
|
const accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel';
|
|
|
-const upData = ref({
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- type: tabsTypeKey.value
|
|
|
-})
|
|
|
|
|
|
-const importModalClick = () => {
|
|
|
- upData.value = {
|
|
|
+//导入
|
|
|
+const importModalClick = () => {
|
|
|
+ addition.value = {
|
|
|
projectId: projectId.value,
|
|
|
contractId: contractId.value,
|
|
|
type: tabsTypeKey.value
|
|
|
}
|
|
|
+ importLoading.value = false
|
|
|
showImportModal.value = true
|
|
|
}
|
|
|
|
|
|
-const handleUploadChange = (options) => {
|
|
|
- fileListLength.value = options.fileList.length;
|
|
|
+//上传一个文件时,重置
|
|
|
+const handleUploadExceed = (files) => {
|
|
|
+ uploadRef.value?.clearFiles()
|
|
|
+ const file = files[0]
|
|
|
+ file.uid = genFileId()
|
|
|
+ uploadRef.value?.handleStart(file)
|
|
|
}
|
|
|
+
|
|
|
+//确认导入
|
|
|
const handleImportClick = () => {
|
|
|
+ uploadRef.value?.submit()
|
|
|
+}
|
|
|
+//上传中
|
|
|
+const handleUploadProgress = () => {
|
|
|
importLoading.value = true
|
|
|
- uploadRef.value?.submit();
|
|
|
}
|
|
|
//上传完成
|
|
|
-const uploadFinish = ({event}) => {
|
|
|
+const handleUploadFinish = () => {
|
|
|
importLoading.value = false
|
|
|
- let res = JSON.parse(event?.target?.response);
|
|
|
- if (res.code === 200) {
|
|
|
- window?.$message?.success('导入成功')
|
|
|
- showImportModal.value = false
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error(res.msg||'导入失败')
|
|
|
- }
|
|
|
+ showImportModal.value = false
|
|
|
+ window?.$message?.success('导入成功')
|
|
|
+ uploadRef.value?.clearFiles()
|
|
|
+ getTableData()
|
|
|
}
|
|
|
-
|
|
|
-//卡片弹窗标题
|
|
|
-const getModalTitle = () => {
|
|
|
- let tabType = '异常了';
|
|
|
- if (tabsTypeKey.value === '1') {
|
|
|
- tabType = '导线点'
|
|
|
- } else if (tabsTypeKey.value === '0') {
|
|
|
- tabType = '水准点'
|
|
|
- }
|
|
|
- return tabType
|
|
|
+//上传失败
|
|
|
+const handleUploadError = () => {
|
|
|
+ importLoading.value = false
|
|
|
+ window?.$message?.error('导入失败')
|
|
|
}
|
|
|
|
|
|
-//导出弹窗
|
|
|
-const exportModalClick = () => {
|
|
|
- window?.$dialog?.warning({
|
|
|
- title: "导出数据",
|
|
|
- content: "将导出当前所有数据",
|
|
|
- positiveText: "确定导出",
|
|
|
- negativeText: "取消",
|
|
|
- onPositiveClick: () => {
|
|
|
- station.getExportExcel({
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- type: tabsTypeKey.value,
|
|
|
- search: searchForm.value['name'] || ''
|
|
|
- }).then(res => {
|
|
|
- download(res)
|
|
|
- })
|
|
|
+//导出
|
|
|
+const exportModalClick = () => {
|
|
|
+ window?.$messageBox?.alert('将导出当前所有数据?', '导出数据', {
|
|
|
+ showCancelButton: true,
|
|
|
+ confirmButtonText: '确定导出',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ callback: (action) => {
|
|
|
+ if (action === 'confirm') {
|
|
|
+ getExportExcel()
|
|
|
+ }
|
|
|
}
|
|
|
- });
|
|
|
+ })
|
|
|
}
|
|
|
-
|
|
|
-//重新搜索数据
|
|
|
-const searchChange = () => {
|
|
|
- searchForm.value.current = 1
|
|
|
- getTableData()
|
|
|
+//确定导出
|
|
|
+const downloadLoading = ref(false)
|
|
|
+const getExportExcel = async () => {
|
|
|
+ //批量下载
|
|
|
+ downloadLoading.value = true
|
|
|
+ const { error, disposition, res } = await stationApi.getExportExcel({
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ type: tabsTypeKey.value,
|
|
|
+ search: searchForm.value['name'] || ''
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ downloadLoading.value = false
|
|
|
+ if (!error) {
|
|
|
+ if (disposition) {
|
|
|
+ downloadBlob(res,disposition)
|
|
|
+ } else {
|
|
|
+ window.$message?.error('数据异常')
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-//分页被点击
|
|
|
-const pageChange = (res) => {
|
|
|
- searchForm.value.current = res.current;
|
|
|
- searchForm.value.size = res.size;
|
|
|
- getTableData()
|
|
|
+//水准点
|
|
|
+const handleLevelEdit = (row) => {
|
|
|
+ formRowValue.value = {
|
|
|
+ ...row,
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ type: tabsTypeKey.value
|
|
|
+ }
|
|
|
+ saveFormLoading.value = false
|
|
|
+ showRowModal.value = true
|
|
|
+}
|
|
|
+const handleLevelDelete = (row) => {
|
|
|
+ window?.$messageBox?.alert('是否删除当前数据?', '删除提醒', {
|
|
|
+ showCancelButton: true,
|
|
|
+ confirmButtonText: '确定删除',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ callback: (action) => {
|
|
|
+ if (action === 'confirm') {
|
|
|
+ delData(row.id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
-//获取数据
|
|
|
-const getTableData = () => {
|
|
|
- station.queryListData(searchForm.value).then(({data}) => {
|
|
|
- let res = data['data'] || {}
|
|
|
- if (tabsTypeKey.value === '0') {
|
|
|
- levelTable.value = res['records'] || []
|
|
|
- } else if (tabsTypeKey.value === '1') {
|
|
|
- traverseTable.value = res['records'] || []
|
|
|
+//导线点
|
|
|
+const handleTraverseEdit = (row) => {
|
|
|
+ formRowValue.value = {
|
|
|
+ ...row,
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ type: tabsTypeKey.value
|
|
|
+ }
|
|
|
+ saveFormLoading.value = false
|
|
|
+ showRowModal.value = true
|
|
|
+}
|
|
|
+const handleTraverseDelete = (row) => {
|
|
|
+ window?.$messageBox?.alert('是否删除当前数据?', '删除提醒', {
|
|
|
+ showCancelButton: true,
|
|
|
+ confirmButtonText: '确定删除',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ callback: (action) => {
|
|
|
+ if (action === 'confirm') {
|
|
|
+ delData(row.id)
|
|
|
+ }
|
|
|
}
|
|
|
- searchForm.value.total = res.total || 0
|
|
|
})
|
|
|
}
|
|
|
+
|
|
|
+//删除请求
|
|
|
+const delData = async (id) => {
|
|
|
+ const {error, code} = await stationApi.delData({ids: id},false)
|
|
|
+ //判断状态
|
|
|
+ if (!error && code === 200) {
|
|
|
+ window?.$message?.success('删除成功')
|
|
|
+ getTableData()
|
|
|
+ } else {
|
|
|
+ window?.$message?.error('删除失败')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|