Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
exhibition_backstage
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
龙菲
exhibition_backstage
Commits
212abb71
提交
212abb71
authored
6月 14, 2022
作者:
龙菲
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更换菜单图标
上级
02675e8e
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
1134 行增加
和
580 行删除
+1134
-580
culturalRelic.js
src/api/culturalRelic.js
+9
-0
boutique.svg
src/icons/svg/boutique.svg
+3
-2
culturalRelic.svg
src/icons/svg/culturalRelic.svg
+3
-2
display.svg
src/icons/svg/display.svg
+3
-2
literature.svg
src/icons/svg/literature.svg
+3
-2
log.svg
src/icons/svg/log.svg
+3
-2
museum.svg
src/icons/svg/museum.svg
+3
-0
virtual.svg
src/icons/svg/virtual.svg
+3
-2
index.js
src/router/index.js
+16
-3
upload.js
src/utils/upload.js
+44
-0
InfoEditDialog.vue
src/views/culturalRelic/components/InfoEditDialog.vue
+479
-0
index.vue
src/views/culturalRelic/index.vue
+275
-5
complex-table.vue
src/views/display/complex-table.vue
+0
-379
InfoEditDialog.vue
src/views/display/components/InfoEditDialog.vue
+234
-0
index.vue
src/views/display/index.vue
+40
-181
index.vue
src/views/museum/index.vue
+16
-0
没有找到文件。
src/api/culturalRelic.js
浏览文件 @
212abb71
import
request
from
'@/utils/request'
export
function
getList
(
params
)
{
return
request
({
url
:
'/culturalRelic/getList'
,
method
:
'get'
,
params
})
}
src/icons/svg/boutique.svg
浏览文件 @
212abb71
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"48"
height=
"48"
viewBox=
"0 0 48 48"
xmlns=
"http://www.w3.org/2000/svg"
><rect
width=
"48"
height=
"48"
fill=
"white"
fill-opacity=
"0.01"
/><path
fill-rule=
"evenodd"
clip-rule=
"evenodd"
d=
"M24 8L44 21V44H4L4 21L24 8Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M20 44V23L12 28L12 44"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M28 44V23L36 28L36 44"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M41 44H8"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/></svg>
\ No newline at end of file
<?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=
"1655176596147"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"11932"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"48"
height=
"48"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M512 106.5c54.8 0 107.9 10.7 157.8 31.8 48.3 20.4 91.6 49.7 128.9 86.9s66.5 80.6 86.9 128.9c21.1 50 31.8 103.1 31.8 157.8s-10.7 107.9-31.8 157.8c-20.4 48.3-49.7 91.6-86.9 128.9s-80.6 66.5-128.9 86.9c-50 21.1-103.1 31.8-157.8 31.8s-107.9-10.7-157.8-31.8c-48.3-20.4-91.6-49.7-128.9-86.9s-66.5-80.6-86.9-128.9c-21.1-50-31.8-103.1-31.8-157.8s10.7-107.9 31.8-157.8c20.4-48.3 49.7-91.6 86.9-128.9s80.6-66.5 128.9-86.9c49.9-21.1 103-31.8 157.8-31.8m0-42.5C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64z"
p-id=
"11933"
></path><path
d=
"M737 475.5H287c-6.7 0-12.8-4-15.6-10.1s-1.5-13.4 3-18.3l125.7-137.5c3.2-3.5 7.8-5.5 12.6-5.5h198.6c4.8 0 9.3 2 12.6 5.5L749.6 447c4.5 5 5.7 12.2 3 18.3s-8.9 10.2-15.6 10.2z m-411.4-34h372.8L603.8 338H420.2l-94.6 103.5z"
p-id=
"11934"
></path><path
d=
"M515.8 738s-0.1 0 0 0c-5 0-9.6-2.1-12.8-5.8L274.2 469.7c-4.4-5-5.4-12.1-2.7-18.2 2.8-6.1 8.8-10 15.5-10h450c6.6 0 12.6 3.8 15.4 9.8 2.8 6 1.8 13.1-2.4 18.1l-46.3 55c-6.1 7.2-16.8 8.1-24 2-7.2-6.1-8.1-16.8-2-24l22.7-27h-376l191.5 219.7 111.7-126.5c6.2-7 17-7.7 24-1.5s7.7 17 1.5 24L528.5 732.3c-3.2 3.6-7.8 5.7-12.7 5.7z"
p-id=
"11935"
></path><path
d=
"M515.7 718c-3.7 0-7.1-2-8.8-5.3L375.1 463.1c-1.6-3.1-1.5-6.8 0.3-9.8 1.8-3 5-4.8 8.5-4.8h254.8c3.4 0 6.6 1.8 8.4 4.7s2 6.5 0.5 9.6l-123 249.7c-1.6 3.3-5 5.5-8.8 5.5h-0.1zM400.3 468.4l115.1 217.9 107.3-217.9H400.3z"
p-id=
"11936"
></path><path
d=
"M383.8 470.2c-1.5 0-3.1-0.4-4.5-1.1-4-2-6.1-6.5-5.2-10.9l28.8-138c1-4.6 5-7.9 9.6-7.9l98.6-0.8c4 0 7.5 2.3 9.1 5.9s0.9 7.8-1.8 10.7L391.1 466.9c-1.9 2.1-4.6 3.3-7.3 3.3z m37-138.1L401 426.9l87.6-95.4-67.8 0.6z"
p-id=
"11937"
></path><path
d=
"M638.6 472.9c-2.7 0-5.4-1.1-7.4-3.3L503.9 328.1c-2.6-2.9-3.3-7.1-1.7-10.7 1.6-3.6 5.1-5.9 9-5.9l100.1-0.4c4.8 0 8.8 3.4 9.7 8l27.3 142c0.8 4.4-1.3 8.8-5.3 10.8-1.4 0.7-2.9 1-4.4 1zM533.4 331.3l88.7 98.6-19-98.9-69.7 0.3z"
p-id=
"11938"
></path></svg>
\ No newline at end of file
src/icons/svg/culturalRelic.svg
浏览文件 @
212abb71
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"48"
height=
"48"
viewBox=
"0 0 48 48"
xmlns=
"http://www.w3.org/2000/svg"
><rect
width=
"48"
height=
"48"
fill=
"white"
fill-opacity=
"0.01"
/><path
d=
"M14.0139 27.7553L4.02783 24.5106C5.39825 20.2929 8.06873 16.6173 11.6565 14.0106C15.2443 11.404 19.5653 10 24 10C28.4348 10 32.7557 11.404 36.3435 14.0106C39.9313 16.6173 42.6018 20.2929 43.9722 24.5106L33.9861 27.7553M14.0139 27.7553C14.6991 25.6465 16.0344 23.8087 17.8283 22.5053M14.0139 27.7553L24 31M17.8283 22.5053C19.6222 21.202 21.7826 20.5 24 20.5M17.8283 22.5053L24 31M24 20.5C26.2174 20.5 28.3779 21.202 30.1718 22.5053M24 20.5V31M30.1718 22.5053C31.9657 23.8087 33.3009 25.6465 33.9861 27.7553M30.1718 22.5053L24 31M33.9861 27.7553L24 31M24 31V36"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/></svg>
\ No newline at end of file
<?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=
"1655176589452"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"11651"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"48"
height=
"48"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M508.7 897.6h-1c-12.7 0-25.5-0.8-38-2.2-54.1-6.4-76.7-12.9-84.7-15.8-0.3-0.1-0.6-0.4-0.8-0.7-4.1-6.5-12-20-23.3-43.1-10.3-21.2-26.1-55.8-42.5-100.4-16-43.4-28.7-85.6-37.7-125.5-10.5-46.4-15.9-88.6-15.9-125.5 0-22.4 26.4-54.6 49.8-83 31.6-38.4 64.2-78.2 64.2-126 0-14.1-1.8-26.8-4.8-38.5-0.2-0.9 0.3-1.8 1.2-2 40.9-10.1 106.1-13.1 132.6-13.5 26.5 0.3 91.6 3.3 132.6 13.5 0.9 0.2 1.4 1.1 1.2 2-3 11.6-4.8 24.4-4.8 38.5 0 47.8 32.7 87.6 64.2 126 23.3 28.4 49.8 60.6 49.8 83 0 34.1-4.6 72.7-13.6 115-0.2 1 0.6 2 1.6 2h45.6c0.8 0 1.5-0.6 1.7-1.4 7.9-39.1 12.7-78.4 12.7-115.6 0-76-114-145-114-209s54-92 54-133c0-64-214.6-63.9-231-64-16.4 0.1-231 0-231 64 0 41 54 69 54 133s-114 133-114 209c0 180 113 409 135 431 13.7 13.7 70.9 22.7 112.4 27.6 14.3 1.7 28.6 2.5 43 2.6l1.7-1.7v-46.3zM329.1 151.8c-0.5-0.9-0.2-2 0.8-2.4 11.4-5 35-12.5 80.9-17.7 29.1-3.3 62.3-5.1 96.1-5.3h1.6c33.7 0.2 67 2 96.1 5.3 46 5.2 69.6 12.7 80.9 17.7 0.9 0.4 1.3 1.5 0.8 2.4-2.7 4.5-6.1 9.6-9.8 14.9-4.7 6.9-9.9 14.5-14.9 23-0.4 0.7-1.2 1-1.9 0.8-53.4-15.1-138.1-16.8-151.2-17h-1.6c-13.1 0.2-97.8 1.9-151.2 17-0.7 0.2-1.5-0.1-1.9-0.8-5-8.5-10.2-16.1-14.9-23-3.7-5.4-7.2-10.5-9.8-14.9z"
p-id=
"11652"
></path><path
d=
"M806.3 768.8l-16-27.7c-2.2-3.8-7.1-5.1-10.9-2.9l-22 12.7c-0.6 0.4-1.4 0.3-2-0.2-8.9-8.2-19.6-14.5-31.5-18.2-0.7-0.2-1.2-0.9-1.2-1.6v-31.8c0-0.9-0.8-1.7-1.7-1.7h-44.6c-0.9 0-1.7 0.8-1.7 1.7v31.8c0 0.7-0.5 1.4-1.2 1.6-11.8 3.7-22.6 10-31.5 18.2-0.5 0.5-1.3 0.6-2 0.2l-22-12.7c-3.8-2.2-8.7-0.9-10.9 2.9l-16 27.7c-2.2 3.8-0.9 8.7 2.9 10.9l23.1 13.3c-1.5 6.2-2.3 12.7-2.3 19.4s0.8 13.2 2.3 19.4L594 845.1c-3.8 2.2-5.1 7.1-2.9 10.9l16 27.7c2.2 3.8 7.1 5.1 10.9 2.9l23.1-13.4c9.1 8.6 20.1 15.2 32.4 19 0.7 0.2 1.2 0.9 1.2 1.6v31.8c0 0.9 0.8 1.7 1.7 1.7H721c0.9 0 1.7-0.8 1.7-1.7V894c0-0.7 0.5-1.4 1.2-1.6 11.8-3.7 22.5-10 31.5-18.2 0.5-0.5 1.3-0.6 2-0.2l22 12.7c3.8 2.2 8.7 0.9 10.9-2.9l16-27.7c2.2-3.8 0.9-8.7-2.9-10.9l-22-12.7c-0.6-0.4-1-1.1-0.8-1.8 1.3-5.9 2-11.9 2-18.2 0-6.2-0.7-12.3-2-18.2-0.2-0.7 0.2-1.5 0.8-1.8l22-12.7c3.8-2.3 5.1-7.2 2.9-11z m-72.2 49.3l-0.3 1.8c-0.3 1.3-0.6 2.5-1 3.7-1.5 4.7-4 8.9-7.2 12.5-0.9 1-1.8 2-2.8 2.9-2.3 2.1-4.9 3.9-7.7 5.3-1.1 0.6-2.3 1.1-3.5 1.5l-1.8 0.6c-1.7 0.6-3.5 1-5.4 1.3s-3.7 0.4-5.7 0.4c-1 0-1.9 0-2.9-0.1-2.8-0.2-5.6-0.8-8.2-1.6-4.9-1.6-9.3-4.2-13-7.5-2.8-2.5-5.1-5.4-7-8.6-1.4-2.4-2.5-5-3.3-7.7-0.3-0.9-0.5-1.8-0.7-2.8-0.1-0.7-0.3-1.4-0.4-2-0.2-1.2-0.3-2.3-0.4-3.5 0-0.6-0.1-1.3-0.1-1.9s0-1.3 0.1-1.9c0.1-1.3 0.2-2.5 0.4-3.7l0.3-1.8c0.6-2.8 1.5-5.5 2.7-8 1.6-3.4 3.8-6.5 6.3-9.1 0.6-0.7 1.3-1.3 2-1.9 3.7-3.3 8.1-5.9 12.9-7.5 1.7-0.6 3.5-1 5.4-1.3 0.5-0.1 0.9-0.1 1.4-0.2 1.4-0.2 2.8-0.3 4.3-0.3 1.4 0 2.8 0.1 4.1 0.2l1.8 0.3c1.8 0.3 3.5 0.7 5.1 1.2 2.4 0.8 4.7 1.8 6.9 3.1s4.2 2.7 6 4.4c1.4 1.2 2.7 2.6 3.8 4 2.3 2.9 4.2 6.1 5.6 9.6 0.7 1.8 1.2 3.6 1.6 5.5l0.3 1.8c0.3 1.8 0.4 3.7 0.4 5.6 0.4 2 0.2 3.8 0 5.7z"
p-id=
"11653"
></path></svg>
\ No newline at end of file
src/icons/svg/display.svg
浏览文件 @
212abb71
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"48"
height=
"48"
viewBox=
"0 0 48 48"
xmlns=
"http://www.w3.org/2000/svg"
><path
d=
"M20 8L24 4L28 8V44H20V8Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linejoin=
"round"
/><path
d=
"M12 20L20 12V44H12V20Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M4 35L12 28V44H4V35Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M28 12L36 20V44H28V12Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M36 28L44 34.5V44H36V28Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/></svg>
\ No newline at end of file
<?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=
"1655176583977"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"11507"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"48"
height=
"48"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M900.9 953H123.1c-47 0-85.1-38.2-85.1-85.1V588.1c0-11.2 9.1-20.3 20.3-20.3s20.3 9.1 20.3 20.3v279.8c0 24.5 19.9 44.5 44.5 44.5h777.8c24.5 0 44.5-19.9 44.5-44.5V428.7c0-24.5-19.9-44.5-44.5-44.5H123.1c-24.5 0-44.5 19.9-44.5 44.5v73.2c0 11.2-9.1 20.3-20.3 20.3S38 513.1 38 501.9v-73.2c0-46.9 38.2-85.1 85.1-85.1h777.8c46.9 0 85.1 38.2 85.1 85.1V868c0 46.8-38.2 85-85.1 85z"
p-id=
"11508"
></path><path
d=
"M796.5 384.2c-5 0-10-1.8-13.9-5.5l-221.7-209c-8.2-7.7-8.5-20.6-0.8-28.7 7.7-8.2 20.5-8.5 28.7-0.8l221.7 209c8.2 7.7 8.5 20.6 0.8 28.7-4 4.2-9.4 6.3-14.8 6.3zM227.5 384.2c-5.4 0-10.8-2.1-14.8-6.4-7.7-8.2-7.3-21 0.8-28.7l216.4-204c8.2-7.7 21-7.3 28.7 0.8 7.7 8.2 7.3 21-0.8 28.7l-216.4 204c-3.9 3.8-8.9 5.6-13.9 5.6z"
p-id=
"11509"
></path><path
d=
"M512 223.9c-41.8 0-75.8-34-75.8-75.8s34-75.8 75.8-75.8 75.8 34 75.8 75.8-34 75.8-75.8 75.8z m0-116.2c-22.2 0-40.3 18.1-40.3 40.3s18.1 40.3 40.3 40.3c22.2 0 40.3-18.1 40.3-40.3s-18.1-40.3-40.3-40.3zM58.3 816.7c-6.9 0-13.7-3.6-17.5-10-5.7-9.6-2.5-22.1 7.1-27.8l303.8-180.3c9.6-5.7 22.1-2.5 27.8 7.1 5.7 9.6 2.5 22.1-7.1 27.8L68.6 813.9c-3.2 1.9-6.8 2.8-10.3 2.8z"
p-id=
"11510"
></path><path
d=
"M569.9 811.7c-4.6 0-9.3-1.6-13.1-4.8L349 631.6c-8.6-7.2-9.7-20-2.4-28.6 7.2-8.6 20-9.7 28.6-2.4L583 775.8c8.6 7.2 9.7 20 2.4 28.6-4 4.8-9.8 7.3-15.5 7.3z"
p-id=
"11511"
></path><path
d=
"M429.9 953c-5.3 0-10.7-2.1-14.7-6.3-7.8-8.1-7.5-21 0.6-28.7l239-229c8.1-7.8 21-7.5 28.7 0.6 7.8 8.1 7.5 21-0.6 28.7l-239 229c-3.9 3.8-9 5.7-14 5.7z"
p-id=
"11512"
></path><path
d=
"M874.6 953c-5.6 0-11.1-2.3-15.1-6.7l-205.7-229c-7.5-8.3-6.8-21.2 1.5-28.7s21.2-6.8 28.7 1.5l205.7 229c7.5 8.3 6.8 21.2-1.5 28.7-3.9 3.5-8.8 5.2-13.6 5.2zM783.4 651.5c-40.6 0-73.6-33-73.6-73.6 0-40.6 33-73.6 73.6-73.6 40.6 0 73.6 33 73.6 73.6-0.1 40.6-33.1 73.6-73.6 73.6z m0-111.6c-21 0-38 17.1-38 38 0 21 17.1 38 38 38 21 0 38-17.1 38-38s-17.1-38-38-38z"
p-id=
"11513"
></path></svg>
\ No newline at end of file
src/icons/svg/literature.svg
浏览文件 @
212abb71
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"48"
height=
"48"
viewBox=
"0 0 48 48"
xmlns=
"http://www.w3.org/2000/svg"
><path
d=
"M32 6H22V42H32V6Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linejoin=
"round"
/><path
d=
"M42 6H32V42H42V6Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linejoin=
"round"
/><path
d=
"M10 6L18 7L14.5 42L6 41L10 6Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linejoin=
"round"
/><path
d=
"M37 18V15"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M27 18V15"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/></svg>
\ No newline at end of file
<?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=
"1655176511843"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"11306"
width=
"48"
height=
"48"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M718.3 202.9H158.5c-36.4 0-66 29.6-66 66V896c0 36.4 29.6 66 66 66h559.8c36.4 0 66-29.6 66-66V268.9c0-36.4-29.6-66-66-66z m-4 689H162.5v-619h551.7v619z"
p-id=
"11307"
></path><path
d=
"M872.1 65.1H414.4v70H868v609.1h70V131.1c0-36.4-29.6-66-65.9-66z"
p-id=
"11308"
></path><path
d=
"M256.6 726.2l-32.5 3.9 24.1 22.1c13.9 12.7 18.1 21.2 19.2 26l3.5 15.4 15.2-4.3c61.8-17.4 116.2-44.2 162-80 32.5 24.1 63.6 41.8 92.6 52.5 31.4 11.6 56.3 19.5 76.2 24.2l11.6 2.7 5.3-10.6c6.8-13.7 14.5-23.9 22.8-30.4l30.2-23.5-38.1-3.3c-24.7-2.2-54.3-9-87.8-20.4-27.1-9.2-50-20.7-68.2-34.4 14-18 27.3-39.8 39.7-64.9 13.4-27.4 23.4-57.3 29.5-88.8 29.4 0.1 56.8 0.7 81.6 1.7l15.6 0.6V448l-15.6 0.6c-27.7 1.1-51.9 1.7-72.1 1.7h-78.7l-6.4-11.1c-16.8-29.2-31.8-53.9-44.4-73.4l-9-14-13 10.4c-12 9.6-19.4 13-23.5 14.2l-19.5 5.6 11 17c9.1 14.1 19.3 31.3 30.5 51.3h-87.2c-21.3 0-45-0.6-70.4-1.7l-15.7-0.7v68.3l17-2.3c16.3-2.2 36.1-3.3 58.9-3.3h5c16.1 65.5 41.2 118.5 74.9 157.8-19.7 15.4-42.8 27.9-68.9 37.2-31.9 11.6-57.3 18.5-75.4 20.6z m134.7-213.7h104.4c-9 41-25.9 78.7-50.6 112.4-26.7-31-44.8-68.7-53.8-112.4z"
p-id=
"11309"
></path></svg>
\ No newline at end of file
src/icons/svg/log.svg
浏览文件 @
212abb71
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"48"
height=
"48"
viewBox=
"0 0 48 48"
xmlns=
"http://www.w3.org/2000/svg"
><rect
width=
"48"
height=
"48"
fill=
"white"
fill-opacity=
"0.01"
/><rect
x=
"13"
y=
"10"
width=
"28"
height=
"34"
stroke=
"#333"
stroke-width=
"2"
stroke-linejoin=
"round"
/><path
d=
"M35 10V4H8C7.44772 4 7 4.44772 7 5V38H13"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M21 22H33"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
d=
"M21 30H33"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/></svg>
\ No newline at end of file
<?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=
"1655176592521"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"11791"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"48"
height=
"48"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M269.844659 81.4308h44.821057v166.626082h-44.821057zM677.140966 491.719232c52.335426 0 102.092273 19.937769 140.105639 56.13883 38.126482 36.31053 60.461599 85.284073 62.891788 137.900467 2.5056 54.276658-16.27424 106.280032-52.881549 146.431672-36.60731 40.15164-86.65972 63.643469-140.936379 66.150285-3.180653 0.147174-6.401444 0.221369-9.576016 0.221369-52.341508 0-102.102004-19.936552-140.114153-56.136398-38.126482-36.309314-60.461599-85.284073-62.891789-137.902899-2.5056-54.276658 16.27424-106.280032 52.88155-146.431672 36.60731-40.15164 86.65972-63.643469 140.936379-66.149069a208.122961 208.122961 0 0 1 9.576016-0.221369h0.008514m-0.00973-44.822274c-3.859355 0-7.746684 0.088791-11.642528 0.268805-136.951744 6.3236-242.847422 122.470346-236.525038 259.422091 6.143586 133.0559 115.942406 236.793842 247.779562 236.793842 3.859355 0 7.747901-0.088791 11.642529-0.268804 136.951744-6.322384 242.847422-122.470346 236.525037-259.422091-6.143586-133.057117-115.942406-236.798708-247.779562-236.793843z"
p-id=
"11792"
></path><path
d=
"M490.264524 891.110734a272.361206 272.361206 0 0 1-32.682275-37.369937H180.453104c-20.912034 0-37.927007-17.013757-37.927007-37.92579v-590.263526c0-20.912034 17.013757-37.927007 37.927007-37.927007H732.799354c20.912034 0 37.925791 17.013757 37.925791 37.927007V441.15597a268.605238 268.605238 0 0 1 44.821057 21.463023V225.551481c0-45.70045-37.047614-82.746848-82.746848-82.746849H180.453104c-45.70045 0-82.746848 37.047614-82.746848 82.746849v590.263526c0 45.70045 37.047614 82.746848 82.746848 82.746848h317.980164a273.587248 273.587248 0 0 1-8.168744-7.451121z"
p-id=
"11793"
></path><path
d=
"M770.725145 489.61623a225.243754 225.243754 0 0 1 44.821057 27.231985v-0.21407a225.182938 225.182938 0 0 0-44.821057-27.114003v0.096088zM812.590566 778.530212H646.820768V576.105667h44.821057v157.604704h120.948741zM209.55091 380.121489h498.255687v44.821057H209.55091zM600.682445 81.4308h44.821058v166.626082h-44.821058zM406.842623 712.17437H209.55091v44.821057h203.864657a272.351476 272.351476 0 0 1-6.572944-44.821057zM450.941192 546.147929H209.55091v44.821057h217.435038a268.707408 268.707408 0 0 1 23.955244-44.821057z"
p-id=
"11794"
></path></svg>
\ No newline at end of file
src/icons/svg/museum.svg
0 → 100644
浏览文件 @
212abb71
<?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=
"1655176599098"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"12076"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"48"
height=
"48"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M855.466667 392.533333H168.533333c-29.866667 0-53.333333-23.466667-53.333333-53.333333 0-17.066667 8.533333-34.133333 23.466667-44.8l294.4-204.8c46.933333-34.133333 110.933333-34.133333 160 0l294.4 204.8c23.466667 17.066667 29.866667 49.066667 12.8 74.666667-10.666667 14.933333-27.733333 23.466667-44.8 23.466666z m-6.4-44.8z m-646.4-19.2h618.666666L554.666667 142.933333c-25.6-17.066667-59.733333-17.066667-85.333334 0L202.666667 328.533333zM857.6 960H166.4c-53.333333 0-96-42.666667-96-96v-21.333333c0-53.333333 42.666667-96 96-96h691.2c53.333333 0 96 42.666667 96 96v21.333333c0 53.333333-42.666667 96-96 96zM166.4 808.533333c-17.066667 0-32 14.933333-32 32v21.333334c0 17.066667 12.8 32 29.866667 32h693.333333c17.066667 0 32-14.933333 32-32v-23.466667c0-17.066667-14.933333-32-32-32H166.4z"
p-id=
"12077"
></path><path
d=
"M204.8 780.8c-17.066667 0-32-14.933333-32-32v-362.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v362.666667c0 17.066667-14.933333 32-32 32zM819.2 780.8c-17.066667 0-32-14.933333-32-32v-362.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v362.666667c0 17.066667-14.933333 32-32 32zM450.133333 789.333333c-17.066667 0-32-14.933333-32-32v-362.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v362.666666c0 19.2-12.8 32-32 32zM573.866667 789.333333c-17.066667 0-32-14.933333-32-32v-362.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v362.666666c0 19.2-14.933333 32-32 32zM695.466667 789.333333c-17.066667 0-32-14.933333-32-32v-362.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v362.666666c0 19.2-12.8 32-32 32zM328.533333 789.333333c-17.066667 0-32-14.933333-32-32v-362.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v362.666666c0 19.2-14.933333 32-32 32z"
p-id=
"12078"
></path></svg>
\ No newline at end of file
src/icons/svg/virtual.svg
浏览文件 @
212abb71
<?xml version="1.0" encoding="UTF-8"?>
<svg
width=
"48"
height=
"48"
viewBox=
"0 0 48 48"
xmlns=
"http://www.w3.org/2000/svg"
><rect
width=
"48"
height=
"48"
fill=
"white"
fill-opacity=
"0.01"
/><path
fill-rule=
"evenodd"
clip-rule=
"evenodd"
d=
"M2 12H46V36H30L24 30L18 36H2V12Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
fill-rule=
"evenodd"
clip-rule=
"evenodd"
d=
"M13 28C15.2091 28 17 26.2091 17 24C17 21.7909 15.2091 20 13 20C10.7909 20 9 21.7909 9 24C9 26.2091 10.7909 28 13 28Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/><path
fill-rule=
"evenodd"
clip-rule=
"evenodd"
d=
"M35 28C37.2091 28 39 26.2091 39 24C39 21.7909 37.2091 20 35 20C32.7909 20 31 21.7909 31 24C31 26.2091 32.7909 28 35 28Z"
stroke=
"#333"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/></svg>
\ No newline at end of file
<?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=
"1655176742823"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"12216"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"48"
height=
"48"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M957.44 326.656c-8.192-53.248-52.224-95.232-105.472-101.376-234.496-27.648-443.392-27.648-678.912 0-53.248 7.168-97.28 49.152-105.472 101.376C56.32 388.096 51.2 450.56 51.2 512c0 61.44 5.12 121.856 15.36 183.296 10.24 54.272 53.248 95.232 106.496 101.376 62.464 8.192 104.448 12.288 128 14.336h8.192c43.008 0 79.872-39.936 115.712-78.848 28.672-30.72 61.44-66.56 86.016-66.56s57.344 34.816 86.016 66.56c37.888 40.96 76.8 82.944 121.856 78.848 21.504-2.048 64.512-6.144 131.072-14.336 55.296-7.168 98.304-48.128 106.496-101.376 10.24-62.464 15.36-121.856 15.36-183.296 1.024-62.464-4.096-124.928-14.336-185.344z m-40.96 361.472c-6.144 35.84-34.816 62.464-71.68 67.584-64.512 8.192-108.544 12.288-128 14.336h-2.048c-24.576 0-57.344-34.816-86.016-66.56C591.872 664.576 555.008 624.64 512 624.64s-79.872 39.936-115.712 78.848c-29.696 31.744-63.488 68.608-88.064 66.56h-3.072c-22.528-2.048-65.536-6.144-126.976-14.336-35.84-4.096-64.512-31.744-71.68-68.608C97.28 628.736 92.16 571.392 92.16 512c0-59.392 5.12-118.784 15.36-178.176 5.12-34.816 34.816-62.464 70.656-67.584C409.6 238.592 614.4 238.592 846.848 266.24c35.84 4.096 64.512 31.744 70.656 66.56 10.24 59.392 15.36 118.784 15.36 178.176-1.024 59.392-6.144 116.736-16.384 177.152zM711.68 358.4C641.024 358.4 583.68 415.744 583.68 486.4S641.024 614.4 711.68 614.4 839.68 557.056 839.68 486.4 782.336 358.4 711.68 358.4z m0 215.04c-48.128 0-87.04-38.912-87.04-87.04s38.912-87.04 87.04-87.04 87.04 38.912 87.04 87.04-38.912 87.04-87.04 87.04z m-399.36-215.04C241.664 358.4 184.32 415.744 184.32 486.4S241.664 614.4 312.32 614.4 440.32 557.056 440.32 486.4 382.976 358.4 312.32 358.4z m0 215.04c-48.128 0-87.04-38.912-87.04-87.04s38.912-87.04 87.04-87.04 87.04 38.912 87.04 87.04-38.912 87.04-87.04 87.04z"
p-id=
"12217"
></path></svg>
\ No newline at end of file
src/router/index.js
浏览文件 @
212abb71
...
...
@@ -71,7 +71,7 @@ export const constantRoutes = [{
}]
},
{
path
:
'/
精品展管理
'
,
path
:
'/
boutique
'
,
component
:
Layout
,
children
:
[{
path
:
'boutique'
,
...
...
@@ -84,18 +84,31 @@ export const constantRoutes = [{
}]
},
{
path
:
'/
文物展管理
'
,
path
:
'/
culturalRelic
'
,
component
:
Layout
,
children
:
[{
path
:
'culturalRelic'
,
name
:
'CulturalRelic'
,
component
:
()
=>
import
(
'@/views/culturalRelic/index'
),
meta
:
{
title
:
'文物
展
管理'
,
title
:
'文物管理'
,
icon
:
'culturalRelic'
}
}]
},
{
path
:
'/museum'
,
component
:
Layout
,
children
:
[{
path
:
'museum'
,
name
:
'Museum'
,
component
:
()
=>
import
(
'@/views/museum/index'
),
meta
:
{
title
:
'博物馆管理'
,
icon
:
'museum'
}
}]
},
{
path
:
'/virtual'
,
component
:
Layout
,
...
...
src/utils/upload.js
0 → 100644
浏览文件 @
212abb71
import
axios
from
'axios'
import
{
getToken
}
from
'@/utils/auth'
/**
* 封装上传文件的post方法
* @param url
* @param data
* @returns {Promise}
*/
export
function
upload
(
url
,
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
axios
.
post
(
url
,
data
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
,
'Authorization'
:
'Bearer '
+
getToken
(),
}
}).
then
(
response
=>
{
resolve
(
response
)
}).
catch
(
error
=>
{
reject
(
error
)
})
})
}
/**
* 封装文件上传的put方法
* @param url
* @param data
* @returns {Promise}
*/
export
function
uploadPut
(
url
,
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
axios
.
put
(
url
,
data
,
{
headers
:
{
'Content-Type'
:
'multipart/form-data'
,
'Authorization'
:
'Bearer '
+
getToken
(),
}
}).
then
(
response
=>
{
resolve
(
response
)
}).
catch
(
error
=>
{
reject
(
error
)
})
})
}
src/views/culturalRelic/components/InfoEditDialog.vue
0 → 100644
浏览文件 @
212abb71
<
template
>
<el-dialog
:title=
"title"
:visible
.
sync=
"dialogVisible"
width=
"80%"
style=
"height: 98%"
:before-close=
"handleClose"
top=
"5vh"
lock-scroll
>
<div
class=
"dialog-content"
>
<div
class=
"basic-info"
>
<el-form
:model=
"form"
:rules=
"rules"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"文物名称"
:label-width=
"formLabelWidth"
prop=
"name"
>
<el-input
v-model=
"form.name"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"年代"
:label-width=
"formLabelWidth"
prop=
"years"
>
<!--
<el-input
v-model=
"form.years"
autocomplete=
"off"
></el-input>
-->
<el-select
v-model=
"form.years"
placeholder=
"请选择"
style=
"width: 100%"
>
<el-option
v-for=
"item in yearDit"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"类别"
:label-width=
"formLabelWidth"
prop=
"type"
>
<!--
<el-input
v-model=
"form.type"
autocomplete=
"off"
></el-input>
-->
<el-select
v-model=
"form.type"
placeholder=
"请选择"
style=
"width: 100%"
>
<el-option
v-for=
"item in typeDit"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"级别"
:label-width=
"formLabelWidth"
prop=
"level"
>
<!--
<el-input
v-model=
"form.level"
autocomplete=
"off"
></el-input>
-->
<el-select
v-model=
"form.level"
placeholder=
"请选择"
style=
"width: 100%"
>
<el-option
v-for=
"item in levelDit"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"质地"
:label-width=
"formLabelWidth"
prop=
"texture"
>
<el-input
v-model=
"form.texture"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"尺寸"
:label-width=
"formLabelWidth"
prop=
"size"
>
<el-input
v-model=
"form.size"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"馆藏单位"
:label-width=
"formLabelWidth"
prop=
"unit"
>
<el-input
v-model=
"form.unit"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"文物简介"
:label-width=
"formLabelWidth"
prop=
"intro"
>
<el-input
v-model=
"form.intro"
autocomplete=
"off"
type=
"textarea"
:rows=
"4"
></el-input>
</el-form-item>
<el-form-item
label=
"相关研究"
:label-width=
"formLabelWidth"
>
<!--
<el-input
v-model=
"form.research"
autocomplete=
"off"
></el-input>
-->
<!--
<el-autocomplete
style=
"width: 100%"
v-model=
"form.research"
:fetch-suggestions=
"querySearchAsync"
placeholder=
"请输入相关文献关键词"
@
select=
"handleSelect"
></el-autocomplete>
-->
<el-input
placeholder=
"请输入内容"
v-model=
"newResearch"
class=
"input-with-select"
>
<el-button
slot=
"append"
icon=
"el-icon-search"
></el-button>
</el-input>
<!--
<el-button
type=
"primary"
>
添加关联
</el-button>
-->
<div
class=
"research-group"
v-if=
"form.research"
>
<div
class=
"research-item"
>
<div
class=
"file"
>
<i
class=
"el-icon-document"
style=
"margin-right: 10px"
></i>
<span>
文献1
</span>
</div>
<div
class=
"delete"
>
<i
class=
"el-icon-close"
></i>
</div>
</div>
<div
class=
"research-item"
>
<div
class=
"file"
>
<i
class=
"el-icon-document"
style=
"margin-right: 10px"
></i>
<span>
文献1
</span>
</div>
<div
class=
"delete"
>
<i
class=
"el-icon-close"
></i>
</div>
</div>
</div>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"文物图片"
:label-width=
"formLabelWidth"
>
<el-upload
action=
"#"
list-type=
"picture-card"
:auto-upload=
"false"
multiple
:file-list=
"imgsList"
>
<i
slot=
"default"
class=
"el-icon-plus"
></i>
<div
slot=
"file"
slot-scope=
"
{ file }">
<img
class=
"el-upload-list__item-thumbnail"
:src=
"file.url"
alt=
""
/>
<span
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"handlePictureCardPreview(file)"
>
<i
class=
"el-icon-zoom-in"
></i>
</span>
<span
class=
"el-upload-list__item-delete"
@
click=
"handleRemove(file)"
>
<i
class=
"el-icon-delete"
></i>
</span>
</span>
</div>
</el-upload>
</el-form-item>
<el-form-item
label=
"文物音频"
:label-width=
"formLabelWidth"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
multiple
:limit=
"3"
:file-list=
"audioList"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
</el-upload>
</el-form-item>
<el-form-item
label=
"文物视频"
:label-width=
"formLabelWidth"
>
<div
class=
"video-lists"
>
<div
class=
"video-item upload-box"
>
<i
class=
"el-icon-video-play"
></i>
</div>
<div
class=
"video-item upload-box"
>
<i
class=
"el-icon-plus"
></i>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div
class=
"dialog-footer"
>
<el-button
@
click=
"cancelForm"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"$refs.drawer.closeDrawer()"
:loading=
"loading"
>
{{
loading
?
"提交中 ..."
:
buttonText
}}
<i
class=
"el-icon-right"
style=
"margin-left:4px"
></i
></el-button>
</div>
</div>
</el-dialog>
</
template
>
<
script
>
export
default
{
name
:
"InfoEditDialog"
,
props
:
{
visible
:
{
type
:
Boolean
,
default
:
false
,
},
form
:
{
type
:
Object
,
default
:
()
=>
({}),
},
cascaderOptions
:
{
type
:
Array
,
default
:
()
=>
[],
},
},
watch
:
{
"form.imgs"
:
{
handler
:
function
(
value
)
{
if
(
value
)
{
if
(
value
.
indexOf
(
","
)
!=
-
1
)
{
this
.
imgsList
=
[];
var
imgs
=
value
.
split
(
","
);
imgs
.
forEach
((
img
)
=>
{
var
obj
=
{
name
:
""
,
url
:
imgs
,
};
this
.
imgsList
.
push
(
obj
);
});
}
else
{
this
.
imgsList
=
[{
name
:
value
,
url
:
value
}];
}
}
else
{
this
.
imgsList
=
[];
}
},
immediate
:
true
,
},
"form.audios"
:
{
handler
:
function
(
value
)
{
if
(
value
)
{
if
(
value
.
indexOf
(
","
)
!=
-
1
)
{
this
.
audioList
=
[];
var
audios
=
value
.
split
(
","
);
audios
.
forEach
((
audio
)
=>
{
var
obj
=
{
name
:
""
,
url
:
audio
,
};
this
.
audioList
.
push
(
obj
);
});
}
else
{
this
.
audioList
=
[{
name
:
value
,
url
:
value
}];
}
}
else
{
this
.
audioList
=
[];
}
},
immediate
:
true
,
},
},
computed
:
{
dialogVisible
:
{
get
:
function
()
{
return
this
.
visible
;
},
set
:
function
()
{},
},
buttonText
()
{
if
(
this
.
form
.
id
)
{
return
"确定修改"
;
}
else
{
return
"去发布"
;
}
},
title
()
{
if
(
this
.
form
.
id
)
{
return
"修改信息"
;
}
else
{
return
"新增发布"
;
}
},
},
data
()
{
return
{
formLabelWidth
:
"100px"
,
loading
:
false
,
yearDit
:
[
{
label
:
"年代1"
,
value
:
1
},
{
label
:
"年代2"
,
value
:
2
},
],
typeDit
:
[{
label
:
"类别1"
,
value
:
1
}],
levelDit
:
[{
label
:
"级别1"
,
value
:
1
}],
rules
:
{
name
:
[
{
required
:
true
,
message
:
"请输入名称"
,
trigger
:
"blur"
,
},
],
years
:
[
{
required
:
true
,
message
:
"请输入年代"
,
trigger
:
"blur"
,
},
],
level
:
[
{
required
:
true
,
message
:
"请输入级别"
,
trigger
:
"blur"
,
},
],
texture
:
[
{
required
:
true
,
message
:
"请输入质地"
,
trigger
:
"blur"
,
},
],
size
:
[
{
required
:
true
,
message
:
"请输入尺寸"
,
trigger
:
"blur"
,
},
],
unit
:
[
{
required
:
true
,
message
:
"请输入馆藏单位"
,
trigger
:
"blur"
,
},
],
intro
:
[
{
required
:
true
,
message
:
"请输入文物简介"
,
trigger
:
"blur"
,
},
],
},
imgsList
:
[],
audioList
:
[],
videos
:
[],
newResearch
:
""
,
};
},
methods
:
{
handlePreview
(
file
)
{
console
.
log
(
file
);
},
handleRemove
(
file
,
fileList
)
{
console
.
log
(
file
,
fileList
);
},
// 取消编辑
cancelForm
()
{},
handleClose
(
done
)
{
this
.
$confirm
(
"确认关闭?"
)
.
then
((
_
)
=>
{
done
();
this
.
$emit
(
"handleClose"
);
})
.
catch
((
_
)
=>
{});
},
// 相关文献远程搜索方法
querySearchAsync
()
{},
},
};
</
script
>
<
style
lang=
'scss'
scoped
>
.dialog-content
{
padding
:
0
32px
;
// display: flex;
.basic-info
{
flex
:
1
;
margin-right
:
48px
;
}
.relate
{
flex
:
1
;
}
.dialog-footer
{
display
:
flex
;
justify-content
:
flex-end
;
}
.title
{
display
:
flex
;
margin-bottom
:
16px
;
.divider
{
width
:
8px
;
border-left
:
4px
solid
#409eff
;
margin-right
:
4px
;
}
.label
{
font-weight
:
bold
;
}
}
}
.upload-box
{
background-color
:
#fbfdff
;
border
:
1px
dashed
#c0ccda
;
border-radius
:
6px
;
-webkit-box-sizing
:
border-box
;
box-sizing
:
border-box
;
width
:
148px
;
height
:
148px
;
line-height
:
146px
;
vertical-align
:
top
;
text-align
:
center
;
margin
:
0
8px
8px
0
;
i
{
font-size
:
28px
;
color
:
#8c939d
;
}
}
.video-lists
{
display
:
flex
;
}
.research-group
{
.research-item
{
display
:
flex
;
justify-content
:
space-between
;
padding
:
0
10px
;
transition
:
all
0
.3s
ease
;
&
:hover
{
background-color
:
rgba
(
$color
:
#000000
,
$alpha
:
0
.05
);
}
}
}
</
style
>
\ No newline at end of file
src/views/culturalRelic/index.vue
浏览文件 @
212abb71
<!-- -->
<
template
>
<div>
文物展管理
</div>
<div
class=
"display app-container"
>
<div
class=
"top-bar"
>
<el-form
:inline=
"true"
:model=
"search"
class=
"demo-form-inline"
>
<el-form-item
label=
"文物名称"
>
<el-input
v-model=
"search.name"
placeholder=
"文物名称"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"onSubmitSearch"
>
<i
class=
"el-icon-search"
></i>
查询
</el-button
>
</el-form-item>
</el-form>
<el-button
type=
"primary"
@
click
.
native=
"handleOpenDialog('add')"
>
<i
class=
"el-icon-s-promotion"
></i>
发布
</el-button
>
</div>
<template>
<el-table
ref=
"multipleTable"
:data=
"list.record"
tooltip-effect=
"dark"
style=
"width: 100%"
border
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
prop=
"name"
label=
"文物名称"
width=
"120"
>
</el-table-column>
<el-table-column
prop=
"years"
label=
"年代"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"type"
label=
"类别"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"level"
label=
"级别"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"texture"
label=
"质地"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"size"
label=
"尺寸"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"unit"
label=
"馆藏单位"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"intro"
label=
"文物简介"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"research"
label=
"文物研究"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"relate"
label=
"文物网络"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
show-overflow-tooltip
>
<template
slot-scope=
"scope"
>
<el-popconfirm
:title=
"'是否确定' + getStatusLabel(scope.row.status)"
>
<el-switch
v-model=
"scope.row.status"
@
change=
"handleChangeStatus(scope.row)"
slot=
"reference"
>
</el-switch>
</el-popconfirm>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"300"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
@
click=
"handlePreview(scope.row)"
type=
"primary"
><i
class=
"el-icon-edit"
style=
"margin-right: 4px"
></i
>
预览
</el-button
>
<el-button
size=
"mini"
@
click=
"handleOpenDialog('edit', scope.row)"
type=
"primary"
style=
"margin-right: 10px"
><i
class=
"el-icon-edit"
style=
"margin-right: 4px"
></i
>
编辑
</el-button
>
<el-popconfirm
title=
"确定删除当前文物吗?"
>
<el-button
size=
"mini"
type=
"danger"
@
click=
"handleDelete(scope.row)"
slot=
"reference"
>
<i
class=
"el-icon-delete"
style=
"margin-right: 4px"
></i>
删除
</el-button
>
</el-popconfirm>
</
template
>
</el-table-column>
</el-table>
</template>
<el-pagination
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page=
"list.current"
:page-sizes=
"[100, 200, 300, 400]"
:page-size=
"list.size"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"list.total"
class=
"pagination"
>
</el-pagination>
<InfoEditDialog
:visible=
"drawerVisible"
:form=
"form"
@
handleClose=
"handleClose"
/>
</div>
</template>
<
script
>
import
{
getList
}
from
"@/api/culturalRelic"
;
import
InfoEditDialog
from
"./components/InfoEditDialog"
;
export
default
{
name
:
"culturalRelic"
,
components
:
{
InfoEditDialog
,
},
data
()
{
return
{
multipleSelection
:
[],
pickerOptions
:
{
shortcuts
:
[
{
text
:
"最近一周"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
7
);
picker
.
$emit
(
"pick"
,
[
start
,
end
]);
},
},
{
text
:
"最近一个月"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
30
);
picker
.
$emit
(
"pick"
,
[
start
,
end
]);
},
},
{
text
:
"最近三个月"
,
onClick
(
picker
)
{
const
end
=
new
Date
();
const
start
=
new
Date
();
start
.
setTime
(
start
.
getTime
()
-
3600
*
1000
*
24
*
90
);
picker
.
$emit
(
"pick"
,
[
start
,
end
]);
},
},
],
},
list
:
{
record
:
[],
size
:
10
,
current
:
1
,
total
:
0
,
},
search
:
{
searchTime
:
[
new
Date
(),
new
Date
()],
name
:
""
,
status
:
""
,
},
drawerVisible
:
false
,
isAdd
:
true
,
form
:
{
name
:
""
,
//文物名称
years
:
""
,
//文物年代
type
:
""
,
//文物类别
level
:
""
,
//文物级别
texture
:
""
,
//文物质地
size
:
""
,
//文物尺寸
unit
:
""
,
//文物馆藏单位
intro
:
""
,
//文物简介
research
:
[],
//文物研究
imgs
:
[],
//文物图片
audios
:
[],
//文物音频
videos
:
[],
//文物视频
},
loading
:
false
,
};
},
computed
:
{
getStatusLabel
(
status
)
{
return
(
status
)
=>
{
return
status
?
"上线"
:
"下线"
;
};
},
},
mounted
()
{
this
.
loadData
();
},
methods
:
{
// 加载表格数据
async
loadData
()
{
var
params
=
{
current
:
this
.
list
.
current
,
size
:
this
.
list
.
size
,
};
let
res
=
await
getList
(
params
);
this
.
list
=
res
.
data
;
},
// 选中、反选
toggleSelection
(
rows
)
{
if
(
rows
)
{
rows
.
forEach
((
row
)
=>
{
this
.
$refs
.
multipleTable
.
toggleRowSelection
(
row
);
});
}
else
{
this
.
$refs
.
multipleTable
.
clearSelection
();
}
},
// 多选
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
;
},
// 改变页容量
handleSizeChange
()
{},
// 改变当前显示页
handleCurrentChange
()
{},
// 搜索
onSubmitSearch
()
{
console
.
log
(
"submit!"
);
},
// 点击状态
handleChangeStatus
(
status
)
{
console
.
log
(
"handleChangeStatus"
,
status
);
},
// 打开drawer
handleOpenDialog
(
type
,
value
)
{
this
.
drawerVisible
=
true
;
switch
(
type
)
{
case
"add"
:
console
.
log
(
"新增"
);
this
.
form
=
{};
break
;
case
"edit"
:
console
.
log
(
"编辑"
,
value
);
this
.
form
=
value
;
break
;
}
},
// 关闭Dialog
handleClose
()
{
this
.
drawerVisible
=
false
;
},
// 预览展览
handlePreview
(
data
)
{},
handleDelete
(
value
){
console
.
log
(
'handleDelete'
,
value
);
}
},
};
</
script
>
<
style
>
</
style
>
\ No newline at end of file
<
style
lang=
"scss"
scoped
>
.display
{
.top-bar
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
flex-start
;
}
.pagination
{
margin-top
:
10px
;
}
}
</
style
>
src/views/display/complex-table.vue
deleted
100644 → 0
浏览文件 @
02675e8e
<
template
>
<div
class=
"app-container"
>
<div
class=
"filter-container"
>
<el-input
v-model=
"listQuery.title"
placeholder=
"Title"
style=
"width: 200px;"
class=
"filter-item"
@
keyup
.
enter
.
native=
"handleFilter"
/>
<el-select
v-model=
"listQuery.importance"
placeholder=
"Imp"
clearable
style=
"width: 90px"
class=
"filter-item"
>
<el-option
v-for=
"item in importanceOptions"
:key=
"item"
:label=
"item"
:value=
"item"
/>
</el-select>
<el-select
v-model=
"listQuery.type"
placeholder=
"Type"
clearable
class=
"filter-item"
style=
"width: 130px"
>
<el-option
v-for=
"item in calendarTypeOptions"
:key=
"item.key"
:label=
"item.display_name+'('+item.key+')'"
:value=
"item.key"
/>
</el-select>
<el-select
v-model=
"listQuery.sort"
style=
"width: 140px"
class=
"filter-item"
@
change=
"handleFilter"
>
<el-option
v-for=
"item in sortOptions"
:key=
"item.key"
:label=
"item.label"
:value=
"item.key"
/>
</el-select>
<el-button
v-waves
class=
"filter-item"
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleFilter"
>
Search
</el-button>
<el-button
class=
"filter-item"
style=
"margin-left: 10px;"
type=
"primary"
icon=
"el-icon-edit"
@
click=
"handleCreate"
>
Add
</el-button>
<el-button
v-waves
:loading=
"downloadLoading"
class=
"filter-item"
type=
"primary"
icon=
"el-icon-download"
@
click=
"handleDownload"
>
Export
</el-button>
<el-checkbox
v-model=
"showReviewer"
class=
"filter-item"
style=
"margin-left:15px;"
@
change=
"tableKey=tableKey+1"
>
reviewer
</el-checkbox>
</div>
<el-table
:key=
"tableKey"
v-loading=
"listLoading"
:data=
"list"
border
fit
highlight-current-row
style=
"width: 100%;"
@
sort-change=
"sortChange"
>
<el-table-column
label=
"ID"
prop=
"id"
sortable=
"custom"
align=
"center"
width=
"80"
:class-name=
"getSortClass('id')"
>
<template
slot-scope=
"
{row}">
<span>
{{
row
.
id
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"Date"
width=
"150px"
align=
"center"
>
<
template
slot-scope=
"{row}"
>
<span>
{{
row
.
timestamp
|
parseTime
(
'{y
}
-{m
}
-{d
}
{h
}
:{i
}
'
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"Title"
min
-
width
=
"150px"
>
<
template
slot
-
scope
=
"{row
}
"
>
<
span
class
=
"link-type"
@
click
=
"handleUpdate(row)"
>
{{
row
.
title
}}
<
/span
>
<
el
-
tag
>
{{
row
.
type
|
typeFilter
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"Author"
width
=
"110px"
align
=
"center"
>
<
template
slot
-
scope
=
"{row
}
"
>
<
span
>
{{
row
.
author
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
v
-
if
=
"showReviewer"
label
=
"Reviewer"
width
=
"110px"
align
=
"center"
>
<
template
slot
-
scope
=
"{row
}
"
>
<
span
style
=
"color:red;"
>
{{
row
.
reviewer
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"Imp"
width
=
"80px"
>
<
template
slot
-
scope
=
"{row
}
"
>
<
svg
-
icon
v
-
for
=
"n in + row.importance"
:
key
=
"n"
icon
-
class
=
"star"
class
=
"meta-item__icon"
/>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"Readings"
align
=
"center"
width
=
"95"
>
<
template
slot
-
scope
=
"{row
}
"
>
<
span
v
-
if
=
"row.pageviews"
class
=
"link-type"
@
click
=
"handleFetchPv(row.pageviews)"
>
{{
row
.
pageviews
}}
<
/span
>
<
span
v
-
else
>
0
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"Status"
class
-
name
=
"status-col"
width
=
"100"
>
<
template
slot
-
scope
=
"{row
}
"
>
<
el
-
tag
:
type
=
"row.status | statusFilter"
>
{{
row
.
status
}}
<
/el-tag
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"Actions"
align
=
"center"
width
=
"230"
class
-
name
=
"small-padding fixed-width"
>
<
template
slot
-
scope
=
"{row,$index
}
"
>
<
el
-
button
type
=
"primary"
size
=
"mini"
@
click
=
"handleUpdate(row)"
>
Edit
<
/el-button
>
<
el
-
button
v
-
if
=
"row.status!='published'"
size
=
"mini"
type
=
"success"
@
click
=
"handleModifyStatus(row,'published')"
>
Publish
<
/el-button
>
<
el
-
button
v
-
if
=
"row.status!='draft'"
size
=
"mini"
@
click
=
"handleModifyStatus(row,'draft')"
>
Draft
<
/el-button
>
<
el
-
button
v
-
if
=
"row.status!='deleted'"
size
=
"mini"
type
=
"danger"
@
click
=
"handleDelete(row,$index)"
>
Delete
<
/el-button
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<
pagination
v
-
show
=
"total>0"
:
total
=
"total"
:
page
.
sync
=
"listQuery.page"
:
limit
.
sync
=
"listQuery.limit"
@
pagination
=
"getList"
/>
<
el
-
dialog
:
title
=
"textMap[dialogStatus]"
:
visible
.
sync
=
"dialogFormVisible"
>
<
el
-
form
ref
=
"dataForm"
:
rules
=
"rules"
:
model
=
"temp"
label
-
position
=
"left"
label
-
width
=
"70px"
style
=
"width: 400px; margin-left:50px;"
>
<
el
-
form
-
item
label
=
"Type"
prop
=
"type"
>
<
el
-
select
v
-
model
=
"temp.type"
class
=
"filter-item"
placeholder
=
"Please select"
>
<
el
-
option
v
-
for
=
"item in calendarTypeOptions"
:
key
=
"item.key"
:
label
=
"item.display_name"
:
value
=
"item.key"
/>
<
/el-select
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"Date"
prop
=
"timestamp"
>
<
el
-
date
-
picker
v
-
model
=
"temp.timestamp"
type
=
"datetime"
placeholder
=
"Please pick a date"
/>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"Title"
prop
=
"title"
>
<
el
-
input
v
-
model
=
"temp.title"
/>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"Status"
>
<
el
-
select
v
-
model
=
"temp.status"
class
=
"filter-item"
placeholder
=
"Please select"
>
<
el
-
option
v
-
for
=
"item in statusOptions"
:
key
=
"item"
:
label
=
"item"
:
value
=
"item"
/>
<
/el-select
>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"Imp"
>
<
el
-
rate
v
-
model
=
"temp.importance"
:
colors
=
"['#99A9BF', '#F7BA2A', '#FF9900']"
:
max
=
"3"
style
=
"margin-top:8px;"
/>
<
/el-form-item
>
<
el
-
form
-
item
label
=
"Remark"
>
<
el
-
input
v
-
model
=
"temp.remark"
:
autosize
=
"{ minRows: 2, maxRows: 4
}
"
type
=
"textarea"
placeholder
=
"Please input"
/>
<
/el-form-item
>
<
/el-form
>
<
div
slot
=
"footer"
class
=
"dialog-footer"
>
<
el
-
button
@
click
=
"dialogFormVisible = false"
>
Cancel
<
/el-button
>
<
el
-
button
type
=
"primary"
@
click
=
"dialogStatus==='create'?createData():updateData()"
>
Confirm
<
/el-button
>
<
/div
>
<
/el-dialog
>
<
el
-
dialog
:
visible
.
sync
=
"dialogPvVisible"
title
=
"Reading statistics"
>
<
el
-
table
:
data
=
"pvData"
border
fit
highlight
-
current
-
row
style
=
"width: 100%"
>
<
el
-
table
-
column
prop
=
"key"
label
=
"Channel"
/>
<
el
-
table
-
column
prop
=
"pv"
label
=
"Pv"
/>
<
/el-table
>
<
span
slot
=
"footer"
class
=
"dialog-footer"
>
<
el
-
button
type
=
"primary"
@
click
=
"dialogPvVisible = false"
>
Confirm
<
/el-button
>
<
/span
>
<
/el-dialog
>
<
/div
>
<
/template
>
<
script
>
import
{
fetchList
,
fetchPv
,
createArticle
,
updateArticle
}
from
'@/api/article'
import
waves
from
'@/directive/waves'
// waves directive
import
{
parseTime
}
from
'@/utils'
import
Pagination
from
'@/components/Pagination'
// secondary package based on el-pagination
const
calendarTypeOptions
=
[
{
key
:
'CN'
,
display_name
:
'China'
}
,
{
key
:
'US'
,
display_name
:
'USA'
}
,
{
key
:
'JP'
,
display_name
:
'Japan'
}
,
{
key
:
'EU'
,
display_name
:
'Eurozone'
}
]
// arr to obj, such as
{
CN
:
"China"
,
US
:
"USA"
}
const
calendarTypeKeyValue
=
calendarTypeOptions
.
reduce
((
acc
,
cur
)
=>
{
acc
[
cur
.
key
]
=
cur
.
display_name
return
acc
}
,
{
}
)
export
default
{
name
:
'ComplexTable'
,
components
:
{
Pagination
}
,
directives
:
{
waves
}
,
filters
:
{
statusFilter
(
status
)
{
const
statusMap
=
{
published
:
'success'
,
draft
:
'info'
,
deleted
:
'danger'
}
return
statusMap
[
status
]
}
,
typeFilter
(
type
)
{
return
calendarTypeKeyValue
[
type
]
}
}
,
data
()
{
return
{
tableKey
:
0
,
list
:
null
,
total
:
0
,
listLoading
:
true
,
listQuery
:
{
page
:
1
,
limit
:
20
,
importance
:
undefined
,
title
:
undefined
,
type
:
undefined
,
sort
:
'+id'
}
,
importanceOptions
:
[
1
,
2
,
3
],
calendarTypeOptions
,
sortOptions
:
[{
label
:
'ID Ascending'
,
key
:
'+id'
}
,
{
label
:
'ID Descending'
,
key
:
'-id'
}
],
statusOptions
:
[
'published'
,
'draft'
,
'deleted'
],
showReviewer
:
false
,
temp
:
{
id
:
undefined
,
importance
:
1
,
remark
:
''
,
timestamp
:
new
Date
(),
title
:
''
,
type
:
''
,
status
:
'published'
}
,
dialogFormVisible
:
false
,
dialogStatus
:
''
,
textMap
:
{
update
:
'Edit'
,
create
:
'Create'
}
,
dialogPvVisible
:
false
,
pvData
:
[],
rules
:
{
type
:
[{
required
:
true
,
message
:
'type is required'
,
trigger
:
'change'
}
],
timestamp
:
[{
type
:
'date'
,
required
:
true
,
message
:
'timestamp is required'
,
trigger
:
'change'
}
],
title
:
[{
required
:
true
,
message
:
'title is required'
,
trigger
:
'blur'
}
]
}
,
downloadLoading
:
false
}
}
,
created
()
{
this
.
getList
()
}
,
methods
:
{
getList
()
{
this
.
listLoading
=
true
fetchList
(
this
.
listQuery
).
then
(
response
=>
{
this
.
list
=
response
.
data
.
items
this
.
total
=
response
.
data
.
total
// Just to simulate the time of the request
setTimeout
(()
=>
{
this
.
listLoading
=
false
}
,
1.5
*
1000
)
}
)
}
,
handleFilter
()
{
this
.
listQuery
.
page
=
1
this
.
getList
()
}
,
handleModifyStatus
(
row
,
status
)
{
this
.
$message
({
message
:
'操作Success'
,
type
:
'success'
}
)
row
.
status
=
status
}
,
sortChange
(
data
)
{
const
{
prop
,
order
}
=
data
if
(
prop
===
'id'
)
{
this
.
sortByID
(
order
)
}
}
,
sortByID
(
order
)
{
if
(
order
===
'ascending'
)
{
this
.
listQuery
.
sort
=
'+id'
}
else
{
this
.
listQuery
.
sort
=
'-id'
}
this
.
handleFilter
()
}
,
resetTemp
()
{
this
.
temp
=
{
id
:
undefined
,
importance
:
1
,
remark
:
''
,
timestamp
:
new
Date
(),
title
:
''
,
status
:
'published'
,
type
:
''
}
}
,
handleCreate
()
{
this
.
resetTemp
()
this
.
dialogStatus
=
'create'
this
.
dialogFormVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'dataForm'
].
clearValidate
()
}
)
}
,
createData
()
{
this
.
$refs
[
'dataForm'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
this
.
temp
.
id
=
parseInt
(
Math
.
random
()
*
100
)
+
1024
// mock a id
this
.
temp
.
author
=
'vue-element-admin'
createArticle
(
this
.
temp
).
then
(()
=>
{
this
.
list
.
unshift
(
this
.
temp
)
this
.
dialogFormVisible
=
false
this
.
$notify
({
title
:
'Success'
,
message
:
'Created Successfully'
,
type
:
'success'
,
duration
:
2000
}
)
}
)
}
}
)
}
,
handleUpdate
(
row
)
{
this
.
temp
=
Object
.
assign
({
}
,
row
)
// copy obj
this
.
temp
.
timestamp
=
new
Date
(
this
.
temp
.
timestamp
)
this
.
dialogStatus
=
'update'
this
.
dialogFormVisible
=
true
this
.
$nextTick
(()
=>
{
this
.
$refs
[
'dataForm'
].
clearValidate
()
}
)
}
,
updateData
()
{
this
.
$refs
[
'dataForm'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
tempData
=
Object
.
assign
({
}
,
this
.
temp
)
tempData
.
timestamp
=
+
new
Date
(
tempData
.
timestamp
)
// change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464
updateArticle
(
tempData
).
then
(()
=>
{
const
index
=
this
.
list
.
findIndex
(
v
=>
v
.
id
===
this
.
temp
.
id
)
this
.
list
.
splice
(
index
,
1
,
this
.
temp
)
this
.
dialogFormVisible
=
false
this
.
$notify
({
title
:
'Success'
,
message
:
'Update Successfully'
,
type
:
'success'
,
duration
:
2000
}
)
}
)
}
}
)
}
,
handleDelete
(
row
,
index
)
{
this
.
$notify
({
title
:
'Success'
,
message
:
'Delete Successfully'
,
type
:
'success'
,
duration
:
2000
}
)
this
.
list
.
splice
(
index
,
1
)
}
,
handleFetchPv
(
pv
)
{
fetchPv
(
pv
).
then
(
response
=>
{
this
.
pvData
=
response
.
data
.
pvData
this
.
dialogPvVisible
=
true
}
)
}
,
handleDownload
()
{
this
.
downloadLoading
=
true
import
(
'@/vendor/Export2Excel'
).
then
(
excel
=>
{
const
tHeader
=
[
'timestamp'
,
'title'
,
'type'
,
'importance'
,
'status'
]
const
filterVal
=
[
'timestamp'
,
'title'
,
'type'
,
'importance'
,
'status'
]
const
data
=
this
.
formatJson
(
filterVal
)
excel
.
export_json_to_excel
({
header
:
tHeader
,
data
,
filename
:
'table-list'
}
)
this
.
downloadLoading
=
false
}
)
}
,
formatJson
(
filterVal
)
{
return
this
.
list
.
map
(
v
=>
filterVal
.
map
(
j
=>
{
if
(
j
===
'timestamp'
)
{
return
parseTime
(
v
[
j
])
}
else
{
return
v
[
j
]
}
}
))
}
,
getSortClass
:
function
(
key
)
{
const
sort
=
this
.
listQuery
.
sort
return
sort
===
`+${key
}
`
?
'ascending'
:
'descending'
}
}
}
<
/script
>
src/views/display/components/InfoEditDialog.vue
0 → 100644
浏览文件 @
212abb71
<
template
>
<el-dialog
:title=
"title"
:visible
.
sync=
"dialogVisible"
width=
"80%"
style=
"height: 98%"
:before-close=
"handleClose"
top=
"5vh"
lock-scroll
>
<div
class=
"dialog-content"
>
<div
class=
"basic-info"
>
<div
class=
"basic-info-title title"
>
<div
class=
"divider"
></div>
<div
class=
"label"
>
信息录入
</div>
</div>
<el-form
:model=
"form"
>
<el-form-item
label=
"展览名称"
:label-width=
"formLabelWidth"
>
<el-input
v-model=
"form.name"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"展览开始时间"
:label-width=
"formLabelWidth"
>
<el-input
v-model=
"form.startTime"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"展览结束时间"
:label-width=
"formLabelWidth"
>
<el-input
v-model=
"form.endTime"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"展览音频"
:label-width=
"formLabelWidth"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:file-list=
"audioList"
list-type=
"picture"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传wav文件,且不超过500kb
</div>
<div
slot=
"file"
slot-scope=
"
{ file }">
<i
class=
"el-icon-microphone"
style=
"font-size: 28px"
></i>
文件名称XXXXX
</div>
</el-upload>
</el-form-item>
<el-form-item
label=
"展览图片"
:label-width=
"formLabelWidth"
>
<el-upload
action=
"#"
list-type=
"picture-card"
:auto-upload=
"false"
>
<i
slot=
"default"
class=
"el-icon-plus"
></i>
<div
slot=
"file"
slot-scope=
"
{ file }">
<img
class=
"el-upload-list__item-thumbnail"
:src=
"file.url"
alt=
""
/>
<span
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"handlePictureCardPreview(file)"
>
<i
class=
"el-icon-zoom-in"
></i>
</span>
<span
v-if=
"!disabled"
class=
"el-upload-list__item-delete"
@
click=
"handleDownload(file)"
>
<i
class=
"el-icon-download"
></i>
</span>
<span
v-if=
"!disabled"
class=
"el-upload-list__item-delete"
@
click=
"handleRemove(file)"
>
<i
class=
"el-icon-delete"
></i>
</span>
</span>
</div>
</el-upload>
</el-form-item>
<el-form-item
label=
"展览视频"
:label-width=
"formLabelWidth"
>
<div
class=
"video-lists"
>
<div
class=
"video-item upload-box"
>
<i
class=
"el-icon-video-play"
></i>
</div>
<div
class=
"video-item upload-box"
>
<i
class=
"el-icon-plus"
></i>
</div>
</div>
</el-form-item>
</el-form>
</div>
<div
class=
"relate"
>
<div
class=
"relate-title title"
>
<div
class=
"divider"
></div>
<div
class=
"label"
>
关联文物
</div>
</div>
<div
class=
"relate-content"
>
<el-cascader
:options=
"cascaderOptions"
clearable
></el-cascader>
</div>
</div>
<div
class=
"dialog-footer"
>
<el-button
@
click=
"cancelForm"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"$refs.drawer.closeDrawer()"
:loading=
"loading"
>
{{
loading
?
"提交中 ..."
:
buttonText
}}
<i
class=
"el-icon-right"
></i
></el-button>
</div>
</div>
</el-dialog>
</
template
>
<
script
>
export
default
{
name
:
"InfoEditDialog"
,
props
:
{
visible
:
{
type
:
Boolean
,
default
:
false
,
},
form
:
{
type
:
Object
,
default
:
()
=>
({}),
},
cascaderOptions
:
{
type
:
Array
,
default
:
()
=>
[],
},
},
computed
:
{
dialogVisible
:
{
get
:
function
()
{
return
this
.
visible
;
},
set
:
function
()
{},
},
buttonText
()
{
if
(
this
.
form
.
id
)
{
return
"确定修改"
;
}
else
{
return
"去发布"
;
}
},
title
()
{
if
(
this
.
form
.
id
)
{
return
"修改信息"
;
}
else
{
return
"新增发布"
;
}
},
},
data
()
{
return
{
formLabelWidth
:
"100px"
,
audioList
:
[],
//音频文件列表
loading
:
false
,
};
},
methods
:
{
handlePreview
(
file
)
{
console
.
log
(
file
);
},
handleRemove
(
file
,
fileList
)
{
console
.
log
(
file
,
fileList
);
},
// 取消编辑
cancelForm
()
{},
handleClose
(
done
)
{
this
.
$confirm
(
"确认关闭?"
)
.
then
((
_
)
=>
{
done
();
this
.
$emit
(
"handleClose"
);
})
.
catch
((
_
)
=>
{});
},
},
};
</
script
>
<
style
lang=
'scss'
scoped
>
.dialog-content
{
padding
:
0
32px
;
display
:
flex
;
.basic-info
{
flex
:
1
;
margin-right
:
48px
;
}
.relate
{
flex
:
1
;
}
.dialog-footer
{
display
:
flex
;
align-items
:
flex-end
;
}
.title
{
display
:
flex
;
margin-bottom
:
16px
;
.divider
{
width
:
8px
;
border-left
:
4px
solid
#409eff
;
margin-right
:
4px
;
}
.label
{
font-weight
:
bold
;
}
}
}
.upload-box
{
background-color
:
#fbfdff
;
border
:
1px
dashed
#c0ccda
;
border-radius
:
6px
;
-webkit-box-sizing
:
border-box
;
box-sizing
:
border-box
;
width
:
148px
;
height
:
148px
;
line-height
:
146px
;
vertical-align
:
top
;
text-align
:
center
;
margin
:
0
8px
8px
0
;
i
{
font-size
:
28px
;
color
:
#8c939d
;
}
}
.video-lists
{
display
:
flex
;
}
</
style
>
\ No newline at end of file
src/views/display/index.vue
浏览文件 @
212abb71
...
...
@@ -6,18 +6,6 @@
<el-form-item
label=
"展览名称"
>
<el-input
v-model=
"search.name"
placeholder=
"展览名称"
></el-input>
</el-form-item>
<el-form-item
label=
"展览时间"
>
<el-date-picker
v-model=
"search.time"
type=
"datetimerange"
:picker-options=
"pickerOptions"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
align=
"right"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"状态"
>
<el-select
v-model=
"search.status"
placeholder=
"状态"
>
<el-option
label=
"已上线"
:value=
"1"
></el-option>
...
...
@@ -31,7 +19,7 @@
>
</el-form-item>
</el-form>
<el-button
type=
"primary"
@
click
.
native=
"handleOpenD
rawer
('add')"
>
<el-button
type=
"primary"
@
click
.
native=
"handleOpenD
ialog
('add')"
>
<i
class=
"el-icon-s-promotion"
></i>
发布
</el-button
>
...
...
@@ -47,21 +35,27 @@
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
prop=
"name"
label=
"展览名称"
width=
"120"
>
<el-table-column
prop=
"theme_type"
label=
"展览主题"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"title"
label=
"展览主题"
show-overflow-tooltip
>
<el-table-column
prop=
"title"
label=
"展览标题"
width=
"120"
>
</el-table-column>
<el-table-column
prop=
"type"
label=
"展览类型"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"
startTime
"
label=
"
开始时间
"
prop=
"
character
"
label=
"
展览性质
"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"endTime"
label=
"结束时间"
>
</el-table-column>
<el-table-column
prop=
"content"
label=
"详细内容"
show-overflow-tooltip
>
<el-table-column
prop=
"ragion"
label=
"所在地域"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dep_id"
label=
"展览单位"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"
remarks"
label=
"备注
"
show-overflow-tooltip
>
<el-table-column
prop=
"
intro"
label=
"展览介绍
"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
show-overflow-tooltip
>
<template
slot-scope=
"scope"
>
...
...
@@ -77,7 +71,7 @@
</el-popconfirm>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"3
2
0"
fixed=
"right"
>
<el-table-column
label=
"操作"
width=
"3
0
0"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<!--
<el-button
size=
"mini"
...
...
@@ -88,7 +82,7 @@
>
-->
<!--
<el-button
size=
"mini"
@
click=
"handleEdit(scope.
$index, scope.
row)"
@
click=
"handleEdit(scope.row)"
type=
"primary"
>
<i
class=
"el-icon-open"
style=
"margin-right: 4px"
></i
...
...
@@ -96,7 +90,14 @@
>
-->
<el-button
size=
"mini"
@
click=
"handleOpenDrawer('edit', scope.row)"
@
click=
"handlePreview(scope.row)"
type=
"primary"
><i
class=
"el-icon-edit"
style=
"margin-right: 4px"
></i
>
预览
</el-button
>
<el-button
size=
"mini"
@
click=
"handleOpenDialog('edit', scope.row)"
type=
"primary"
><i
class=
"el-icon-edit"
style=
"margin-right: 4px"
></i
>
编辑
</el-button
...
...
@@ -124,126 +125,22 @@
class=
"pagination"
>
</el-pagination>
<el-drawer
:title=
"isAdd ? '新增布展信息' : '编辑'"
:before-close=
"handleClose"
:visible
.
sync=
"drawerVisible"
direction=
"rtl"
custom-class=
"add-edit-drawer"
ref=
"drawer"
>
<div
class=
"drawer-content"
>
<div
class=
"basic-info"
>
<div
class=
"basic-info-title title"
>
<div
class=
"divider"
></div>
<div
class=
"label"
>
信息录入
</div>
</div>
<el-form
:model=
"form"
>
<el-form-item
label=
"展览名称"
:label-width=
"formLabelWidth"
>
<el-input
v-model=
"form.name"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"展览开始时间"
:label-width=
"formLabelWidth"
>
<el-input
v-model=
"form.startTime"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"展览结束时间"
:label-width=
"formLabelWidth"
>
<el-input
v-model=
"form.endTime"
autocomplete=
"off"
></el-input>
</el-form-item>
<el-form-item
label=
"展览音频"
:label-width=
"formLabelWidth"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:file-list=
"fileList"
list-type=
"picture"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传wav文件,且不超过500kb
</div>
<div
slot=
"file"
slot-scope=
"{ file }"
>
<i
class=
"el-icon-microphone"
style=
"font-size: 28px"
></i>
文件名称XXXXX
</div>
</el-upload>
</el-form-item>
<el-form-item
label=
"展览图片"
:label-width=
"formLabelWidth"
>
<el-upload
action=
"#"
list-type=
"picture-card"
:auto-upload=
"false"
>
<i
slot=
"default"
class=
"el-icon-plus"
></i>
<div
slot=
"file"
slot-scope=
"{ file }"
>
<img
class=
"el-upload-list__item-thumbnail"
:src=
"file.url"
alt=
""
/>
<span
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"handlePictureCardPreview(file)"
>
<i
class=
"el-icon-zoom-in"
></i>
</span>
<span
v-if=
"!disabled"
class=
"el-upload-list__item-delete"
@
click=
"handleDownload(file)"
>
<i
class=
"el-icon-download"
></i>
</span>
<span
v-if=
"!disabled"
class=
"el-upload-list__item-delete"
@
click=
"handleRemove(file)"
>
<i
class=
"el-icon-delete"
></i>
</span>
</span>
</div>
</el-upload>
</el-form-item>
<el-form-item
label=
"展览视频"
:label-width=
"formLabelWidth"
>
<div
class=
"video-lists"
>
<div
class=
"video-item upload-box"
>
<i
class=
"el-icon-video-play"
></i>
</div>
<div
class=
"video-item upload-box"
>
<i
class=
"el-icon-plus"
></i>
</div>
</div>
</el-form-item>
</el-form>
</div>
<div
class=
"relate"
>
<div
class=
"relate-title title"
>
<div
class=
"divider"
></div>
<div
class=
"label"
>
关联文物
</div>
</div>
<div
class=
"relate-content"
>
<el-cascader
:options=
"cascaderOptions"
clearable
></el-cascader>
</div>
</div>
<div
class=
"demo-drawer__footer"
>
<el-button
@
click=
"cancelForm"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"$refs.drawer.closeDrawer()"
:loading=
"loading"
>
{{ loading ? "提交中 ..." : "确 定" }}
</el-button
>
</div>
</div>
</el-drawer>
<InfoEditDialog
:visible=
"drawerVisible"
:form=
"form"
:cascaderOptions=
"cascaderOptions"
@
handleClose=
"handleClose"
/>
</div>
</template>
<
script
>
import
{
getList
}
from
"@/api/display"
;
import
InfoEditDialog
from
"./components/InfoEditDialog"
;
export
default
{
components
:
{
InfoEditDialog
,
},
data
()
{
return
{
multipleSelection
:
[],
...
...
@@ -300,7 +197,7 @@ export default {
videos
:
[],
},
loading
:
false
,
formLabelWidth
:
"100px"
,
cascaderOptions
:
[
{
value
:
"zhinan"
,
...
...
@@ -400,7 +297,7 @@ export default {
},
// 打开drawer
handleOpenD
rawer
(
type
,
value
)
{
handleOpenD
ialog
(
type
,
value
)
{
this
.
drawerVisible
=
true
;
switch
(
type
)
{
case
"add"
:
...
...
@@ -411,12 +308,12 @@ export default {
break
;
}
},
// 关闭
drawer之前
// 关闭
Dialog
handleClose
()
{
this
.
drawerVisible
=
false
;
},
//
取消drawer编辑
cancelForm
(
)
{},
//
预览展览
handlePreview
(
data
)
{},
},
};
</
script
>
...
...
@@ -432,43 +329,5 @@ export default {
.pagination
{
margin-top
:
10px
;
}
.drawer-content
{
padding
:
0
32px
;
.title
{
display
:
flex
;
margin-bottom
:
16px
;
.divider
{
width
:
8px
;
border-left
:
4px
solid
#409eff
;
margin-right
:
4px
;
}
.label
{
font-weight
:
bold
;
}
}
}
.upload-box
{
background-color
:
#fbfdff
;
border
:
1px
dashed
#c0ccda
;
border-radius
:
6px
;
-webkit-box-sizing
:
border-box
;
box-sizing
:
border-box
;
width
:
148px
;
height
:
148px
;
line-height
:
146px
;
vertical-align
:
top
;
text-align
:
center
;
margin
:
0
8px
8px
0
;
i
{
font-size
:
28px
;
color
:
#8c939d
;
}
}
.video-lists
{
display
:
flex
;
}
}
</
style
>
src/views/museum/index.vue
0 → 100644
浏览文件 @
212abb71
<
template
>
<div>
博物馆管理
</div>
</
template
>
<
script
>
export
default
{
}
</
script
>
<
style
>
</
style
>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论