LiuShu_0203 1 kuukausi sitten
vanhempi
commit
895bcb410c
3 muutettua tiedostoa jossa 138 lisäystä ja 10 poistoa
  1. 133 6
      src/views/message/index.vue
  2. 2 2
      src/views/system/school/index.vue
  3. 3 2
      src/views/userstats/index.vue

+ 133 - 6
src/views/message/index.vue

@@ -7,7 +7,7 @@
       :inline="true"
       label-width="80px"
     >
-      <el-form-item label="课件类型">
+      <!-- <el-form-item label="课件类型">
         <el-select
           v-model="queryParams.tag_id"
           placeholder="请选择课件类型"
@@ -21,6 +21,15 @@
             :value="tab._id"
           />
         </el-select>
+      </el-form-item> -->
+      <el-form-item label="课件类型">
+        <el-cascader
+          v-model="queryParams.tag_id"
+          :options="treeData"
+          placeholder="请选择课件类型"
+          clearable
+          style="width: 240px"
+        />
       </el-form-item>
       <el-form-item label="文件类型">
         <el-select
@@ -34,6 +43,7 @@
           <el-option label="PDF" :value="2" />
           <el-option label="PPT" :value="3" />
           <el-option label="图文" :value="4" />
+          <el-option label="Excel" :value="5" />
         </el-select>
       </el-form-item>
       <el-form-item label="发布者">
@@ -240,6 +250,16 @@
     <el-dialog :title="title" v-model="open" width="600px">
       <el-form :model="form" :rules="rules" ref="userRef" label-width="100px">
         <el-form-item v-if="!tuwenadd" label="课件类型" prop="tag_id">
+        <el-cascader
+          v-model="form.tag_id"
+          :options="treeData"
+          placeholder="请选择课件类型"
+          clearable
+          style="width: 240px"
+          :disabled="isEdit"
+        />
+      </el-form-item>
+        <!-- <el-form-item v-if="!tuwenadd" label="课件类型" prop="tag_id">
           <el-select
             v-model="form.tag_id"
             placeholder="请选择"
@@ -254,7 +274,7 @@
               :value="tab._id"
             />
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item v-if="!tuwenadd" label="文件类型" prop="type">
           <el-select
             v-model="form.type"
@@ -268,6 +288,7 @@
             <el-option label="PDF" :value="2" />
             <el-option label="PPT" :value="3" />
             <el-option label="图文" :value="4" />
+            <el-option label="Excel" :value="5" />
           </el-select>
         </el-form-item>
         <el-form-item v-if="!tuwenadd && showDan" label="等级" prop="dan">
@@ -378,7 +399,8 @@ import { ElMessage } from "element-plus";
 const { proxy } = getCurrentInstance();
 
 const userList = ref([]);
-const tablist = ref([]);
+const tablist = ref([]); // 课件类型 平面数据
+const treeData = ref([]); // 课件类型 树形数据
 const open = ref(false);
 const loading = ref(false);
 const total = ref(0);
@@ -408,6 +430,7 @@ const fileTypeMap = ref({
   2: "PDF",
   3: "PPT",
   4: "图文",
+  5: "Excel",
 });
 
 const data = reactive({
@@ -459,12 +482,105 @@ async function gettab() {
         position: proxy.$_.neq(4),
       },
     },
-    pageSize: 50,
+    pageSize: 100,
     pageNumber: 1,
     getCount: true,
     envType: "prod",
   });
