SanHQin 3 kuukautta sitten
vanhempi
commit
082a1092f0

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.fdbe584f895b003f39cda92f5a5e6c20.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.de15001ce66f032e9274.js></script><script type=text/javascript src=./static/js/app.5ee375743bf565dfb7ba.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.3604a2aab1d8248ff465916f97b9b177.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.de15001ce66f032e9274.js></script><script type=text/javascript src=./static/js/app.5a0b10304d0f426a4815.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/app.3604a2aab1d8248ff465916f97b9b177.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/app.3604a2aab1d8248ff465916f97b9b177.css.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/app.5a0b10304d0f426a4815.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/app.5a0b10304d0f426a4815.js.map


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/manifest.161e82026ac2ae03ab6f.js.map


+ 7 - 2
src/components/pages/appStore/dialog/saveCard.vue

@@ -54,7 +54,11 @@ export default {
     data: {
       type: Array,
       default: () => []
-    }
+    },
+		type:{
+			type:Number,
+			default:0
+		},
   },
   data() {
     return {};
@@ -80,7 +84,8 @@ export default {
   },
 	methods: {
 		openAppUrl(item){
-			window.open(item.url, "_blank");
+			this.$emit("saveClick",item,this.type)
+			// window.open(item.url, "_blank");
 		}
 	},
 };

+ 351 - 236
src/components/pages/appStore/views/appManagement.vue

@@ -1,17 +1,53 @@
 <template>
   <div class="appManagement">
     <div class="ac_left">
-			<!-- <recentUseCard/>
+      <!-- <recentUseCard/>
 			<collectCard/> -->
-			<saveCard title="最近使用" :data="recentUse"/>
-			<saveCard title="收藏" :data="collect"/>
-		</div>
+      <saveCard title="最近使用" :data="recentUse" :type="1" @saveClick="openApp"/>
+      <saveCard title="收藏" :data="collect" :type="0" @saveClick="openApp"/>
+    </div>
     <div class="ac_right">
       <div class="ac_header">
         <div class="ac_h_top">
-					<span>应用管理</span>
-          <!-- <span class="ac_h_t_active">应用管理</span>
-          <span @click="changeShowPage(1)">工作空间</span> -->
+          <!-- <span>应用管理</span> -->
+          <span class="ac_h_t_active"-> <!-- class="ac_h_t_active"-->
+            <svg
+              width="20"
+              height="20"
+              viewBox="0 0 20 20"
+              xmlns="http://www.w3.org/2000/svg"
+            >
+              <path
+                d="M14.0625 2.1875C11.9914 2.1875 10.3125 3.86643 10.3125 5.9375C10.3125 8.00857 11.9914 9.6875 14.0625 9.6875C16.1336 9.6875 17.8125 8.00857 17.8125 5.9375C17.8125 3.86643 16.1336 2.1875 14.0625 2.1875ZM11.5625 5.9375C11.5625 4.55679 12.6818 3.4375 14.0625 3.4375C15.4432 3.4375 16.5625 4.55679 16.5625 5.9375C16.5625 7.31821 15.4432 8.4375 14.0625 8.4375C12.6818 8.4375 11.5625 7.31821 11.5625 5.9375Z"
+              />
+              <path
+                d="M2.5 3.75C2.5 3.05964 3.05964 2.5 3.75 2.5H8.125C8.81536 2.5 9.375 3.05964 9.375 3.75V8.125C9.375 8.81536 8.81536 9.375 8.125 9.375H3.75C3.05964 9.375 2.5 8.81536 2.5 8.125V3.75ZM3.75 3.75V8.125H8.125V3.75H3.75Z"
+              />
+              <path
+                d="M2.5 11.875C2.5 11.1846 3.05964 10.625 3.75 10.625H8.125C8.81536 10.625 9.375 11.1846 9.375 11.875V16.25C9.375 16.9404 8.81536 17.5 8.125 17.5H3.75C3.05964 17.5 2.5 16.9404 2.5 16.25V11.875ZM3.75 11.875V16.25H8.125V11.875H3.75Z"
+              />
+              <path
+                d="M10.625 11.875C10.625 11.1846 11.1846 10.625 11.875 10.625H16.25C16.9404 10.625 17.5 11.1846 17.5 11.875V16.25C17.5 16.9404 16.9404 17.5 16.25 17.5H11.875C11.1846 17.5 10.625 16.9404 10.625 16.25V11.875ZM11.875 16.25H16.25V11.875H11.875V16.25Z"
+              />
+            </svg>
+            应用管理</span
+          >
+          <span @click="changeShowPage(1)">
+            <svg
+              width="20"
+              height="20"
+              viewBox="0 0 20 20"
+              xmlns="http://www.w3.org/2000/svg"
+            >
+              <rect width="20" height="20" fill="white" />
+              <path
+                fill-rule="evenodd"
+                clip-rule="evenodd"
+                d="M9.70072 1.32632C9.88727 1.22456 10.1127 1.22456 10.2993 1.32632L17.1743 5.07632C17.3751 5.18584 17.5 5.39628 17.5 5.625V14.375C17.5 14.6037 17.3751 14.8142 17.1743 14.9237L10.2993 18.6737C10.1127 18.7754 9.88727 18.7754 9.70072 18.6737L2.82572 14.9237C2.62493 14.8142 2.5 14.6037 2.5 14.375V5.625C2.5 5.39628 2.62493 5.18584 2.82572 5.07632L9.70072 1.32632ZM3.75 6.79282V14.004L9.375 17.0722V14.1039L6.55344 12.4109C6.36519 12.298 6.25 12.0945 6.25 11.875V8.45949L3.75 6.79282ZM7.5 8.47887V10.7711L9.375 9.64613V7.35387L7.5 8.47887ZM10.625 7.35387V9.64613L12.5 10.7711V8.47887L10.625 7.35387ZM13.75 8.45949V11.875C13.75 12.0945 13.6348 12.298 13.4466 12.4109L10.625 14.1039V17.0722L16.25 14.004V6.79282L13.75 8.45949ZM15.668 5.67854L10 2.58693L4.33205 5.67854L6.8926 7.38557L9.67844 5.71407C9.87637 5.59531 10.1236 5.59531 10.3216 5.71407L13.1074 7.38557L15.668 5.67854ZM10 13.0211L11.9102 11.875L10 10.7289L8.08978 11.875L10 13.0211Z"
+              />
+            </svg>
+            工作空间</span
+          >
           <el-button
             type="primary"
             size="small"
@@ -21,9 +57,12 @@
             >添加应用</el-button
           >
         </div>
-				<!-- <div class="ac_h_banner">
-					<img src="https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2Fae42534d-ee90-4bb1-8ef9-d344ee27b8241733733277828.jpg" alt="banner图">
-				</div> -->
+        <div class="ac_h_banner">
+          <img
+            src="https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2FFrame+30141733970358224.svg"
+            alt="banner图"
+          />
+        </div>
         <div class="ac_h_bottom">
           <div class="ac_h_b_typeList">
             <span
@@ -39,17 +78,13 @@
               >{{ item.name }}</span
             >
           </div>
-					<div class="ac_h_b_selectList">
-            <el-input
-              v-model="searchText"
-              style="width: 200px;margin-right: 10px;"
-              placeholder="请输入应用名称"
-              @keyup.enter.native="getData"
-            />
+          <div class="ac_h_b_selectList">
+          
             <el-select
               v-model="selectJuri"
               placeholder="请选择"
               @change="changeSelectType"
+							style="width: 150px;margin-right: 10px;"
             >
               <el-option
                 v-for="item in selectList"
@@ -58,6 +93,13 @@
                 :value="item.index"
               ></el-option>
             </el-select>
+						<el-input
+              v-model="searchText"
+              style="width: 200px;"
+              placeholder="请输入应用名称"
+              @keyup.enter.native="getData"
+							clearable
+            />
             <el-button
               type="primary"
               style="margin-left: 10px;"
@@ -79,7 +121,11 @@
           <div class="ac_c_i_top">
             <div class="ac_c_i_t_left">
               <svg
-                v-if="isImageOrSvg(typeof item.json =='object'?item.json.icon:'') === 0"
+                v-if="
+                  isImageOrSvg(
+                    typeof item.json == 'object' ? item.json.icon : ''
+                  ) === 0
+                "
                 t="1732605901531"
                 class="icon"
                 viewBox="0 0 1024 1024"
@@ -101,11 +147,19 @@
                 ></path>
               </svg>
               <span
-                v-if="isImageOrSvg(typeof item.json =='object'?item.json.icon:'') === 1"
+                v-if="
+                  isImageOrSvg(
+                    typeof item.json == 'object' ? item.json.icon : ''
+                  ) === 1
+                "
                 v-html="item.json.icon"
               ></span>
               <el-image
-                v-if="isImageOrSvg(typeof item.json =='object'?item.json.icon:'') === 2"
+                v-if="
+                  isImageOrSvg(
+                    typeof item.json == 'object' ? item.json.icon : ''
+                  ) === 2
+                "
                 style="width: 100%; height: 100%"
                 :src="item.json.icon"
                 fit="cover"
@@ -121,12 +175,28 @@
                 v-if="editAppCard === item.id"
                 v-click-outside="handleBlur"
               >
-                
-								<div @click.stop="cancelCollectApp(item)"  v-if="collect.map(i=>i.id).includes(item.id)">取消收藏</div>
+                <div
+                  @click.stop="cancelCollectApp(item)"
+                  v-if="collect.map(i => i.id).includes(item.id)"
+                >
+                  取消收藏
+                </div>
                 <div @click.stop="collectApp(item)" v-else>收藏</div>
-								<div @click.stop="copyApp(item)" v-if="item.json && item.json.copy==='1'">复制</div>
-								<div @click.stop="updateApp(item)" v-if="item.userid === userId">修改</div>
-								<div @click.stop="delApp(item)" v-if="item.userid === userId">删除</div>
+                <div
+                  @click.stop="copyApp(item)"
+                  v-if="item.json && item.json.copy === '1'"
+                >
+                  复制
+                </div>
+                <div
+                  @click.stop="updateApp(item)"
+                  v-if="item.userid === userId"
+                >
+                  修改
+                </div>
+                <div @click.stop="delApp(item)" v-if="item.userid === userId">
+                  删除
+                </div>
               </div>
               <svg
                 t="1732786015570"
@@ -191,9 +261,9 @@ import saveCard from "../dialog/saveCard.vue";
 export default {
   components: {
     addAppDialog,
-		saveCard
-		// collectCard,
-		// recentUseCard
+    saveCard
+    // collectCard,
+    // recentUseCard
   },
   directives: {
     "click-outside": clickOutside // 注册自定义指令
@@ -303,71 +373,77 @@ export default {
     },
     // 收藏APP
     collectApp(item) {
-			this.editAppCard = null;
-			this.insertSave(item,0)
-		},
-		//复制app
-		copyApp(item){
-			this.$confirm(`确定复制《${item.name}》这个应用吗?`,"复制",{
-				confirmButtonText:"确定",
-				cancelButtonText:"取消",
-				type:"warning"
-			}).then(()=>{
-				let params = [
+      this.editAppCard = null;
+      this.insertSave(item, 0);
+    },
+    //复制app
+    copyApp(item) {
+      this.$confirm(`确定复制《${item.name}》这个应用吗?`, "复制", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          let params = [
+            {
+              name: `${item.name}_copy`, //app名称
+              userid: this.userId, //创建的用户ID
+              label: item.label, //app标签
+              detail: item.detail, //app简介
+              url: item.url, //app链接
+              type: item.type, //app类型
+              juri: "1", //app权限 1:我的 2:组织 3:所有人
+              stand: "cn", //语言
+              json: JSON.stringify(item.json) //其他信息
+            }
+          ];
+          this.ajax
+            .post(this.$store.state.api + "insert_appStore", params)
+            .then(res => {
+              if (res.data == 1) {
+                this.$message.success("复制成功");
+                this.getData();
+              } else {
+                this.$message.error("复制失败");
+              }
+            })
+            .catch(err => {
+              console.log(err);
+              this.$message.error("复制失败");
+            });
+        })
+        .catch(_ => {
+          console.log("取消复制");
+        });
+    },
+    // 取消收藏
+    cancelCollectApp(item) {
+      this.editAppCard = null;
+      let _data = this.collect.find(i => i.id === item.id);
+      if (_data) {
+        let params = [
           {
-            name: `${item.name}_copy`, //app名称
-            userid: this.userId, //创建的用户ID
-            label: item.label, //app标签
-            detail: item.detail, //app简介
-            url: item.url, //app链接
-            type: item.type, //app类型
-            juri: "1", //app权限 1:我的 2:组织 3:所有人
-            stand: "cn", //语言
-            json: JSON.stringify(item.json) //其他信息
+            sid: _data.sid
           }
         ];
-				this.ajax
-          .post(this.$store.state.api + "insert_appStore", params)
+        this.ajax
+          .post(this.$store.state.api + "delete_appStoreSave", params)
           .then(res => {
-            if (res.data == 1) {
-              this.$message.success("复制成功");
-              this.getData();
-            } else {
-              this.$message.error("复制失败");
+            if (res.data) {
+              this.$message.success("取消收藏成功");
             }
+            this.getCollect();
           })
-          .catch(err => {
-            console.log(err);
-            this.$message.error("复制失败");
+          .catch(e => {
+            console.log(e);
+            this.$message.error("取消收藏失败");
+            this.getCollect();
           });
-			}).catch(_=>{
-				console.log("取消复制")
-			})
-		},
-		// 取消收藏
-		cancelCollectApp(item){
-			this.editAppCard = null;
-			let _data = this.collect.find(i=>i.id===item.id);
-			if(_data){
-				let params = [{
-					sid:_data.sid
-				}]
-				this.ajax.post(this.$store.state.api+"delete_appStoreSave",params).then(res=>{
-					if(res.data){
-						this.$message.success("取消收藏成功")
-					}
-					this.getCollect();
-				}).catch(e=>{
-					console.log(e)
-					this.$message.error("取消收藏失败")
-					this.getCollect();
-				})
-			}else{
-				this.$message.error("取消收藏失败");
-				this.getCollect();
-			}
-			
-		},
+      } else {
+        this.$message.error("取消收藏失败");
+        this.getCollect();
+      }
+    },
     updateCard(id) {
       if (this.editAppCard === id) return (this.editAppCard = null);
       this.editAppCard = id;
@@ -461,12 +537,11 @@ export default {
           this.$message.error("获取应用类型失败");
         });
     },
-    openApp(item) {
+    openApp(item,type=0) {
       window.open(item.url, "_blank");
-			if (!(this.recentUse.length > 0 && item.id === this.recentUse[0].id)) {
-				this.insertSave(item,1);
-			}
-			
+      if (!(this.recentUse.length > 0 && item.id === this.recentUse[0].id) && type===0) {
+        this.insertSave(item, 1);
+      }
     },
     resetData() {
       this.searchText = "";
@@ -474,112 +549,132 @@ export default {
       this.showType = "";
       this.getData();
     },
-		getRecentUse(){
-			let params = {
-				uid:this.userId,
-				type:1,
-				limit:10,
-			}
-
-			this.ajax.get(this.$store.state.api+"select_appStoreSave",params).then(res=>{
-				let data = res.data[0];
-				if(data.length>0){
-					data.forEach(i => {
-            if (i.json) {
-              i.json = JSON.parse(i.json);
+    getRecentUse() {
+      let params = {
+        uid: this.userId,
+        type: 1,
+        limit: 10
+      };
+
+      this.ajax
+        .get(this.$store.state.api + "select_appStoreSave", params)
+        .then(res => {
+          let data = res.data[0];
+          if (data.length > 0) {
+            data.forEach(i => {
+              if (i.json) {
+                i.json = JSON.parse(i.json);
+              }
+            });
+            this.recentUse = data;
+          } else {
+            this.recentUse = [];
+          }
+        })
+        .catch(err => {
+          console.log(err);
+          console.log("获取最近使用失败");
+          // this.$message.error("获取收藏应用失败")
+        });
+    },
+    getCollect() {
+      let params = {
+        uid: this.userId,
+        type: 0,
+        limit: 0
+      };
+      this.ajax
+        .get(this.$store.state.api + "select_appStoreSave", params)
+        .then(res => {
+          let data = res.data[0];
+          if (data.length > 0) {
+            data.forEach(i => {
+              if (i.json) {
+                i.json = JSON.parse(i.json);
+              }
+            });
+            this.collect = data;
+          } else {
+            this.collect = [];
+          }
+        })
+        .catch(err => {
+          console.log(err);
+          this.$message.error("获取收藏应用失败");
+        });
+    },
+    insertSave(item, type) {
+      let params = [
+        {
+          uid: this.userId,
+          type: type,
+          aid: item.id,
+          json: ""
+        }
+      ];
+
+      this.ajax
+        .post(this.$store.state.api + "insert_appStoreSave", params)
+        .then(res => {
+          if (res.data) {
+            if (type === 0) {
+              this.$message.success("收藏成功");
+              this.getCollect();
+            } else if (type === 1) {
+              this.getRecentUse();
             }
-          });
-					this.recentUse = data;
-				}else{
-					this.recentUse = [];
-				}
-			}).catch(err=>{
-				console.log(err)
-				console.log("获取最近使用失败")
-				// this.$message.error("获取收藏应用失败")
-			})
-
-		},
-		getCollect(){
-			let params = {
-				uid:this.userId,
-				type:0,
-				limit:0,
-			}
-			this.ajax.get(this.$store.state.api+"select_appStoreSave",params).then(res=>{
-				let data = res.data[0];
-				if(data.length>0){
-					data.forEach(i => {
-            if (i.json) {
-              i.json = JSON.parse(i.json);
+          }
+        })
+        .catch(err => {
+          console.log(err);
+          if (type === 0) this.$message.error("收藏失败");
+        });
+    },
+    delApp(item) {
+      this.$confirm(
+        `确定要删除《${item.name}》这个应用吗,删除后无法找回!`,
+        `确定删除应用`,
+        {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }
+      )
+        .then(() => {
+          let params = [
+            {
+              uid: this.userId,
+              aid: item.id
             }
-          });
-					this.collect = data;
-				}else{
-					this.collect = [];
-				}
-			}).catch(err=>{
-				console.log(err)
-				this.$message.error("获取收藏应用失败")
-			})
-		},
-		insertSave(item,type){
-			let params = [{
-				uid:this.userId,
-				type:type,
-				aid:item.id,
-				json:"",
-			}]
-
-			this.ajax.post(this.$store.state.api+"insert_appStoreSave",params).then(res=>{
-				if(res.data){
-					if(type===0){
-						this.$message.success("收藏成功")
-						this.getCollect();
-					}else if(type===1){
-						this.getRecentUse();
-					}
-				}
-			}).catch(err=>{
-				console.log(err)
-				if(type===0)this.$message.error("收藏失败")
-			})
-
-		},
-		delApp(item){
-			this.$confirm(`确定要删除《${item.name}》这个应用吗,删除后无法找回!`, `确定删除应用`, {
-				confirmButtonText: '确定',
-				cancelButtonText: '取消',
-				type: 'warning'
-			}).then(() => {
-				let params = [{
-					uid: this.userId,
-					aid: item.id
-				}];
-				this.ajax.post(this.$store.state.api + "delete_appStore", params).then(res => {
-					if (res.data) {
-						this.$message.success("删除成功");
-						this.getData();
-					} else {
-						this.$message.error("删除失败");
-					}
-				}).catch(err => {
-					console.log(err);
-					this.$message.error("删除失败");
-				});
-			}).catch(() => {
-				console.log("取消删除");
-			});
-		},
-		changeShowPage(newPage){
-			this.$emit("changeShowCard",newPage)
-		}
+          ];
+          this.ajax
+            .post(this.$store.state.api + "delete_appStore", params)
+            .then(res => {
+              if (res.data) {
+                this.$message.success("删除成功");
+                this.getData();
+              } else {
+                this.$message.error("删除失败");
+              }
+            })
+            .catch(err => {
+              console.log(err);
+              this.$message.error("删除失败");
+            });
+        })
+        .catch(() => {
+          console.log("取消删除");
+        });
+    },
+    changeShowPage(newPage) {
+      this.$emit("changeShowCard", newPage);
+    }
   },
   mounted() {
     this.getTypeList();
     this.getData();
-		this.getCollect();
-		this.getRecentUse();
+    this.getCollect();
+    this.getRecentUse();
   }
 };
 </script>
@@ -598,16 +693,16 @@ export default {
 }
 
 .ac_left {
-	width: 280px;
+  width: 280px;
   min-width: 280px;
   margin-right: 20px;
   height: 100%;
   border-radius: 5px;
   background-color: #fff;
   box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
-	box-sizing: border-box;
-	padding: 10px;
-	overflow: auto;
+  box-sizing: border-box;
+  padding: 10px;
+  overflow: auto;
 }
 
 .ac_right {
@@ -623,8 +718,8 @@ export default {
   width: 100%;
   height: auto;
   border-radius: 5px;
-  background-color: #fff;
   box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+	background-color: #fff;
 }
 
 .ac_h_top {
@@ -635,51 +730,70 @@ export default {
   box-sizing: border-box;
   padding: 0 15px;
   border-bottom: 1px solid #eeeeee;
+	
   position: relative;
+  justify-content: center;
 }
 
 .ac_h_top > span {
-  font-size: 26px;
-	position: relative;
-	margin-right: 25px;
-	cursor: pointer;
+  font-size: 22px;
+  position: relative;
+  margin-right: 25px;
+  cursor: pointer;
+	display: flex;
+	align-items: center;
+}
+
+.ac_h_top > span>svg{
+	width: 22px;
+	height: 22px;
+	fill: #1A1A1A;
+	margin-right: 10px;
+}
+
+.ac_h_t_active{
+	color: #0354D7;
 }
 
-.ac_h_t_active::after{
-	content: "";
-	position: absolute;
-	width: 100%;
-	height: 3px;
-	border-radius: 4px;
-	background-color: #409EFF;
-	left: 0;
-	bottom: -5px;
+.ac_h_t_active>svg{
+	fill: #0354D7 !important;
 }
 
-.ac_h_banner{
-	width: 100%;
-	height: 200px;
-	border-radius: 5px;
-	overflow: hidden;
-	box-sizing: border-box;
-	padding: 10px;
+/* .ac_h_t_active::after {
+  content: "";
+  position: absolute;
+  width: 100%;
+  height: 3px;
+  border-radius: 4px;
+  background-color: #409eff;
+  left: 0;
+  bottom: -5px;
+} */
+
+.ac_h_banner {
+  width: 100%;
+  height: 300px;
+  border-radius: 5px;
+  overflow: hidden;
+  box-sizing: border-box;
+  padding: 10px;
 }
 
-.ac_h_banner>img{
-	width: 100%;
-	height: 100%;
-	object-fit:cover;
-	border-radius: 5px;
+.ac_h_banner > img {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  border-radius: 5px;
 }
 
 .ac_h_bottom {
   width: 100%;
   height: auto;
   padding: 10px 15px 10px 15px;
-	box-sizing: border-box;
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
+  box-sizing: border-box;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
 }
 
 .ac_h_b_typeList {
@@ -705,16 +819,17 @@ export default {
 .ac_h_b_selectList {
   margin-left: 15px;
   margin-bottom: 10px;
-	display: flex;
-	align-items: center;
+  display: flex;
+  align-items: center;
 }
 
 .ac_content {
   width: 100%;
   flex: 1;
   height: auto;
-  margin-top: 20px;
+  margin-top:10px;
   overflow: auto;
+	min-height: 200px;
 }
 
 .ac_c_item {
@@ -825,7 +940,7 @@ export default {
   cursor: pointer;
   transition: 0.3s;
   font-weight: bold;
-  font-size: .9em;
+  font-size: 0.9em;
   border-radius: 5px;
   display: flex;
   justify-content: center;
@@ -852,15 +967,15 @@ export default {
   height: 100%;
 }
 
-.ac_c_i_t_left >span{
-	width: 100%;
-	height: 100%;
-	display: block;
+.ac_c_i_t_left > span {
+  width: 100%;
+  height: 100%;
+  display: block;
 }
 
-.ac_c_i_t_left >span>>>svg{
-	width: 100%;
-	height: 100%;
+.ac_c_i_t_left > span >>> svg {
+  width: 100%;
+  height: 100%;
 }
 
 .ac_c_i_t_right {

+ 535 - 38
src/components/pages/appStore/views/workSpace.vue

@@ -1,29 +1,292 @@
 <template>
   <div class="workSpace">
-    <div class="ac_header">
-      <div class="ac_h_top">
-        <span @click="changeShowPage(0)">应用管理</span>
-				<span class="ac_h_t_active">工作空间</span>
-      </div>
+    <div class="ac_left">
+      <!-- <recentUseCard/>
+			<collectCard/> -->
+      <saveCard
+        title="最近使用"
+        :data="recentUse"
+        :type="0"
+        @saveClick="openApp"
+      />
+      <saveCard title="收藏" :data="collect" :type="1" @saveClick="openApp" />
     </div>
-		<div class="ac_content">
+    <div class="ac_right">
+      <div class="ac_header">
+        <div class="ac_h_top">
+          <!-- <span>应用管理</span> -->
+          <span @click="changeShowPage(0)">
+            <svg
+              width="20"
+              height="20"
+              viewBox="0 0 20 20"
+              xmlns="http://www.w3.org/2000/svg"
+            >
+              <path
+                d="M14.0625 2.1875C11.9914 2.1875 10.3125 3.86643 10.3125 5.9375C10.3125 8.00857 11.9914 9.6875 14.0625 9.6875C16.1336 9.6875 17.8125 8.00857 17.8125 5.9375C17.8125 3.86643 16.1336 2.1875 14.0625 2.1875ZM11.5625 5.9375C11.5625 4.55679 12.6818 3.4375 14.0625 3.4375C15.4432 3.4375 16.5625 4.55679 16.5625 5.9375C16.5625 7.31821 15.4432 8.4375 14.0625 8.4375C12.6818 8.4375 11.5625 7.31821 11.5625 5.9375Z"
+              />
+              <path
+                d="M2.5 3.75C2.5 3.05964 3.05964 2.5 3.75 2.5H8.125C8.81536 2.5 9.375 3.05964 9.375 3.75V8.125C9.375 8.81536 8.81536 9.375 8.125 9.375H3.75C3.05964 9.375 2.5 8.81536 2.5 8.125V3.75ZM3.75 3.75V8.125H8.125V3.75H3.75Z"
+              />
+              <path
+                d="M2.5 11.875C2.5 11.1846 3.05964 10.625 3.75 10.625H8.125C8.81536 10.625 9.375 11.1846 9.375 11.875V16.25C9.375 16.9404 8.81536 17.5 8.125 17.5H3.75C3.05964 17.5 2.5 16.9404 2.5 16.25V11.875ZM3.75 11.875V16.25H8.125V11.875H3.75Z"
+              />
+              <path
+                d="M10.625 11.875C10.625 11.1846 11.1846 10.625 11.875 10.625H16.25C16.9404 10.625 17.5 11.1846 17.5 11.875V16.25C17.5 16.9404 16.9404 17.5 16.25 17.5H11.875C11.1846 17.5 10.625 16.9404 10.625 16.25V11.875ZM11.875 16.25H16.25V11.875H11.875V16.25Z"
+              />
+            </svg>
+            应用管理</span
+          >
+          <span class="ac_h_t_active">
+            <svg
+              width="20"
+              height="20"
+              viewBox="0 0 20 20"
+              xmlns="http://www.w3.org/2000/svg"
+            >
+              <rect width="20" height="20" fill="white" />
+              <path
+                fill-rule="evenodd"
+                clip-rule="evenodd"
+                d="M9.70072 1.32632C9.88727 1.22456 10.1127 1.22456 10.2993 1.32632L17.1743 5.07632C17.3751 5.18584 17.5 5.39628 17.5 5.625V14.375C17.5 14.6037 17.3751 14.8142 17.1743 14.9237L10.2993 18.6737C10.1127 18.7754 9.88727 18.7754 9.70072 18.6737L2.82572 14.9237C2.62493 14.8142 2.5 14.6037 2.5 14.375V5.625C2.5 5.39628 2.62493 5.18584 2.82572 5.07632L9.70072 1.32632ZM3.75 6.79282V14.004L9.375 17.0722V14.1039L6.55344 12.4109C6.36519 12.298 6.25 12.0945 6.25 11.875V8.45949L3.75 6.79282ZM7.5 8.47887V10.7711L9.375 9.64613V7.35387L7.5 8.47887ZM10.625 7.35387V9.64613L12.5 10.7711V8.47887L10.625 7.35387ZM13.75 8.45949V11.875C13.75 12.0945 13.6348 12.298 13.4466 12.4109L10.625 14.1039V17.0722L16.25 14.004V6.79282L13.75 8.45949ZM15.668 5.67854L10 2.58693L4.33205 5.67854L6.8926 7.38557L9.67844 5.71407C9.87637 5.59531 10.1236 5.59531 10.3216 5.71407L13.1074 7.38557L15.668 5.67854ZM10 13.0211L11.9102 11.875L10 10.7289L8.08978 11.875L10 13.0211Z"
+              />
+            </svg>
+            工作空间</span
+          >
+        </div>
+				<div class="ac_h_banner">
+          <img
+            src="https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2FFrame+30141733970358224.svg"
+            alt="banner图"
+          />
+        </div>
+        <div class="ac_h_bottom">
+          <div class="ac_h_b_typeList">
+            <span
+              :class="{ ac_h_b_typeList_active: showType === '' }"
+              @click="changeShowType('')"
+            >
+              全部
+            </span>
+            <span
+              :class="{ ac_h_b_typeList_active: showType === '1' }"
+              @click="changeShowType('1')"
+            >
+              智能体
+            </span>
+            <span
+              :class="{ ac_h_b_typeList_active: showType === '2' }"
+              @click="changeShowType('2')"
+            >
+              工作流
+            </span>
+          </div>
+          <div class="ac_h_b_selectList">
+            <el-select
+              v-model="statusSelect"
+              placeholder="请选择"
+              @change="changeSelectType"
+              style="width: 150px;margin-right: 10px;"
+            >
+              <el-option
+                v-for="item in statusSelectList"
+                :key="item.index"
+                :label="item.label"
+                :value="item.index"
+              ></el-option>
+            </el-select>
+
+            <el-select
+              v-model="tagSelect"
+              placeholder="请选择"
+              @change="changeSelectType"
+              style="width: 150px;margin-right: 10px;"
+            >
+              <el-option
+                v-for="item in tagSelectList"
+                :key="item.index"
+                :label="item.label"
+                :value="item.index"
+              ></el-option>
+            </el-select>
+
+            <el-input
+              v-model="searchText"
+              style="width: 200px;"
+              placeholder="请输入名称"
+              @keyup.enter.native="getData"
+              clearable
+            />
+            <el-button
+              type="primary"
+              style="margin-left: 10px;"
+              icon="el-icon-search"
+              @click="getData"
+            ></el-button>
+            <el-button type="primary" @click="resetData">重置</el-button>
+          </div>
+        </div>
+      </div>
 
-		</div>
+      <div class="ac_content">
+        <div class="ac_c_item" v-for="item in 10">
+          <div class="ac_c_i_top">
+            <img
+              src="https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/default%2F%E6%B5%8B%E8%AF%951733981587859.jpg"
+              alt="封面"
+            />
+            <div>
+              <div>名称名称名称名称名称名称名称名称</div>
+              <span class="ac_c_i_t_brief">简介简介简介简介简介</span>
+              <span class="ac_c_i_t_time">2024-12-12 10:22:04 编辑</span>
+            </div>
+          </div>
+          <div class="ac_c_i_t_popover">
+            <div
+              class="ac_c_i_t_p_box"
+              v-if="editAppCard"
+              v-click-outside="handleBlur"
+            >
+              <div>编辑</div>
+              <div>收藏</div>
+              <div>复制</div>
+              <div>删除</div>
+            </div>
+
+            <svg
+              t="1732786015570"
+              @click.stop="updateCard(!editAppCard)"
+              class="icon"
+              viewBox="0 0 1024 1024"
+              version="1.1"
+              xmlns="http://www.w3.org/2000/svg"
+              p-id="9199"
+              width="200"
+              height="200"
+            >
+              <path
+                d="M192 443.733333c-38.4 0-68.266667 29.866667-68.266667 68.266667 0 38.4 29.866667 68.266667 68.266667 68.266667s68.266667-29.866667 68.266667-68.266667c0-38.4-29.866667-68.266667-68.266667-68.266667zM512 443.733333c-38.4 0-68.266667 29.866667-68.266667 68.266667 0 38.4 29.866667 68.266667 68.266667 68.266667s68.266667-29.866667 68.266667-68.266667c0-38.4-29.866667-68.266667-68.266667-68.266667zM832 443.733333c-38.4 0-68.266667 29.866667-68.266667 68.266667 0 38.4 29.866667 68.266667 68.266667 68.266667s68.266667-29.866667 68.266667-68.266667c0-38.4-34.133333-68.266667-68.266667-68.266667z"
+                fill="#111111"
+                p-id="9200"
+              ></path>
+            </svg>
+          </div>
+          <div class="ac_c_i_bottom">
+            <div>标签</div>
+            <span>工作流</span>
+          </div>
+        </div>
+        <div class="ac_c_empty" v-if="dataList.length === 0">
+          <span>暂无数据...</span>
+        </div>
+      </div>
+    </div>
+    <!-- <addAppDialog
+      ref="addAppDialogRef"
+      :typeList="typeList"
+      @success="addAppSuccess"
+    /> -->
   </div>
 </template>
 
 <script>
+const clickOutside = {
+  bind(el, binding) {
+    // 在元素上绑定一个点击事件监听器
+    el.clickOutsideEvent = function(event) {
+      // 检查点击事件是否发生在元素的内部
+      if (!(el === event.target || el.contains(event.target))) {
+        // 如果点击事件发生在元素的外部,则触发指令绑定的方法,将点击的event数据传过去
+        binding.value(event);
+      }
+    };
+    // 在文档上添加点击事件监听器
+    document.addEventListener("click", el.clickOutsideEvent);
+  },
+  unbind(el) {
+    // 在元素上解除点击事件监听器
+    document.removeEventListener("click", el.clickOutsideEvent);
+  }
+};
+import saveCard from "../dialog/saveCard.vue";
 export default {
-	data(){
-		return{
-
-		}
-	},
-	methods:{
-		changeShowPage(newPage){
-			this.$emit("changeShowCard",newPage)
-		}
-	}
+  components: {
+    saveCard
+  },
+  directives: {
+    "click-outside": clickOutside // 注册自定义指令
+  },
+  data() {
+    return {
+      showType: "",
+      searchText: "",
+      statusSelect: "",
+      statusSelectList: [
+        { index: "", label: "全部状态" },
+        { index: 1, label: "未发布" },
+        { index: 2, label: "已发布" }
+      ],
+      tagSelect: "",
+      tagSelectList: [
+        { index: "", label: "全部标签" },
+        { index: 1, label: "标签1" },
+        { index: 2, label: "标签2" },
+        { index: 3, label: "标签3" },
+        { index: 4, label: "标签4" },
+        { index: 5, label: "标签5" }
+      ],
+      userId: this.$route.query["userid"],
+      org: this.$route.query["org"],
+      oid: this.$route.query["oid"],
+      getDataLoading: false,
+      dataList: [1],
+      recentUse: [],
+      collect: [],
+      editAppCard: null
+    };
+  },
+  computed: {},
+  methods: {
+    changeType(newIndex) {
+      let flag = this.showType === newIndex;
+      this.showType = newIndex;
+      if (!flag) {
+        this.getData();
+      }
+    },
+    changeShowType(newType) {
+      if (this.showType === newType) return;
+      this.showType = newType;
+      this.getData();
+    },
+    changeSelectType() {
+      this.getData();
+    },
+    getData() {
+      this.$message.info("获取数据暂未开发...");
+    },
+    updateCard(newValue) {
+      // if (this.editAppCard === id) return (this.editAppCard = null);
+      this.editAppCard = newValue;
+    },
+    handleBlur() {
+      this.updateCard(null);
+    },
+    openApp(item, type = 0) {
+      console.log("👉", item);
+    },
+    resetData() {
+      this.searchText = "";
+      this.statusSelect = "";
+      this.tagSelectList = "";
+      this.showType = "";
+      this.getData();
+    },
+    changeShowPage(newPage) {
+      this.$emit("changeShowCard", newPage);
+    }
+  },
+  mounted() {}
 };
 </script>
 
@@ -39,12 +302,35 @@ export default {
   display: flex;
   justify-content: space-between;
 }
+
+.ac_left {
+  width: 280px;
+  min-width: 280px;
+  margin-right: 20px;
+  height: 100%;
+  border-radius: 5px;
+  background-color: #fff;
+  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+  box-sizing: border-box;
+  padding: 10px;
+  overflow: auto;
+}
+
+.ac_right {
+  width: calc(100% - 280px);
+  min-width: 800px;
+  height: 100%;
+  overflow-y: hidden;
+  display: flex;
+  flex-direction: column;
+}
+
 .ac_header {
   width: 100%;
   height: auto;
   border-radius: 5px;
-  background-color: #fff;
   box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+  background-color: #fff;
 }
 
 .ac_h_top {
@@ -55,41 +341,68 @@ export default {
   box-sizing: border-box;
   padding: 0 15px;
   border-bottom: 1px solid #eeeeee;
+
   position: relative;
-	padding-left: 315px;
+  justify-content: center;
 }
 
 .ac_h_top > span {
-  font-size: 26px;
-	position: relative;
-	margin-right: 25px;
-	cursor: pointer;
+  font-size: 22px;
+  position: relative;
+  margin-right: 25px;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+}
+
+.ac_h_top > span > svg {
+  width: 22px;
+  height: 22px;
+  fill: #1a1a1a;
+  margin-right: 10px;
+}
+
+.ac_h_t_active {
+  color: #0354d7;
 }
 
-.ac_h_t_active::after{
-	content: "";
-	position: absolute;
-	width: 100%;
-	height: 3px;
-	border-radius: 4px;
-	background-color: #409EFF;
-	left: 0;
-	bottom: -5px;
+.ac_h_t_active > svg {
+  fill: #0354d7 !important;
+}
+
+.ac_h_banner {
+  width: 100%;
+  height: 300px;
+  border-radius: 5px;
+  overflow: hidden;
+  box-sizing: border-box;
+  padding: 10px;
+}
+
+.ac_h_banner > img {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  border-radius: 5px;
 }
 
 .ac_h_bottom {
   width: 100%;
   height: auto;
-  padding: 10px 0 20px 0;
+  padding: 10px 15px 10px 15px;
+  box-sizing: border-box;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
 }
 
 .ac_h_b_typeList {
-  width: 100%;
+  width: calc(100% - 666px);
   height: auto;
   display: flex;
   flex-wrap: wrap;
   box-sizing: border-box;
-  padding: 0 15px;
+  align-items: center;
 }
 
 .ac_h_b_typeList > span {
@@ -107,13 +420,197 @@ export default {
 .ac_h_b_selectList {
   margin-left: 15px;
   margin-bottom: 10px;
+  display: flex;
+  align-items: center;
 }
 
-.ac_content{
-	width: 100%;
+.ac_content {
+  width: 100%;
   flex: 1;
   height: auto;
-  margin-top: 20px;
+  margin-top: 10px;
   overflow: auto;
+	min-height: 200px;
+}
+
+.ac_c_item {
+  width: calc(100% / 5 - (15px * 4) / 5);
+  height: auto;
+  background-color: #fff;
+  border-radius: 10px;
+  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+  box-sizing: border-box;
+  padding: 15px;
+  margin-right: 15px;
+  margin-bottom: 15px;
+  float: left;
+  position: relative;
+  /* cursor: pointer; */
+}
+
+@media screen and (min-width: 1400px) {
+  .ac_c_item {
+    width: calc(100% / 5 - (15px * 4) / 5) !important;
+  }
+  .ac_c_item:nth-child(5n) {
+    margin-right: 0px !important;
+    /* background-color: red; */
+  }
+}
+
+@media screen and (max-width: 1380px) {
+  .ac_c_item {
+    width: calc(100% / 4 - (15px * 3) / 4) !important;
+  }
+
+  .ac_c_item:nth-child(4n) {
+    margin-right: 0px !important;
+  }
+  /* .ac_c_item:nth-child(5n) {
+    margin-right: 0 !important;
+  } */
+}
+
+@media screen and (max-width: 1080px) {
+  .ac_c_item {
+    width: calc(100% / 3 - (15px * 2) / 3) !important;
+  }
+
+  .ac_c_item:nth-child(5n) {
+    margin-right: 15px !important;
+  }
+
+  .ac_c_item:nth-of-type(4n) {
+    margin-right: 15px !important;
+  }
+
+  .ac_c_item:nth-child(3n) {
+    margin-right: 0 !important;
+  }
+}
+
+.ac_c_i_top {
+  width: 100%;
+  height: 180px;
+  display: flex;
+  justify-content: space-between;
+  position: relative;
+}
+
+.ac_c_i_top > img {
+  width: 130px;
+  height: 130px;
+  object-fit: cover;
+  border-radius: 10px;
+  margin: 10px 15px 10px 10px;
+}
+
+.ac_c_i_top > div {
+  box-sizing: border-box;
+  padding: 20px 0px 10px 0px;
+  flex: 1;
+  height: 100%;
+  width: calc(100% - 130px - 10px - 15px);
+}
+
+.ac_c_i_top > div > div {
+  font-size: 18px;
+  width: calc(100%);
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.ac_c_i_t_brief {
+  margin: 5px 0;
+  font-size: 1em;
+  color: #8991a1;
+  width: calc(100%);
+  height: 74px;
+  /* 第四行溢出显示... */
+  display: -webkit-box;
+  display: block;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 4;
+  -webkit-box-orient: vertical;
+}
+
+.ac_c_i_t_time {
+  margin: 5px 0;
+  font-size: .9em !important;
+  color: #8991a1;
+  width: 100%;
+  height: auto;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.ac_c_i_bottom {
+  width: 100%;
+  height: 30px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  box-sizing: border-box;
+  padding: 0 10px;
+}
+
+.ac_c_empty {
+  width: 100%;
+  height: 40%;
+  display: flex;
+  box-sizing: border-box;
+  padding-top: 2%;
+  justify-content: center;
+  /* align-items: center; */
+}
+
+.ac_c_i_t_popover {
+  width: 30px;
+  height: 30px;
+  position: absolute;
+  right: 10px;
+  top: 10px;
+}
+
+.ac_c_i_t_popover svg {
+  width: 30px;
+  height: 25px;
+  cursor: pointer;
+  background-color: #f2f2f2;
+  border-radius: 4px;
+}
+
+.ac_c_i_t_p_box {
+  position: absolute;
+  height: auto;
+  top: 100%;
+  right: 0;
+  padding: 8px;
+  border-radius: 8px 0 8px 8px;
+  background-color: #fff;
+  box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+  width: auto;
+}
+
+.ac_c_i_t_p_box > div {
+  width: 80px;
+  height: 30px;
+  cursor: pointer;
+  transition: 0.3s;
+  font-weight: bold;
+  font-size: 0.9em;
+  border-radius: 5px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  position: relative;
+  box-sizing: border-box;
+}
+
+.ac_c_i_t_p_box > div:hover {
+  background-color: #f2f4f7;
 }
 </style>

+ 113 - 47
src/components/pages/test/check/docxTemplateDialog.vue

@@ -306,6 +306,7 @@ export default {
       for (let i = 0; i < array.length; i++) {
         let _item = array[i];
         if (_item.type == 3) {
+          //问答题
           let _item2 = _item.json;
           _list.push({
             name: _item2.title,
@@ -315,6 +316,7 @@ export default {
           });
           _index++;
         } else if (_item.type == 1) {
+          //单选题
           let _item2 = _item.json;
           let choseTxt = ``;
           _item2.array.forEach((i, index2) => {
@@ -331,25 +333,57 @@ export default {
             value: choseTxt
           });
           _index++;
-        }else if(_item.type == 8){
-					let _item2 = _item.json;
-					_list.push({
-						name:_item2.title,
-						field:`ti_${_index}`,
-						type:"text",
-						value:_item2.answer2
-					})
-					_index++;
-				}else if(_item.type == 12){
-					let _item2 = _item.json;
-					_list.push({
-						name:_item2.title,
-						field:`ti_${_index}`,
-						type:"text",
-						value:_item2.answer2
-					})
-					_index++;
-				}
+        } else if (_item.type == 8) {
+          //日期
+          let _item2 = _item.json;
+          _list.push({
+            name: _item2.title,
+            field: `ti_${_index}`,
+            type: "text",
+            value: _item2.answer2
+          });
+          _index++;
+        } else if (_item.type == 12) {
+          //扫一扫
+          let _item2 = _item.json;
+          _list.push({
+            name: _item2.title,
+            field: `ti_${_index}`,
+            type: "text",
+            value: _item2.answer2
+          });
+          _index++;
+        } else if (_item.type == 7) {
+          //评分
+          let _item2 = _item.json;
+          _list.push({
+            name: _item2.title,
+            field: `ti_${_index}`,
+            type: "text",
+            value: _item2.answer2
+          });
+          _index++;
+        } else if (_item.type == 5) {
+          //附件
+          let _item2 = _item.json;
+          // let _value = ``;
+          // _item2.file.forEach(f => {
+          //   if (/\.(jpeg|jpg|gif|png|svg|bmp|webp)$/i.test(f.url)) {
+          //     _value += `<img src="${f.url}" alt="${f.name}" width="100" height="100"/>
+          // 		`;
+          //   } else {
+          //     _value += `<a href="${f.url}" target="_blank">${f.name}</a>
+          // 		`;
+          //   }
+          // });
+          _list.push({
+            name: _item2.title,
+            field: `ti_${_index}`,
+            type: "file",
+            value: _item2.file
+          });
+          _index++;
+        }
       }
       return _list;
     },
@@ -487,6 +521,20 @@ export default {
               `{${fieldList[i].field}}`,
               fieldList[i].value
             );
+          } else if (this.fieldList[i].type == "file") {
+            let _text = ``;
+            // this.fieldList[i].value.forEach(async f => {
+            for (let j = 0; j < this.fieldList[i].value.length; j++) {
+              let f = this.fieldList[i].value[j];
+              if (/\.(jpeg|jpg|gif|png|svg|bmp|webp)$/i.test(f.url)) {
+                // const img = await this.convertImageUrlToBase64(f.url);
+                _text += `<img src="${f.url}" width="${100}" height="${100}"/><br/>`;
+              } else {
+                _text += `<a href="${f.url}" target="_blank">${f.name}</a><br/>`;
+              }
+            }
+            _html = _html.replaceAll(`{${this.fieldList[i].field}}`, _text);
+            // });
           }
         }
 
@@ -522,8 +570,25 @@ export default {
             `{${this.fieldList[i].field}}`,
             this.fieldList[i].value
           );
+        } else if (this.fieldList[i].type == "file") {
+          let _text = ``;
+          console.log(this.fieldList[i].value);
+          // this.fieldList[i].value.forEach(async f=>{
+          // for (let j = 0; j < this.fieldList[i].value.length; j++) {
+          //   let f = this.fieldList[i].value[j];
+          // 	console.log("👉f",f)
+          //   if (/\.(jpeg|jpg|gif|png|svg|bmp|webp)$/i.test(f.url)) {
+          //     const img = await this.convertImageUrlToBase64(f.url);
+          //     _text += `<img src="${img.url}" width="${img.width}" height="${img.height}" />\n`;
+          //   } else {
+          //     _text += `<a href="${f.url}" target="_blank">${f.name}</a>\n`;
+          //   }
+          // }
+          // _html = _html.replaceAll(`{${this.fieldList[i].field}}`, _text);
+          // })
         }
       }
+      return;
       // this.fieldList.forEach(i => {
       // _html = _html.replace(`{${i.field}}`,i.value)
       // })
@@ -1215,8 +1280,8 @@ ${html}
     getTxtContent(txt) {
       this.downFileData.txt = txt;
     },
-		uploadWord(){
-			let input = document.createElement("input");
+    uploadWord() {
+      let input = document.createElement("input");
       input.type = "file";
       // input.accept = ".wav";
       // input.accept = "audio/*, .txt, .pdf, .xlsx";
@@ -1234,25 +1299,26 @@ ${html}
           this.loading = false;
           return this.$message.error("文件上传失败");
         }
-				let obj = {
-					fileName:file.name,
-					url:uploadData,
-				}
-				this.downFileData = obj;
-				this.changeDownFileData(this.downFileData);
-				this.loading = false;
-				console.log(uploadData)
-			}
-		},
-		formatTime(timeString) {
-    let [datePart, timePart] = timeString.split(' ');
-    let formattedTime = timePart.replace(/:/g, (match, offset) => {
-      if (offset === 2) return '时';
-      if (offset === 5) return '分';
-      return match;
-    }) + '秒';
-    return datePart + ' ' + formattedTime;
-  },
+        let obj = {
+          fileName: file.name,
+          url: uploadData
+        };
+        this.downFileData = obj;
+        this.changeDownFileData(this.downFileData);
+        this.loading = false;
+        console.log(uploadData);
+      };
+    },
+    formatTime(timeString) {
+      let [datePart, timePart] = timeString.split(" ");
+      let formattedTime =
+        timePart.replace(/:/g, (match, offset) => {
+          if (offset === 2) return "时";
+          if (offset === 5) return "分";
+          return match;
+        }) + "秒";
+      return datePart + " " + formattedTime;
+    }
   },
   computed: {
     dialogTitle() {
@@ -1278,8 +1344,8 @@ ${html}
 
 .dialog_diy >>> .el-dialog__header {
   padding: 15px 20px;
-	background-color: #454545 !important;
-	color: #fff !important;
+  background-color: #454545 !important;
+  color: #fff !important;
 }
 
 .dialog_diy >>> .el-dialog__body {
@@ -1315,16 +1381,16 @@ ${html}
   padding: 0 20px 15px;
   display: flex;
   box-sizing: border-box;
-	overflow: auto;
+  overflow: auto;
 }
 
 .b_left {
-	flex: 1;
-	height: 100%;
+  flex: 1;
+  height: 100%;
   border: none;
   outline: none;
-	box-sizing: border-box;
-	padding-top: 20px;
+  box-sizing: border-box;
+  padding-top: 20px;
 }
 
 .b_right {

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä