yangg 9 miesięcy temu
rodzic
commit
b63368cc38

+ 1 - 1
.env.production

@@ -2,7 +2,7 @@
 ENV = 'production'
 port = 8080
 # base api
-VUE_APP_BASE_API = 'http://120.46.190.49:8084'
+VUE_APP_BASE_API = 'http://58.246.234.210:8084'
 #客户:58.246.234.210:8084
 #域名 docapi.shqlsy.com
 #访问ip 192.168.100.6:8083

+ 29 - 0
src/api/applet.js

@@ -15,4 +15,33 @@ export function getInfoList(data) {
       method: 'post',
       data
     })
+  }
+
+  /* 投诉建议 */
+  export function getComplaintList(data) {
+    return request({
+      url: '/complaint/getComplaintList',
+      method: 'post',
+      data
+    })
+  }
+
+  /* 删除投诉 */
+
+  export function deleteComplaint(data) {
+    return request({
+      url: '/complaint/deleteComplaint',
+      method: 'post',
+      data
+    })
+  }
+
+  /* 审核 */
+
+  export function toExamine(data) {
+    return request({
+      url: '/wechat/toExamine',
+      method: 'post',
+      data
+    })
   }

Plik diff jest za duży
+ 0 - 0
src/icons/svg/AI模块.svg


+ 1 - 0
src/icons/svg/applets.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935258381" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2060" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M698.19 357.5H332.26a68 68 0 0 1-68-68v-76.03a68 68 0 0 1 68-68h365.93a68 68 0 0 1 68 68v76.06a68 68 0 0 1-68 67.97z m-365.93-147a3 3 0 0 0-3 3v76.06a3 3 0 0 0 3 3h365.93a3 3 0 0 0 3-3v-76.09a3 3 0 0 0-3-3zM855.56 544.5h-16.2a32.5 32.5 0 0 1 0-65h16.2a20.8 20.8 0 0 0 20.78-20.78V303.28a20.8 20.8 0 0 0-20.78-20.78h-16.2a32.5 32.5 0 0 1 0-65h16.2a85.88 85.88 0 0 1 85.78 85.78v155.44a85.88 85.88 0 0 1-85.78 85.78zM198.84 806.5h-22.2a85.88 85.88 0 0 1-85.78-85.78V565.28a85.88 85.88 0 0 1 85.78-85.78h22.2a32.5 32.5 0 1 1 0 65h-22.2a20.8 20.8 0 0 0-20.78 20.78v155.44a20.8 20.8 0 0 0 20.78 20.78h22.2a32.5 32.5 0 1 1 0 65zM697.31 618H331.39a68 68 0 0 1-68-68v-76a68 68 0 0 1 68-68h365.92a68 68 0 0 1 68 68v76a68 68 0 0 1-68 68zM331.39 471a3 3 0 0 0-3 3v76a3 3 0 0 0 3 3h365.92a3 3 0 0 0 3-3v-76a3 3 0 0 0-3-3zM700.18 878.5H334.26a68 68 0 0 1-68-68v-76.03a68 68 0 0 1 68-68h365.92a68 68 0 0 1 68 68v76.06a68 68 0 0 1-68 67.97z m-365.92-147a3 3 0 0 0-3 3v76.06a3 3 0 0 0 3 3h365.92a3 3 0 0 0 3-3v-76.09a3 3 0 0 0-3-3z" p-id="2061"></path></svg>

+ 1 - 0
src/icons/svg/dashboards.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935092475" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1442" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M768.63 893.27H315.15A117.5 117.5 0 0 1 197.77 775.9V247.1a117.5 117.5 0 0 1 117.38-117.37h453.48A117.5 117.5 0 0 1 886 247.1v528.8a117.5 117.5 0 0 1-117.37 117.37zM315.15 194.73a52.43 52.43 0 0 0-52.38 52.37v528.8a52.44 52.44 0 0 0 52.38 52.37h453.48A52.44 52.44 0 0 0 821 775.9V247.1a52.43 52.43 0 0 0-52.37-52.37z" p-id="1443"></path><path d="M551.89 739.63c-43.4 0-92.82-1.83-130.29-15.4-58.54-21.18-70.83-63.8-70.83-95.82 0-55 35.84-105.1 95.87-133.88a32.5 32.5 0 1 1 28.1 58.61c-36.92 17.71-59 45.84-59 75.27 0 23.39 10.51 46.22 136.12 46.22S688 651.8 688 628.41c0-29.42-22-57.56-59-75.27a32.5 32.5 0 1 1 28.11-58.61c60 28.78 95.87 78.83 95.87 133.88 0 32-12.29 74.64-70.83 95.82-37.45 13.57-86.87 15.4-130.26 15.4z" p-id="1444"></path><path d="M551.89 567.86c-36.41 0-70.42-15.68-95.77-44.14-24.41-27.4-37.85-63.59-37.85-101.89s13.44-74.5 37.85-101.9c25.35-28.46 59.36-44.14 95.77-44.14s70.41 15.68 95.76 44.14c24.41 27.4 37.85 63.59 37.85 101.9s-13.44 74.49-37.85 101.89c-25.35 28.46-59.36 44.14-95.76 44.14z m0-227.07c-37.84 0-68.62 36.36-68.62 81s30.78 81 68.62 81 68.61-36.35 68.61-81-30.78-81-68.61-81zM286.5 363.5H179a32.5 32.5 0 0 1 0-65h107.5a32.5 32.5 0 0 1 0 65zM286.5 725.5H179a32.5 32.5 0 0 1 0-65h107.5a32.5 32.5 0 0 1 0 65z" p-id="1445"></path></svg>

Plik diff jest za duży
+ 0 - 0
src/icons/svg/kehus.svg


+ 1 - 0
src/icons/svg/wendangs.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935171124" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1751" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M859.68 441.29a32.51 32.51 0 0 1-32.5-32.5V325.2a14.41 14.41 0 0 0-14.39-14.39H446.86a32.5 32.5 0 0 1 0-65h365.93a79.47 79.47 0 0 1 79.39 79.39v83.59a32.5 32.5 0 0 1-32.5 32.5zM777 688.77H257.34a32.5 32.5 0 1 1 0-65H777a32.5 32.5 0 0 1 0 65z" p-id="1752"></path><path d="M815.28 813.08H212.72A112.34 112.34 0 0 1 100.5 700.86V323.27a112.34 112.34 0 0 1 112.22-112.22h149.19a112.89 112.89 0 0 1 80.47 34 34.87 34.87 0 0 1 2.39 2.75L529 356.58a80.31 80.31 0 0 0 56.11 23h230.17A112.34 112.34 0 0 1 927.5 491.82v209a112.34 112.34 0 0 1-112.22 112.26z m-602.56-537a47.28 47.28 0 0 0-47.22 47.22v377.56a47.27 47.27 0 0 0 47.22 47.22h602.56a47.27 47.27 0 0 0 47.22-47.22v-209a47.27 47.27 0 0 0-47.22-47.21H585.14a145.69 145.69 0 0 1-103.89-43.9 32.92 32.92 0 0 1-2.39-2.75l-84.21-108.76a47.53 47.53 0 0 0-32.74-13.19z" p-id="1753"></path></svg>