-  tablist.value = data.records;
+  const records = data.records || [];
+  tablist.value = records;
+  // 树形结构数据转换完成
+  treeData.value = buildTree(records);
+
+  console.log(treeData.value, 'treeData.valuetreeData.value');
+  console.log(tablist.value, 'tablist.valuetablist.value');
+}
+
+// 把 name 字段转换成树(保持叶子为原始 _id)
+function buildTree(dataList) {
+  const root = [];
+
+  dataList.forEach(item => {
+    const name = (item.name || "").trim();
+    if (!name) return;
+
+    // 情况 1:含斜杠 " / "(优先处理为 顶级 / 副部分)
+    if (name.includes("/")) {
+      const [topRaw, restRaw] = name.split("/").map(s => s.trim());
+      const topLabel = topRaw;
+      const rest = (restRaw || "").trim();
+
+      // rest 可能包含 "-",拆成 二级 / 三级
+      let midLabel = rest;
+      let leafLabel = null;
+      if (rest.includes("-")) {
+        const parts = rest.split("-").map(s => s.trim());
+        midLabel = parts[0];
+        leafLabel = parts.slice(1).join("-").trim(); // 防止中间有多余 '-'
+      }
+
+      // 找或创建顶级节点
+      let topNode = root.find(n => n.label === topLabel);
+      if (!topNode) {
+        topNode = { label: topLabel, value: topLabel, children: [] };
+        root.push(topNode);
+      }
+
+      if (leafLabel) {
+        // 顶级 -> 二级 -> 三级(叶子,用原始 _id)
+        let midNode = topNode.children.find(n => n.label === midLabel);
+        if (!midNode) {
+          midNode = { label: midLabel, value: `${topLabel}/${midLabel}`, children: [] };
+          topNode.children.push(midNode);
+        }
+        // 叶子节点(value 为原始 item._id)
+        if (!midNode.children.find(n => n.label === leafLabel)) {
+          midNode.children.push({ label: leafLabel, value: item._id });
+        }
+      } else {
+        // 没有 '-',把 rest 当作二级并直接作为叶子(value = _id)
+        let midNode = topNode.children.find(n => n.label === midLabel);
+        if (!midNode) {
+          midNode = { label: midLabel, value: item._id, children: [] };
+          topNode.children.push(midNode);
+        } else {
+          // 如果之前存在且是容器(有 children),就保留;否则覆盖 value 为 _id(确保能作为叶子)
+          if (!midNode.children || midNode.children.length === 0) {
+            midNode.value = item._id;
+          }
+        }
+      }
+
+    } else if (name.includes("-")) {
+      // 情况 2:没有 '/',但有 '-' -> 当作 二级结构 "X - Y"
+      const parts = name.split("-").map(s => s.trim());
+      const topLabel = parts[0];
+      const leafLabel = parts.slice(1).join("-").trim();
+
+      let topNode = root.find(n => n.label === topLabel);
+      if (!topNode) {
+        topNode = { label: topLabel, value: topLabel, children: [] };
+        root.push(topNode);
+      }
+      if (!topNode.children.find(n => n.label === leafLabel)) {
+        topNode.children.push({ label: leafLabel, value: item._id });
+      }
+
+    } else {
+      // 情况 3:单层(直接叶子)
+      let node = root.find(n => n.label === name);
+      if (!node) {
+        root.push({ label: name, value: item._id, children: [] });
+      } else {
+        // 如果已存在且之前是占位(无 value 或不是 id),尽量保留 children,不随便覆盖为 _id
+        if ((!node.children || node.children.length === 0) && node.value !== item._id) {
+          node.value = item._id;
+        }
+      }
+    }
+  });
+
+  return root;
 }
 
 /** 获取临时图片链接 */
@@ -481,7 +597,10 @@ async function getTempUrls(fileIds) {
 async function getList() {
   loading.value = true;
   const filter = { where: {} };
-  if (queryParams.value.tag_id) filter.where.tag_id = queryParams.value.tag_id;
+  // if (queryParams.value.tag_id) filter.where.tag_id = queryParams.value.tag_id;
+  if (queryParams.value.tag_id && Array.isArray(queryParams.value.tag_id) && queryParams.value.tag_id.length > 0) {
+  filter.where.tag_id = queryParams.value.tag_id[queryParams.value.tag_id.length - 1];
+}
   if (queryParams.value.type !== undefined)
     filter.where.type = queryParams.value.type;
   if (queryParams.value.publisher)
@@ -875,9 +994,16 @@ function submitForm() {
     if (!valid) return;
 
     if (!tuwenadd.value && form.value._id) {
+      const datalistss = {
+        ...form.value,
+        tag_id: Array.isArray(form.value.tag_id) && form.value.tag_id.length > 0
+          ? form.value.tag_id[form.value.tag_id.length - 1]
+          : ''
+      }
       const { data } = await proxy.$models.file_manage.update({
         filter: { where: { _id: { $eq: form.value._id } } },
         data: form.value,
+        // data: datalistss,
         envType: "prod",
       });
       if(data.count > 0) {
@@ -976,6 +1102,7 @@ async function handleUploadFile(file) {
     2: ["pdf"], // PDF
     3: ["ppt", "pptx"], // PPT
     4: ["jpg", "jpeg", "png", "gif", "bmp", "webp"], // 图文
+    5: ["xls", "xlsx"], 
   };
 
   const rawFile = file.raw;

+ 2 - 2
src/views/system/school/index.vue

@@ -183,10 +183,10 @@ const data = reactive({
     phone: undefined
   },
   rules: {
-    _id: [{ required: true, message: "学校名称不能为空", trigger: "blur" }],
+    name: [{ required: true, message: "学校名称不能为空", trigger: "blur" }],
     phone: [{ required: true, message: "电话不能为空", trigger: "blur" }, { pattern: /^1[3-9]\d{9}$/, message: "请输入正确的手机号", trigger: "blur" }],
     contacts: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
-    adress: [{ required: true, message: "地址不能为空", trigger: "blur" }]
+    // adress: [{ required: true, message: "地址不能为空", trigger: "blur" }]
   }
 });
 

+ 3 - 2
src/views/userstats/index.vue

@@ -108,8 +108,9 @@ async function getList() {
       action: "findMmonitorBehaviorPage",
       data: params,
     });
-    userList.value = res.records;
-    total.value = res.total;
+    console.log(res.records, 'res.recordsres.recordsres.recordsres.records');
+    userList.value = res.records || [];
+    total.value = res.total ?? 0;
     loading.value = false;
   } catch (err) {
     console.error("查询失败", err);