|
@@ -1,1513 +0,0 @@
|
|
|
-<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>
|