Plik diff jest za duży
+ 0 - 0
src/icons/svg/xitongs.svg


+ 1 - 0
src/icons/svg/zhisk.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935212933" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1905" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M772 640.41h-65v-68.33a28.74 28.74 0 0 0-28.71-28.71H345.77a28.72 28.72 0 0 0-28.69 28.69v68.35h-65v-68.35a93.8 93.8 0 0 1 93.69-93.69h332.5A93.82 93.82 0 0 1 772 572.08z" p-id="1906"></path><path d="M479.62 389.02h65v116.41h-65zM359.25 894.62H210.88a75 75 0 0 1-74.94-74.94V671.31a75 75 0 0 1 74.94-74.95h148.37a75 75 0 0 1 74.94 74.95v148.37a75 75 0 0 1-74.94 74.94zM210.88 661.36a10 10 0 0 0-9.94 9.95v148.37a10 10 0 0 0 9.94 9.94h148.37a10 10 0 0 0 9.94-9.94V671.31a10 10 0 0 0-9.94-9.95zM813.12 894.62H664.75a75 75 0 0 1-74.94-74.94V671.31a75 75 0 0 1 74.94-74.95h148.37a75 75 0 0 1 74.94 74.95v148.37a75 75 0 0 1-74.94 74.94zM664.75 661.36a10 10 0 0 0-9.94 9.95v148.37a10 10 0 0 0 9.94 9.94h148.37a10 10 0 0 0 9.94-9.94V671.31a10 10 0 0 0-9.94-9.95z" p-id="1907"></path><path d="M586.3 435.76H437.94A75 75 0 0 1 363 360.81V212.45a75 75 0 0 1 74.95-74.95H586.3a75 75 0 0 1 75 74.95v148.36a75 75 0 0 1-75 74.95zM437.94 202.5a10 10 0 0 0-9.95 9.95v148.36a10 10 0 0 0 9.95 9.95H586.3a10 10 0 0 0 10-9.95V212.45a10 10 0 0 0-10-9.95z" p-id="1908"></path></svg>

+ 1 - 0
src/icons/svg/公式.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935827987" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2720" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 928H128a32 32 0 0 1-26.88-49.92L345.6 512 101.12 145.92A32 32 0 0 1 128 96h384a32 32 0 0 1 0 64H187.52l223.36 334.08a33.28 33.28 0 0 1 0 35.84L187.52 864H512a32 32 0 0 1 0 64zM640 928a36.48 36.48 0 0 1-17.92-5.12 32.64 32.64 0 0 1-8.96-44.8l256-384a32 32 0 0 1 53.76 35.84l-256 384a33.28 33.28 0 0 1-26.88 14.08z" fill="#4D4D4D" p-id="2721"></path><path d="M896 928a33.28 33.28 0 0 1-26.88-14.08l-256-384a32 32 0 1 1 53.76-35.84l256 384a32.64 32.64 0 0 1-8.96 44.8 36.48 36.48 0 0 1-17.92 5.12zM992 224h-320a32 32 0 0 1 0-64h320a32 32 0 0 1 0 64z" fill="#4D4D4D" p-id="2722"></path><path d="M832 384a32 32 0 0 1-32-32v-320a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z" fill="#4D4D4D" p-id="2723"></path></svg>

+ 1 - 0
src/icons/svg/变量.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935899673" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3739" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M831.808 128.256a64 64 0 0 1 64 64v385.984a32 32 0 1 1-64 0v-385.92H191.616v640H513.28a32 32 0 1 1 0 64H191.616a64 64 0 0 1-64-64v-640a64 64 0 0 1 64-64h640.192z m71.552 562.752a32 32 0 0 1 0 45.248l-135.744 135.744a32 32 0 0 1-45.248 0l-90.496-90.496a32 32 0 1 1 45.248-45.248l67.84 67.84 113.152-113.088a32 32 0 0 1 45.248 0z" fill="#000000" fill-opacity=".9" p-id="3740"></path><path d="M402.304 320a27.456 27.456 0 0 1 0 54.848h-27.456v274.24h27.456a27.456 27.456 0 0 1 0 54.912h-27.456A54.848 54.848 0 0 1 320 649.152V374.848c0-27.968 20.928-51.008 48-54.4L374.848 320h27.456z m246.848 0l6.848 0.448c27.072 3.392 48 26.432 48 54.4v274.304a54.848 54.848 0 0 1-54.848 54.848h-27.456a27.456 27.456 0 0 1 0-54.848l27.456-0.064V374.848h-27.456a27.456 27.456 0 0 1 0-54.848h27.456zM472.832 407.872c3.584 0 6.72 1.536 8.768 4.672l38.848 58.496 38.848-58.496a10.176 10.176 0 0 1 8.832-4.672h39.36c5.76 0 10.368 4.672 10.368 10.368a10.432 10.432 0 0 1-1.536 5.696l-62.208 96.32 62.208 96.384a10.752 10.752 0 0 1-3.136 14.464 10.432 10.432 0 0 1-5.696 1.536h-39.36a10.176 10.176 0 0 1-8.832-4.608l-38.848-56.96-38.848 56.96a11.52 11.52 0 0 1-8.768 4.608h-41.984a10.368 10.368 0 0 1-10.368-10.304c0-2.112 0.512-4.16 1.536-5.76l65.28-96.32-65.28-96.32c-3.072-4.672-2.048-11.392 2.624-14.528a10.432 10.432 0 0 1 5.696-1.536h42.496z" fill="#000000" p-id="3741"></path></svg>

+ 1 - 0
src/icons/svg/图文.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935460319" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2213" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M822.77 850.5h-616.1a98.57 98.57 0 0 1-98.45-98.45V285a98.57 98.57 0 0 1 98.45-98.45h616.1A98.57 98.57 0 0 1 921.22 285v467.1a98.57 98.57 0 0 1-98.45 98.4z m-616.1-599a33.49 33.49 0 0 0-33.45 33.5v467.1a33.49 33.49 0 0 0 33.45 33.45h616.1a33.49 33.49 0 0 0 33.45-33.45V285a33.49 33.49 0 0 0-33.45-33.45z" p-id="2214"></path><path d="M260.67 744.57A32.5 32.5 0 0 1 238.81 688l99.13-90a65.47 65.47 0 0 1 88.84 0.79l22.5 21.21a0.46 0.46 0 0 0 0.64 0l105-103.55a65.48 65.48 0 0 1 94.65 2.86l150.6 167.5a32.5 32.5 0 1 1-48.34 43.45L601.24 562.72a0.35 0.35 0 0 0-0.33-0.15 0.37 0.37 0 0 0-0.33 0.13l-105 103.55a65.25 65.25 0 0 1-90.81 1.07l-22.5-21.16a0.45 0.45 0 0 0-0.62 0l-99.13 90a32.37 32.37 0 0 1-21.85 8.41zM339 508.5a98.5 98.5 0 1 1 98.5-98.5 98.62 98.62 0 0 1-98.5 98.5z m0-132a33.5 33.5 0 1 0 33.5 33.5 33.54 33.54 0 0 0-33.5-33.5z" p-id="2215"></path></svg>

+ 1 - 0
src/icons/svg/属性.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935986890" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1607" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M839.6 609.4H212.1c-42.4 0-76.9-34.5-76.9-76.8V437c0-42.4 34.5-76.8 76.9-76.8h627.4c42.4 0 76.9 34.5 76.9 76.8v95.6c0 42.4-34.5 76.8-76.8 76.8zM212.1 419c-9.9 0-17.9 8-17.9 17.9v95.6c0 9.9 8.1 17.9 17.9 17.9h627.4c9.9 0 17.9-8 17.9-17.9V437c0-9.9-8.1-17.9-17.9-17.9H212.1zM848.2 336.9H208c-25.8 0-48.9-14.8-58.8-37.7-9.5-22-5.1-46.7 11.5-64.4l76-81c12.1-12.8 29.3-20.2 47.3-20.2h505.8c20.9 0 40.5 9.9 52.4 26.4l58.3 81c13.2 18.3 15 41.9 4.8 61.8-10.8 21-32.7 34.1-57.1 34.1zM284.1 192.5c-1.8 0-3.4 0.6-4.4 1.6l-76 81c-0.5 0.5 0.1 2.9 4.3 2.9h640.2c3.6 0 4.8-2 4.8-2.4l-58.5-81.3c-0.7-0.9-2.3-1.9-4.6-1.9H284.1zM643.2 504.4H408.5c-10.9 0-19.6-8.8-19.6-19.6 0-10.9 8.8-19.6 19.6-19.6h234.7c10.9 0 19.6 8.8 19.6 19.6 0.1 10.8-8.7 19.6-19.6 19.6zM839.6 901.2H212.1c-42.4 0-76.9-34.5-76.9-76.9v-95.6c0-42.4 34.5-76.9 76.9-76.9h627.4c42.4 0 76.9 34.5 76.9 76.9v95.6c0 42.4-34.5 76.9-76.8 76.9zM212.1 710.8c-9.9 0-17.9 8.1-17.9 17.9v95.6c0 9.9 8.1 17.9 17.9 17.9h627.4c9.9 0 17.9-8.1 17.9-17.9v-95.6c0-9.9-8.1-17.9-17.9-17.9H212.1zM643.2 796.2H408.5c-10.9 0-19.6-8.8-19.6-19.6 0-10.9 8.8-19.6 19.6-19.6h234.7c10.9 0 19.6 8.8 19.6 19.6 0.1 10.8-8.7 19.6-19.6 19.6z" p-id="1608"></path></svg>

+ 1 - 0
src/icons/svg/常量.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935948010" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4748" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M865.04 65.96H155.39c-32.69 0-59.18 28.67-59.18 64.04v767.92c0 35.37 26.49 64.04 59.18 64.04h709.64c32.69 0 59.18-28.67 59.18-64.04V129.99c0-35.36-26.49-64.03-59.17-64.03z m-1.18 786.72c0 30.31-11.52 42.89-39.32 42.89H199.18c-27.78 0-39.32-12.57-39.32-42.89V170.45c0-30.31 11.52-42.89 39.32-42.89h625.37c27.78 0 39.32 12.57 39.32 42.89v682.23z" p-id="4749"></path><path d="M734.72 638.96h-444c-17.6 0-32 14.4-32 32s14.4 32 32 32h444c17.6 0 32-14.4 32-32s-14.4-32-32-32zM734.72 765.96h-444c-17.6 0-32 14.4-32 32s14.4 32 32 32h444c17.6 0 32-14.4 32-32s-14.4-32-32-32zM526.73 575.95c47.08 0 88.34-12.17 123.79-36.53 35.45-24.35 52.49-52.23 51.12-83.66l-0.82-2.02h-72.67c0 19.76-10.2 36.42-30.59 50-20.39 13.58-44 20.37-70.82 20.37-42.7 0-73.08-12.4-91.13-37.22-18.07-24.8-27.1-55.83-27.1-93.09v-14.14c0-36.36 9.09-67.05 27.3-92.08 18.2-25.02 48.51-37.54 90.94-37.54 18.89 0 35.85 2.36 50.91 7.07 15.05 4.72 27.36 10.89 36.95 18.52l17.65 57.24h64.45l-3.7-80.8c-18.61-16.84-42.08-30.08-70.41-39.73s-60.29-14.48-95.87-14.48c-64.33 0-113.6 17.34-147.81 52.02-34.22 34.68-51.32 77.94-51.32 129.79v14.14c0 52.3 17.04 95.73 51.12 130.29 34.08 34.57 83.41 51.85 148.01 51.85z" p-id="4750"></path></svg>

+ 1 - 0
src/icons/svg/插入空值.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725936033609" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1760" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M320.1 932.904c-89.2 0-162.2-72.4-162.7-161.9-0.1-16.3 13-29.5 29.3-29.6h0.2c16.2 0 29.4 13.1 29.5 29.3 0.3 57.3 47.3 103.6 104.6 103.4h465.9c57.2 0 103.8-46.3 104.1-103.5v-336.2c-0.2-19.3-9.7-38.1-25.4-50l-253.8-203.6c-33.9-26.8-81.5-26.8-115.5 0.1l-240.5 202.3c-17 13-26.3 31.4-26.6 51.3-0.3 16.2-12.3 29-30 29-16.3-0.3-29.2-13.7-29-30 0.6-38.1 18.4-73.2 48.7-96.3l240-201.9c56.2-44.5 133.9-44.5 189.5-0.6l253.2 203.2c29.5 22.2 47.7 58.3 48.2 96.1v336.7c-0.5 89.7-73.5 162.2-163 162.2H320.1zM358.3 617.2H79.5c-10.9 0-19.6-8.8-19.6-19.6 0-10.9 8.8-19.6 19.6-19.6h278.8c10.9 0 19.6 8.8 19.6 19.6 0 10.9-8.8 19.6-19.6 19.6zM268.2 707c-5 0-10.1-1.9-13.9-5.8-7.7-7.7-7.6-20.1 0.1-27.8l76.2-75.9-76.2-75.8c-7.7-7.7-7.7-20.1-0.1-27.8 7.7-7.6 20.1-7.7 27.8-0.1l90.1 89.8c3.7 3.7 5.8 8.7 5.8 13.9s-2.1 10.2-5.8 13.9L282 701.3c-3.8 3.8-8.8 5.7-13.8 5.7z" p-id="1761"></path></svg>

