|
@@ -12,7 +12,7 @@
|
|
|
</div>
|
|
|
<div class="hc-tree-box">
|
|
|
<el-scrollbar>
|
|
|
- <WbsTree :autoExpandKeys="TreeAutoExpandKeys" :projectId="projectId" :contractId="contractId" @nodeTap="nodeWbsElTreeClick"/>
|
|
|
+ <ProjectTree :datas="ElTreeData" :autoExpandKeys="TreeAutoExpandKeys" @nodeTap="nodeElTreeClick"/>
|
|
|
</el-scrollbar>
|
|
|
</div>
|
|
|
<!--左右拖动-->
|
|
@@ -22,7 +22,7 @@
|
|
|
<HcCard :scrollbar="false" actionSize="lg">
|
|
|
<template #header>
|
|
|
<HcTooltip keys="project-scanning-upload">
|
|
|
- <el-button type="primary" hc-btn>
|
|
|
+ <el-button type="primary" :disabled="!nodeIds" hc-btn @click="uploadModalClick">
|
|
|
<HcIcon name="add-circle"/>
|
|
|
<span>上传文件</span>
|
|
|
</el-button>
|
|
@@ -67,12 +67,12 @@
|
|
|
<template #search>
|
|
|
<div class="w-32">
|
|
|
<el-select v-model="searchForm.isApprovalValue" placeholder="审批状态" clearable>
|
|
|
- <el-option v-for="item in approvalData" :key="item.value" :label="item['dictValue']" :value="item['dictKey']"/>
|
|
|
+ <el-option v-for="item in approvalData" :label="item['dictValue']" :value="item['dictKey']"/>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="w-32 ml-4">
|
|
|
<el-select v-model="searchForm.isCertificationValue" placeholder="认证状态" clearable>
|
|
|
- <el-option v-for="item in certificationType" :key="item.value" :label="item['dictValue']" :value="item['dictKey']"/>
|
|
|
+ <el-option v-for="item in certificationType" :label="item['dictValue']" :value="item['dictKey']"/>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="w-64 ml-3">
|
|
@@ -85,16 +85,89 @@
|
|
|
</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
-
|
|
|
<HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading" isCheck @selection-change="tableSelectionChange">
|
|
|
-
|
|
|
+ <template #fileName="{row}">
|
|
|
+ <span class="text-link" @click="tablePreview(row)">{{row?.fileName}}</span>
|
|
|
+ </template>
|
|
|
+ <template #isApprovalValue="{row}">
|
|
|
+ <el-tag :type="`${row.status === 2 ? 'success' : row.status === 0 ? 'warning' : row.status === 1 ? 'danger' : 'info'}`"
|
|
|
+ class="mx-1" effect="dark" v-if="row['isApprovalValue']">{{row['isApprovalValue']}}</el-tag>
|
|
|
+ </template>
|
|
|
</HcTable>
|
|
|
-
|
|
|
<template #action>
|
|
|
<HcPages :pages="searchForm" @change="pageChange"/>
|
|
|
</template>
|
|
|
</HcCard>
|
|
|
</div>
|
|
|
+
|
|
|
+ <!--新增文件-->
|
|
|
+ <el-dialog v-model="showUploadModal" title="上传工程文件" width="80vw" class="hc-modal-border">
|
|
|
+ <HcTable ui="hc-form-table" :column="tableUploadColumn" :datas="tableUploadData" :loading="tableUpLoading">
|
|
|
+ <template #fileNumber="{row}">
|
|
|
+ <el-input v-model="row.fileNumber"/>
|
|
|
+ </template>
|
|
|
+ <template #fileName="{row}">
|
|
|
+ <el-input v-model="row.fileName"/>
|
|
|
+ </template>
|
|
|
+ <template #fileTime="{row}">
|
|
|
+ <el-date-picker v-model="row.fileTime" type="date" format="YYYY/MM/DD" value-format="YYYY-MM-DD" :clearable="false"/>
|
|
|
+ </template>
|
|
|
+ <template #sheetType="{row}" v-if="isBuiltDrawing === 1">
|
|
|
+ <el-select v-model="row.sheetType">
|
|
|
+ <el-option v-for="item in sheetType" :key="item['dictKey']" :label="item['dictValue']" :value="item['dictKey']"/>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template #sheetSource="{row}" v-if="isBuiltDrawing === 1">
|
|
|
+ <el-select v-model="row.sheetSource">
|
|
|
+ <el-option v-for="item in sheetSourceType" :key="item['dictKey']" :label="item['dictValue']" :value="item['dictKey']"/>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template #drawingNo="{row}" v-if="isBuiltDrawing === 1">
|
|
|
+ <el-input v-model="row.drawingNo"/>
|
|
|
+ </template>
|
|
|
+ <template #citeChangeNumber="{row}" v-if="isBuiltDrawing === 1">
|
|
|
+ <el-input v-model="row.citeChangeNumber"/>
|
|
|
+ </template>
|
|
|
+ <template #isApproval="{row}">
|
|
|
+ <el-select v-model="row.isApproval">
|
|
|
+ <el-option v-for="item in whetherData" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template #isNeedCertification="{row}">
|
|
|
+ <el-select v-model="row.isNeedCertification">
|
|
|
+ <el-option v-for="item in whetherData" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template #dutyUser="{row}">
|
|
|
+ <el-input v-model="row.dutyUser"/>
|
|
|
+ </template>
|
|
|
+ <template #action="{row,index}">
|
|
|
+ <el-button type="danger" plain size="small" @click="delUploadData(row,index)">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </HcTable>
|
|
|
+ <template #footer>
|
|
|
+ <div class="lr-dialog-footer">
|
|
|
+ <div class="left flex items-center">
|
|
|
+ <HcFileUpload @change="uploadsChange" @progress="uploadsProgress">
|
|
|
+ <el-button type="primary" hc-btn :loading="uploadsLoading">
|
|
|
+ <HcIcon name="add-circle"/>
|
|
|
+ <span>新增上传</span>
|
|
|
+ </el-button>
|
|
|
+ </HcFileUpload>
|
|
|
+ </div>
|
|
|
+ <div class="right">
|
|
|
+ <el-button size="large" @click="showUploadModal = false">
|
|
|
+ <HcIcon name="close"/>
|
|
|
+ <span>取消</span>
|
|
|
+ </el-button>
|
|
|
+ <el-button type="primary" hc-btn :disabled="uploadsLoading" :loading="uploadSaveLoading" @click="batchUploadSave">
|
|
|
+ <HcIcon name="save"/>
|
|
|
+ <span>提交保存</span>
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -102,9 +175,13 @@
|
|
|
import {onMounted, ref, watch} from 'vue'
|
|
|
import {useAppStore} from "~src/store";
|
|
|
import {useRouter, useRoute} from 'vue-router'
|
|
|
-import WbsTree from "../data-fill/components/WbsTree.vue"
|
|
|
+import ProjectTree from "./components/ProjectTree.vue"
|
|
|
+import HcFileUpload from "./components/HcFileUpload.vue"
|
|
|
import {getStoreData, setStoreData} from '~src/utils/storage'
|
|
|
-import {downloadBlob, getArrValue, getObjNullValue} from "vue-utils-plus"
|
|
|
+import projectScanningApi from "~api/other-file/projectScanning";
|
|
|
+import tasksDataApi from '~api/tasks/data';
|
|
|
+import {downloadBlob, getArrValue} from "vue-utils-plus"
|
|
|
+import dayjs from "dayjs"
|
|
|
|
|
|
//变量
|
|
|
const router = useRouter()
|
|
@@ -125,22 +202,112 @@ watch(() => [
|
|
|
//自动展开缓存
|
|
|
const TreeAutoExpandKeys = ref(getStoreData('scanningTreeExpandKeys') || [])
|
|
|
|
|
|
+const dayDate = ref('')
|
|
|
+
|
|
|
//渲染完成
|
|
|
onMounted(() => {
|
|
|
-
|
|
|
+ getClassIfyList()
|
|
|
+ firstTaskStatus()
|
|
|
+ certificationStatus()
|
|
|
+ dayDate.value = dayjs(new Date()).format('YYYY-MM-DD')
|
|
|
})
|
|
|
|
|
|
+//获取树的数据
|
|
|
+const ElTreeData = ref([])
|
|
|
+const getClassIfyList = async () => {
|
|
|
+ const { error, code, data } = await projectScanningApi.getClassIfyList({
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ ElTreeData.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ ElTreeData.value = []
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//项目树被点击
|
|
|
+const treeNodeInfo = ref({})
|
|
|
+const treeDataInfo = ref({})
|
|
|
+const nodeIds = ref('')
|
|
|
+const isStorageNode = ref(0)
|
|
|
+const isBuiltDrawing = ref(0)
|
|
|
+const nodeElTreeClick = ({node, data, keys, key}) => {
|
|
|
+ treeNodeInfo.value = node
|
|
|
+ treeDataInfo.value = data
|
|
|
+ //设置变量
|
|
|
+ nodeIds.value = key || ''
|
|
|
+ isStorageNode.value = data['isStorageNode'] || 0
|
|
|
+ isBuiltDrawing.value = data['isBuiltDrawing'] || 0
|
|
|
+ //设置搜索数据
|
|
|
+ searchForm.value.current = 1;
|
|
|
+ searchForm.value.nodeIds = key || ''
|
|
|
+ setTableColumns()
|
|
|
+ getTableData()
|
|
|
+ //缓存展开的节点
|
|
|
+ setStoreData('scanningTreeExpandKeys', keys)
|
|
|
+}
|
|
|
+
|
|
|
+//获取任务类型
|
|
|
const approvalData = ref([])
|
|
|
+const firstTaskStatus = async () => {
|
|
|
+ const { error, code, data } = await tasksDataApi.queryTaskTypeStatus({
|
|
|
+ typeOrStatus: 'first_task_status'
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ approvalData.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ approvalData.value = []
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+//获取认证状态
|
|
|
const certificationType = ref([])
|
|
|
+const certificationStatus = async () => {
|
|
|
+ const { error, code, data } = await tasksDataApi.queryTaskTypeStatus({
|
|
|
+ typeOrStatus: 'certification_status'
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ certificationType.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ certificationType.value = []
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
-//项目树被点击
|
|
|
-const nodeWbsElTreeClick = ({data, keys}) => {
|
|
|
+//获取图幅类型
|
|
|
+const sheetType = ref([])
|
|
|
+const sheetTypeStatus = async () => {
|
|
|
+ const { error, code, data } = await tasksDataApi.queryTaskTypeStatus({
|
|
|
+ typeOrStatus: 'sheet_type'
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ sheetType.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ sheetType.value = []
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+//获取图表来源
|
|
|
+const sheetSourceType = ref([])
|
|
|
+const sheetSourceStatus = async () => {
|
|
|
+ const { error, code, data } = await tasksDataApi.queryTaskTypeStatus({
|
|
|
+ typeOrStatus: 'sheet_source'
|
|
|
+ })
|
|
|
+ //处理数据
|
|
|
+ if (!error && code === 200) {
|
|
|
+ sheetSourceType.value = getArrValue(data)
|
|
|
+ } else {
|
|
|
+ sheetSourceType.value = []
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+//搜索表单
|
|
|
const searchForm = ref({
|
|
|
- queryValue: null, isApprovalValue: null, isCertificationValue: null,
|
|
|
+ nodeIds: '', isApprovalValue: null, isCertificationValue: null, queryValue: null,
|
|
|
current: 1, size: 20, total: 0
|
|
|
})
|
|
|
|
|
@@ -153,12 +320,12 @@ const keyUpEvent = (e) => {
|
|
|
|
|
|
//搜索
|
|
|
const searchClick = () => {
|
|
|
- /*if (queryKey.value) {
|
|
|
+ if (nodeIds.value) {
|
|
|
searchForm.value.current = 1;
|
|
|
getTableData()
|
|
|
} else {
|
|
|
window?.$message?.warning('请先在左边选择一个树节点')
|
|
|
- }*/
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//分页被点击
|
|
@@ -168,18 +335,52 @@ const pageChange = ({current, size}) => {
|
|
|
getTableData()
|
|
|
}
|
|
|
|
|
|
+//设置表头
|
|
|
+const tableListColumn = ref([
|
|
|
+ {key:'fileNumber', name: '文件编号', width: 160},
|
|
|
+ {key:'fileName', name: '文件名称'},
|
|
|
+ {key:'filePage', name: '文件页数', width: 120},
|
|
|
+ {key:'isCertificationValue', name: '认证状态', width: 160},
|
|
|
+ {key:'isApprovalValue', name: '状态', width: 160},
|
|
|
+ {key:'fileTime', name: '文件时间', width: 160},
|
|
|
+ {key:'dutyUser', name: '责任者', width: 160}
|
|
|
+])
|
|
|
+const setTableColumns = () => {
|
|
|
+ if (isBuiltDrawing.value === 1) {
|
|
|
+ tableListColumn.value = [
|
|
|
+ {key:'fileNumber', name: '文件编号', width: 160},
|
|
|
+ {key:'fileName', name: '文件名称'},
|
|
|
+ {key:'filePage', name: '文件页数', width: 120},
|
|
|
+ {key:'sheetType', name: '图幅'},
|
|
|
+ {key:'sheetSourceValue', name: '图表来源'},
|
|
|
+ {key:'drawingNo', name: '图号'},
|
|
|
+ {key:'citeChangeNumber', name: '引用变更令编号'},
|
|
|
+ {key:'isCertificationValue', name: '认证状态', width: 160},
|
|
|
+ {key:'isApprovalValue', name: '状态', width: 160},
|
|
|
+ {key:'fileTime', name: '文件时间', width: 160},
|
|
|
+ {key:'dutyUser', name: '责任者', width: 160}
|
|
|
+ ]
|
|
|
+ sheetTypeStatus()
|
|
|
+ sheetSourceStatus()
|
|
|
+ } else {
|
|
|
+ tableListColumn.value = [
|
|
|
+ {key:'fileNumber', name: '文件编号', width: 160},
|
|
|
+ {key:'fileName', name: '文件名称'},
|
|
|
+ {key:'filePage', name: '文件页数', width: 120},
|
|
|
+ {key:'isCertificationValue', name: '认证状态', width: 160},
|
|
|
+ {key:'isApprovalValue', name: '状态', width: 160},
|
|
|
+ {key:'fileTime', name: '文件时间', width: 160},
|
|
|
+ {key:'dutyUser', name: '责任者', width: 160}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//获取数据
|
|
|
-const tableListRef = ref(null)
|
|
|
const tableLoading = ref(false)
|
|
|
const tableListData = ref([])
|
|
|
-const tableListColumn = ref([
|
|
|
- {key:'info', name: '文件详情'},
|
|
|
- {key:'textContent', name: '文字说明'},
|
|
|
- {key:'operate', name: '操作', align: 'center', width: '140'},
|
|
|
-])
|
|
|
const getTableData = async () => {
|
|
|
- /*tableLoading.value = true
|
|
|
- const {error, code, data} = await imageApi.getPageList({
|
|
|
+ tableLoading.value = true
|
|
|
+ const {error, code, data} = await projectScanningApi.getarchiveFilePage({
|
|
|
...searchForm.value,
|
|
|
projectId: projectId.value,
|
|
|
contractId: contractId.value
|
|
@@ -192,10 +393,11 @@ const getTableData = async () => {
|
|
|
} else {
|
|
|
tableListData.value = []
|
|
|
searchForm.value.total = 0
|
|
|
- }*/
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//多选
|
|
|
+const tableListRef = ref(null)
|
|
|
const tableCheckedKeys = ref([]);
|
|
|
const tableSelectionChange = (rows) => {
|
|
|
tableCheckedKeys.value = rows.filter((item) => {
|
|
@@ -203,6 +405,145 @@ const tableSelectionChange = (rows) => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+//文件名称被点击
|
|
|
+const tablePreview = (row) => {
|
|
|
+ const pdfUrl = row['pdfFileUrl'] || ''
|
|
|
+ const evisaFile = row['evisaFile'] || ''
|
|
|
+ if (evisaFile) {
|
|
|
+ window.open(evisaFile,'_blank')
|
|
|
+ } else if (pdfUrl) {
|
|
|
+ window.open(pdfUrl,'_blank')
|
|
|
+ } else {
|
|
|
+ window.$message?.warning('该数据暂无PDF')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//新增文件
|
|
|
+const showUploadModal = ref(false)
|
|
|
+const uploadModalClick = () => {
|
|
|
+ if (nodeIds.value && isStorageNode.value === 1) {
|
|
|
+ setTableUploadColumn()
|
|
|
+ tableUpLoading.value = false
|
|
|
+ uploadSaveLoading.value = false
|
|
|
+ tableUploadData.value = []
|
|
|
+ showUploadModal.value = true
|
|
|
+ } else {
|
|
|
+ window?.$message?.warning('请先选择一个子节点')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//设置文件表头
|
|
|
+const tableUploadColumn = ref([
|
|
|
+ {key:'fileNumber', name: '文件编号'},
|
|
|
+ {key:'fileName', name: '文件名称'},
|
|
|
+ {key:'fileTime', name: '文件时间'},
|
|
|
+ {key:'isApproval', name: '是否需要审批'},
|
|
|
+ {key:'isNeedCertification', name: '是否需要认证'},
|
|
|
+ {key:'dutyUser', name: '责任者'},
|
|
|
+ {key:'action', name: '操作', width: 100}
|
|
|
+])
|
|
|
+const setTableUploadColumn = () => {
|
|
|
+ if (isBuiltDrawing.value === 1) {
|
|
|
+ tableUploadColumn.value = [
|
|
|
+ {key:'fileNumber', name: '文件编号'},
|
|
|
+ {key:'fileName', name: '文件名称'},
|
|
|
+ {key:'fileTime', name: '文件时间'},
|
|
|
+ {key:'sheetType', name: '图幅'},
|
|
|
+ {key:'sheetSourceValue', name: '图表来源'},
|
|
|
+ {key:'drawingNo', name: '图号'},
|
|
|
+ {key:'citeChangeNumber', name: '引用变更令编号'},
|
|
|
+ {key:'isApproval', name: '是否需要审批'},
|
|
|
+ {key:'isNeedCertification', name: '是否需要认证'},
|
|
|
+ {key:'dutyUser', name: '责任者'},
|
|
|
+ {key:'action', name: '操作', width: 100}
|
|
|
+ ]
|
|
|
+ } else {
|
|
|
+ tableUploadColumn.value = [
|
|
|
+ {key:'fileNumber', name: '文件编号'},
|
|
|
+ {key:'fileName', name: '文件名称'},
|
|
|
+ {key:'fileTime', name: '文件时间'},
|
|
|
+ {key:'isApproval', name: '是否需要审批'},
|
|
|
+ {key:'isNeedCertification', name: '是否需要认证'},
|
|
|
+ {key:'dutyUser', name: '责任者'},
|
|
|
+ {key:'action', name: '操作', width: 100}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//文件数据表
|
|
|
+const tableUpLoading = ref(false)
|
|
|
+const tableUploadData = ref([])
|
|
|
+
|
|
|
+//上传的文件结果
|
|
|
+const uploadsChange = ({fileList}) => {
|
|
|
+ let newArr = []
|
|
|
+ const sheet = sheetType.value, source = sheetSourceType.value
|
|
|
+ for (let i = 0; i < fileList.length; i++) {
|
|
|
+ const item = fileList[i]
|
|
|
+ let name = item['originalName'] || ''
|
|
|
+ let fileName = name.substring(0, name.lastIndexOf("."))
|
|
|
+ newArr.push({
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ nodeId: nodeIds.value,
|
|
|
+ fileNumber: '',
|
|
|
+ fileName: fileName,
|
|
|
+ ossFileName: item?.name || '',
|
|
|
+ fileTime: dayDate.value,
|
|
|
+ fileUrl: item?.link || '',
|
|
|
+ sheetType: sheet.length > 0 ? sheet[0]['dictKey'] || '': '',
|
|
|
+ sheetSource: source.length > 0 ? source[0]['dictKey'] || '': '',
|
|
|
+ drawingNo: '',
|
|
|
+ citeChangeNumber: '',
|
|
|
+ isApproval: 0,
|
|
|
+ isNeedCertification: 0,
|
|
|
+ dutyUser: '',
|
|
|
+ pdfFileUrl: item?.pdfUrl || '',
|
|
|
+ filePage: item?.page || '',
|
|
|
+ })
|
|
|
+ }
|
|
|
+ tableUploadData.value = newArr
|
|
|
+}
|
|
|
+
|
|
|
+//上传进度
|
|
|
+const uploadsLoading = ref(false)
|
|
|
+const uploadsProgress = (val) => {
|
|
|
+ uploadsLoading.value = val
|
|
|
+}
|
|
|
+
|
|
|
+//表单验证
|
|
|
+const whetherData = ref([{label: "不需要", value: 0}, {label: "需要", value: 1}])
|
|
|
+const uploadDataRules = ref({
|
|
|
+ fileNumber: {
|
|
|
+ required: true,
|
|
|
+ trigger: "input",
|
|
|
+ message: "请输入文件编号",
|
|
|
+ },
|
|
|
+ fileName: {
|
|
|
+ required: true,
|
|
|
+ trigger: "input",
|
|
|
+ message: "请输入文件名称",
|
|
|
+ },
|
|
|
+ fileTime: {
|
|
|
+ required: true,
|
|
|
+ trigger: "input",
|
|
|
+ message: "请选择文件时间",
|
|
|
+ },
|
|
|
+})
|
|
|
+
|
|
|
+//删除
|
|
|
+const delUploadData = (row,index) => {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//批量上传保存
|
|
|
+const uploadSaveLoading = ref(false)
|
|
|
+const batchUploadSave = () => {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
//左右拖动,改变树形结构宽度
|
|
|
const leftWidth = ref(382)
|
|
|
const onmousedown = () => {
|
|
@@ -218,7 +559,6 @@ const onmousedown = () => {
|
|
|
document.onmouseup = null;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|