|
@@ -1,784 +1,177 @@
|
|
|
<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 mr-4">
|
|
|
- <n-select label-field="name" value-field="id" v-model:value="searchForm.partId" :options="partData" placeholder="片段查询" @update:value="searchChange" clearable/>
|
|
|
- </div>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_add_part?.textInfo" v-if="btn_add_part">
|
|
|
- <template #trigger>
|
|
|
- <span class="ml-3 icon-btn" @click="AddPartClick">
|
|
|
- <i class="cicon-add-round-o"/>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <span>{{btn_add_part?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_admin_part?.textInfo" v-if="btn_admin_part">
|
|
|
- <template #trigger>
|
|
|
- <span class="ml-3 icon-btn" @click="AdminPartClick">
|
|
|
- <i class="cicon-set-list"/>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <span>{{btn_admin_part?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- </div>
|
|
|
+ <HcTooltip keys="gauge-bezier-add">
|
|
|
+ <el-button type="primary" hc-btn @click="addLineEleModal">
|
|
|
+ <HcIcon name="add_box"/>
|
|
|
+ <span>添加线元</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-bezier-to">
|
|
|
+ <el-button hc-btn @click="showToModalClick">
|
|
|
+ <HcIcon name="add_box"/>
|
|
|
+ <span>转换坐标</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-bezier-pile">
|
|
|
+ <el-button hc-btn @click="pileModalClick">
|
|
|
+ <HcIcon name="add_box"/>
|
|
|
+ <span>逐桩坐标</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-bezier-import">
|
|
|
+ <el-button hc-btn @click="importModalClick">
|
|
|
+ <HcIcon name="drive_folder_upload"/>
|
|
|
+ <span>导入</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-bezier-export">
|
|
|
+ <el-button hc-btn @click="exportModalClick">
|
|
|
+ <HcIcon name="download"/>
|
|
|
+ <span>导出</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
</template>
|
|
|
- <template #header-extra>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_add?.textInfo" v-if="btn_add">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5" @click="addLineEleModal">添加线元</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_add?.textInfo}}</span>
|
|
|
- </n-popover>
|
|
|
- <n-popover trigger="hover" :disabled="!bubbleVal || !btn_to?.textInfo" v-if="btn_to">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-3" @click="showToModalClick">转换坐标</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_to?.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_pile?.textInfo" v-if="btn_pile">
|
|
|
- <template #trigger>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-3" @click="pileModalClick">逐桩坐标</n-button>
|
|
|
- </template>
|
|
|
- <span>{{btn_pile?.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>
|
|
|
- </template>
|
|
|
- <n-data-table :columns="tableColumns" :data="tableData" :pagination="false" :row-key="row => row.name" :loading="tableLoading" :single-line="false" striped/>
|
|
|
- <template #action>
|
|
|
- <HcPage :pages="searchForm" @change="pageChange"/>
|
|
|
- </template>
|
|
|
- </n-card>
|
|
|
- </div>
|
|
|
- <!--新增片段弹框-->
|
|
|
- <n-modal v-model:show="showAddPartModal">
|
|
|
- <n-card class="w-606" title="新增片段" :segmented="{content: true}">
|
|
|
- <n-form ref="formAddPartRef" :model="formAddPartValue" :rules="rulesAddPart" label-placement="left" label-width="auto" size="large">
|
|
|
- <n-form-item label="名称" path="name">
|
|
|
- <n-input class="flex-1" v-model:value="formAddPartValue.name" placeholder="请输入名称"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="桩号前缀" path="prefix">
|
|
|
- <n-input class="flex-1" v-model:value="formAddPartValue.prefix" placeholder="只允许输入大写的英文字母"/>
|
|
|
- </n-form-item>
|
|
|
- </n-form>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showAddPartModal = false">取消</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-6" :loading="savePartLoading" @click="savePartInfo(formAddPartValue, true)">保存</n-button>
|
|
|
+ <template #extra>
|
|
|
+ <div class="w-60">
|
|
|
+ <el-select v-model="searchForm.partId" block clearable size="large" @change="searchClick">
|
|
|
+ <el-option v-for="item in partData" :label="item.name" :value="item.id" placeholder="片段查询"/>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
+ <HcTooltip keys="gauge-bezier-add-part">
|
|
|
+ <div class="hc-extra-icon-btn" @click="AddPartClick">
|
|
|
+ <HcIcon name="add_box"/>
|
|
|
+ </div>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-bezier-admin-part">
|
|
|
+ <div class="hc-extra-icon-btn" @click="AdminPartClick">
|
|
|
+ <HcIcon name="grid_view"/>
|
|
|
+ </div>
|
|
|
+ </HcTooltip>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
- <!--管理片段弹框-->
|
|
|
- <n-modal v-model:show="showAdminPartModal">
|
|
|
- <n-card class="w-750" title="管理片段" :segmented="{content: true}">
|
|
|
- <div class="admin-part-data-table">
|
|
|
- <n-data-table :key="(row) => row.id" :columns="AdminPartColumns" :data="AdminPartTableData" :single-line="false" striped/>
|
|
|
- </div>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showAdminPartModal = false">取消</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-6" @click="AddAdminPart">新增</n-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
- <!--添加/编辑线元弹框-->
|
|
|
- <n-modal v-model:show="showLineEleModal">
|
|
|
- <n-card class="w-750" :title="(formLineEleValue.id == -1 || !formLineEleValue.id)?'添加线元':'编辑线元'" :segmented="{content: true}">
|
|
|
- <n-form :model="formLineEleValue" label-placement="left" label-width="auto" size="large">
|
|
|
- <n-form-item label="类型">
|
|
|
- <n-radio-group class="flex-1" v-model:value="formLineEleValue.type" name="radiogroup">
|
|
|
- <n-space>
|
|
|
- <n-radio v-for="item in lineElementType" :key="item.value" :value="item.value">{{ item.label }}</n-radio>
|
|
|
- </n-space>
|
|
|
- </n-radio-group>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="开始里程">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.value" placeholder="请输入开始里程"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="X">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.x" placeholder="请输入X"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="Y">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.y" placeholder="请输入Y"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="半径" v-if="formLineEleValue.type != 0">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.r" placeholder="请输入半径"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="结束半径" v-if="formLineEleValue.type == 3">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.r2" placeholder="请输入半径"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="转向" v-if="formLineEleValue.type != 0">
|
|
|
- <n-radio-group class="flex-1" v-model:value="formLineEleValue.swing" name="radiogroup">
|
|
|
- <n-space>
|
|
|
- <n-radio value="左转">左转</n-radio>
|
|
|
- <n-radio value="右转">右转</n-radio>
|
|
|
- </n-space>
|
|
|
- </n-radio-group>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="线长度">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.l" placeholder="请输入线长度"/>
|
|
|
- </n-form-item>
|
|
|
- <div class="flex">
|
|
|
- <n-form-item class="flex-1" label="方位角">
|
|
|
- <n-input v-model:value="formLineEleValue.du" placeholder="输入度">
|
|
|
- <template #suffix>度</template>
|
|
|
- </n-input>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item class="flex-1 ml-4">
|
|
|
- <n-input v-model:value="formLineEleValue.fen" placeholder="输入分">
|
|
|
- <template #suffix>分</template>
|
|
|
- </n-input>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item class="flex-1 ml-4">
|
|
|
- <n-input v-model:value="formLineEleValue.miao" placeholder="输入秒">
|
|
|
- <template #suffix>秒</template>
|
|
|
- </n-input>
|
|
|
- </n-form-item>
|
|
|
- </div>
|
|
|
- <n-form-item label="断链前里程" v-if="formLineEleValue.type != 3">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.dlq" placeholder="请输入断链前里程"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="断链后里程" v-if="formLineEleValue.type != 3">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.dlh" placeholder="请输入断链后里程"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="顺序">
|
|
|
- <n-input class="flex-1" v-model:value="formLineEleValue.orderNum" placeholder="请输入顺序"/>
|
|
|
- </n-form-item>
|
|
|
- </n-form>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showLineEleModal = false">取消</n-button>
|
|
|
- <n-button type="primary" strong secondary class="px-5 ml-6" @click="refreshable" v-if="formLineEleValue.id == -1 || !formLineEleValue.id">刷新</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-6" :loading="saveLoading" @click="saveClick">保存</n-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
- <!--里程转换坐标-->
|
|
|
- <n-modal v-model:show="showToModal">
|
|
|
- <n-card class="w-606" title="里程转换坐标" :segmented="{content: true}">
|
|
|
- <n-form :model="formToValue" label-placement="left" label-width="auto" size="large">
|
|
|
- <n-form-item label="里程">
|
|
|
- <n-input class="flex-1" v-model:value="formToValue.value" placeholder="请输入里程"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="偏移">
|
|
|
- <n-input class="flex-1" v-model:value="formToValue.b" placeholder="请输入偏移"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="夹角">
|
|
|
- <n-input class="flex-1" v-model:value="formToValue.jj" placeholder="请输入夹角"/>
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="X">{{formToValue.x}}</n-form-item>
|
|
|
- <n-form-item label="Y">{{formToValue.y}}</n-form-item>
|
|
|
- </n-form>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showToModal = false">取消</n-button>
|
|
|
- <n-button type="primary" class="px-5 ml-6" @click="queryPsChange">转换</n-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
- <!--导入 弹框-->
|
|
|
- <n-modal v-model:show="showImportModal">
|
|
|
- <n-card class="w-414" title="导入线元" :segmented="{content: true}">
|
|
|
- <template #header-extra>
|
|
|
- <a href="https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20220614/a8bb45b57e409ff6bd5a5aad4bc7b22e.xlsx" target="_blank" class="text-link">下载导入模板</a>
|
|
|
- </template>
|
|
|
- <div class="text-center">
|
|
|
- <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>
|
|
|
- </div>
|
|
|
+ <el-scrollbar>
|
|
|
+ 123456
|
|
|
+ </el-scrollbar>
|
|
|
<template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-4" @click="showImportModal = false">取消</n-button>
|
|
|
- <n-button type="primary" :disabled="!fileListLength" class="px-4 ml-6" :loading="importLoading" @click="handleImportClick">确认导入</n-button>
|
|
|
- </div>
|
|
|
+ <HcPages :pages="searchForm" @change="pageChange"/>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
- <!--逐桩坐标弹框-->
|
|
|
- <n-modal v-model:show="showPileModal">
|
|
|
- <n-card class="w-990" title="逐桩坐标" :segmented="{content: true}">
|
|
|
- <n-form :model="formPileValue" inline label-width="auto">
|
|
|
- <n-form-item label="开始桩号">
|
|
|
- <n-input v-model:value="formPileValue.x" placeholder="开始桩号" />
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="结束桩号">
|
|
|
- <n-input v-model:value="formPileValue.y" placeholder="结束桩号" />
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="桩距">
|
|
|
- <n-input v-model:value="formPileValue.value" placeholder="桩距" />
|
|
|
- </n-form-item>
|
|
|
- <n-form-item label="偏距">
|
|
|
- <n-input v-model:value="formPileValue.b" placeholder="偏距" />
|
|
|
- </n-form-item>
|
|
|
- <n-form-item>
|
|
|
- <n-button attr-type="button" type="primary" class="px-4" :loading="generateLoading" @click="generateClick">生成</n-button>
|
|
|
- </n-form-item>
|
|
|
- </n-form>
|
|
|
+ </HcCard>
|
|
|
+ <!--管理片段弹框-->
|
|
|
+ <el-dialog v-model="showAdminPartModal" title="管理片段" width="47rem" custom-class="hc-modal-border">
|
|
|
<div class="admin-part-data-table">
|
|
|
- <n-data-table :key="(row) => row.key" :columns="pileColumns" :data="pileTable" :single-line="false" striped/>
|
|
|
+ <el-scrollbar>
|
|
|
+ <div class="hc-table-ref-box">
|
|
|
+ <el-table hc :data="AdminPartTableData" stripe>
|
|
|
+ <el-table-column prop="name" label="片段名称">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.name" placeholder="片段名称"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="name" label="桩号前缀">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-input v-model="scope.row.prefix" placeholder="桩号前缀"/>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" align="center" width="130">
|
|
|
+ <template #default="scope">
|
|
|
+ <HcTooltip keys="gauge-station-edit">
|
|
|
+ <el-button type="primary" size="small" text @click="handleAdminPartdit(scope.row)">编辑</el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ <HcTooltip keys="gauge-station-del">
|
|
|
+ <el-button type="danger" size="small" text @click="handleAdminPartDelete(scope.row)">删除</el-button>
|
|
|
+ </HcTooltip>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-scrollbar>
|
|
|
</div>
|
|
|
- <template #action>
|
|
|
- <div class="text-center">
|
|
|
- <n-button class="px-5" @click="showPileModal = false">关闭</n-button>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button size="large" @click="showAdminPartModal = false">取消</el-button>
|
|
|
+ <el-button type="primary" hc-btn @click="AddAdminPart">新增</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- </n-card>
|
|
|
- </n-modal>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import {h, onMounted, ref, watch} from "vue";
|
|
|
+import {ref, onMounted} from "vue";
|
|
|
import {useAppStore} from "~src/store/index";
|
|
|
-import bezier from '~api/gauge/bezier';
|
|
|
-import HcPage from "~com/plugins/naive/HcPage.vue"
|
|
|
+import bezierApi from '~api/gauge/bezier';
|
|
|
import {getTokenHeader} from '~src/api/request/header';
|
|
|
-import {download} from '~src/utils/lib/tools';
|
|
|
-//import {renderTableEditDelButton,renderTableEditInput, renderTableEditInputButton} from "~src/plugins/renderele";
|
|
|
+import {getArrValue, downloadBlob, formValidate} from "vue-utils-plus"
|
|
|
|
|
|
//初始变量
|
|
|
const useAppState = useAppStore()
|
|
|
const projectId = ref(useAppState.getProjectId);
|
|
|
const contractId = ref(useAppState.getContractId);
|
|
|
-//按钮气泡开关
|
|
|
-const bubbleVal = ref(useAppState.getBubble);
|
|
|
-
|
|
|
-//监听
|
|
|
-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_part = ref(getButtonsVal('gauge-bezier-add-part'))
|
|
|
-const btn_admin_part = ref(getButtonsVal('gauge-bezier-admin-part'))
|
|
|
-
|
|
|
-const btn_add = ref(getButtonsVal('gauge-bezier-add'))
|
|
|
-const btn_to = ref(getButtonsVal('gauge-bezier-to'))
|
|
|
-const btn_import = ref(getButtonsVal('gauge-bezier-import'))
|
|
|
-const btn_pile = ref(getButtonsVal('gauge-bezier-pile'))
|
|
|
-const btn_export = ref(getButtonsVal('gauge-bezier-export'))
|
|
|
-const btn_edit = ref(getButtonsVal('gauge-bezier-edit'))
|
|
|
-const btn_del = ref(getButtonsVal('gauge-bezier-del'))
|
|
|
-
|
|
|
-//片段查询
|
|
|
-const partData = ref([])
|
|
|
-//搜索表单
|
|
|
-const searchForm = ref({partId: '', current: 1, size: 20, total: 0})
|
|
|
-const lineElementType = ref([
|
|
|
- {value: 0, label: "直线段"},
|
|
|
- {value: 1, label: "圆曲线"},
|
|
|
- {value: 2, label: "入缓和曲线"},
|
|
|
- {value: 3, label: "出缓和曲线"},
|
|
|
- {value: 4, label: "不完整缓和曲线"},
|
|
|
-])
|
|
|
-
|
|
|
-//获取类型名称
|
|
|
-const GetTypeName = (val) => {
|
|
|
- if (val != -1 || val >= 0) {
|
|
|
- return lineElementType.value[val].label || '';
|
|
|
- } else {
|
|
|
- return '-';
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
//渲染完成
|
|
|
onMounted(() => {
|
|
|
- queryPartList().then()
|
|
|
+ queryPartList()
|
|
|
})
|
|
|
|
|
|
-async function queryPartList() {
|
|
|
- const partList = await bezier.queryPartList({
|
|
|
+//获取下拉列表
|
|
|
+const partData = ref([])
|
|
|
+const queryPartList = async () => {
|
|
|
+ const { error, code, data } = await bezierApi.queryPartList({
|
|
|
projectId: projectId.value,
|
|
|
contractId: contractId.value
|
|
|
})
|
|
|
- let partListData = partList?.data?.data || [];
|
|
|
- partData.value = partListData;
|
|
|
- if (partListData.length > 0 && !searchForm.value.partId) {
|
|
|
- searchForm.value.partId = partListData[0].id;
|
|
|
- getTableData()
|
|
|
+ if (!error && code === 200) {
|
|
|
+ let records = getArrValue(data)
|
|
|
+ partData.value = records
|
|
|
+ if (records.length > 0 && !searchForm.value.partId) {
|
|
|
+ searchForm.value.partId = records[0].id;
|
|
|
+ //getTableData()
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ partData.value = []
|
|
|
+ searchForm.value.partId = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//导线点的 表格表头
|
|
|
-const tableLoading = ref(false)
|
|
|
-const createColumns = ({edit,del}) => {
|
|
|
- return [
|
|
|
- {title: '序号', key: 'num', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '里程', key: 'name',
|
|
|
- render(row) {
|
|
|
- return `${row.valueStr}~${row.valueEndStr}`
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '排序', key: 'orderNum'},
|
|
|
- {title: '长度', key: 'l'},
|
|
|
- {title: '方位角', key: 'angle'},
|
|
|
- {title: '类型', key: 'type',
|
|
|
- render(row) {
|
|
|
- return GetTypeName(row.type)
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '转向', key: 'swing'},
|
|
|
- {title: 'X', key: 'xxStr'},
|
|
|
- {title: 'Y', key: 'yyStr'},
|
|
|
- {title: '半径', key: 'r'},
|
|
|
- {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 tableColumns = createColumns({
|
|
|
- edit(row) {
|
|
|
- const form = JSON.parse(JSON.stringify(row))
|
|
|
- formLineEleValue.value['id'] = form.id;
|
|
|
- formLineEleValue.value['type'] = form['type'];
|
|
|
- formLineEleValue.value['projectId'] = projectId.value;
|
|
|
- formLineEleValue.value['contractId'] = contractId.value;
|
|
|
- formLineEleValue.value['partId'] = searchForm.value.partId;
|
|
|
- let mile = ['x', 'y', 'fen', 'miao', 'du', 'value', 'l', 'dlq', 'dlh', 'swing', 'r', 'r2', 'orderNum']
|
|
|
- mile.forEach((key) => {
|
|
|
- formLineEleValue.value[key] = form[key] + '';
|
|
|
- })
|
|
|
- showLineEleModal.value = true
|
|
|
- },
|
|
|
- del(row) {
|
|
|
- bezier.saveDelMileage({
|
|
|
- id: row.id
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- window?.$message?.success('删除成功')
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error('删除失败')
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
-})
|
|
|
-const tableData = ref([]);
|
|
|
+//搜索表单
|
|
|
+const searchForm = ref({partId: '', current: 1, size: 20, total: 0})
|
|
|
|
|
|
//重新搜索数据
|
|
|
-const searchChange = (res) => {
|
|
|
+const searchClick = () => {
|
|
|
searchForm.value.current = 1
|
|
|
getTableData()
|
|
|
}
|
|
|
+
|
|
|
//分页被点击
|
|
|
-const pageChange = (res) => {
|
|
|
- searchForm.value.current = res.current;
|
|
|
- searchForm.value.size = res.size;
|
|
|
+const pageChange = ({current, size}) => {
|
|
|
+ searchForm.value.current = current
|
|
|
+ searchForm.value.size = size
|
|
|
getTableData()
|
|
|
}
|
|
|
+
|
|
|
//获取数据
|
|
|
const getTableData = () => {
|
|
|
- tableLoading.value = true
|
|
|
- bezier.queryListData(searchForm.value).then(({data}) => {
|
|
|
- let res = data['data'] || {}
|
|
|
- tableData.value = res['records'] || []
|
|
|
- searchForm.value.total = res.total || 0
|
|
|
- tableLoading.value = false
|
|
|
- }).catch(() => {
|
|
|
- tableLoading.value = false
|
|
|
- })
|
|
|
-}
|
|
|
|
|
|
-//新增片段弹框
|
|
|
-const showAddPartModal = ref(false)
|
|
|
-const formAddPartRef = ref(null)
|
|
|
-const formAddPartValue = ref({name: '', prefix: ''})
|
|
|
-const rulesAddPart = {
|
|
|
- name: {
|
|
|
- required: true,
|
|
|
- trigger: ["blur", "input"],
|
|
|
- message: "请输入名称"
|
|
|
- },
|
|
|
- prefix: {
|
|
|
- required: true,
|
|
|
- validator(rule, value) {
|
|
|
- const reg = /^[A-Z]+$/
|
|
|
- if (!value) {
|
|
|
- return new Error("请输入桩号前缀");
|
|
|
- } else if (!reg.test(value)) {
|
|
|
- return new Error("只允许输入大写的英文字母");
|
|
|
- }
|
|
|
- return true;
|
|
|
- },
|
|
|
- trigger: ["blur", "input"],
|
|
|
- }
|
|
|
-}
|
|
|
-//添加片段按钮
|
|
|
-const AddPartClick = () => {
|
|
|
- formAddPartValue.value.name = ''
|
|
|
- formAddPartValue.value.prefix = ''
|
|
|
- showAddPartModal.value = true
|
|
|
}
|
|
|
+
|
|
|
//管理片段弹窗
|
|
|
const showAdminPartModal = ref(false)
|
|
|
const AdminPartTableData = ref([])
|
|
|
-const AdminPartColumns = [
|
|
|
- {
|
|
|
- title: '片段名称',
|
|
|
- key: 'name',
|
|
|
- render (row) {
|
|
|
- /*return h(renderTableEditInput, {
|
|
|
- value: row.name,
|
|
|
- isEdit: row.isEdit,
|
|
|
- onUpdateValue (val) {
|
|
|
- row.name = val
|
|
|
- }
|
|
|
- })*/
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- title: '桩号前缀',
|
|
|
- key: 'prefix',
|
|
|
- render (row) {
|
|
|
- /*return h(renderTableEditInput, {
|
|
|
- value: row.prefix,
|
|
|
- isEdit: row.isEdit,
|
|
|
- onUpdateValue (val) {
|
|
|
- row.prefix = val
|
|
|
- }
|
|
|
- })*/
|
|
|
- }
|
|
|
- },
|
|
|
- {title: "操作", key: "actions", width: 160, align: 'center',
|
|
|
- render(row,index) {
|
|
|
- /*return h(renderTableEditInputButton, {
|
|
|
- row: row,
|
|
|
- onSave (res) {
|
|
|
- const reg = /^[A-Z]+$/
|
|
|
- if (!res.name) {
|
|
|
- row.isEdit = true
|
|
|
- window?.$message?.warning('请输入片段名称')
|
|
|
- } else if (!res.prefix) {
|
|
|
- row.isEdit = true
|
|
|
- window?.$message?.warning('请输入桩号前缀')
|
|
|
- } else if (!reg.test(res.prefix)) {
|
|
|
- row.isEdit = true
|
|
|
- window?.$message?.warning('桩号前缀只允许输入大写的英文字母')
|
|
|
- } else {
|
|
|
- row.isEdit = false
|
|
|
- savePartInfo(row)
|
|
|
- }
|
|
|
- },
|
|
|
- onDel (res) {
|
|
|
- if (!!row.id) {
|
|
|
- bezier.delPartData({
|
|
|
- ids: row.id
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- queryPartList().then()
|
|
|
- AdminPartTableData.value.splice(index, 1)
|
|
|
- window?.$message?.success('删除成功')
|
|
|
- } else {
|
|
|
- window?.$message?.error('删除失败')
|
|
|
- }
|
|
|
- })
|
|
|
- } else {
|
|
|
- AdminPartTableData.value.splice(index, 1)
|
|
|
- }
|
|
|
- }
|
|
|
- })*/
|
|
|
- }
|
|
|
- }
|
|
|
-];
|
|
|
-//保存片段数据
|
|
|
-const savePartLoading = ref(false)
|
|
|
-const savePartInfo = (row,modal = false) => {
|
|
|
- if (!!row.id) {
|
|
|
- savePartLoading.value = true
|
|
|
- bezier.savePartUpdate(row).then(({data}) => {
|
|
|
- savePartLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- row.isEdit = false
|
|
|
- queryPartList().then()
|
|
|
- window?.$message?.success('更新成功')
|
|
|
- if (modal) showAddPartModal.value = false
|
|
|
- } else {
|
|
|
- row.isEdit = true
|
|
|
- window?.$message?.error('更新失败')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- savePartLoading.value = false
|
|
|
- })
|
|
|
- } else {
|
|
|
- savePartLoading.value = true
|
|
|
- row.projectId = projectId.value;
|
|
|
- row.contractId = contractId.value;
|
|
|
- bezier.savePartAdd(row).then(({data}) => {
|
|
|
- savePartLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- row = data.data
|
|
|
- row.isEdit = false
|
|
|
- queryPartList().then()
|
|
|
- window?.$message?.success('新增成功')
|
|
|
- if (modal) showAddPartModal.value = false
|
|
|
- } else {
|
|
|
- row.isEdit = true
|
|
|
- window?.$message?.error('新增失败')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- savePartLoading.value = false
|
|
|
- })
|
|
|
- }
|
|
|
-}
|
|
|
const AdminPartClick = () => {
|
|
|
- AdminPartTableData.value = JSON.parse(JSON.stringify(partData.value));
|
|
|
- showAdminPartModal.value = true
|
|
|
-}
|
|
|
-const AddAdminPart = () => {
|
|
|
- AdminPartTableData.value.push({
|
|
|
- id: '', name: '', prefix: '',
|
|
|
- isEdit: true
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-//线元类型
|
|
|
-const showLineEleModal = ref(false)
|
|
|
-const formLineEleValue = ref({type: 0})
|
|
|
-//添加线元弹窗
|
|
|
-const addLineEleModal = () => {
|
|
|
- showLineEleModal.value = true
|
|
|
- getNextMileagexy()
|
|
|
-}
|
|
|
-//刷新
|
|
|
-const refreshable = () => {
|
|
|
- getNextMileagexy({
|
|
|
- orderNum: formLineEleValue.value['orderNum']
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-//获取初始信息
|
|
|
-const getNextMileagexy = (obj = {}) => {
|
|
|
- bezier.getNextMileagexy({
|
|
|
- projectId: projectId.value,
|
|
|
- partId: searchForm.value.partId,
|
|
|
- ...obj
|
|
|
- }).then(({data}) => {
|
|
|
- if(!!data) {
|
|
|
- let mile = ['x', 'y', 'fen', 'miao', 'du', 'value', 'l', 'dlq', 'dlh', 'swing', 'r', 'r2', 'orderNum']
|
|
|
- mile.forEach((key) => {
|
|
|
- formLineEleValue.value[key] = data[key] + '';
|
|
|
- })
|
|
|
- formLineEleValue.value['type'] = data['type'];
|
|
|
- formLineEleValue.value['projectId'] = projectId.value;
|
|
|
- formLineEleValue.value['contractId'] = contractId.value;
|
|
|
- formLineEleValue.value['partId'] = searchForm.value.partId;
|
|
|
- } else {
|
|
|
- formLineEleValue.value = {type: 0}
|
|
|
- formLineEleValue.value['projectId'] = projectId.value;
|
|
|
- formLineEleValue.value['contractId'] = contractId.value;
|
|
|
- formLineEleValue.value['partId'] = searchForm.value.partId;
|
|
|
- }
|
|
|
- })
|
|
|
-}
|
|
|
|
|
|
-//保存线元数据
|
|
|
-const saveLoading = ref(false)
|
|
|
-const saveClick = () => {
|
|
|
- let form = formLineEleValue.value || {};
|
|
|
- form.partId = searchForm.value.partId;
|
|
|
- if (form.id === -1 || !form.id) {
|
|
|
- saveLoading.value = true
|
|
|
- bezier.saveAddMileage(form).then(({data}) => {
|
|
|
- saveLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- window?.$message?.success('保存成功')
|
|
|
- showLineEleModal.value = false
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error('保存失败')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- saveLoading.value = false
|
|
|
- })
|
|
|
- } else {
|
|
|
- saveLoading.value = true
|
|
|
- bezier.saveUpdateMileage(form).then(({data}) => {
|
|
|
- saveLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- window?.$message?.success('保存成功')
|
|
|
- showLineEleModal.value = false
|
|
|
- getTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error('保存失败')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- saveLoading.value = false
|
|
|
- })
|
|
|
- }
|
|
|
}
|
|
|
+//编辑
|
|
|
+const handleAdminPartdit = () => {
|
|
|
|
|
|
-//里程转换坐标
|
|
|
-const showToModal = ref(false)
|
|
|
-const formToValue = ref({value: '', b: '0', jj: '90', x: '', y: ''})
|
|
|
-const showToModalClick = () => {
|
|
|
- formToValue.value = {value: '', b: '0', jj: '90', x: '', y: ''}
|
|
|
- showToModal.value = true
|
|
|
-}
|
|
|
-//转换坐标
|
|
|
-const queryPsChange = () => {
|
|
|
- bezier.queryPsChange({
|
|
|
- projectId: projectId.value,
|
|
|
- partId: searchForm.value.partId,
|
|
|
- value: formToValue.value.value,
|
|
|
- b: formToValue.value.b,
|
|
|
- jj: formToValue.value.jj
|
|
|
- }).then(({data}) => {
|
|
|
- if (data.code === 200) {
|
|
|
- formToValue.value['x'] = data?.data?.x + '';
|
|
|
- formToValue.value['y'] = data?.data?.y + '';
|
|
|
- window?.$message?.success('转换成功')
|
|
|
- } else {
|
|
|
- window?.$message?.error('转换失败')
|
|
|
- }
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
-//导入弹窗
|
|
|
-const showImportModal = ref(false)
|
|
|
-const fileListLength = ref(0);
|
|
|
-const uploadRef = ref(null);
|
|
|
+//删除
|
|
|
+const handleAdminPartDelete = () => {
|
|
|
|
|
|
-//上传组件参数
|
|
|
-const action = '/api/blade-business/mileage/import';
|
|
|
-const accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel';
|
|
|
-const upData = ref({
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- partId: searchForm.value.partId
|
|
|
-})
|
|
|
-
|
|
|
-const importLoading = ref(false)
|
|
|
-const importModalClick = () => {
|
|
|
- showImportModal.value = true
|
|
|
- upData.value = {
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- partId: searchForm.value.partId
|
|
|
- }
|
|
|
-}
|
|
|
-const handleUploadChange = (options) => {
|
|
|
- fileListLength.value = options.fileList.length;
|
|
|
-}
|
|
|
-const handleImportClick = () => {
|
|
|
- importLoading.value = true
|
|
|
- uploadRef.value?.submit();
|
|
|
-}
|
|
|
-//上传完成
|
|
|
-const uploadFinish = ({event}) => {
|
|
|
- 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('导入失败')
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//逐桩坐标
|
|
|
-const showPileModal = ref(false)
|
|
|
-const formPileValue = ref({x: '0', y: '0', value: '0', b: '0'})
|
|
|
-const pileColumns = [
|
|
|
- {title: '序号', key: 'key', width: 80, align: 'center',
|
|
|
- render(_, index) {
|
|
|
- return index + 1
|
|
|
- }
|
|
|
- },
|
|
|
- {title: '里程', key: 'valueStr'},
|
|
|
- {title: '偏距', key: 'b'},
|
|
|
- {title: 'X', key: 'xxStr'},
|
|
|
- {title: 'Y', key: 'yyStr'}
|
|
|
-];
|
|
|
-const pileTable = ref([]);
|
|
|
-const pileModalClick = () => {
|
|
|
- formPileValue.value = {
|
|
|
- projectId: projectId.value,
|
|
|
- partId: searchForm.value.partId,
|
|
|
- x: '0',
|
|
|
- y: '0',
|
|
|
- value: '0',
|
|
|
- b: '0'
|
|
|
- }
|
|
|
- showPileModal.value = true
|
|
|
-}
|
|
|
-//生成
|
|
|
-const generateLoading = ref(false)
|
|
|
-const generateClick = () => {
|
|
|
- generateLoading.value = true
|
|
|
- bezier.getZzList(formPileValue.value).then(({data}) => {
|
|
|
- generateLoading.value = false
|
|
|
- if (data.code === 200) {
|
|
|
- pileTable.value = data.data;
|
|
|
- } else {
|
|
|
- window?.$message?.error('生成失败')
|
|
|
- }
|
|
|
- }).catch(() => {
|
|
|
- generateLoading.value = false
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
-//导出弹窗
|
|
|
-const exportModalClick = () => {
|
|
|
- window?.$dialog?.warning({
|
|
|
- title: "导出数据",
|
|
|
- content: "请确认当前查询条件,系统将以当前筛选条件导出数据",
|
|
|
- positiveText: "确定导出",
|
|
|
- negativeText: "取消",
|
|
|
- onPositiveClick: () => {
|
|
|
- bezier.getExportExcel({
|
|
|
- projectId: projectId.value,
|
|
|
- partId: searchForm.value.partId,
|
|
|
- partNo: ''
|
|
|
- }).then(res => {
|
|
|
- download(res)
|
|
|
- })
|
|
|
- }
|
|
|
- });
|
|
|
-}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|