8
0
ZaiZai 9 ماه پیش
والد
کامیت
026efd241d
4فایلهای تغییر یافته به همراه147 افزوده شده و 51 حذف شده
  1. 0 1
      package.json
  2. 8 0
      src/api/modules/exctab/exceltab.js
  3. 139 26
      src/views/exctab/modules/template.vue
  4. 0 24
      yarn.lock

+ 0 - 1
package.json

@@ -19,7 +19,6 @@
         "dayjs": "^1.11.11",
         "echarts": "^5.5.0",
         "element-plus": "2.7.5",
-        "hc-vue3-ui": "^3.9.9",
         "js-base64": "^3.7.7",
         "js-fast-way": "^0.5.0",
         "js-md5": "^0.8.3",

+ 8 - 0
src/api/modules/exctab/exceltab.js

@@ -46,4 +46,12 @@ export default {
             params: form,
         })
     },
+    //获取清表详情
+    async detailExcel(id) {
+        return HcApi({
+            url: '/api/blade-manager/exceltab/detail',
+            method: 'get',
+            params: { id },
+        })
+    },
 }

+ 139 - 26
src/views/exctab/modules/template.vue

@@ -8,8 +8,8 @@
                     </template>
                     <template v-if="isTreeMode === 1">
                         <hc-lazy-tree
-                            v-if="isShow" :root-menu="treeMenuRoot" :menus="treeLazyMenu" :h-props="treeProps" tree-key="id"
-                            @load="treeLoadNode" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
+                            v-if="isShow" :root-menu="treeMenuRoot" is-load-menu :h-props="treeProps" tree-key="id"
+                            @load-menu="treeLazyMenu" @load="treeLoadNode" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
                         >
                             <template #name="{ data }">
                                 <span class="text-16px font-400">{{ data.name }}</span>
@@ -18,8 +18,8 @@
                     </template>
                     <template v-if="isTreeMode === 2">
                         <hc-data-tree
-                            ref="treeRef" :root-menu="treeMenuRoot" :menus="treeDataMenu" :h-props="treeProps" tree-key="id" :datas="treeData"
-                            :filter-node-method="treeFilterNode" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
+                            ref="treeRef" :root-menu="treeMenuRoot" is-load-menu :h-props="treeProps" tree-key="id" :datas="treeData"
+                            @load-menu="treeDataMenu" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
                         >
                             <template #name="{ data }">
                                 <span class="text-16px font-400">{{ data.name }}</span>
@@ -29,32 +29,65 @@
                 </hc-card>
             </template>
             <hc-card>
-                其它内容
+                <template #header>
+                    <template v-if="isCheckd">
+                        <template v-if="tableTempExcelProps.file">
+                            <div class="table-temp-name truncate">
+                                <span>{{ tableTempExcelProps.title }}</span>
+                                <i class="i-iconoir-check-circle-solid" />
+                            </div>
+                            <el-button hc-btn type="primary">重新上传</el-button>
+                            <el-button hc-btn type="danger">删除</el-button>
+                            <el-button hc-btn type="success">下载Excel</el-button>
+                        </template>
+                        <template v-else>
+                            <el-button hc-btn type="primary">上传Excel</el-button>
+                        </template>
+                        <template v-if="excelInfo.templateExtension">
+                            <div class="table-temp-name truncate">
+                                <span>{{ excelInfo.templateExtension }}</span>
+                                <i class="i-iconoir-check-circle-solid" />
+                            </div>
+                            <el-button hc-btn type="danger">删除</el-button>
+                            <el-button hc-btn type="success">下载模板</el-button>
+                        </template>
+                    </template>
+                    <template v-else>
+                        <div class="text-red">该目录为根目录没有EXCEL文件</div>
+                    </template>
+                </template>
+                <template #extra>
+                    <el-button v-if="tableTempExcelProps.file" hc-btn type="primary" @click="fullScreenClick">全屏显示</el-button>
+                </template>
+                <hc-online-office v-if="isShow" ui="hc-table-temp-excel" :props="tableTempExcelProps" />
             </hc-card>
         </hc-body>
     </hc-drawer>
 </template>
 
 <script setup>
