|
@@ -0,0 +1,1513 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="data-fill-list-box">
|
|
|
|
+ <el-collapse v-model="ActiveKey" accordion @change="CollapseChange">
|
|
|
|
+ <template v-for="(item,index) in listDatas" :key="item?.pKeyId">
|
|
|
|
+ <el-collapse-item :id="`item-${index}-${item?.pKeyId}`" :disabled="item['isBussShow'] === 2"
|
|
|
|
+ :name="`item-${index}-${item?.pKeyId}`">
|
|
|
|
+ <template #title>
|
|
|
|
+ <div class="hc-collapse-item-header">
|
|
|
|
+ <div class="text-lg truncate item-title">{{ item.nodeName }}</div>
|
|
|
|
+ <div class="hc-extra-text-box">
|
|
|
|
+ <HcTooltip v-if="item['isCopyTab'] === 1" keys="wbs_del_table">
|
|
|
|
+ <el-button :disabled="item['isBussShow'] === 2" :loading="delClickLoading" plain
|
|
|
|
+ type="danger" @click.stop="delClick(item,index)">删除本表
|
|
|
|
+ </el-button>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ <HcTooltip keys="wbs_copy_table">
|
|
|
|
+ <el-button :disabled="item['isBussShow'] === 2" :loading="copyClickLoading" plain
|
|
|
|
+ type="primary" @click.stop="copyClick(item,index)">复制本表
|
|
|
|
+ </el-button>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ <HcTooltip keys="wbs_hide_table">
|
|
|
|
+ <el-button plain type="primary" @click.stop="hideClick(item,index)">
|
|
|
|
+ <template v-if="item['isBussShow'] === 1">隐藏本表</template>
|
|
|
|
+ <template v-else>显示本表</template>
|
|
|
|
+ </el-button>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ <HcTooltip keys="wbs_preview_table">
|
|
|
|
+ <el-button v-if="item['isBussShow'] === 2 || item['isTabPdf'] === 1" disabled plain
|
|
|
|
+ type="info">预览
|
|
|
|
+ </el-button>
|
|
|
|
+ <el-button v-else plain type="primary" @click.stop="previewClick(item,index)">预览
|
|
|
|
+ </el-button>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ <HcTooltip keys="wbs_upload_table">
|
|
|
|
+ <el-button :disabled="item['isBussShow'] === 2" :type="item['tabFileType'] === 2?'success':'primary'"
|
|
|
|
+ plain
|
|
|
|
+ @click.stop="uploadClick(item,index)">
|
|
|
|
+ <template v-if="item['tabFileType'] === 2">已上传</template>
|
|
|
|
+ <template v-else>上传</template>
|
|
|
|
+ </el-button>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <div class="data-fill-list-item-content">
|
|
|
|
+ <div class="data-fill-table-form-box">
|
|
|
|
+ <div :id="`table-form-${item?.pKeyId}`" class="hc-excel-table-form-view"/>
|
|
|
|
+ <div v-if="item?.isTableForm === false" class="hc-no-table-form">
|
|
|
|
+ <div class="table-form-no">
|
|
|
|
+ <img :src="notableform" alt=""/>
|
|
|
|
+ <div class="desc">暂无表单数据</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="data-fill-table-tip-box">
|
|
|
|
+ <div class="text-orange tip-title">
|
|
|
|
+ <HcIcon fill name="error" ui="text-2xl"/>
|
|
|
|
+ <span class="ml-1">提示</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text-gray-400 tip-item">
|
|
|
|
+ 1、灰色框代表可通过系统识别计算,公式自动引用,可通过公式计算少量数据,(表头数据及简单),也可只填写白色框数据
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text-gray-400 tip-item">2、系统支持键盘中,shift +
|
|
|
|
+ tab键向上一个填报框切换,tab向下一个填报框切换。暂不支持上下按键切换输入框
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-tip-foot">
|
|
|
|
+ <div class="tip-left-btn">
|
|
|
|
+ <HcTooltip keys="wbs_import_table">
|
|
|
|
+ <div class="text-gray-400 dow-text">
|
|
|
|
+ <HcIcon name="publish" ui="text-lg"/>
|
|
|
|
+ <span class="ml-1">导入列表数据</span>
|
|
|
|
+ </div>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ <HcTooltip keys="wbs_download_table">
|
|
|
|
+ <div class="text-main dow-text">
|
|
|
|
+ <HcIcon name="file_download" ui="text-lg"/>
|
|
|
|
+ <span class="ml-1">下载导入模板</span>
|
|
|
|
+ </div>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="tip-right-btn">
|
|
|
|
+ <HcTooltip keys="wbs_save_table">
|
|
|
|
+ <el-button :disabled="NodeStatusval === '3'" :loading="tableFormSaveLoading" hc-btn
|
|
|
|
+ type="primary"
|
|
|
|
+ @click="tableFormSaveClick(item,index)">
|
|
|
|
+ <HcIcon name="save"/>
|
|
|
|
+ <span>保存</span>
|
|
|
|
+ </el-button>
|
|
|
|
+ </HcTooltip>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </el-collapse-item>
|
|
|
|
+ </template>
|
|
|
|
+ </el-collapse>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!--右键菜单-->
|
|
|
|
+ <HcContextMenu ref="contextMenuRef" :datas="tableFormMenu" @item-click="handleMenuSelect"/>
|
|
|
|
+
|
|
|
|
+ <!--上传文件-->
|
|
|
|
+ <HcDialog :footer="false" :show="uploadModal" title="上传文件" widths="38rem" @close="uploadModal = false">
|
|
|
|
+ <HcUpload :baseData="baseData" :contractId="contractId" :datas="uploadData" :fileList="fileListData"
|
|
|
|
+ :tableTypeValue="tableTypeValue" @change='uploadChange'/>
|
|
|
|
+ </HcDialog>
|
|
|
|
+
|
|
|
|
+ <!--插入特殊字符-->
|
|
|
|
+ <HcDialog :show="specialModal" saveText="确认插入" title="插入特殊字符" widths="600px" @close="specialModal = false"
|
|
|
|
+ @save="specialNodeClick">
|
|
|
|
+ <el-form ref="specialFormRef" :model="specialFormModel" :rules="specialFormRules" class="mb-6" label-width="0px"
|
|
|
|
+ size="large">
|
|
|
|
+ <el-form-item class="special-form-item" prop="val">
|
|
|
|
+ <el-input id="specialId" ref="specialRef" v-model="specialFormModel.val"
|
|
|
|
+ clearable placeholder="请选择特殊字符代码" @blur="specialInputBlur"/>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ <el-row :gutter="20" style="margin: -10px;">
|
|
|
|
+ <el-col v-for="item in specialCharacters" :span="3" style="padding: 10px;">
|
|
|
|
+ <div class="special-box" @click="specialClick">
|
|
|
|
+ <span :title="`字符代码(C):${item !== 'K̅'?item.slice(2,7):'K̅'}`" class="font-EUDC" v-html="item"/>
|
|
|
|
+ </div>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </HcDialog>
|
|
|
|
+
|
|
|
|
+ <!--引用容器参数-->
|
|
|
|
+ <HcDialog :show="vesselModal" isTable saveText="确认引用" title="引用容器参数" widths="84%"
|
|
|
|
+ @close="vesselModalClose" @save="vesselModalSave">
|
|
|
|
+ <div class="adding-form-dialog-box">
|
|
|
|
+ <div class="dialog-tree-box">
|
|
|
|
+ <el-scrollbar>
|
|
|
|
+ <HcMenuSimple :datas="menus" :keys="menuKey" :props="menuProps" @change="menuChange"/>
|
|
|
|
+ </el-scrollbar>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="dialog-table-box">
|
|
|
|
+ <div class="dialog-table">
|
|
|
|
+ <HcTable ref="vesselTableRef" :column="vesselTableColumn" :datas="vesselTableData"
|
|
|
|
+ :loading="vesselTableLoading" isCheck @selection-change="vesselTableSelection"/>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="dialog-pages">
|
|
|
|
+ <HcPages :pages="vesselTablePage" @change="vesselTablePageChange"/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </HcDialog>
|
|
|
|
+
|
|
|
|
+ <!--引用设备仪器-->
|
|
|
|
+ <HcDialog :show="deviceModal" isTable saveText="确认引用" title="引用设备仪器" widths="84%"
|
|
|
|
+ @close="deviceModalClose" @save="deviceModalSave">
|
|
|
|
+ <!-- <HcTable ref="deviceTableRef" :column="deviceTableColumn" :datas="deviceTableData" :loading="deviceTableLoading" isCheck @selection-change="deviceTableSelection"/> -->
|
|
|
|
+ <div class="adding-form-dialog-box">
|
|
|
|
+ <div class="dialog-tree-box">
|
|
|
|
+ <el-scrollbar>
|
|
|
|
+ <HcMenuSimple :datas="equipmentmenus" :keys="equipmentmenuKey" :props="equipmentmenuProps"
|
|
|
|
+ @change="equipmentmenuChange"/>
|
|
|
|
+ </el-scrollbar>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="dialog-table-box">
|
|
|
|
+ <div class="dialog-table">
|
|
|
|
+ <HcTable ref="deviceTableRef" :column="deviceTableColumn" :datas="deviceTableData"
|
|
|
|
+ :loading="deviceTableLoading" isCheck @selection-change="deviceTableSelection"/>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="dialog-pages">
|
|
|
|
+ <HcPages :pages="equipmentPage" @change="equipmentTablePageChange"/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </HcDialog>
|
|
|
|
+
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup>
|
|
|
|
+import {ref, watch, nextTick} from "vue";
|
|
|
|
+import {useAppStore} from "~src/store";
|
|
|
|
+import {useRouter, useRoute} from 'vue-router'
|
|
|
|
+import wbsApi from "~api/data-fill/wbs"
|
|
|
|
+import HcUpload from "./HcUpload.vue"
|
|
|
|
+import HTableForm from "~src/plugins/HTableForm"
|
|
|
|
+import dataApi from "~api/tentative/detect/test";
|
|
|
|
+import dataApi1 from "~api/tentative/parameter/container"
|
|
|
|
+import dataApi2 from "~api/tentative/device/approach"
|
|
|
|
+import {getClassList} from "~api/tentative";
|
|
|
|
+import notableform from '~src/assets/view/notableform.svg';
|
|
|
|
+import {isString, getObjVal, getArrValue, formValidate, deepClone, setPosInsert, setPosRange} from "js-fast-way"
|
|
|
|
+
|
|
|
|
+const router = useRouter()
|
|
|
|
+const useRoutes = useRoute()
|
|
|
|
+//路由参数
|
|
|
|
+const routerQuery = useRoutes?.query;
|
|
|
|
+const isaddType = routerQuery?.isaddType || false;
|
|
|
|
+//初始
|
|
|
|
+const props = defineProps({
|
|
|
|
+ datas: {
|
|
|
|
+ type: Array,
|
|
|
|
+ default: () => ([])
|
|
|
|
+ },
|
|
|
|
+ status: {
|
|
|
|
+ type: [String, Number],
|
|
|
|
+ default: ''
|
|
|
|
+ },
|
|
|
|
+ baseData: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default: () => ({})
|
|
|
|
+ },
|
|
|
|
+ deviceUseIds: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: () => ('')
|
|
|
|
+ },
|
|
|
|
+ authBtnTabKey: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: () => ('')
|
|
|
|
+ },
|
|
|
|
+ checkTableId: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: () => ('')
|
|
|
|
+ },
|
|
|
|
+ tabTypeKey: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: () => ('')
|
|
|
|
+ },
|
|
|
|
+ nodeIdvalue: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: () => ('')
|
|
|
|
+ },
|
|
|
|
+ alllistData: {
|
|
|
|
+ type: Array,
|
|
|
|
+ default: () => ([])
|
|
|
|
+ },
|
|
|
|
+ NodeStatus: {
|
|
|
|
+ type: String,
|
|
|
|
+ default: () => ('')
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+})
|
|
|
|
+const listDatas = ref(props.datas)
|
|
|
|
+const isStatus = ref(props.status)
|
|
|
|
+const baseData = ref(props.baseData)
|
|
|
|
+const authBtnTabKeyType = ref(props.authBtnTabKey)//所属方
|
|
|
|
+const useAppState = useAppStore()
|
|
|
|
+const projectId = ref(useAppState.getProjectId);
|
|
|
|
+const contractId = ref(useAppState.getContractId);
|
|
|
|
+const tabTypeKeyInfo = ref(props.tabTypeKey)
|
|
|
|
+const nodeIdvaluedata = ref(props.nodeIdvalue)
|
|
|
|
+const alllistDataval = ref(props.alllistData)
|
|
|
|
+const NodeStatusval = ref(props.NodeStatus)
|
|
|
|
+
|
|
|
|
+//监听
|
|
|
|
+watch(() => [
|
|
|
|
+ props.datas,
|
|
|
|
+ props.tabTypeKey,
|
|
|
|
+ props.alllistData,
|
|
|
|
+ props.NodeStatus
|
|
|
|
+], ([datas, TabTypeKey, AlllistData, NodeStatus]) => {
|
|
|
|
+ listDatas.value = datas
|
|
|
|
+ listDatas.value.forEach((item) => {
|
|
|
|
+ if (item.pKeyId === singleSaveid.value) {
|
|
|
|
+ item.isCancopy = true
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ tabTypeKeyInfo.value = TabTypeKey
|
|
|
|
+ alllistDataval.value = AlllistData
|
|
|
|
+ NodeStatusval.value = NodeStatus
|
|
|
|
+ setFormDataNum(datas)
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+//监听
|
|
|
|
+watch(() => [
|
|
|
|
+ props.status,
|
|
|
|
+ props.baseData,
|
|
|
|
+ props.nodeIdvalue
|
|
|
|
+], ([val, base, NodeIdvalue]) => {
|
|
|
|
+ //1 未填报,2待上报,3已上报
|
|
|
|
+ isStatus.value = val
|
|
|
|
+ baseData.value = base
|
|
|
|
+ nodeIdvaluedata.value = NodeIdvalue
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+//渲染完成
|
|
|
|
+nextTick(() => {
|
|
|
|
+ setFormDataNum(props.datas)
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+//获取pKeyId
|
|
|
|
+const getValString = (val) => {
|
|
|
|
+ return val ? val + '' : ''
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取表单初始数据
|
|
|
|
+const getFormDataInit = ({projectId, cid, pKeyId, isBussShow}) => {
|
|
|
|
+ const {nodeId, contractId} = baseData.value
|
|
|
|
+ return {
|
|
|
|
+ projectId: projectId,
|
|
|
|
+ contractId: cid || contractId,
|
|
|
|
+ pkeyId: getValString(pKeyId),
|
|
|
|
+ nodeId: nodeId,
|
|
|
|
+ isBussShow: isBussShow
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//设置表单对象的数量
|
|
|
|
+const formData = ref([])
|
|
|
|
+const setFormDataNum = (datas) => {
|
|
|
|
+ ActiveKey.value = ''
|
|
|
|
+ let newArr = [];
|
|
|
|
+ for (let i = 0; i < datas.length; i++) {
|
|
|
|
+ newArr.push({
|
|
|
|
+ ...getFormDataInit(datas[i]),
|
|
|
|
+ isCollapseLoad: false,
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ formData.value = newArr
|
|
|
|
+}
|
|
|
|
+const sampledata = ref([])
|
|
|
|
+const positiondata = ref([])
|
|
|
|
+//展开事件
|
|
|
|
+const ActiveKey = ref('')
|
|
|
|
+const formKeyIds = ref('')
|
|
|
|
+const CollapseChange = async (name) => {
|
|
|
|
+ ActiveKey.value = name
|
|
|
|
+ const names = name ? name.split('-') : []
|
|
|
|
+ formData.value.forEach((changeitem) => {
|
|
|
|
+ if (changeitem.pkeyId === names[2]) {
|
|
|
|
+ changeitem.isCollapseLoad = true
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (names.length > 0) {
|
|
|
|
+ getOffsetTop(name)
|
|
|
|
+ const index = names[1]
|
|
|
|
+ let item = listDatas.value[index]
|
|
|
|
+ emit('upcheckTableId', item.pKeyId)
|
|
|
|
+ emit('changeIscanclick', item.pKeyId)
|
|
|
|
+ formKeyIds.value = getValString(item.pKeyId)
|
|
|
|
+ console.log(alllistDataval.value, 'alllistDataval');
|
|
|
|
+ alllistDataval.value.forEach((item1) => {
|
|
|
|
+ if (item1.pkeyId == item.pKeyId) {
|
|
|
|
+ if (item1.oper) {
|
|
|
|
+ item.isTableFormRender = true;
|
|
|
|
+ item = item1
|
|
|
|
+ item.pKeyId = item1.pkeyId
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ if (!item.isTableFormRender) {
|
|
|
|
+ await getBussDataInfo(item, index)
|
|
|
|
+ } else {
|
|
|
|
+ await getBussDataInfo1(item, index)
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //渲染表单
|
|
|
|
+ await getExcelHtml(item, index)
|
|
|
|
+ } else {
|
|
|
|
+ // await getExcelHtml(item,index)
|
|
|
|
+ getOffsetTop()
|
|
|
|
+ formKeyIds.value = ''
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取模板标签数据
|
|
|
|
+const formRegExpJson = ref({})
|
|
|
|
+const getExcelHtml = async (item, index) => {
|
|
|
|
+ console.log('获取模板数据');
|
|
|
|
+ const pkeyIds = getValString(item.pKeyId)
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ console.log(nodeIdvaluedata.value, 'nodeIdvaluedata.value');
|
|
|
|
+ const {error, code, data} = await dataApi.getExcelHtml({
|
|
|
|
+ id: id || nodeIdvaluedata.value,
|
|
|
|
+ primaryKeyId: pkeyIds
|
|
|
|
+ }, false)
|
|
|
|
+ const resData = isString(data) ? data || '' : ''
|
|
|
|
+ if (!error && code === 200 && resData) {
|
|
|
|
+ item.isTableForm = true
|
|
|
|
+ //渲染表单
|
|
|
|
+ HTableForm.createForm({
|
|
|
|
+ template: resData,
|
|
|
|
+ tableForm: formData.value[index],
|
|
|
|
+ appId: `#table-form-${pkeyIds}`,
|
|
|
|
+ onRight: (event, KeyName) => {
|
|
|
|
+ onRightClick(event, KeyName, index)
|
|
|
|
+ },
|
|
|
|
+ //表单正则效验
|
|
|
|
+ onBlur: (event, key, reg, val, msg) => {
|
|
|
|
+ setTableFormBlurReg(pkeyIds, event, key, reg, val, msg, item, index)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ item.isTableFormRender = true
|
|
|
|
+ item.isRenderTableForm = true
|
|
|
|
+ } else {
|
|
|
|
+ item.isTableForm = false
|
|
|
|
+ item.isRenderTableForm = true
|
|
|
|
+ window?.$message?.warning('暂无表单')
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ item.isTableForm = false
|
|
|
|
+ item.isRenderTableForm = false
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//正则效验
|
|
|
|
+const setTableFormBlurReg = (pkeyId, event, key, reg, val, msg, item, index) => {
|
|
|
|
+ const dom = document.getElementById(key)?.parentElement ?? ''
|
|
|
|
+ if (dom) {
|
|
|
|
+ if (val && reg) {
|
|
|
|
+ let regx = new RegExp(reg);
|
|
|
|
+ let state = regx.test(val);
|
|
|
|
+ if (state) {
|
|
|
|
+ delete formRegExpJson.value[pkeyId]
|
|
|
|
+ dom.style = ''
|
|
|
|
+ } else {
|
|
|
|
+ formRegExpJson.value[pkeyId] = {
|
|
|
|
+ key,
|
|
|
|
+ reg,
|
|
|
|
+ val,
|
|
|
|
+ msg,
|
|
|
|
+ state,
|
|
|
|
+ nodeName: item.nodeName,
|
|
|
|
+ itemId: `item-${index}-${item?.pKeyId}`
|
|
|
|
+ }
|
|
|
|
+ dom.style = '--el-input-border-color: #fe0000; box-shadow: 0 0 0 2px #fe0000 inset;'
|
|
|
|
+ window?.$message?.warning(msg)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ delete formRegExpJson.value[pkeyId]
|
|
|
|
+ dom.style = ''
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//关联取样成功改变所有表格取样名称数据
|
|
|
|
+const getsampleData = () => {
|
|
|
|
+ console.log(sampledata.value, 'sampledata.value');
|
|
|
|
+ if (sampledata.value.length > 0) {
|
|
|
|
+ formData.value.forEach((ele) => {
|
|
|
|
+ sampledata.value.forEach((item) => {
|
|
|
|
+ if (item.tabPKeyId === ele.pkeyId) {
|
|
|
|
+ for (let i in item) {
|
|
|
|
+ ele[i] = item[i]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//getPositionData关联取样成功改变所有表格工程部位数据
|
|
|
|
+const getPositionData = () => {
|
|
|
|
+ console.log(positiondata.value, 'positiondata.value');
|
|
|
|
+ if (positiondata.value.length > 0) {
|
|
|
|
+ formData.value.forEach((ele) => {
|
|
|
|
+ positiondata.value.forEach((item) => {
|
|
|
|
+ if (item.tabPKeyId === ele.pkeyId) {
|
|
|
|
+ for (let i in item) {
|
|
|
|
+ ele[i] = item[i]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ console.log(formData.value, 'formData.value');
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+const changeSimpleInput = (infodata, id) => {
|
|
|
|
+ sampledata.value = infodata
|
|
|
|
+ getsampleData()
|
|
|
|
+}
|
|
|
|
+const changePositionInput = (infodata) => {
|
|
|
|
+ positiondata.value = infodata
|
|
|
|
+ getPositionData()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//获取已填写的数据
|
|
|
|
+const getBussDataInfo = async (item, index) => {
|
|
|
|
+ const pkeyIds = getValString(item.pKeyId)
|
|
|
|
+ const {contractId} = baseData.value
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ const {error, code, data} = await dataApi.getBussDataInfo({
|
|
|
|
+ id: id || nodeIdvaluedata.value,
|
|
|
|
+ pkeyId: pkeyIds,
|
|
|
|
+ contractId: contractId
|
|
|
|
+ }, false)
|
|
|
|
+ console.log(item, 'item2222');
|
|
|
|
+ emit('changesingSaveId', pkeyIds)
|
|
|
|
+ if (item.oper) {
|
|
|
|
+ console.log(11111111);
|
|
|
|
+ HTableForm.setPickerKey([item])
|
|
|
|
+ formData.value[index] = {
|
|
|
|
+ ...item,
|
|
|
|
+ isCollapseLoad: true
|
|
|
|
+ }
|
|
|
|
+ getsampleData()
|
|
|
|
+ getPositionData()
|
|
|
|
+ } else {
|
|
|
|
+ console.log(2222222222);
|
|
|
|
+ data.forEach((item1) => {
|
|
|
|
+ const resData = getObjVal(item1)
|
|
|
|
+ if (!error && code === 200 && resData) {
|
|
|
|
+ HTableForm.setPickerKey(resData)
|
|
|
|
+ const InitObj = getFormDataInit(item) //有数据,关联数据
|
|
|
|
+ formData.value[index] = {
|
|
|
|
+ ...resData, ...InitObj,
|
|
|
|
+ isCollapseLoad: true
|
|
|
|
+ }
|
|
|
|
+ getsampleData()
|
|
|
|
+ getPositionData()
|
|
|
|
+ } else {
|
|
|
|
+ formData.value[index] = {
|
|
|
|
+ ...getFormDataInit(item),
|
|
|
|
+ isCollapseLoad: true
|
|
|
|
+ }
|
|
|
|
+ getsampleData()
|
|
|
|
+ getPositionData()
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // data.forEach((item1)=>{
|
|
|
|
+ // const resData = getObjVal(item1)
|
|
|
|
+ // if (!error && code === 200 && resData) {
|
|
|
|
+ // HTableForm.setPickerKey(resData)
|
|
|
|
+ // const InitObj = getFormDataInit(item) //有数据,关联数据
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...resData, ...InitObj,
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // }else {
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...getFormDataInit(item),
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // if (!error && code === 200 && resData) {
|
|
|
|
+ // HTableForm.setPickerKey(resData)
|
|
|
|
+ // const InitObj = getFormDataInit(item) //有数据,关联数据
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...resData, ...InitObj,
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // } else {
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...getFormDataInit(item),
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+const getBussDataInfo1 = async (item, index) => {
|
|
|
|
+ console.log(item, 'item');
|
|
|
|
+ const pkeyIds = getValString(item.pKeyId)
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ // const {error, code, data} = await dataApi.getBussDataInfo({
|
|
|
|
+ // id: id||nodeIdvaluedata.value,
|
|
|
|
+ // pkeyId: pkeyIds
|
|
|
|
+ // }, false)
|
|
|
|
+
|
|
|
|
+ if (item.oper) {
|
|
|
|
+ HTableForm.setPickerKey([item])
|
|
|
|
+ formData.value[index] = {
|
|
|
|
+ ...item,
|
|
|
|
+ isCollapseLoad: true
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ // data.forEach((item1)=>{
|
|
|
|
+ // const resData = getObjVal(item1)
|
|
|
|
+ // if (!error && code === 200 && resData) {
|
|
|
|
+ // HTableForm.setPickerKey(resData)
|
|
|
|
+ // const InitObj = getFormDataInit(item) //有数据,关联数据
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...resData, ...InitObj,
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // }else {
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...getFormDataInit(item),
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // if (!error && code === 200 && resData) {
|
|
|
|
+ // HTableForm.setPickerKey(resData)
|
|
|
|
+ // const InitObj = getFormDataInit(item) //有数据,关联数据
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...resData, ...InitObj,
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // } else {
|
|
|
|
+ // formData.value[index] = {
|
|
|
|
+ // ...getFormDataInit(item),
|
|
|
|
+ // isCollapseLoad: true
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+const toBackClick = () => {
|
|
|
|
+ router.push({
|
|
|
|
+ path: '/tentative/detect/test',
|
|
|
|
+ query: {}
|
|
|
|
+ })
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ window?.location?.reload() //刷新页面
|
|
|
|
+ }, 1000);
|
|
|
|
+}
|
|
|
|
+//单个保存
|
|
|
|
+const tableFormSaveLoading = ref(false)
|
|
|
|
+const singleSaveid = ref('')
|
|
|
|
+const tableFormSaveClick = async (item, index) => {
|
|
|
|
+ if (isStatus.value !== '3') {
|
|
|
|
+ console.log(item, '单个保存');
|
|
|
|
+ singleSaveid.value = item.pKeyId
|
|
|
|
+ emit('changesingSaveId', item.pKeyId)
|
|
|
|
+ if (tabTypeKeyInfo.value === '2' && baseData.value['detectionResult'] === '') {
|
|
|
|
+ window.$message?.warning('请选择是否合格')
|
|
|
|
+ } else {
|
|
|
|
+ const res = await saveExcelBussData(item, index)
|
|
|
|
+ if (res) {
|
|
|
|
+ if (!isaddType) {
|
|
|
|
+ await getBussPdfInfo(item)
|
|
|
|
+ } else {
|
|
|
|
+ //返回
|
|
|
|
+ toBackClick()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ renewData()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('已上报的资料,不允许保存。')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//保存表单数据
|
|
|
|
+const saveExcelBussData = async (item, index, showTip = true) => {
|
|
|
|
+ if (!getObjVal(formRegExpJson.value)) {
|
|
|
|
+ tableFormSaveLoading.value = true
|
|
|
|
+ const InitObj = getFormDataInit(item)
|
|
|
|
+ baseData.value.tableType = tabTypeKeyInfo.value
|
|
|
|
+ console.log(baseData.value.tableType, ' baseData.value.tableType');
|
|
|
|
+ const {error, code} = await dataApi.saveExcelBussData({
|
|
|
|
+ ...baseData.value,
|
|
|
|
+ isBatchSave: 0,
|
|
|
|
+ dataInfo: {
|
|
|
|
+ orderList: [{...formData.value[index], ...InitObj}]
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ //处理数据
|
|
|
|
+ tableFormSaveLoading.value = false
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ if (showTip) window?.$message?.success('保存成功')
|
|
|
|
+ return true
|
|
|
|
+ } else {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('请先修改完红色输入框的数据')
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//预览PDF
|
|
|
|
+const getBussPdfInfo = async ({pKeyId}, showTip = true) => {
|
|
|
|
+ const pkeyIds = getValString(pKeyId)
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ const {error, code, data} = await dataApi.getBussPdf({
|
|
|
|
+ id: id,
|
|
|
|
+ pKeyId: pkeyIds
|
|
|
|
+ }, false)
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ if (data) {
|
|
|
|
+ window.open(data, '_blank')
|
|
|
|
+ } else if (showTip) {
|
|
|
|
+ window?.$message?.warning('PDF错误')
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (showTip) {
|
|
|
|
+ window?.$message?.warning(data.msg || '获取PDF失败')
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+const delClickLoading = ref(false)
|
|
|
|
+//删除本表
|
|
|
|
+const delClick = async ({pKeyId}) => {
|
|
|
|
+ const pkeyIds = getValString(pKeyId)
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ delClickLoading.value = true
|
|
|
|
+ const {error, code} = await dataApi.removeBussTabInfo({
|
|
|
|
+ // id: id,
|
|
|
|
+ pKeyId: pkeyIds
|
|
|
|
+ })
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ window?.$message?.success('操作成功')
|
|
|
|
+ renewData()
|
|
|
|
+ delClickLoading.value = false
|
|
|
|
+ } else {
|
|
|
|
+ delClickLoading.value = false
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ delClickLoading.value = false
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+const copyClickLoading = ref(false)
|
|
|
|
+//复制本表
|
|
|
|
+const copyClick = async (item, index) => {
|
|
|
|
+ console.log(item, '复制item');
|
|
|
|
+ const pkeyIds = getValString(item.pKeyId)
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ if (isStatus.value !== '3') {
|
|
|
|
+ if (item.isRenderTableForm && !item.isCancopy) {
|
|
|
|
+ window.$message.warning('请先保存数据再复制本表')
|
|
|
|
+ } else {
|
|
|
|
+ if (!item.isRenderTableForm) {
|
|
|
|
+ await copeBussTab(pkeyIds)
|
|
|
|
+ } else if (!item.isTableForm) {
|
|
|
|
+ window?.$message?.warning('暂无表单数据')
|
|
|
|
+ } else if (item.isRenderTableForm) {
|
|
|
|
+ // const res = await saveExcelBussData(item,index,false)
|
|
|
|
+ // if (res) {
|
|
|
|
+ // await copeBussTab(pkeyIds)
|
|
|
|
+ // } else {
|
|
|
|
+ // window?.$message?.warning('复制本表操作失败')
|
|
|
|
+ // }
|
|
|
|
+ await copeBussTab(pkeyIds)
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning(`数据异常了, isRenderTableForm: ${item.isRenderTableForm}, isTableForm: ${item.isTableForm}, pKeyId:${pkeyIds}`)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('已上报的资料,不允许复制')
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const copeBussTab = async (pkeyIds) => {
|
|
|
|
+ const {id, contractId} = baseData.value
|
|
|
|
+ copyClickLoading.value = true
|
|
|
|
+ const {error, code} = await dataApi.copyBussTab({
|
|
|
|
+ id: id,
|
|
|
|
+ pKeyId: pkeyIds,
|
|
|
|
+ contractId: contractId
|
|
|
|
+ })
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ window?.$message?.success('操作成功')
|
|
|
|
+ renewData()
|
|
|
|
+ chageOrinData()
|
|
|
|
+ }
|
|
|
|
+ copyClickLoading.value = false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//隐藏本表
|
|
|
|
+const hideClick = async ({pKeyId, isBussShow}) => {
|
|
|
|
+ const pkeyIds = getValString(pKeyId)
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ if (isStatus.value !== '3') {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ const isBussShows = isBussShow === 2 ? 1 : 2 //状态(1显示 2隐藏)
|
|
|
|
+ const {error, code} = await dataApi.showBussTab({
|
|
|
|
+ id: id,
|
|
|
|
+ pKeyId: pkeyIds,
|
|
|
|
+ status: isBussShows
|
|
|
|
+ })
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ window?.$message?.success('操作成功')
|
|
|
|
+ renewData()
|
|
|
|
+ changeisHide(pkeyIds, isBussShow)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('已上报的资料,不允许隐藏')
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//预览
|
|
|
|
+const previewClick = async (item, index) => {
|
|
|
|
+ await getBussPdfInfo(item)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//上传变量
|
|
|
|
+const uploadModal = ref(false)
|
|
|
|
+const fileListData = ref([]);
|
|
|
|
+const uploadData = ref({})
|
|
|
|
+const tableTypeValue = ref('')
|
|
|
|
+//上传被点击
|
|
|
|
+const uploadClick = (item, index) => {
|
|
|
|
+ const pkeyIds = item.pKeyId ? item.pKeyId + '' : ''
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ const tableType = item.tableType ? item.tableType : ''
|
|
|
|
+ tableTypeValue.value = item.tableType ? item.tableType : ''
|
|
|
|
+ const classify = authBtnTabKeyType.value
|
|
|
|
+ const keyName = `item-${index}-${pkeyIds}`
|
|
|
|
+ if (pkeyIds) {
|
|
|
|
+ if (isStatus.value !== '3' && item.isTableForm) {
|
|
|
|
+ uploadModal.value = true
|
|
|
|
+ uploadData.value = getFormDataInit(item, pkeyIds)
|
|
|
|
+ uploadData.value.tableType = tableType
|
|
|
|
+ uploadData.value.classify = classify
|
|
|
|
+ uploadData.value.id = id
|
|
|
|
+ console.log(uploadData.value, ' uploadData.value');
|
|
|
|
+ //获取文件列表
|
|
|
|
+ getBussFileList(pkeyIds)
|
|
|
|
+ } else if (!item.isRenderTableForm) {
|
|
|
|
+ CollapseChange(keyName)
|
|
|
|
+ window?.$message?.warning('请再次点击上传')
|
|
|
|
+ } else if (!item.isTableForm) {
|
|
|
|
+ window?.$message?.warning('暂无表单数据')
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('已上报的资料,不允许上传')
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('pkeyId为空')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取文件列表
|
|
|
|
+const getBussFileList = async (pkeyId) => {
|
|
|
|
+ const {id} = baseData.value
|
|
|
|
+ const {error, code, data} = await wbsApi.getBussFileList1({
|
|
|
|
+ pkeyid: pkeyId,
|
|
|
|
+ id: id
|
|
|
|
+ })
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ fileListData.value = getArrValue(data)
|
|
|
|
+ } else {
|
|
|
|
+ fileListData.value = []
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//上传文件
|
|
|
|
+const uploadChange = async ({type}) => {
|
|
|
|
+ if (type === 'success') {
|
|
|
|
+ uploadModal.value = false
|
|
|
|
+ renewData()
|
|
|
|
+ } else if (type === 'del') {
|
|
|
|
+ renewData()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//相关变量
|
|
|
|
+const tableFormItemNode = ref({})
|
|
|
|
+
|
|
|
|
+//菜单数据
|
|
|
|
+const tableFormMenu = ref([
|
|
|
|
+ {label: '容器参数', key: "vessel"},
|
|
|
|
+ {label: '引用设备仪器', key: "device"},
|
|
|
|
+ {label: '插入特殊字符', key: "special"},
|
|
|
|
+])
|
|
|
|
+
|
|
|
|
+//鼠标右键事件
|
|
|
|
+const contextMenuRef = ref(null)
|
|
|
|
+const onRightClick = (event, KeyName, index) => {
|
|
|
|
+ //取光标位置
|
|
|
|
+ const specialDom = document.getElementById(KeyName + "")
|
|
|
|
+ const startPos = specialDom?.selectionStart || 0
|
|
|
|
+ const endPos = specialDom?.selectionEnd || 0
|
|
|
|
+ //存储临时信息
|
|
|
|
+ tableFormItemNode.value = {KeyName, index, startPos, endPos, pkeyId: formKeyIds.value}
|
|
|
|
+ contextMenuRef.value?.showMenu(event) //展开菜单
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//鼠标右键菜单被点击
|
|
|
|
+const handleMenuSelect = ({key}) => {
|
|
|
|
+ if (key === 'vessel') {
|
|
|
|
+ vesselModal.value = true
|
|
|
|
+ getMenusData()
|
|
|
|
+ } else if (key === 'special') {
|
|
|
|
+ specialModalShow()
|
|
|
|
+ } else if (key === 'device') {
|
|
|
|
+ deviceModal.value = true
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ deviceTableRef.value?.clearSelection();
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ getequipmentMenusData()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//引用容器参数
|
|
|
|
+const vesselModal = ref(false)
|
|
|
|
+const vesselTableRef = ref(null)
|
|
|
|
+
|
|
|
|
+//引用容器参数菜单数据
|
|
|
|
+const menuProps = {
|
|
|
|
+ key: 'id',
|
|
|
|
+ label: 'containerName',
|
|
|
|
+}
|
|
|
|
+//引用容器参数菜单数据
|
|
|
|
+const equipmentmenuProps = {
|
|
|
|
+ key: 'id',
|
|
|
|
+ label: 'className',
|
|
|
|
+}
|
|
|
|
+const menus = ref([]);
|
|
|
|
+const getMenusData = async () => {
|
|
|
|
+ const {data} = await dataApi1.queryClassification({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value
|
|
|
|
+ })
|
|
|
|
+ const arr = getArrValue(data)
|
|
|
|
+ menus.value = arr
|
|
|
|
+ if (arr.length > 0) {
|
|
|
|
+ const item = arr[0]
|
|
|
|
+ menuItem.value = item
|
|
|
|
+ menuKey.value = item?.id
|
|
|
|
+ vesselTableColumn.value = []
|
|
|
|
+ if (item?.fieldList && item?.fieldList.length > 0) {
|
|
|
|
+ item?.fieldList.forEach((item1) => {
|
|
|
|
+ vesselTableColumn.value.push(({
|
|
|
|
+ key: item1?.fieldKey,
|
|
|
|
+ name: item1?.fieldName
|
|
|
|
+ }))
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ getVesselTableData()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//菜单被点击
|
|
|
|
+const menuKey = ref()
|
|
|
|
+const menuItem = ref({})
|
|
|
|
+const menuChange = (item) => {
|
|
|
|
+ menuItem.value = item
|
|
|
|
+ menuKey.value = item?.id
|
|
|
|
+ vesselTableColumn.value = []
|
|
|
|
+ item?.fieldList.forEach((item1) => {
|
|
|
|
+ vesselTableColumn.value.push(({
|
|
|
|
+ key: item1?.fieldKey,
|
|
|
|
+ name: item1?.fieldName
|
|
|
|
+ }))
|
|
|
|
+ })
|
|
|
|
+ getVesselTableData()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//表格数据
|
|
|
|
+const vesselTableColumn = ref([
|
|
|
|
+ // {key:'key_1', name: '容器编号'},
|
|
|
|
+])
|
|
|
|
+const vesselTableData = ref([])
|
|
|
|
+const vesselTablePage = ref({current: 1, size: 20, total: 0})
|
|
|
|
+const vesselTablePageChange = ({current, size}) => {
|
|
|
|
+ vesselTablePage.value.current = current
|
|
|
|
+ vesselTablePage.value.size = size
|
|
|
|
+ getVesselTableData()
|
|
|
|
+}
|
|
|
|
+//获取表格数据
|
|
|
|
+const vesselTableLoading = ref(false)
|
|
|
|
+const getVesselTableData = async () => {
|
|
|
|
+ const {id, fieldList} = menuItem.value
|
|
|
|
+ const fieldLists = getArrValue(fieldList)
|
|
|
|
+ if (fieldLists.length > 0) {
|
|
|
|
+ vesselTableLoading.value = true
|
|
|
|
+ const {error, code, data} = await dataApi1.queryPage({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value,
|
|
|
|
+ containerId: menuKey.value,
|
|
|
|
+ fieldKey: fieldList[0].fieldKey,
|
|
|
|
+ size: vesselTablePage.value.size,
|
|
|
|
+ current: vesselTablePage.value.current,
|
|
|
|
+ })
|
|
|
|
+ //处理数据
|
|
|
|
+ vesselTableLoading.value = false
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ vesselTableData.value = getArrValue(data['records'])
|
|
|
|
+ vesselTablePage.value.total = data.total || 0
|
|
|
|
+ } else {
|
|
|
|
+ vesselTableData.value = []
|
|
|
|
+ vesselTablePage.value.total = 0
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//多选
|
|
|
|
+const vesselTableKeys = ref([]);
|
|
|
|
+const vesselTableSelection = (rows) => {
|
|
|
|
+ vesselTableKeys.value = rows
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//确认引用
|
|
|
|
+const vesselModalSave = () => {
|
|
|
|
+ if (vesselTableKeys.value.length > 0) {
|
|
|
|
+ const item = tableFormItemNode.value
|
|
|
|
+ const form = formData.value[item.index]
|
|
|
|
+ const val = []
|
|
|
|
+ vesselTableKeys.value.forEach((item) => {
|
|
|
|
+ val.push(item.key_2)
|
|
|
|
+ })
|
|
|
|
+ const newval = val.join('、')
|
|
|
|
+ formData.value[item.index][item.KeyName] = setPosInsert(item.startPos, item.endPos, form[item.KeyName], newval)
|
|
|
|
+ vesselModal.value = false
|
|
|
|
+ let posVal = item.startPos + newval.length;
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ setPosRange(item.KeyName, posVal)
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('请先选择引用容器参数')
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+//关闭
|
|
|
|
+const vesselModalClose = () => {
|
|
|
|
+ vesselModal.value = false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+const equipmentmenus = ref([]);
|
|
|
|
+const getequipmentMenusData = async () => {
|
|
|
|
+ const {data} = await getClassList({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value
|
|
|
|
+ })
|
|
|
|
+ const arr = getArrValue(data)
|
|
|
|
+ equipmentmenus.value = arr
|
|
|
|
+ if (arr.length > 0) {
|
|
|
|
+ const item = arr[0]
|
|
|
|
+ equipmentmenuItem.value = item
|
|
|
|
+ equipmentmenuKey.value = item?.id
|
|
|
|
+ getDeviceTableData()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//菜单被点击
|
|
|
|
+const equipmentmenuKey = ref()
|
|
|
|
+const equipmentmenuItem = ref({})
|
|
|
|
+const equipmentmenuChange = (item) => {
|
|
|
|
+ equipmentmenuItem.value = item
|
|
|
|
+ equipmentmenuKey.value = item?.id
|
|
|
|
+ getDeviceTableData()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//引用设备仪器
|
|
|
|
+const deviceModal = ref(false)
|
|
|
|
+const deviceTableRef = ref(null)
|
|
|
|
+
|
|
|
|
+//表格数据
|
|
|
|
+const deviceTableColumn = ref([
|
|
|
|
+ {key: 'deviceNumber', name: '设备编号'},
|
|
|
|
+ {key: 'deviceName', name: '设备仪器名称'},
|
|
|
|
+])
|
|
|
|
+const deviceTableData = ref([])
|
|
|
|
+const equipmentPage = ref({current: 1, size: 20, total: 0})
|
|
|
|
+const equipmentTablePageChange = ({current, size}) => {
|
|
|
|
+ equipmentPage.value.current = current
|
|
|
|
+ equipmentPage.value.size = size
|
|
|
|
+ getDeviceTableData()
|
|
|
|
+}
|
|
|
|
+//数组去重
|
|
|
|
+var temp = [];
|
|
|
|
+const getnewArr = (tempArr) => {
|
|
|
|
+
|
|
|
|
+ tempArr.forEach(function (a) {
|
|
|
|
+ var check = temp.every(function (b) {
|
|
|
|
+ return a.id !== b.id;
|
|
|
|
+ })
|
|
|
|
+ check ? temp.push(a) : ''
|
|
|
|
+ })
|
|
|
|
+ return temp;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//获取表格数据
|
|
|
|
+const deviceTableLoading = ref(false)
|
|
|
|
+const getDeviceTableData = async () => {
|
|
|
|
+ deviceTableLoading.value = true
|
|
|
|
+ const {error, code, data} = await dataApi2.queryPage({
|
|
|
|
+ projectId: projectId.value,
|
|
|
|
+ contractId: contractId.value,
|
|
|
|
+ deviceClassId: equipmentmenuKey.value,
|
|
|
|
+ size: equipmentPage.value.size,
|
|
|
|
+ current: equipmentPage.value.current,
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ //处理数据
|
|
|
|
+ deviceTableLoading.value = false
|
|
|
|
+ if (!error && code === 200) {
|
|
|
|
+ deviceTableData.value = getArrValue(data['records'])
|
|
|
|
+ equipmentPage.value.total = data.total || 0
|
|
|
|
+
|
|
|
|
+ //去重
|
|
|
|
+ let uniqueArray = getnewArr(checkList.value)
|
|
|
|
+ deviceTableKeys.value = uniqueArray
|
|
|
|
+
|
|
|
|
+ if (uniqueArray.length > 0) {
|
|
|
|
+ uniqueArray.forEach((item) => {
|
|
|
|
+ if (item.deviceClassId === equipmentmenuKey.value) {
|
|
|
|
+ deviceTableData.value.forEach((ele) => {
|
|
|
|
+ if (ele.id === item.id) {
|
|
|
|
+ item = ele
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ deviceTableRef.value?.toggleRowSelection(item, true)
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ deviceTableData.value = []
|
|
|
|
+ equipmentPage.value.total = 0
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//多选
|
|
|
|
+const deviceTableKeys = ref([]);
|
|
|
|
+//选中的设备仪器
|
|
|
|
+const checkList = ref([])
|
|
|
|
+const deviceTableSelection = (rows) => {
|
|
|
|
+
|
|
|
|
+ // deviceTableKeys.value = rows
|
|
|
|
+ if (rows.length > 0) {
|
|
|
|
+ rows.forEach((item) => {
|
|
|
|
+ checkList.value.push(item)
|
|
|
|
+ })
|
|
|
|
+ //去重
|
|
|
|
+ let uniqueArray = getnewArr(checkList.value)
|
|
|
|
+ deviceTableKeys.value = uniqueArray
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//确认引用
|
|
|
|
+const deviceModalSave = () => {
|
|
|
|
+ if (deviceTableKeys.value.length > 0) {
|
|
|
|
+ const item = tableFormItemNode.value
|
|
|
|
+ const form = formData.value[item.index]
|
|
|
|
+ const val = []
|
|
|
|
+ const idarr = []
|
|
|
|
+ const listr = []
|
|
|
|
+ deviceTableKeys.value.forEach((item) => {
|
|
|
|
+ val.push(item.deviceNumber)
|
|
|
|
+ idarr.push(item.id)
|
|
|
|
+ listr.push(item.deviceNumber + "_" + item.deviceName)
|
|
|
|
+ })
|
|
|
|
+ const newval = listr.join('、');
|
|
|
|
+ const idval = idarr.join(',')
|
|
|
|
+
|
|
|
|
+ formData.value[item.index][item.KeyName] = setPosInsert(item.startPos, item.endPos, form[item.KeyName], newval)
|
|
|
|
+ vesselModal.value = false
|
|
|
|
+ let posVal = item.startPos + newval.length;
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ setPosRange(item.KeyName, posVal)
|
|
|
|
+ })
|
|
|
|
+ deviceModal.value = false;
|
|
|
|
+ emit('updeviceUseIds', idval)
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ window?.$message?.warning('请先选择引用容器设备')
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ deviceTableKeys.value = [];
|
|
|
|
+ checkList.value = []
|
|
|
|
+ temp = []
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+//关闭
|
|
|
|
+const deviceModalClose = () => {
|
|
|
|
+ deviceModal.value = false
|
|
|
|
+ deviceTableKeys.value = [];
|
|
|
|
+ checkList.value = []
|
|
|
|
+ temp = []
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//插入特殊字符
|
|
|
|
+const specialModal = ref(false)
|
|
|
|
+const specialCharacters = ref([
|
|
|
|
+ '', "", "", "", '≤', '≥', '℃',
|
|
|
|
+ '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫',
|
|
|
|
+ '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳',
|
|
|
|
+ "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ", "Ⅺ", "Ⅻ", "K̅"
|
|
|
|
+])
|
|
|
|
+
|
|
|
|
+//输入框验证
|
|
|
|
+const specialFormRef = ref(null)
|
|
|
|
+const specialFormModel = ref({val: ''})
|
|
|
|
+const specialFormRules = {
|
|
|
|
+ val: {
|
|
|
|
+ required: true,
|
|
|
|
+ trigger: "blur",
|
|
|
|
+ message: "请选择特殊字符代码"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//显示插入特殊字符
|
|
|
|
+const specialRef = ref(null)
|
|
|
|
+const specialModalShow = () => {
|
|
|
|
+ specialFormModel.value.val = ''
|
|
|
|
+ specialModal.value = true
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ specialRef.value?.focus();
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+//失去焦点
|
|
|
|
+const specialPos = ref({start: 0, end: 0})
|
|
|
|
+const specialInputBlur = (e) => {
|
|
|
|
+ specialPos.value = {
|
|
|
|
+ start: e?.target?.selectionStart || 0,
|
|
|
|
+ end: e?.target?.selectionEnd || 0
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+//点击符号
|
|
|
|
+const specialClick = (event) => {
|
|
|
|
+ const text = event?.target?.innerText ?? ''
|
|
|
|
+ const start = specialPos.value.start
|
|
|
|
+ const end = specialPos.value.end
|
|
|
|
+ const form = specialFormModel.value.val
|
|
|
|
+ specialFormModel.value.val = setPosInsert(start, end, form, text)
|
|
|
|
+ specialRef.value?.focus();
|
|
|
|
+ let posVal = start + text.length;
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ setPosRange('specialId', posVal)
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//确认插入
|
|
|
|
+const specialNodeClick = async () => {
|
|
|
|
+ const res = await formValidate(specialFormRef.value)
|
|
|
|
+ if (res) {
|
|
|
|
+ const item = tableFormItemNode.value
|
|
|
|
+ const form = formData.value[item.index]
|
|
|
|
+ const val = specialFormModel.value.val ?? ''
|
|
|
|
+ formData.value[item.index][item.KeyName] = setPosInsert(item.startPos, item.endPos, form[item.KeyName], val)
|
|
|
|
+ specialModal.value = false
|
|
|
|
+ specialRef.value?.focus();
|
|
|
|
+ let posVal = item.startPos + val.length;
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ setPosRange(item.KeyName, posVal)
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//事件
|
|
|
|
+const emit = defineEmits(['renew', 'offsetTop', 'updeviceUseIds', 'upcheckTableId', 'changesdate', 'chageorinData', 'changeIscanclick', 'changesingSaveId'])
|
|
|
|
+
|
|
|
|
+//被点击
|
|
|
|
+const getOffsetTop = (key = '') => {
|
|
|
|
+ if (key) {
|
|
|
|
+ const dom = document.getElementById(key)
|
|
|
|
+ emit('offsetTop', dom.offsetTop)
|
|
|
|
+ } else {
|
|
|
|
+ emit('offsetTop', 0)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//通知数据更新
|
|
|
|
+const renewData = () => {
|
|
|
|
+ emit('renew')
|
|
|
|
+ ActiveKey.value = ''
|
|
|
|
+}
|
|
|
|
+const changeisHide = (pKeyId, isBussShow) => {
|
|
|
|
+ emit('changesdate', pKeyId, isBussShow)
|
|
|
|
+}
|
|
|
|
+const chageOrinData = () => {
|
|
|
|
+ emit('chageorinData')
|
|
|
|
+}
|
|
|
|
+//获取表单数据
|
|
|
|
+const getFormData = () => {
|
|
|
|
+ const formArr = formData.value;
|
|
|
|
+ console.log(formData.value, ' formData.value');
|
|
|
|
+ // return formArr.filter(({pkeyId, isCollapseLoad}) => {
|
|
|
|
+ // return (pkeyId ?? '') !== '' && isCollapseLoad;
|
|
|
|
+ // })
|
|
|
|
+ return formArr.filter((item) => {
|
|
|
|
+ // return (pkeyId ?? '') !== '' && isCollapseLoad;
|
|
|
|
+ return item
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取表单效验数据
|
|
|
|
+const getFormRegExpJson = () => {
|
|
|
|
+ return deepClone(formRegExpJson.value);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//获取当前展开项
|
|
|
|
+const getActiveKey = () => {
|
|
|
|
+ return ActiveKey.value;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//设置当前展开项
|
|
|
|
+const setActiveKey = (key) => {
|
|
|
|
+ return ActiveKey.value = key;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 暴露出去
|
|
|
|
+defineExpose({
|
|
|
|
+ getFormData,
|
|
|
|
+ getFormRegExpJson,
|
|
|
|
+ getActiveKey,
|
|
|
|
+ setActiveKey,
|
|
|
|
+ changeSimpleInput,
|
|
|
|
+ changePositionInput
|
|
|
|
+
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+.data-fill-list-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ //margin-bottom: 25%;
|
|
|
|
+ .hc-collapse-item-header {
|
|
|
|
+ flex: 1;
|
|
|
|
+ position: relative;
|
|
|
|
+ margin-left: 46px;
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ .item-title {
|
|
|
|
+ flex: 1;
|
|
|
|
+ position: relative;
|
|
|
|
+ user-select: none;
|
|
|
|
+ color: #50545E;
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ font-weight: 400;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ }
|
|
|
|
+ .hc-extra-text-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ padding-right: 24px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .data-fill-list-item-content {
|
|
|
|
+ position: relative;
|
|
|
|
+ display: flex;
|
|
|
|
+ height: calc(100vh - 428px);
|
|
|
|
+ .data-fill-table-form-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ padding: 24px 20px;
|
|
|
|
+ height: 100%;
|
|
|
|
+ overflow: auto;
|
|
|
|
+ flex: 1;
|
|
|
|
+ .hc-no-table-form {
|
|
|
|
+ position: relative;
|
|
|
|
+ height: 100%;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ .table-form-no {
|
|
|
|
+ position: relative;
|
|
|
|
+ img {
|
|
|
|
+ width: 350px;
|
|
|
|
+ }
|
|
|
|
+ .desc {
|
|
|
|
+ text-align: center;
|
|
|
|
+ font-size: 20px;
|
|
|
|
+ color: #aaa;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .data-fill-table-tip-box {
|
|
|
|
+ width: 240px;
|
|
|
|
+ position: relative;
|
|
|
|
+ border-left: 1px solid #E9E9E9;
|
|
|
|
+ padding: 20px 15px 80px;
|
|
|
|
+ .tip-title {
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ }
|
|
|
|
+ .tip-item {
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
+ }
|
|
|
|
+ .table-tip-foot {
|
|
|
|
+ position: absolute;
|
|
|
|
+ bottom: 15px;
|
|
|
|
+ right: 0;
|
|
|
|
+ left: 0;
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ padding: 0 15px;
|
|
|
|
+ .tip-left-btn {
|
|
|
|
+ flex: 1;
|
|
|
|
+ .dow-text {
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+.special-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ border: 1px solid #eee;
|
|
|
|
+ border-radius: 3px;
|
|
|
|
+ height: 52px;
|
|
|
|
+ width: 52px;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ user-select: none;
|
|
|
|
+ transition: color .3s, background-color .3s;
|
|
|
|
+ &:hover {
|
|
|
|
+ color: var(--el-color-primary);
|
|
|
|
+ background-color: var(--el-color-primary-light-8);
|
|
|
|
+ }
|
|
|
|
+ .font-EUDC {
|
|
|
|
+ font-size: 22px;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|
|
|
|
+
|
|
|
|
+<style lang="scss">
|
|
|
|
+.data-fill-list-box {
|
|
|
|
+ .el-collapse {
|
|
|
|
+ --el-collapse-header-height: 60px;
|
|
|
|
+ border: 0;
|
|
|
|
+ .el-collapse-item {
|
|
|
|
+ margin: 0 0 16px;
|
|
|
|
+ background-color: #f1f5f8;
|
|
|
|
+ border: 1px solid #E9E9E9;
|
|
|
|
+ border-radius: 4px;
|
|
|
|
+ }
|
|
|
|
+ .el-collapse-item__header {
|
|
|
|
+ background-color: transparent;
|
|
|
|
+ font-weight: 400;
|
|
|
|
+ border-bottom: 0;
|
|
|
|
+ cursor: default;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ .el-collapse-item__arrow {
|
|
|
|
+ position: absolute;
|
|
|
|
+ color: #50545E;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ left: 20px;
|
|
|
|
+ margin: 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .el-collapse-item.is-active .el-collapse-item__header.is-active {
|
|
|
|
+ background-color: #E7EEF4;
|
|
|
|
+ }
|
|
|
|
+ .el-collapse-item__wrap {
|
|
|
|
+ background-color: transparent;
|
|
|
|
+ border-bottom: 0;
|
|
|
|
+ .el-collapse-item__content {
|
|
|
|
+ position: relative;
|
|
|
|
+ padding-bottom: 0;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ color: #50545E;
|
|
|
|
+ line-height: initial;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//插入特殊字符弹窗的输入框
|
|
|
|
+.data-fill-list-box .data-fill-table-form-box td,
|
|
|
|
+.data-fill-list-box .data-fill-table-form-box td .el-input .el-input__wrapper .el-input__inner,
|
|
|
|
+.el-form-item.special-form-item .el-form-item__content .el-input .el-input__wrapper .el-input__inner {
|
|
|
|
+ font-family: "EUDC", 宋体, v-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
|
|
+}
|
|
|
|
+//引用容器参数弹窗
|
|
|
|
+
|
|
|
|
+//关联试验数据
|
|
|
|
+.adding-form-dialog-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ height: 100%;
|
|
|
|
+ display: flex;
|
|
|
|
+ .dialog-tree-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ border-right: 1px solid #EEEEEE;
|
|
|
|
+ width: 500px;
|
|
|
|
+ height: 100%
|
|
|
|
+ }
|
|
|
|
+ .dialog-table-box {
|
|
|
|
+ position: relative;
|
|
|
|
+ flex: 1;
|
|
|
|
+ height: 100%;
|
|
|
|
+ padding: 18px;
|
|
|
|
+ .dialog-search {
|
|
|
|
+ position: relative;
|
|
|
|
+ display: flex;
|
|
|
|
+ }
|
|
|
|
+ .dialog-table {
|
|
|
|
+ position: relative;
|
|
|
|
+ height: calc(100% - 68px);
|
|
|
|
+ padding: 18px 0;
|
|
|
|
+ }
|
|
|
|
+ .dialog-pages {
|
|
|
|
+ position: relative;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|