+ 1 - 0
src/icons/svg/目录.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725935734114" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1607" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M668.5 736.704H385c-16.3 0-29.5-13.2-29.5-29.5s13.2-29.5 29.5-29.5h283.5c16.3 0 29.5 13.2 29.5 29.5s-13.2 29.5-29.5 29.5zM668.5 572.304H385c-16.3 0-29.5-13.2-29.5-29.5s13.2-29.5 29.5-29.5h283.5c16.3 0 29.5 13.2 29.5 29.5s-13.2 29.5-29.5 29.5zM668.5 374.904h-84c-16.3 0-29.5-13.2-29.5-29.5s13.2-29.5 29.5-29.5h84c16.3 0 29.5 13.2 29.5 29.5s-13.2 29.5-29.5 29.5zM365.2 908.704c-5.3 0-11-0.2-16.6-0.7-52.3-4.4-99.7-28.9-133.6-69-33.9-40.2-50.1-91.1-45.7-143.4l-0.1-358.8c-0.7-6.7-0.8-15.9-0.3-25.1 2.9-52.3 26-100.5 65.1-135.5 39.1-35 89.4-52.6 141.8-49.8h299.5c9.4-0.5 18.8-0.4 28.2 0.4 108 9.2 188.3 104.6 179 212.6l0.1 358.8c0.7 6.5 0.8 15.6 0.3 24.7-2.9 52.4-26 100.5-65 135.5-39.1 35-89.2 52.5-141.8 49.9H375.8c-3.4 0.2-6.9 0.4-10.6 0.4z m0.8-723.6c-35.1 0-67.3 12.3-92.7 35.1-27.4 24.5-43.5 58.2-45.5 94.9-0.4 6.5-0.2 12.9 0.3 19.3l0.1 363.7c-3.3 39.1 8.1 74.7 31.8 102.8 23.7 28.1 56.9 45.2 93.6 48.3 6.7 0.6 13.4 0.7 20.2 0.2l303.8-0.1c38.4 2 73.6-10.4 100.9-34.9 27.3-24.4 43.5-58.1 45.5-94.7 0.3-6.3 0.3-12.6-0.2-18.9l-0.2-363.9c3.2-39.1-8.1-74.8-31.8-102.9-23.7-28.1-56.9-45.3-93.5-48.5-6.8-0.6-13.6-0.6-20.4-0.2-0.6 0-1.2 0.1-1.8 0.1h-302c-2.7-0.2-5.4-0.3-8.1-0.3zM474.1 331.604c1.4 0 2.5 1.1 2.5 2.5v76.9c0 1.4-1.1 2.5-2.5 2.5h-76.9c-1.4 0-2.5-1.1-2.5-2.5v-76.9c0-1.4 1.1-2.5 2.5-2.5h76.9m0-39.3h-76.9c-23 0-41.8 18.7-41.8 41.8v76.9c0 23 18.7 41.8 41.8 41.8h76.9c23 0 41.8-18.7 41.8-41.8v-76.9c-0.1-23.1-18.8-41.8-41.8-41.8z" p-id="1608"></path></svg>

Plik diff jest za duży
+ 0 - 0
src/icons/svg/系统设置.svg


+ 12 - 6
src/router/index.js

@@ -80,7 +80,7 @@ export const constantRoutes = [
         component: () => import('@/views/dashboard/index'),
         name: 'Dashboard',
 
-        meta: { title: '用户首页', icon: 'dashboard', affix: true }
+        meta: { title: '用户首页', icon: 'dashboards', affix: true }
       }
     ]
   },