-import { getArrValue, isNullES } from 'js-fast-way'
 import { ref, watch } from 'vue'
+import { useAppStore } from '~src/store'
+import { getArrValue, getObjValue, isNullES } from 'js-fast-way'
 import mainApi from '~api/exctab/exceltab'
+
 const props = defineProps({
     data: {
         type: Object,
         default: () => ({}),
     },
 })
-
 //事件
 const emit = defineEmits(['close'])
+const store = useAppStore()
+const userInfo = ref(store.getUserInfo)
 
 //双向绑定
 const isShow = defineModel('modelValue', {
     default: false,
 })
 
-//监听可否编辑
+//监听数据
 const dataInfo = ref(props.data)
 watch(() => props.data, (data) => {
     dataInfo.value = data
@@ -67,7 +100,7 @@ watch(isShow, (val) => {
 
 //处理相关数据
 const getDataApi = () => {
-    console.log(dataInfo.value)
+
 }
 
 //树搜索
@@ -100,30 +133,50 @@ const treeMenuRoot = [
 ]
 
 //懒加载树的菜单
-const treeLazyMenu = [
+const treeLazyMenu = ({ item, level }, resolve) => {
+    let newMenu = []
+    if (item.fileType !== 3) {
+        newMenu.push({ icon: 'add-circle', label: '新增', key: 'add' })
+    }
+    if (item.fileType !== 1) {
+        newMenu.push({ icon: 'draft', label: '编辑', key: 'edit' })
+    }
+    if (level !== 1) {
+        newMenu.push({ icon: 'sort-asc', label: '排序', key: 'sort' })
+    }
+    if (item.fileType !== 3) {
+        newMenu.push({ icon: 'file-upload', label: '上传', key: 'upload' })
+    }
+    newMenu.push({ icon: 'delete-bin', label: '删除', key: 'del' })
+    resolve(newMenu)
+}
 
-]
 
 //全加载树的菜单
-const treeDataMenu = [
-    { icon: 'add-circle', label: '新增', key: 'add' },
-    { icon: 'draft', label: '编辑', key: 'edit' },
-    { icon: 'file-upload', label: '上传', key: 'upload' },
-    { icon: 'delete-bin', label: '删除', key: 'del' },
-]
+const treeDataMenu = ({ node, item, level }, resolve) => {
+    const { isLeaf } = node
+    let newMenu = []
+    if (item.fileType !== 3) {
+        newMenu.push({ icon: 'add-circle', label: '新增', key: 'add' })
+    }
+    if (item.fileType !== 1) {
+        newMenu.push({ icon: 'draft', label: '编辑', key: 'edit' })
+    }
+    if (isLeaf) {
+        newMenu.push({ icon: 'sort-asc', label: '排序', key: 'sort' })
+    }
+    if (level !== 1) {
+        newMenu.push({ icon: 'file-upload', label: '上传', key: 'upload' })
+    }
+    newMenu.push({ icon: 'delete-bin', label: '删除', key: 'del' })
+    resolve(newMenu)
+}
 
 //菜单被点击
 const treeMenuClick = ({ key, node, data }) => {
     console.log(key)
 }
 
-
-//树筛选过滤
-const treeFilterNode = (val, data) => {
-    if (!val) return true
-    return data.name.indexOf(val) !== -1
-}
-
 //全加载树
 const treeData = ref([])
 const getTreeAllData = async () => {
@@ -145,9 +198,49 @@ const treeLoadNode = async ({ item, level }, resolve) => {
     resolve(getArrValue(data))
 }
 
+//在线编辑表格文件的配置
+const tableTempExcelProps = ref({})
+
 //树节点被点击
+const nodeInfo = ref({})
+const isCheckd = ref(false)
 const treeNodeTap = ({ node, data }) => {
-    console.log(node)
+    nodeInfo.value = data
+    if (!node.isLeaf) {
+        tableTempExcelProps.value = {}
+        isCheckd.value = true
+        return
+    }
+    //处理详情
+    if (data.fileType === 3) {
+        isCheckd.value = true
+        getDetailExcel(data.id)
+    } else {
+        isCheckd.value = false
+    }
+}
+
+//获取模板详情
+const excelInfo = ref({})
+const getDetailExcel = async (dataId) => {
+    const { code, data } = await mainApi.detailExcel(dataId)
+    if (code !== 200) return
+    const { id, extension, fileUrl } = getObjValue(data)
+    const { user_id, user_name } = userInfo.value
+    excelInfo.value = getObjValue(data)
+    tableTempExcelProps.value = {
+        type: 'xlsx',
+        key: id + '_' + Math.random() + '',
+        title: extension,
+        file: fileUrl,
+        userId: user_id,
+        userName: user_name,
+    }
+}
+
+//全屏显示
+const fullScreenClick = () => {
+
 }
 
 //关闭抽屉
@@ -158,5 +251,25 @@ const drawerClose = () => {
 </script>
 
 <style scoped lang="scss">
-
+.table-temp-name {
+    position: relative;
+    box-sizing: border-box;
+    min-width: 200px;
+    height: 28px;
+    border: 1px solid gainsboro;
+    padding: 0 10px;
+    border-radius: 3px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-right: 10px;
+    font-size: 14px;
+    i {
+        color: #00a870;
+        margin-left: 10px;
+    }
+}
+.hc-table-temp-excel {
+    position: relative;
+}
 </style>

+ 0 - 24
yarn.lock

@@ -2021,20 +2021,6 @@ has-flag@^4.0.0:
   resolved "http://39.108.216.210:9000/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-hc-vue3-ui@^3.9.9:
-  version "3.9.9"
-  resolved "http://39.108.216.210:9000/hc-vue3-ui/-/hc-vue3-ui-3.9.9.tgz#7669a2518739c630e77d82706503a5b49ea712af"
-  integrity sha512-GDFJfhZRoTjTydk71nEDUgD+4Y3aC116TqCJQiBSfXhk13aQZGY0/FVKxu2XnsMKhFz0LNYhUAvtiCQp8xAB3g==
-  dependencies:
-    axios "^1.7.2"
-    dayjs "^1.11.11"
-    js-base64 "^3.7.7"
-    js-fast-way "^0.5.0"
-    js-md5 "^0.8.3"
-    sortablejs "^1.15.1"
-    split.js "^1.6.5"
-    vue "3.4.27"
-
 human-signals@^2.1.0:
   version "2.1.0"
   resolved "http://39.108.216.210:9000/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
@@ -2774,11 +2760,6 @@ sortablejs@1.14.0:
   resolved "http://39.108.216.210:9000/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8"
   integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
 
-sortablejs@^1.15.1:
-  version "1.15.2"
-  resolved "http://39.108.216.210:9000/sortablejs/-/sortablejs-1.15.2.tgz#4e9f7bda4718bd1838add9f1866ec77169149809"
-  integrity sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==
-
 "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1:
   version "1.0.2"
   resolved "http://39.108.216.210:9000/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -2789,11 +2770,6 @@ source-map-js@^1.2.0:
   resolved "http://39.108.216.210:9000/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
   integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
 
-split.js@^1.6.5:
-  version "1.6.5"
-  resolved "http://39.108.216.210:9000/split.js/-/split.js-1.6.5.tgz#f7f61da1044c9984cb42947df4de4fadb5a3f300"
-  integrity sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==
-
 streamx@^2.15.0:
   version "2.16.1"
   resolved "http://39.108.216.210:9000/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614"