|
|
@@ -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;
|