| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- <template>
- <hc-new-dialog
- v-model="editModal"
- is-table
- :title="editModalTitle"
- widths="85rem"
- :loading="confirmLoad"
- @close="closeModal"
- @save="confirmLink"
- >
- <el-form
- ref="formRef"
- :model="formData"
- :disabled="formDisabled"
- >
- <!-- 测量者信息 -->
- <div class="section-title">
- <!-- 左侧蓝色圆点标识 -->
- <div class="title-dot" />
- <!-- 标题文本 -->
- <div class="title-text">测量者信息</div>
- </div>
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="隧道名称" prop="channelName">
- <el-input v-model="formData.channelName" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="测量时间" prop="date">
- <el-date-picker
- v-model="formData.date"
- style="width: 100%;"
- type="date"
- placeholder="请选择"
- value-format="YYYY-MM-DD HH:mm:ss"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="测量者" prop="userName">
- <el-input v-model="formData.userName" placeholder="请输入" />
- </el-form-item>
- </el-col>
- </el-row>
- <!-- 基础数据 -->
- <div class="section-title">
- <!-- 左侧蓝色圆点标识 -->
- <div class="title-dot" />
- <!-- 标题文本 -->
- <div class="title-text">基础数据</div>
- </div>
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="仪器高度" prop="deviceHeight">
- <ElInput v-model="formData.deviceHeight" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="方向偏移量(X)" prop="x0">
- <ElInput v-model="formData.x0" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="方向偏移量(Y)" prop="z0">
- <ElInput v-model="formData.z0" placeholder="请输入" />
- </el-form-item>
- </el-col>
- </el-row>
- <!-- 标准断面 -->
- <div class="section-title">
- <!-- 左侧蓝色圆点标识 -->
- <div class="title-dot" />
- <!-- 标题文本 -->
- <div class="title-text">标准断面</div>
- </div>
- <el-row v-for="(eleItem, eleIndex) in formData.sectionBeans" :key="eleIndex" :gutter="20">
- <el-col :span="4">
- <el-form-item label="方向" prop="direction">
- <!-- <ElInput v-model="eleItem.direction" placeholder="请输入" /> -->
- <el-select
- v-model="eleItem.direction"
- size="small"
- style="width: 100%"
- >
- <el-option label="顺时针" value="true" />
- <el-option label="逆时针" value="false" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="起角" prop="startAngle">
- <ElInput v-model="eleItem.startAngle" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="终角" prop="endAngle">
- <ElInput v-model="eleItem.endAngle" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="半径" prop="radius">
- <ElInput v-model="eleItem.radius" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="圆心(X)" prop="x">
- <ElInput v-model="eleItem.x" placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="4">
- <el-form-item label="圆心(Z)" prop="y">
- <ElInput v-model="eleItem.y" placeholder="请输入" />
- </el-form-item>
- </el-col>
- </el-row>
- <!-- 测量点数组 -->
- <div class="section-title">
- <!-- 左侧蓝色圆点标识 -->
- <div class="title-dot" />
- <!-- 标题文本 -->
- <div class="title-text">测量点数组</div>
- </div>
-
- <HcTable is-new :column="tableColumn" :datas="formData.data">
- <template #angle="{ row }">
- <el-input v-model="row.angle" size="small" />
- </template>
- <template #dist="{ row }">
- <el-input v-model="row.dist" size="small" />
- </template>
- <template #x="{ row }">
- <el-input v-model="row.x" size="small" />
- </template>
- <template #z="{ row }">
- <el-input v-model="row.z" size="small" />
- </template>
- <template #backBreak="{ row }">
- <el-input v-model="row.backBreak" size="small" />
- </template>
- </HcTable>
- </el-form>
- </hc-new-dialog>
- </template>
- <script setup>
- import { defineModel, onMounted, ref, watch } from 'vue'
- import { getObjValue } from 'js-fast-way'
- import { getDictionaryData } from '~uti/tools'
- import crossApi from '~api/cross/cross'
- const props = defineProps({
- formDisabled: {
- type: Boolean,
- default: false,
- },
- rowId: {
- type: String,
- default: '',
- },
-
- })
- const emit = defineEmits(['save'])
- const formDisabled = ref(props.formDisabled)
- const rowId = ref(props.rowId)
- // 双向绑定弹窗显示状态
- const editModal = defineModel('modelValue', {
- default: false,
- })
- const editModalTitle = ref('编辑')
- watch(() => props.formDisabled, (val) => {
-
- formDisabled.value = val
- editModalTitle.value = val ? '查看详情' : '编辑'
- })
- watch(() => props.rowId, (val) => {
- rowId.value = val
- if (val) {
-
- getOneDetail(val)
- }
- })
- const tasksStatus = ref([
-
- ])
- const getTasksStatusOptions = async () => {
- tasksStatus.value = await getDictionaryData('q_profiler_back_break', true)
- tasksStatus.value.forEach(item => {
- item.value = String(item.value)
- })
-
-
- }
- // 监听弹窗显示状态,每次打开时加载选项
- watch(editModal, (newVal) => {
- if (newVal) { // 当弹窗被打开时
- // getTasksStatusOptions()
- }
- })
- const getOneDetail = async (id)=>{
- confirmLoad.value = true
- const { error, code, data } = await crossApi.getOne({
- id,
- })
- //判断状态
- confirmLoad.value = false
- if (!error && code === 200) {
- console.log(data, '详情')
- formData.value = getObjValue(data)
- const { sectionBeans } = data
- if (sectionBeans.length === 0) {
- formData.value.sectionBeans = [{}]
- }
-
- } else {
- formData.value = {}
-
- }
- }
- // 表单引用
- const formRef = ref(null)
- // 加载状态
- const confirmLoad = ref(false)
- // 表单数据结构
- const formData = ref({
- channelName: '',
- date: '',
- userName: '',
- deviceHeight: '',
- x0: '',
- z0: '',
- direction: '',
- startAngle: '',
- endAngle: '',
- radius: '',
- x: '',
- z: '',
- data: [
- ],
- })
- const tableColumn = [
- { key: 'angle', name: '测点角度' },
- { key: 'dist', name: '距离' },
- { key: 'x', name: 'X坐标' },
- { key: 'z', name: 'Y坐标' },
- { key: 'backBreak', name: '超/欠挖值' },
-
- ]
- // 添加新的测量点
- // 关闭弹窗
- const closeModal = () => {
- editModal.value = false
- }
- // 确认提交
- const confirmLink = async () => {
- // 表单验证
- if (formRef.value) {
- const valid = await formRef.value.validate()
- if (!valid) return
- }
- confirmLoad.value = true
-
- // 检查sectionBeans是否为[{}]
- if (formData.value.sectionBeans && formData.value.sectionBeans.length === 1 && Object.keys(formData.value.sectionBeans[0]).length === 0) {
- formData.value.sectionBeans = []
- }
- const { error, code, msg } = await crossApi.edit(formData.value)
- //判断状态
- confirmLoad.value = false
- if (!error && code === 200) {
- window.$message.success('保存成功')
- closeModal()
- emit('save')
- }
- }
- </script>
- <style lang="scss" scoped>
- .section-title {
- display: flex;
- align-items: center;
- /* 可根据需要调整整体边距 */
- margin: 15px 0;
- }
- .title-dot {
- width: 8px;
- height: 20px;
- border-radius: 20px;
- background-color:var(--el-color-primary); /* Element UI主题蓝 */
- margin-right: 8px; /* 圆点与文字间距 */
- }
- .title-text {
- font-size: 16px;
- font-weight: 500;
- color: #333; /* 标题文字颜色 */
- /* 可根据实际设计调整字体样式 */
- }
- </style>
|