@@ -174,7 +174,7 @@ export const asyncRoutes = [
     type:4,
     meta: {
       title: '客户管理',
-      icon: 'kehu',
+      icon: 'kehus',
       roles: ['admin']
     },
     children: [
@@ -229,7 +229,7 @@ export const asyncRoutes = [
     type:10,
     meta: {
       title: '文档管理',
-      icon: 'wendang'
+      icon: 'wendangs'
     },
     children: [
       {
@@ -309,7 +309,7 @@ export const asyncRoutes = [
     type:32,
     meta: {
       title: '知识库',
-      icon: 'subject',
+      icon: 'zhisk',
       roles: ['admin']
     },
     children: [
@@ -341,7 +341,7 @@ export const asyncRoutes = [
     type:1,
     meta: {
       title: '小程序管理',
-      icon: 'paizhao-01-20',
+      icon: 'applets',
       roles: ['admin']
     },
     children: [
@@ -351,6 +351,12 @@ export const asyncRoutes = [
         name: 'project',
         meta: { title: '小程序管理', noCache: true,roles: ['admin'] }
       },
+      {
+        path: 'complaint',
+        component: () => import('@/views/applet/complaint'),
+        name: 'complaintAndAdvice',
+        meta: { title: '投诉建议', noCache: true,roles: ['admin'] }
+      },
     ]
   },
   {
@@ -359,7 +365,7 @@ export const asyncRoutes = [
     type:21,
     meta: {
       title: '系统设置',
-      icon: 'xitong',
+      icon: '系统设置',
       roles: ['admin']
     },
     children: [

+ 164 - 0
src/views/applet/complaint.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="complaint-list">
+    <el-form :inline="true" :model="searchForm" class="search-form">
+      <el-form-item>
+        <el-input
+          v-model="searchForm.keyword"
+          placeholder="搜索关键词"
+        ></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="searchComplaints">搜索</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table :data="complaintList" style="width: 100%">
+      <el-table-column prop="name" label="姓名"></el-table-column>
+      <el-table-column prop="phone" label="手机号"></el-table-column>
+      <el-table-column prop="corporateName" label="公司名称"></el-table-column
+      ><el-table-column
+        prop="create_time"
+        label="创建时间"
+        width="180"
+      ></el-table-column>
+      <el-table-column prop="content" label="内容"></el-table-column>
+      <el-table-column label="操作" width="200">
+        <template slot-scope="scope">
+          <el-button @click="viewComplaint(scope.row)" type="primary"
+            >查看</el-button
+          > <el-button @click="handleDelete(scope.row)" type="danger" >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div class="pagination-container">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total"
+      >
+      </el-pagination>
+    </div>
+    <el-dialog title="投诉详情" :visible.sync="dialogVisible" width="50%">
+      <el-descriptions :column="1" border>
+        <el-descriptions-item label="姓名">{{
+          selectedComplaint.name
+        }}</el-descriptions-item>
+        <el-descriptions-item label="手机号">{{
+          selectedComplaint.phone
+        }}</el-descriptions-item>
+        <el-descriptions-item label="公司名称">{{
+          selectedComplaint.corporateName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="创建时间">{{
+          selectedComplaint.create_time
+        }}</el-descriptions-item>
+        <el-descriptions-item label="内容">{{
+          selectedComplaint.content
+        }}</el-descriptions-item>
+      </el-descriptions>
+    </el-dialog>
+  </div>
+</template>
+  
+  <script>
+import { getComplaintList,deleteComplaint } from "@/api/applet";
+
+export default {
+  data() {
+    return {
+      complaintList: [],
+      currentPage: 1,
+      pageSize: 10,
+      total: 0,
+      dialogVisible: false,
+      selectedComplaint: {},
+      searchForm: {
+        keyword: "",
+      },
+    };
+  },
+  methods: {
+    async fetchComplaintList() {
+      try {
+        const params = {
+          page: this.currentPage,
+          pageSize: this.pageSize,
+          keyword: this.searchForm.keyword,
+        };
+        const res = await getComplaintList(params);
+        if (res.status === 200) {
+          this.complaintList = res.data.dataList;
+          this.currentPage = Number(res.data.totalPage);
+          this.pageSize = Number(res.data.pageSize);
+          this.total = Number(res.data.totalRecord);
+        } else {
+          this.$message.error(res.message || "获取投诉列表失败");
+        }
+      } catch (error) {
+        console.error("获取投诉列表出错:", error);
+        this.$message.error("获取投诉列表失败");
+      }
+    },
+    /* 删除 */
+    async handleDelete(row) {
+      try {
+        await this.$confirm('确定要删除这条投诉记录吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        });
+        
+        const res = await deleteComplaint({id:row.id});
+        if (res.status === 200) {
+          this.$message.success('删除成功');
+          this.fetchComplaintList();
+        } else {
+          this.$message.error(res.message || '删除失败');
+        }
+      } catch (error) {
+        if (error !== 'cancel') {
+          console.error("删除投诉记录出错:", error);
+          this.$message.error('删除失败');
+        }
+      }
+    },
+    searchComplaints() {
+      this.currentPage = 1;
+      this.fetchComplaintList();
+    },
+    handleSizeChange(val) {
+      this.pageSize = val;
+      this.fetchComplaintList();
+    },
+    handleCurrentChange(val) {
+      this.currentPage = val;
+      this.fetchComplaintList();
+    },
+    viewComplaint(row) {
+      this.selectedComplaint = row;
+      this.dialogVisible = true;
+    },
+  },
+  mounted() {
+    this.fetchComplaintList();
+  },
+};
+</script>
+  
+  <style scoped>
+.complaint-list {
+  padding: 20px;
+}
+.search-form {
+  margin-bottom: 20px;
+}
+.pagination-container {
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 105 - 76
src/views/applet/index.vue

@@ -13,7 +13,7 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" @click="onSearch">查询</el-button>
+        <el-button type="primary" @click="search">查询</el-button>
         <el-button type="primary" @click="resetSearch">重置</el-button>
       </el-form-item>
     </el-form>
@@ -28,16 +28,20 @@
       <el-table-column prop="name" label="姓名"></el-table-column>
       <el-table-column prop="nikeName" label="昵称"></el-table-column>
       <el-table-column prop="phone" label="手机号"></el-table-column>
-      <el-table-column prop="level" label="用户等级"></el-table-column>
-      <el-table-column prop="status" label="状态">
+      <el-table-column prop="level" label="用户等级">
         <template slot-scope="scope">
-          {{ scope.row.status === "1" ? "启用" : "禁用" }}
+          {{ scope.row.level === "0" ? "员工" : "游客" }}
         </template>
       </el-table-column>
+      <!-- <el-table-column prop="status" label="状态">
+        <template slot-scope="scope">
+          {{ scope.row.status === "1" ? "启用" : "禁用" }}
+        </template>
+      </el-table-column> -->
       <el-table-column label="操作">
         <template slot-scope="scope">
           <el-button type="primary" @click="handleEdit(scope.$index, scope.row)"
-            >编辑</el-button
+            >审核</el-button
           >
           <!-- <el-button
               size="mini"
@@ -45,7 +49,7 @@
               @click="handleToggleStatus(scope.$index, scope.row)">
               {{ scope.row.status === '1' ? '禁用' : '启用' }}
             </el-button> -->
-            <el-button type="danger" @click="handleDel(scope.$index, scope.row)"
+          <el-button type="danger" @click="handleDel(scope.$index, scope.row)"
             >删除</el-button
           >
         </template>
@@ -65,26 +69,30 @@
     </div>
 
     <!-- 编辑表单对话框 -->
-    <el-dialog title="编辑信息" :visible.sync="dialogFormVisible">
+    <el-dialog title="审核信息" :visible.sync="dialogFormVisible">
       <el-form :model="editForm">
+        <el-form-item label="微信名称" :label-width="formLabelWidth">
+          <el-input v-model="editForm.nikeName" disabled></el-input>
+        </el-form-item>
         <el-form-item label="姓名" :label-width="formLabelWidth">
-          <el-input v-model="editForm.name" autocomplete="off"></el-input>
+          <el-input v-model="editForm.name" disabled></el-input>
         </el-form-item>
-        <el-form-item label="年龄" :label-width="formLabelWidth">
-          <el-input v-model="editForm.age" autocomplete="off"></el-input>
+        <el-form-item label="手机号" :label-width="formLabelWidth">
+          <el-input v-model="editForm.phone" disabled></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="dialogFormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="submitEdit">确 定</el-button>
+        <el-button type="danger" @click="submitAudit(1)">不通过</el-button>
+        <el-button type="primary" @click="submitAudit(0)">通过</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
   
   <script>
-   import {getInfoList,deleteUserInfo} from'@/api/applet'
-import { status } from 'nprogress';
+import { getInfoList, deleteUserInfo, toExamine } from "@/api/applet";
+import { status } from "nprogress";
 export default {
   data() {
     return {
@@ -111,48 +119,10 @@ export default {
       },
     };
   },
-  mounted(){
-    this.search()
+  mounted() {
+    this.search();
   },
   methods: {
-    async fetchData() {
-      try {
-        // 假设这是一个 API 调用
-        const response = await this.$api.getUsers({
-          page: this.pagination.currentPage,
-          pageSize: this.pagination.pageSize,
-          ...this.searchForm,
-        });
-        this.tableData = response.data;
-        this.pagination.total = response.total;
-      } catch (error) {
-        this.$message.error("获取数据失败");
-      }
-    },
-    handleSizeChange(val) {
-      this.pagination.pageSize = val;
-      this.fetchData();
-    },
-    handleCurrentChange(val) {
-      this.pagination.currentPage = val;
-      this.fetchData();
-    },
-    onSearch() {
-      // 实现搜索逻辑
-      console.log("搜索条件:", this.searchForm);
-      // 这里应该调用API进行搜索,然后更新tableData
-    },
-    resetSearch() {
-      this.searchForm = {
-        name: "",
-        status: "",
-      };
-    },
-    handleEdit(index, row) {
-      /* this.dialogFormVisible = true;
-      this.editForm = { ...row };
-      this.editIndex = index; */
-    },
     handleToggleStatus(index, row) {
       // 切换状态
       this.tableData[index].status = row.status === "1" ? "0" : "1";
@@ -170,32 +140,87 @@ export default {
       }
     },
     /* 删除 */
-    handleDel(row){
-      let _this=this;
-        let par={
-          id:row.id,
-        }
-        _this.$confirm("您是否确认删除该记录?","提示",{
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'warning',
-        }).then((res)=>{
+    handleDel(index, row) {
+      let _this = this;
+      let par = {
+        id: row.id,
+      };
+      _this
+        .$confirm("您是否确认删除该记录?", "提示", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+        .then((res) => {
           // console.log("AAA")
-          deleteUserInfo(par).then(res=>{
-               _this.search();
-             })
-        }).catch(()=>{
+          deleteUserInfo(par).then((res) => {
+            _this.search();
+          });
         })
+        .catch(() => {});
+    },
+    search() {
+      const params = {
+        ...this.searchForm,
+        page: this.pagination.currentPage,
+        pageSize: this.pagination.pageSize,
+      };
+
+      getInfoList(params).then((res) => {
+        if (res.status !== 200) return;
+        this.tableData = res.data.dataList;
+        // 使用 Number() 函数确保 currentPage 是数字类型
+        this.pagination.currentPage = Number(res.data.page);
+        this.pagination.pageSize = Number(res.data.pageSize);
+        this.pagination.total = Number(res.data.totalRecord);
+      });
+    },
+
+    handleSizeChange(val) {
+      this.pagination.pageSize = val;
+      this.search();
+    },
+
+    handleCurrentChange(val) {
+      this.pagination.currentPage = val;
+      this.search();
+    },
+
+    resetSearch() {
+      this.searchForm = {
+        name: "",
+        status: "",
+      };
+      this.search();
+    },
+    handleEdit(index, row) {
+      this.dialogFormVisible = true;
+      this.editForm = {
+        id: row.id,
+        name: row.name,
+        nikeName: row.nikeName,
+        phone: row.phone,
+      };
+      this.editIndex = index;
+    },
+    submitAudit(level) {
+      const data = { id: this.editForm.id, level: level };
+      toExamine(data)
+        .then((res) => {
+          if (res.status === 200) {
+            this.$message.success(
+              level === 0 ? "审核通过成功" : "审核不通过成功"
+            );
+            this.dialogFormVisible = false;
+            this.search();
+          } else {
+            this.$message.error("审核操作失败");
+          }
+        })
+        .catch((err) => {
+          this.$message.error("审核操作失败:" + err.message);
+        });
     },
-    search(){
-      getInfoList().then(res=>{
-        if(res.status !==200) return
-        this.tableData=res.data.dataList
-        this.pagination.currentPage=res.data.page
-        this.pagination.pageSize=res.data.pageSize
-        this.pagination.total=res.data.totalRecord
-      })
-    }
   },
 };
 </script>
@@ -204,4 +229,8 @@ export default {
 .search-list-form {
   padding: 20px;
 }
+.pagination-container {
+  display: flex;
+  justify-content: flex-end;
+}
 </style>

+ 1 - 0
src/views/document/com/menus.scss

@@ -49,6 +49,7 @@
         align-items: center;
         justify-content:center;
         width:60px;
+        cursor: pointer;
         .icon{
           width:32px;
           height:32px;

+ 8 - 8
src/views/document/com/menus.vue

@@ -148,7 +148,7 @@ export default {
             {
               key: "article",
               name: "图文",
-              icon: "insertArticle",
+              icon: "图文",
               disabled: () => this.type === "module",
             },
 
@@ -160,33 +160,33 @@ export default {
             {
               key: "formual",
               name: "公式",
-              icon: "insertFormula",
+              icon: "公式",
             },
 
             {
               key: "variable",
               name: "变量",
-              icon: "insertParams",
+              icon: "变量",
             },
             {
               key: "constant",
               name: "常量",
-              icon: "constant",
+              icon: "常量",
             },
             {
               key: "attr",
               name: "属性",
-              icon: "attr",
+              icon: "属性",
             },
             {
               key: "Directory",
               name: "目录",
-              icon: "subject",
+              icon: "目录",
             },
             {
               key: "InsertNull",
               name: "插入空值",
-              icon: "insertTemplate",
+              icon: "插入空值",
             },
             /* {
                 key:"pager",
@@ -196,7 +196,7 @@ export default {
             {
               key: "ai",
               name: "AI模块",
-              icon: "AI",
+              icon: "AI模块",
             },
             /*  {
                 key:"aiEs",

+ 44 - 17
src/views/document/com/view.vue

@@ -22,7 +22,6 @@
         :disabled="exporting"
         >导出</el-button
       >
-      <el-progress v-if="exporting" :percentage="exportProgress" />
     </div>
   </div>
 </template>
@@ -519,17 +518,50 @@ export default {
       try {
         let contentClone = this.$refs.content.cloneNode(true);
         console.log("Original content:", contentClone.innerHTML);
-        const firstHeading = contentClone.querySelector(
-         "p"
-        );
+        /* const firstHeading = contentClone.querySelector("p");
         if (firstHeading) {
           const span = firstHeading.querySelector("span");
           if (span) {
-            console.log( span.innerHTML);
-            span.innerHTML = span.innerHTML.replace(/&nbsp; &nbsp; &nbsp; &nbsp;/, '');
-            console.log("1",span.innerHTML);
+            span.textContent = span.textContent
+              .replace(/&nbsp; &nbsp; &nbsp; &nbsp;/, " ")
+              .trim();
           }
-        }
+        } */
+        // 处理被span包裹的图片
+        contentClone.querySelectorAll("span > img").forEach((img) => {
+          const span = img.parentElement;
+          const parent = span.parentElement;
+          parent.insertBefore(img, span);
+          if (span.childNodes.length === 0) {
+            parent.removeChild(span);
+          }
+        });
+        contentClone.querySelectorAll("table").forEach((table, tableIndex) => {
+          table.style.borderCollapse = "collapse";
+          table.style.width = "100%";
+          table.style.border = "0.5pt solid #000000"; // 表格外边框
+
+          table.querySelectorAll("tr").forEach((row, rowIndex) => {
+            row.querySelectorAll("td, th").forEach((cell, cellIndex) => {
+              cell.style.padding = "5px";
+
+              // 设置右边框和下边框
+              cell.style.borderRight = "0.5pt solid #000000";
+              cell.style.borderBottom = "0.5pt solid #000000";
+
+              // 为第一行设置上边框
+              if (rowIndex === 0) {
+                cell.style.borderTop = "0.5pt solid #000000";
+              }
+
+              // 为第一列设置左边框
+              if (cellIndex === 0) {
+                cell.style.borderLeft = "0.5pt solid #000000";
+              }
+            });
+          });
+        });
+
         // 等待所有图片加载完成并转换为 Base64
         const images = contentClone.querySelectorAll("img");
         for (let img of images) {
@@ -570,14 +602,7 @@ export default {
               font-size: 12pt;
               line-height: 1.5;
             }
-            table {
-              width: 100%;
-              border-collapse: collapse;
-            }
-            td, th {
-              border: 1px solid black;
-              padding: 5px;
-            }
+           
             .template-textarea {
               page-break-after: always;
             }
@@ -601,7 +626,9 @@ export default {
             bottom: "2cm",
             left: "2cm",
           },
-          table: { row: { cantSplit: true } },
+          table: {
+            row: { cantSplit: true },
+          },
           footer: {
             default:
               '<p style="color: #444; font-size: 10pt">页码: {page} / {pages}</p>',

+ 53 - 13
src/views/document/create.vue

@@ -46,7 +46,7 @@
           v-if="type !== 'module' && type !== 'document'"
         > -->
         <el-button
-        type="primary"
+          type="primary"
           v-if="
             $store.state.user.name == 'admin' &&
             type !== 'module' &&
@@ -57,7 +57,7 @@
           >保存</el-button
         >
         <el-button
-        type="primary"
+          type="primary"
           v-if="
             $store.state.user.name == 'admin' &&
             type !== 'module' &&
@@ -564,6 +564,7 @@
             style="width: 60%"
             class="input-item"
             placeholder="请填写文档名称"
+            :disabled="docAttr.id > 0"
           />
         </el-form-item>
 
@@ -572,6 +573,7 @@
             v-model="docForm.category_id"
             style="width: 60%"
             placeholder="请选择所属分类"
+            :disabled="docAttr.id > 0"
           >
             <el-option
               v-for="(item, index) in articleCategoryList"
@@ -702,7 +704,7 @@ export default {
   watch: {
     coms: {
       handler(newComs, oldComs) {
-         this.updateAttrs(newComs, oldComs);
+        this.updateAttrs(newComs, oldComs);
       },
       immediate: true, //立即执行
       deep: true,
@@ -733,9 +735,6 @@ export default {
     }
     this.isAdmin = this.userInfo ? this.userInfo.roleInfo.is_admin : 2;
     this.initArticleCategoryList();
-    if (this.type == "document" && this.articleId !== undefined) {
-      document.title = this.docAttr.title + "-轻良实业";
-    }
     if (this.type !== "module" && this.type !== "document") {
       document.title = "新建模版-轻良实业";
     }
@@ -1184,7 +1183,7 @@ export default {
               : res.data.name + "-轻良实业";
           res.data.attrs = JSON.parse(res.data.attrs);
           _this.coms = [res.data];
-          console.log(_this.coms);
+          console.log("11", _this.coms);
         })
         .catch(() => {});
     },
@@ -1269,10 +1268,32 @@ export default {
             linkProject: res.data.linkProject,
             projects: res.data.projects,
           };
-          _this.coms = JSON.parse(res.data.data);
+          const templatePromises = JSON.parse(res.data.data).map((el) => {
+            return getTemplateInfo({ id: el.id }).then((response) => {
+              this.loading = true;
+              response.data.attrs = JSON.parse(response.data.attrs);
+              return { ...el, ...response.data };
+            });
+          });
+
+          Promise.all(templatePromises)
+            .then((updatedComs) => {
+              _this.coms = updatedComs;
+              this.loading = false;
+            })
+            .catch((error) => {
+              console.error("Error fetching template info:", error);
+              this.loading = false;
+            });
+          if (_this.type == "document" && _this.articleId !== undefined) {
+            document.title = _this.docAttr.title + "-轻良实业";
+          }
+        })
+        .catch((error) => {
+          console.error("Error:", error);
         })
-        .catch(() => {
-          this.loading = false; // Ensure loading is false on error
+        .finally(() => {
+          this.loading = false; // 所有操作完成后取消 loading
         });
 
       this.uptadeSearch();
@@ -1297,10 +1318,29 @@ export default {
             linkProject: res.data.linkProject,
             projects: res.data.projects,
           };
-          _this.coms = JSON.parse(res.data.data);
+          const templatePromises = JSON.parse(res.data.data).map((el) => {
+            return getTemplateInfo({ id: el.id }).then((response) => {
+              this.loading = true;
+              response.data.attrs = JSON.parse(response.data.attrs);
+              return { ...el, ...response.data };
+            });
+          });
+
+          Promise.all(templatePromises)
+            .then((updatedComs) => {
+              _this.coms = updatedComs;
+              this.loading = false;
+            })
+            .catch((error) => {
+              console.error("Error fetching template info:", error);
+              this.loading = false;
+            });
+        })
+        .catch((error) => {
+          console.error("Error:", error);
         })
-        .catch(() => {
-          this.loading = false; // Ensure loading is false on error
+        .finally(() => {
+          this.loading = false; // 所有操作完成后取消 loading
         });
       this.uptadeSearch();
     },

+ 157 - 128
src/views/user/components/dataInfo.vue

@@ -2,7 +2,6 @@
   <div class="data-info">
     <el-card>
       <el-form :model="dataForm" label-width="120px">
-
         <el-form-item label="用户名:">
           <el-input v-model="dataForm.username"></el-input>
         </el-form-item>
@@ -10,7 +9,10 @@
           <el-input type="password" v-model="dataForm.password"></el-input>
         </el-form-item>
         <el-form-item label="确认密码:">
-          <el-input type="password"  v-model="dataForm.confirmPassword"></el-input>
+          <el-input
+            type="password"
+            v-model="dataForm.confirmPassword"
+          ></el-input>
         </el-form-item>
         <el-form-item label="手机号码:">
           <el-input v-model="dataForm.mobile"></el-input>
@@ -22,7 +24,7 @@
         <el-form-item label="真实姓名">
           <el-input v-model.trim="dataForm.real_name" />
         </el-form-item>
-        <el-form-item label="工号">
+        <!-- <el-form-item label="工号">
           <el-input v-model.trim="dataForm.code" />
         </el-form-item>
         <el-form-item label="职位">
@@ -30,156 +32,183 @@
         </el-form-item>
         <el-form-item label="联系方式">
           <el-input v-model.trim="dataForm.contact" />
-        </el-form-item>
+        </el-form-item> -->
 
         <el-form-item label="所属角色:">
-          <el-select v-model="dataForm.role_id" clearable  placeholder="请选择角色" size="large"style="width:100%;">
-              <el-option
-                v-for="item in roleList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
+          <el-select
+            v-model="dataForm.role_id"
+            clearable
+            placeholder="请选择角色"
+            size="large"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in roleList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            />
+          </el-select>
         </el-form-item>
         <el-form-item label="用户状态:">
-          <el-select v-model="dataForm.status"  placeholder="请选择状态" size="large"style="width:100%;">
-              <el-option
-                v-for="item in statusOptions"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
+          <el-select
+            v-model="dataForm.status"
+            placeholder="请选择状态"
+            size="large"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in statusOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
         </el-form-item>
       </el-form>
-
     </el-card>
 
-
-      <div style="text-align:right; margin-top:20px;">
-          <el-button type="warning" @click="btnSave">确认保存</el-button>
-      </div>
+    <div style="text-align: right; margin-top: 20px">
+      <el-button type="warning" @click="btnSave">确认保存</el-button>
+    </div>
   </div>
 </template>
 
 <script>
-  import {searchAdminRole} from "@/api/AdminRole"
-  import Tinymce from "@/components/Tinymce";
-  import {createAdmin,updateAdmin,getAdminInfo} from'@/api/admin'
-  export default{
-    components:{
-      Tinymce
+import { searchAdminRole } from "@/api/AdminRole";
+import Tinymce from "@/components/Tinymce";
+import { createAdmin, updateAdmin, getAdminInfo } from "@/api/admin";
+export default {
+  components: {
+    Tinymce,
+  },
+  emits: ["onClose"],
+  props: {
+    id: {
+      type: Number,
+      default: 0,
     },
-    emits:['onClose'],
-    props:{
-      id:{
-        type:Number,
-        default:0
+  },
+  watch: {
+    id: {
+      handler(v) {
+        let _this = this;
+        if (v == null || v <= 0) return;
+        _this.getInfo(v);
       },
+      immediate: true,
+      deep: true,
     },
-    watch:{
-      id:{
-        handler(v){
-            let _this=this;
-            if(v==null || v<=0)return;
-            _this.getInfo(v);
+  },
+  data() {
+    return {
+      activeName: "base",
+      currentCategory: [],
+      allCategories: [],
+      roleList: [],
+      dataForm: {
+        id: 0,
+        username: "",
+        password: "",
+        confirmPassword: "",
+        mobile: "",
+        email: "",
+        status: 5,
+        real_name: "",
+        code: "",
+        job: "",
+        contact: "",
+      },
+      statusOptions: [
+        {
+          value: "",
+          label: "请选择状态",
         },
-        immediate: true,
-        deep: true
-      }
-    },
-    data(){
-      return{
-        activeName:'base',
-        currentCategory:[],
-        allCategories:[],
-        roleList:[],
-        dataForm:{
-          id:0,
-          username:'',
-          password:'',
-          confirmPassword:'',
-          mobile:'',
-          email:'',
-          status:5,
-          real_name:'',
-          code:'',
-          job:'',
-          contact:'',
+        {
+          value: 5,
+          label: "启用",
         },
-        statusOptions:[
-          {
-            value:'',
-            label:"请选择状态"
-          },
-          {
-            value:5,
-            label:'启用'
-          },
-          {
-            value:6,
-            label:"停用"
-          },
-        ],
-      }
-    },
+        {
+          value: 6,
+          label: "停用",
+        },
+      ],
+    };
+  },
 
-    mounted() {
-      let _this=this;
-      _this.initRoleList();
+  mounted() {
+    let _this = this;
+    _this.initRoleList();
+  },
+  methods: {
+    //加载角色列表
+    initRoleList() {
+      let _this = this;
+      searchAdminRole({ page: 1, pageSize: 999, status: 5 }).then((res) => {
+        if (res.status != 200) return;
+        _this.roleList = res.data.dataList;
+        console.log("res", res);
+      });
     },
-    methods:{
-      //加载角色列表
-      initRoleList(){
-        let _this=this;
-        searchAdminRole({page:1,pageSize:999,status:5}).then(res=>{
-          if(res.status!=200)return;
-          _this.roleList=res.data.dataList;
-          console.log("res",res);
-        })
-      },
-      //保存更新
-      btnSave(e){
-          let _this=this;
+    //保存更新
+    btnSave(e) {
+      let _this = this;
+      // 添加密码长度校验
+      if (_this.dataForm.password && _this.dataForm.password.length < 6) {
+        _this.$alert("密码长度不能小于6位");
+        return;
+      }
 
-          if(_this.dataForm.id>0){
-            updateAdmin(_this.dataForm).then(res=>{
-              if(res.status!=200)return;
-              _this.$alert("管埋员信息更新成功");
-              _this.$emit("onClose");
-            })
-          }else{
-            createAdmin(_this.dataForm).then(res=>{
-              if(res.status!=200)return;
-              _this.$alert("管理员账户创建成功");
-              _this.$emit("onClose");
-            })
-          }
-      },
+      // 添加确认密码长度校验
+      if (
+        _this.dataForm.confirmPassword &&
+        _this.dataForm.confirmPassword.length < 6
+      ) {
+        _this.$alert("确认密码长度不能小于6位");
+        return;
+      }
 
-      //产品详情
-      getInfo(id){
-          let _this=this;
-          let par={
-            id:id,
-          };
-          getAdminInfo(par).then(res=>{
-              if(!res)return;
-              if(res.status!=200)return;
-              _this.dataForm=res.data;
-          })
-      },
+      // 添加密码一致性校验
+      if (_this.dataForm.password !== _this.dataForm.confirmPassword) {
+        _this.$alert("密码和确认密码不一致");
+        return;
+      }
 
-      onChangeStatus(e){
-          this.dataForm.status=e;
-      },
+      if (_this.dataForm.id > 0) {
+        updateAdmin(_this.dataForm).then((res) => {
+          if (res.status != 200) return;
+          _this.$alert("管埋员信息更新成功");
+          _this.$emit("onClose");
+        });
+      } else {
+        createAdmin(_this.dataForm).then((res) => {
+          if (res.status != 200) return;
+          _this.$alert("管理员账户创建成功");
+          _this.$emit("onClose");
+        });
+      }
+    },
 
+    //产品详情
+    getInfo(id) {
+      let _this = this;
+      let par = {
+        id: id,
+      };
+      getAdminInfo(par).then((res) => {
+        if (!res) return;
+        if (res.status != 200) return;
+        _this.dataForm = res.data;
+      });
+    },
 
-    }
-  }
+    onChangeStatus(e) {
+      this.dataForm.status = e;
+    },
+  },
+};
 </script>
 
 <style lang="scss">
- @import './dataInfo.scss'
+@import "./dataInfo.scss";
 </style>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików