Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
仟微科技
Link Wechat
提交
6bded6bf
Link Wechat
项目概览
仟微科技
/
Link Wechat
通知
48
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Link Wechat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6bded6bf
编写于
11月 08, 2020
作者:
X
xinlaa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
素材接口调试与页面布局,添加全局配置token,修改全局配置变量,等
上级
6e37a70e
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
359 addition
and
912 deletion
+359
-912
linkwe-ui/src/api/customer/dimission.js
linkwe-ui/src/api/customer/dimission.js
+5
-5
linkwe-ui/src/api/customer/group.js
linkwe-ui/src/api/customer/group.js
+3
-4
linkwe-ui/src/api/customer/index.js
linkwe-ui/src/api/customer/index.js
+7
-7
linkwe-ui/src/api/customer/tag.js
linkwe-ui/src/api/customer/tag.js
+4
-4
linkwe-ui/src/api/drainageCode/staff.js
linkwe-ui/src/api/drainageCode/staff.js
+3
-3
linkwe-ui/src/api/drainageCode/welcome.js
linkwe-ui/src/api/drainageCode/welcome.js
+6
-6
linkwe-ui/src/api/enterpriseId.js
linkwe-ui/src/api/enterpriseId.js
+7
-7
linkwe-ui/src/api/material/index.js
linkwe-ui/src/api/material/index.js
+6
-5
linkwe-ui/src/api/organization.js
linkwe-ui/src/api/organization.js
+9
-9
linkwe-ui/src/components/Upload.vue
linkwe-ui/src/components/Upload.vue
+142
-0
linkwe-ui/src/components/zmyComponents/ZmyTree.vue
linkwe-ui/src/components/zmyComponents/ZmyTree.vue
+0
-124
linkwe-ui/src/components/zmyComponents/zmyDialog.vue
linkwe-ui/src/components/zmyComponents/zmyDialog.vue
+0
-210
linkwe-ui/src/components/zmyComponents/zmyTable.vue
linkwe-ui/src/components/zmyComponents/zmyTable.vue
+0
-359
linkwe-ui/src/config.js
linkwe-ui/src/config.js
+11
-7
linkwe-ui/src/main.js
linkwe-ui/src/main.js
+26
-15
linkwe-ui/src/utils/request.js
linkwe-ui/src/utils/request.js
+55
-53
linkwe-ui/src/views/material/audio.vue
linkwe-ui/src/views/material/audio.vue
+6
-12
linkwe-ui/src/views/material/components/MaPage.vue
linkwe-ui/src/views/material/components/MaPage.vue
+36
-58
linkwe-ui/src/views/material/file.vue
linkwe-ui/src/views/material/file.vue
+4
-4
linkwe-ui/src/views/material/image.vue
linkwe-ui/src/views/material/image.vue
+11
-7
linkwe-ui/src/views/material/text.vue
linkwe-ui/src/views/material/text.vue
+1
-5
linkwe-ui/src/views/material/video.vue
linkwe-ui/src/views/material/video.vue
+17
-8
未找到文件。
linkwe-ui/src/api/customer/dimission.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/user
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/user
'
/**
* 获取离职已分配员工列表
...
...
@@ -15,7 +15,7 @@ userName:
export
function
getList
(
params
)
{
return
request
({
url
:
service
+
'
/leaveUserAllocateList
'
,
params
params
,
})
}
...
...
@@ -33,7 +33,7 @@ userName:
export
function
getListNo
(
params
)
{
return
request
({
url
:
service
+
'
/leaveUserNoAllocateList
'
,
params
params
,
})
}
...
...
@@ -49,7 +49,7 @@ export function allocate(data) {
return
request
({
url
:
service
+
'
/allocateLeaveUserAboutData
'
,
method
:
'
put
'
,
data
data
,
})
}
...
...
@@ -67,6 +67,6 @@ export function allocate(data) {
export
function
getAllocateCustomers
(
params
)
{
return
request
({
url
:
service
+
'
/getAllocateCustomers
'
,
params
params
,
})
}
linkwe-ui/src/api/customer/group.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/group
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/group
'
/**
* 客户群列表
...
...
@@ -15,7 +15,7 @@ export function getList(params) {
return
request
({
url
:
service
+
'
/chat/list
'
,
method
:
'
get
'
,
params
params
,
})
}
...
...
@@ -32,11 +32,10 @@ export function getList(params) {
export
function
getMembers
(
params
)
{
return
request
({
url
:
service
+
'
/chat/members
'
,
params
params
,
})
}
/**
* 客户群同步接口
*/
...
...
linkwe-ui/src/api/customer/index.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/customer
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/customer
'
/**
* 客户列表
...
...
@@ -18,7 +18,7 @@ export function getList(params) {
return
request
({
url
:
service
+
'
/list
'
,
method
:
'
get
'
,
params
params
,
})
}
...
...
@@ -47,7 +47,7 @@ export function makeLabel(data) {
return
request
({
url
:
service
+
'
/makeLabel
'
,
method
:
'
post
'
,
data
data
,
})
}
...
...
@@ -67,7 +67,7 @@ export function removeLabel(data) {
return
request
({
url
:
service
+
'
/removeLabel
'
,
method
:
'
DELETE
'
,
data
data
,
})
}
...
...
@@ -83,7 +83,7 @@ export function updateBirthday(data) {
return
request
({
url
:
service
,
method
:
'
PUT
'
,
data
data
,
})
}
...
...
@@ -92,6 +92,6 @@ export function exportCustomer(query) {
return
request
({
url
:
service
+
'
/export
'
,
method
:
'
get
'
,
params
:
query
params
:
query
,
})
}
\ No newline at end of file
}
linkwe-ui/src/api/customer/tag.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/group
'
const
service
=
window
.
CONFIG
.
CONFIG
.
services
.
wecom
+
'
/group
'
// 客户标签
...
...
@@ -14,7 +14,7 @@ const service = config.services.wecom + '/group'
export
function
getList
(
params
)
{
return
request
({
url
:
service
+
'
/list
'
,
params
params
,
})
}
...
...
@@ -54,13 +54,13 @@ export function update(data) {
return
request
({
url
:
service
,
method
:
'
put
'
,
data
data
,
})
}
/**
* 标签批量删除接口
* @param {*} ids
* @param {*} ids
*/
export
function
remove
(
ids
)
{
return
request
({
...
...
linkwe-ui/src/api/drainageCode/staff.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/user
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/user
'
/**
* 获取离职未分配员工列表
...
...
@@ -13,7 +13,7 @@ beginTime:}
export
function
getList
(
params
)
{
return
request
({
url
:
service
+
'
/leaveUserNoAllocateList
'
,
params
params
,
})
}
...
...
@@ -29,6 +29,6 @@ export function allocate(data) {
return
request
({
url
:
service
+
'
/allocateLeaveUserAboutData
'
,
method
:
'
put
'
,
data
data
,
})
}
linkwe-ui/src/api/drainageCode/welcome.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/tlp
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/tlp
'
/**
* 获取欢迎语列表
...
...
@@ -14,13 +14,13 @@ const service = config.services.wecom + '/tlp'
export
function
getList
(
params
)
{
return
request
({
url
:
service
+
'
/list
'
,
params
params
,
})
}
/**
* 根据欢迎语模板id获取模板使用范围
* @param {*} id
* @param {*} id
*/
export
function
getScop
(
id
)
{
return
request
({
...
...
@@ -46,7 +46,7 @@ export function edit(data) {
return
request
({
url
:
service
,
method
:
'
put
'
,
data
data
,
})
}
...
...
@@ -66,13 +66,13 @@ export function add(data) {
return
request
({
url
:
service
,
method
:
'
POST
'
,
data
data
,
})
}
/**
* 删除欢迎语
* @param {*} ids
* @param {*} ids
*/
export
function
remove
(
ids
)
{
return
request
({
...
...
linkwe-ui/src/api/enterpriseId.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/corp
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/corp
'
// 企业id
/**
...
...
@@ -8,13 +8,13 @@ const service = config.services.wecom + '/corp'
export
function
getList
(
params
)
{
return
request
({
url
:
service
+
'
/list
'
,
params
params
,
})
}
/**
* 获取企业id相关详情
* @param {String} id
* @param {String} id
*/
export
function
getDetail
(
id
)
{
return
request
({
...
...
@@ -24,7 +24,7 @@ export function getDetail(id) {
/**
* 新增企业id
* @param {Object} data
* @param {Object} data
*/
export
function
add
(
data
)
{
return
request
({
...
...
@@ -56,17 +56,17 @@ export function update(data) {
return
request
({
url
:
service
,
method
:
'
put
'
,
data
data
,
})
}
/**
* 启用有效企业微信账号
* @param {*} corpId
* @param {*} corpId
*/
export
function
start
(
corpId
)
{
return
request
({
url
:
service
+
'
/startVailWeCorpAccount/
'
+
corpId
,
method
:
'
put
'
,
})
}
\ No newline at end of file
}
linkwe-ui/src/api/material/index.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/material
'
const
serviceCategory
=
config
.
services
.
wecom
+
'
/category
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/material
'
const
serviceCategory
=
window
.
CONFIG
.
services
.
wecom
+
'
/category
'
/**
* 查询素材列表
* @param {*} params
* { categoryId:类目id
search:搜索的值
mediaType: '' 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file), 4 文本
}
*/
export
function
getList
(
params
)
{
...
...
@@ -66,12 +67,12 @@ export function remove(id) {
* @param {*} data
* {
* file:文件
type:0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file)
, 4 文本
type:0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file)
}
*/
export
function
upload
(
data
)
{
return
request
({
url
:
config
.
services
.
wecom
+
'
/upload
'
,
url
:
window
.
CONFIG
.
services
.
wecom
+
'
/upload
'
,
method
:
'
post
'
,
data
,
})
...
...
@@ -88,7 +89,7 @@ export function upload(data) {
export
function
moveGroup
(
categoryId
,
materials
)
{
return
request
({
url
:
service
+
'
/resetCategory
'
,
method
:
'
p
os
t
'
,
method
:
'
p
u
t
'
,
data
:
{
categoryId
,
materials
,
...
...
linkwe-ui/src/api/organization.js
浏览文件 @
6bded6bf
import
request
from
'
@/utils/request
'
const
service
=
config
.
services
.
wecom
+
'
/department
'
const
serviceUser
=
config
.
services
.
wecom
+
'
/user
'
const
service
=
window
.
CONFIG
.
services
.
wecom
+
'
/department
'
const
serviceUser
=
window
.
CONFIG
.
services
.
wecom
+
'
/user
'
/**
* 获取所有部门
...
...
@@ -14,7 +14,7 @@ const serviceUser = config.services.wecom + '/user'
export
function
getTree
(
params
)
{
return
request
({
url
:
service
+
'
/list
'
,
params
params
,
})
}
...
...
@@ -31,7 +31,7 @@ export function updateDepart(data) {
return
request
({
url
:
service
,
method
:
'
put
'
,
data
data
,
})
}
...
...
@@ -76,13 +76,13 @@ export function removeDepart(ids) {
export
function
getList
(
params
)
{
return
request
({
url
:
serviceUser
+
'
/list
'
,
params
params
,
})
}
/**
* 根据ID获取通讯录人员详情
* @param {String} id
* @param {String} id
*/
export
function
getUserDetail
(
id
)
{
return
request
({
...
...
@@ -92,7 +92,7 @@ export function getUserDetail(id) {
/**
* 新增用户
* @param {Object} data
* @param {Object} data
*/
export
function
addUser
(
data
)
{
return
request
({
...
...
@@ -132,7 +132,7 @@ export function updateUser(data) {
return
request
({
url
:
serviceUser
,
method
:
'
put
'
,
data
data
,
})
}
...
...
@@ -148,7 +148,7 @@ export function startOrStop(data) {
return
request
({
url
:
serviceUser
+
'
/startOrStop
'
,
method
:
'
put
'
,
data
data
,
})
}
...
...
linkwe-ui/src/components/Upload.vue
0 → 100644
浏览文件 @
6bded6bf
<
script
>
import
{
upload
}
from
'
@/api/material
'
export
default
{
components
:
{},
props
:
{
fileUrl
:
{
type
:
String
,
default
:
''
,
},
// 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file)
type
:
{
type
:
String
,
default
:
'
0
'
,
},
beforeUpload
:
{
type
:
Function
,
default
:
()
=>
()
=>
{},
},
},
data
()
{
return
{
action
:
process
.
env
.
VUE_APP_BASE_API
+
window
.
CONFIG
.
services
.
wecom
+
'
/upload
'
,
headers
:
window
.
CONFIG
.
headers
,
}
},
watch
:
{},
computed
:
{
accept
()
{
return
[
'
image/*
'
,
'
audio/*
'
,
'
video/*
'
,
'
*
'
][
this
.
type
]
},
},
created
()
{
upload
()
},
mounted
()
{},
methods
:
{
handleBeforeUpload
(
file
)
{
if
(
this
.
type
===
'
0
'
)
{
// 图片
const
isFormat
=
file
.
type
===
'
image/jpeg
'
const
isSize
=
file
.
size
/
1024
/
1024
<
2
if
(
!
isFormat
)
{
this
.
$message
.
error
(
'
上传文件只能是 JPG 格式!
'
)
}
if
(
!
isSize
)
{
this
.
$message
.
error
(
'
上传文件大小不能超过 2MB!
'
)
}
return
isFormat
&&
isSize
}
else
if
(
this
.
type
===
'
1
'
)
{
// 语音
const
isFormat
=
file
.
type
===
'
audio/amr
'
const
isSize
=
file
.
size
/
1024
/
1024
<
2
if
(
!
isFormat
)
{
this
.
$message
.
error
(
'
上传文件只能是 amr 格式!
'
)
}
if
(
!
isSize
)
{
this
.
$message
.
error
(
'
上传文件大小不能超过 2MB!
'
)
}
return
isFormat
&&
isSize
}
else
if
(
this
.
type
===
'
2
'
)
{
// 视频
const
isFormat
=
file
.
type
===
'
video/mp4
'
const
isSize
=
file
.
size
/
1024
/
1024
<
10
if
(
!
isFormat
)
{
this
.
$message
.
error
(
'
上传文件只能是 mp4 格式!
'
)
}
if
(
!
isSize
)
{
this
.
$message
.
error
(
'
上传文件大小不能超过 10MB!
'
)
}
return
isFormat
&&
isSize
}
else
if
(
this
.
type
===
'
3
'
)
{
// 普通文件
const
isSize
=
file
.
size
/
1024
/
1024
<
20
if
(
!
isSize
)
{
this
.
$message
.
error
(
'
上传文件大小不能超过 20MB!
'
)
}
return
isSize
}
return
beforeUpload
(
file
)
},
onSuccess
(
res
,
file
)
{
this
.
fileUrl
=
URL
.
createObjectURL
(
file
.
raw
)
},
},
}
</
script
>
<
template
>
<div>
<el-upload
class=
"uploader"
:accept=
"accept"
:action=
"action"
:headers=
"headers"
:data=
"
{ type: type }"
:show-file-list="false"
:on-success="onSuccess"
:before-upload="handleBeforeUpload"
>
<img
v-if=
"fileUrl"
:src=
"fileUrl"
class=
"upload-img"
/>
<i
v-else
class=
"el-icon-plus uploader-icon"
></i>
</el-upload>
<div
class=
"tip"
>
<slot
name=
"tip"
></slot>
</div>
</div>
</
template
>
<
style
lang=
"scss"
scoped
>
/
deep
/
.uploader
.el-upload
{
border
:
1px
dashed
#d9d9d9
;
border-radius
:
6px
;
cursor
:
pointer
;
position
:
relative
;
overflow
:
hidden
;
}
/
deep
/
.uploader
.el-upload
:hover
{
border-color
:
#409eff
;
}
.uploader-icon
{
font-size
:
28px
;
color
:
#8c939d
;
width
:
178px
;
height
:
178px
;
line-height
:
178px
;
text-align
:
center
;
}
.upload-img
{
width
:
178px
;
height
:
178px
;
display
:
block
;
}
.tip
{
color
:
#aaa
;
font-size
:
12px
;
}
</
style
>
linkwe-ui/src/components/zmyComponents/ZmyTree.vue
已删除
100644 → 0
浏览文件 @
6e37a70e
<
template
>
<section
class=
"tree-container"
>
<el-row
v-if=
'isfilter'
class=
"search_header"
>
<el-col
:span=
"20"
>
<el-input
placeholder=
"输入关键字进行过滤"
size=
"small"
v-model=
"filterText"
></el-input>
</el-col>
<el-col
:span=
"4"
class=
"plus"
>
<i
class=
"el-icon-plus"
@
click=
"treeEvent.addParent"
></i>
</el-col>
</el-row>
<el-tree
class=
"filter-tree"
:data=
"treeData"
:props=
"treeDefaultProps"
default-expand-all
:filter-node-method=
"filterNode"
ref=
"tree"
>
<!-- style="display:flex;justify-content:space-between;" -->
<span
class=
"custom-tree-node"
slot-scope=
"
{ node, data }" >
<span>
{{
node
.
label
}}
</span>
<el-tooltip
placement=
"bottom"
popper-class=
"atooltip"
effect=
"light"
>
<i
class=
"el-icon-setting"
></i>
<div
slot=
"content"
class=
'tipContent'
>
<span>
<el-button
type=
"text"
size=
"mini"
>
<i
class=
"el-icon-edit"
@
click=
"treeEvent.edit(node,data)"
></i>
</el-button>
<el-button
type=
"text"
size=
"mini"
>
<i
class=
"el-icon-plus"
@
click=
"treeEvent.append(node,data)"
></i>
</el-button>
<el-button
type=
"text"
size=
"mini"
>
<i
class=
"el-icon-delete"
@
click=
"treeEvent.remove(node,data)"
></i>
</el-button>
</span>
</div>
</el-tooltip>
</span>
</el-tree>
</section>
</
template
>
<
script
>
export
default
{
props
:{
isfilter
:{
type
:
Boolean
,
default
:
false
},
//是否显示过滤
treeEvent
:{
type
:
Object
,
default
:()
=>
{}},
//tree组件的所有函数事件
treeData
:{
type
:
Array
,
default
:()
=>
[]},
//tree数据
treeDefaultProps
:{
type
:
Object
,
default
:()
=>
({
children
:
'
children
'
,
label
:
'
label
'
})
},
//tree的父子节点变量定义
},
data
(){
return
{
filterText
:
''
,
}
},
watch
:{
filterText
(
val
)
{
this
.
$refs
.
tree
.
filter
(
val
);
}
},
methods
:{
filterNode
(
value
,
data
)
{
if
(
!
value
)
return
true
;
return
data
.
label
.
indexOf
(
value
)
!==
-
1
;
}
},
created
(){
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.tree-container
{
.search_header
{
padding
:
10px
0
;
/
deep
/
.el-input__inner
{
height
:
35px
;
line-height
:
35px
;
}
}
}
.plus
{
color
:
#606266
;
text-align
:
center
;
font-size
:
25px
;
height
:
35px
;
line-height
:
35px
;
}
.filter-tree
{
font-size
:
20px
;
}
/
deep
/
.el-tree-node__content
{
position
:
relative
;
}
/
deep
/
.el-tooltip
{
position
:
absolute
;
top
:
0
;
right
:
30px
;
}
/
deep
/
.el-tree-node__content
{
height
:
36px
;
line-height
:
36px
;
}
.atooltip
{
background
:
#fff
!
important
;
border
:
none
!
important
;
}
.tipContent
{
width
:
100%
;
height
:
100%
;
background
:
#fff
!
important
;
}
</
style
>
\ No newline at end of file
linkwe-ui/src/components/zmyComponents/zmyDialog.vue
已删除
100644 → 0
浏览文件 @
6e37a70e
<!-- 搜索表单 -->
<
template
>
<div
class=
"ces-search"
>
<el-dialog
:title=
"title"
:visible.sync=
"dialogFormVisible"
:close-on-click-modal=
"false"
:show-close=
"false"
:width=
"dialogWidth"
>
<el-form
:size=
"size"
inline
:model=
'dialogData'
:label-width=
"dialogLabelWidth"
:rules=
"rules"
:ref=
"dialogRef"
style=
""
>
<el-form-item
v-for=
'item in dialogForm'
:label=
"item.label"
:key=
'item.prop'
:prop=
"item.prop"
:style=
"
{width:(item.width?item.width:'40%')}">
<!-- 输入框 -->
<el-input
v-if=
"item.type==='Input'"
:placeholder=
'item.placeholder'
:type=
"item.inputType || 'text'"
v-model=
"dialogData[item.prop]"
size=
"mini"
:disabled=
"item.disabled || false"
></el-input>
<!-- 输入框 -->
<el-input
v-if=
"item.type==='TextArea'"
:placeholder=
'item.placeholder'
type=
'textarea'
:rows=
"2"
v-model=
"dialogData[item.prop]"
size=
"mini"
:disabled=
"item.disabled || false"
></el-input>
<!-- 下拉框 -->
<el-select
v-if=
"item.type==='Select'"
:placeholder=
'item.placeholder'
v-model=
"dialogData[item.prop]"
size=
"mini"
@
change=
"item.change(dialogData[item.prop])"
:multiple=
"item.multiple || false"
:disabled=
"item.disabled || false"
>
<el-option
v-for=
"op in item.options"
:label=
"op.label"
:value=
"op.value"
:key=
"op.value"
></el-option>
</el-select>
<!-- 单选 -->
<el-radio-group
v-if=
"item.type==='Radio'"
v-model=
"dialogData[item.prop]"
:disabled=
"item.disabled || false"
>
<el-radio
v-for=
"ra in item.radios"
:label=
"ra.value"
:key=
"ra.value"
>
{{
ra
.
label
}}
</el-radio>
</el-radio-group>
<!-- 单选按钮 -->
<el-radio-group
v-if=
"item.type==='RadioButton'"
v-model=
"dialogData[item.prop]"
@
change=
"item.change && item.change(dialogData[item.prop])"
:disabled=
"item.disabled || false"
>
<el-radio-button
v-for=
"ra in item.radios"
:label=
"ra.value"
:key=
"ra.value"
>
{{
ra
.
label
}}
</el-radio-button>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group
v-if=
"item.type==='Checkbox'"
v-model=
"dialogData[item.prop]"
:disabled=
"item.disabled || false"
>
<el-checkbox
v-for=
"ch in item.options"
:label=
"ch.value"
:key=
"ch.value"
@
change=
"item.change(dialogData[item.prop])"
>
{{
ch
.
label
}}
</el-checkbox>
</el-checkbox-group>
<!-- 日期 -->
<el-date-picker
v-if=
"item.type==='Date'"
v-model=
"dialogData[item.prop]"
format=
"yyyy-MM-dd"
value-format=
"yyyy-MM-dd"
:disabled=
"item.disabled || false"
></el-date-picker>
<!-- 时间 -->
<el-time-select
v-if=
"item.type==='Time'"
arrow-control
value-format=
'HH:mm'
:picker-options=
"
{ start: '05:00', step: '00:05', end: '23:30'}"
v-model="dialogData[item.prop]" :disabled="item.disabled || false">
</el-time-select>
<!-- 日期时间 -->
<el-date-picker
v-if=
"item.type==='DateTime'"
type=
'datetime'
format=
"yyyy-MM-dd HH:mm:ss"
value-format=
"yyyy-MM-dd HH:mm:ss"
v-model=
"dialogData[item.prop]"
:disabled=
"item.disable && item.disable(dialogData[item.prop])"
></el-date-picker>
<!-- 滑块 -->
<!--
<el-slider
v-if=
"item.type==='Slider'"
v-model=
"dialogData[item.prop]"
></el-slider>
-->
<!-- 开关 -->
<el-switch
v-if=
"item.type==='Switch'"
v-model=
"dialogData[item.prop]"
:disabled=
"item.disabled || false"
></el-switch>
<!-- 文件 -->
<el-upload
v-if=
"item.type==='UploadFile'"
class=
"upload-demo"
:action=
"item.action"
:on-preview=
"handlePreview"
:on-success=
"item.onSuccess"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"1"
:on-exceed=
"handleExceed"
:file-list=
"item.fileList"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<span
v-if=
"dialogData[item.prop]"
>
{{
dialogData
[
item
.
prop
].
slice
(
dialogData
[
item
.
prop
].
indexOf
(
'
/uploads/
'
)
+
18
)
||
''
}}
</span>
</el-upload>
<!-- 图片展示上传 -->
<el-upload
v-if=
"item.type==='UploadImg'"
class=
"avatar-uploader"
:action=
"item.action"
:show-file-list=
"false"
:on-success=
"item.onSuccess"
:before-upload=
"beforeAvatarUpload"
>
<img
v-if=
"dialogData[item.prop]"
:src=
"dialogData[item.prop]"
class=
"avatar"
>
<i
v-else
class=
"el-icon-plus avatar-uploader-icon"
></i>
</el-upload>
<el-button
v-if=
"item.type==='Button'"
type=
"text"
@
click=
"item.change(dialogData)"
>
<i
:class=
"item.class"
>
{{
item
.
text
}}
</i></el-button>
</el-form-item>
<slot
name=
"content"
></slot>
<el-form-item
class=
"dialog-footer"
>
<el-button
v-for=
"btnItem in dialogBtns"
:key=
"btnItem.label"
:type=
"btnItem.type || 'primary'"
style=
"border-color:#fff"
:size=
"btnItem.size || 'medium'"
@
click=
"btnItem.handle(dialogData)"
>
{{
btnItem
.
label
}}
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</
template
>
<
script
>
export
default
{
props
:{
dialogFormVisible
:{
type
:
Boolean
,
default
:
true
},
dialogLabelWidth
:{
type
:
String
,
default
:
'
100px
'
},
dialogRef
:{
type
:
String
,
default
:
'
ruleForm
'
},
dialogWidth
:{
type
:
String
,
default
:
'
60%
'
},
size
:{
type
:
String
,
default
:
'
medium
'
},
rules
:{
type
:
Object
,
default
:{}
},
dialogForm
:{
//表单框类型数组
type
:
Array
,
default
:[]
},
dialogData
:{
//表单数据
type
:
Object
,
default
:{}
},
title
:{
//表单数据
type
:
String
,
default
:
'
操作
'
},
dialogBtns
:{
type
:
Array
,
default
:[]
}
},
data
()
{
return
{
};
},
methods
:{
handleRemove
(
file
,
fileList
)
{
console
.
log
(
file
,
fileList
);
},
handlePreview
(
file
)
{
console
.
log
(
file
,
111
);
},
handleExceed
(
files
,
fileList
)
{
this
.
$message
.
warning
(
`当前限制选择 1 个文件,本次选择了
${
files
.
length
}
个文件,共选择了
${
files
.
length
+
fileList
.
length
}
个文件`
);
},
beforeRemove
(
file
,
fileList
)
{
return
this
.
$confirm
(
`确定移除
${
file
.
name
}
?`
);
},
// 图片上传限制
beforeAvatarUpload
(
file
)
{
// const isJPG = file.type === 'image/jpeg';
// const isLt2M = file.size / 1024 / 1024
<
2
;
// if (!isJPG) {
// this.$message.error('上传头像图片只能是 JPG 格式!');
// }
// if (!isLt2M) {
// this.$message.error('上传头像图片大小不能超过 2MB!');
// }
// return isJPG && isLt2M;
}
}
}
</
script
>
<
style
scoped
lang=
'scss'
>
.dialog-footer
{
padding
:
40px
0
0
0
;
width
:
100%
;
text-align
:
center
;
}
/
deep
/
.el-form-item__content
{
width
:
70%
!
important
;
}
/
deep
/
.el-date-editor.el-input
,
.el-date-editor.el-input__inner
{
width
:
100%
!
important
;
}
/
deep
/
.el-dialog__header
{
// background-color: #2EA39D;
text-align
:
center
;
}
/
deep
/
.el-dialog__title
{
color
:
#000
;
// font-weight: 550;
font-size
:
22px
;
}
/
deep
/
.el-select
{
width
:
100%
!
important
;
}
.avatar-uploader
.el-upload
{
border
:
1px
dashed
#d9d9d9
;
border-radius
:
6px
;
cursor
:
pointer
;
position
:
relative
;
overflow
:
hidden
;
}
.avatar-uploader
.el-upload
:hover
{
border-color
:
#409EFF
;
}
.avatar-uploader-icon
{
font-size
:
28px
;
color
:
#8c939d
;
width
:
100px
;
height
:
100px
;
line-height
:
100px
;
text-align
:
center
;
}
.avatar
{
width
:
100px
;
height
:
100px
;
display
:
block
;
}
</
style
>
linkwe-ui/src/components/zmyComponents/zmyTable.vue
已删除
100644 → 0
浏览文件 @
6e37a70e
<
template
>
<section
class=
"ces-table-page"
>
<section
class=
"ces-search"
>
<!-- 搜索内容 -->
<el-form
:size=
"size"
inline
label-width=
"80px"
ref=
"form"
v-if=
'isSearch'
>
<el-form-item
v-for=
'item in searchForm'
:key=
'item.prop'
:prop=
"item.prop"
>
<el-input
v-if=
"item.type==='Input'"
:disabled=
"item.disabled || false"
v-model=
"searchData[item.prop]"
:placeholder=
'item.label'
size=
"mini"
></el-input>
<!-- 下拉框 -->
<el-select
v-if=
"item.type==='Select'"
:disabled=
"item.disabled || false"
:placeholder=
'item.label'
v-model=
"searchData[item.prop]"
size=
"mini"
@
change=
"item.change(searchData[item.prop])"
>
<el-option
v-for=
"op in item.options"
:label=
"op.label"
:value=
"op.value"
:key=
"op.value"
></el-option>
</el-select>
<!-- 单选 -->
<el-radio-group
v-if=
"item.type==='Radio'"
v-model=
"searchData[item.prop]"
>
<el-radio
v-for=
"ra in item.radios"
:label=
"ra.value"
:key=
"ra.value"
>
{{
ra
.
label
}}
</el-radio>
</el-radio-group>
<!-- 单选按钮 -->
<el-radio-group
v-if=
"item.type==='RadioButton'"
v-model=
"searchData[item.prop]"
@
change=
"item.change && item.change(searchData[item.prop])"
>
<el-radio-button
v-for=
"ra in item.radios"
:label=
"ra.value"
:key=
"ra.value"
>
{{
ra
.
label
}}
</el-radio-button>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group
v-if=
"item.type==='Checkbox'"
v-model=
"searchData[item.prop]"
>
<el-checkbox
v-for=
"ch in item.checkboxs"
:label=
"ch.value"
:key=
"ch.value"
>
{{
ch
.
label
}}
</el-checkbox>
</el-checkbox-group>
<!-- 日期valueFormat对于周 不能用 -->
<el-date-picker
v-if=
"item.type==='Date'"
:type=
"item.dateType || 'date'"
:placeholder=
'item.label'
:format=
"item.format|| 'yyyy-MM-dd'"
:value-format=
"item.valueFormat|| 'yyyy-MM-dd'"
v-model=
"searchData[item.prop]"
></el-date-picker>
<!-- 时间 -->
<el-time-select
v-if=
"item.type==='Time'"
v-model=
"searchData[item.prop]"
:picker-options=
"
{ start: '08:30', step: '00:15', end: '18:30' }">
</el-time-select>
<!-- 日期时间 -->
<el-date-picker
v-if=
"item.type==='DateTime'"
type=
'datetime'
v-model=
"searchData[item.prop]"
:disabled=
"item.disable && item.disable(searchData[item.prop])"
></el-date-picker>
<!-- 滑块 -->
<el-slider
v-if=
"item.type==='Slider'"
v-model=
"searchData[item.prop]"
></el-slider>
<!-- 开关 -->
<el-switch
v-if=
"item.type==='Switch'"
v-model=
"searchData[item.prop]"
></el-switch>
<!-- 搜索按钮 -->
<el-button
v-if=
"item.type==='search'"
:size=
"size || item.size"
type=
"danger"
@
click=
"item.handle(that)"
>
查询
</el-button>
</el-form-item>
</el-form>
<!-- 表格操作按钮 -->
<div
class=
"ces-handle"
v-if=
'isButton'
>
<el-button
v-for=
'item in searchBtns'
:key=
'item.label'
:size=
"size || item.size"
:type=
"item.type"
:icon=
'item.icon'
@
click=
"item.handle(that)"
>
{{
item
.
label
}}
</el-button>
<!-- 导入 -->
<el-upload
v-if=
'isImport'
class=
"improt"
ref=
"upload"
:on-success=
"importSuccess"
:action=
"importUrl"
:show-file-list=
"false"
:auto-upload=
"true"
:data=
'importData'
>
<el-button
type=
"warning"
slot=
"trigger"
>
导入
</el-button>
</el-upload>
</div>
</section>
<!-- 数据表格 -->
<section
class=
"ces-table"
v-if=
'isTable'
>
<el-table
:header-cell-style=
"
{height: '60px',padding: '0','font-size': '12px',color: '#8590a6'}"
:row-style="{'font-size': '12px',color: '#212121'}"
align='center'
stripe fit
:data='tableData'
:size='size'
height="100%"
style="width: 100%"
:border='isBorder'
@select='select'
@select-all='selectAll'
v-loading='loading'
:defaultSelections='defaultSelections'
ref="cesTable">
<el-table-column
v-if=
"isSelection"
type=
"selection"
align=
"center"
></el-table-column>
<el-table-column
v-if=
"isIndex"
type=
"index"
:label=
"indexLabel"
align=
"center"
width=
"80"
></el-table-column>
<!-- 数据栏 -->
<el-table-column
v-for=
"(item) in tableCols"
:key=
"item.id"
:prop=
"item.prop"
:label=
"item.label"
:width=
"item.width"
:align=
"'center'||item.align"
:render-header=
"item.require?renderHeader:null"
>
<template
slot-scope=
"scope"
>
<!-- 按钮-->
<template
v-if=
"item.type === 'Button'"
>
<el-button
v-for=
"btnItem in item.btnList"
:key=
"btnItem.label"
type=
"text"
@
click=
"btnItem.handle(that,scope.row)"
>
<i
:class=
"btnItem.class"
>
{{
btnItem
.
label
||
btnItem
.
textEvent
(
that
,
scope
.
row
)
}}
</i>
</el-button>
<!--
<el-switch
v-if=
"isSwitch"
v-model=
"scope.row.switch"
@
change=
'item.switchHandle'
>
</el-switch>
-->
</
template
>
<el-input
v-if=
"item.type==='input'"
v-model=
"scope.row[item.prop]"
:type=
"item.inputType||'text'"
@
blur=
'($event)=> item.submit($event,scope.row)'
@
input=
'($event)=> item.handle($event,scope.row)'
></el-input>
<!-- html -->
<span
v-if=
"item.type==='html'"
v-html=
"item.html(scope.row)"
></span>
<!-- 下拉框 -->
<el-select
v-if=
"item.type==='select'"
v-model=
"scope.row[item.prop]"
:size=
"size || btn.size"
:props=
"item.props"
:disabled=
"item.isDisabled && item.isDisabled(scope.row)"
@
change=
'item.change && item.change(that,scope.row)'
>
<el-option
v-for=
"op in item.options"
:label=
"op.label"
:value=
"op.value"
:key=
"op.value"
></el-option>
</el-select>
<!-- 单选 -->
<el-radio-group
v-if=
"item.type==='radio'"
v-model=
"scope.row[item.prop]"
:disabled=
"item.isDisabled && item.isDisabled(scope.row)"
:size=
"size || btn.size"
@
change=
'item.change && item.change(that,scope.row)'
>
<el-radio
v-for=
"ra in item.radios"
:label=
"ra.value"
:key=
"ra.value"
>
{{ra.label}}
</el-radio>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group
v-if=
"item.type==='checkbox'"
v-model=
"scope.row[item.prop]"
:disabled=
"item.isDisabled && item.isDisabled(scope.row)"
:size=
"size || btn.size"
@
change=
'item.change && item.change(that,scope.row)'
>
<el-checkbox
v-for=
"ra in item.checkboxs"
:label=
"ra.value"
:key=
'ra.value'
>
{{ra.label}}
</el-checkbox>
</el-checkbox-group>
<!-- 评价 -->
<el-rate
v-if=
"item.type==='rate'"
v-model=
"scope.row[item.prop]"
:disabled=
"item.isDisabled && item.isDisabled(scope.row)"
:size=
"size || btn.size"
@
change=
'item.change && item.change(scope.row)'
></el-rate>
<!-- 开关 -->
<el-switch
v-if=
"item.type==='switch'"
v-model=
"scope.row[item.prop]"
:size=
"size || btn.size"
:active-value=
'item.values&&item.values[0]'
:inactive-value=
'item.values&&item.values[1]'
:disabled=
"item.isDisabled && item.isDisabled(scope.row)"
@
change=
'item.change && item.change(scope.row)'
></el-switch>
<!-- 图像 -->
<img
v-if=
"item.type==='image'"
:src=
"scope.row[item.prop]"
@
click=
"item.handle && item.handle(scope.row)"
/>
<!-- 滑块 -->
<el-slider
v-if=
"item.type==='slider'"
v-model=
"scope.row[item.prop]"
:disabled=
"item.isDisabled && item.isDisabled(scope.row)"
:size=
"size || btn.size"
@
change=
'item.change && item.change(scope.row)'
></el-slider>
<!-- <el-input v-if="item.type='input'" v-model="scope.row[item.prop]" :type="item.inputType||'text'" @blur='item.blurEvent(row)'></el-input> -->
<!-- 默认 -->
<span
v-if=
"!item.type"
@
click=
"item.handle(scope.row)"
:style=
"item.itemStyle && item.itemStyle(scope.row)"
:size=
"size || btn.size"
:class=
"item.itemClass && item.item.itemClass(scope.row)"
>
{{(item.formatter
&&
item.formatter(scope.row)) || scope.row[item.prop]}}
</span>
<a
v-if=
"item.type == 'a'"
style=
"color:blue"
:href=
'scope.row[item.prop]'
target=
"_blank"
>
{{scope.row[item.prop] ==null ?'未上传附件':'附件下载'}}
</a>
</template>
</el-table-column>
</el-table>
</section>
<!-- 分页 -->
<slot
name=
"mid"
></slot>
<section
class=
"ces-pagination"
v-if=
'isPagination'
>
<el-pagination
style=
'display: flex;justify-content: center;height: 100%;align-items: center;padding: 20px 0 20px 0;'
@
current-change=
"handleCurrentChange"
@
size-change=
"handleSizeChange"
background
layout=
"total,sizes ,prev, pager, next, jumper"
:page-size=
"tablePage.offset"
:current-page.sync=
"tablePage.page"
:total=
"tablePage.total"
></el-pagination>
</section>
<!--弹窗 -->
</section>
</template>
<
script
>
export
default
{
props
:{
that
:
{
type
:
Object
,
default
:
this
},
// 表格型号:mini,medium,small
size
:{
type
:
String
,
default
:
'
medium
'
},
isBorder
:{
type
:
Boolean
,
default
:
true
},
loading
:{
type
:
Boolean
,
default
:
false
},
// 表格操作
isButton
:{
type
:
Boolean
,
default
:
false
},
isImport
:{
type
:
Boolean
,
default
:
false
},
importUrl
:{
type
:
String
,
default
:
''
},
importData
:{
type
:
Object
,
default
:()
=>
({})},
isSearch
:{
type
:
Boolean
,
default
:
false
},
searchBtns
:{
type
:
Array
,
default
:()
=>
[]},
// 表格数据
tableData
:{
type
:
Array
,
default
:()
=>
[]},
// 表格列配置
tableCols
:{
type
:
Array
,
default
:()
=>
[]},
// 是否显示表格复选框
isSelection
:{
type
:
Boolean
,
default
:
false
},
defaultSelections
:{
type
:[
Array
,
Object
],
default
:()
=>
null
},
// 是否显示表格索引
isIndex
:{
type
:
Boolean
,
default
:
false
},
indexLabel
:
{
type
:
String
,
default
:
'
序号
'
},
// 是否显示分页
isPagination
:{
type
:
Boolean
,
default
:
true
},
// 分页数据
tablePage
:{
type
:
Object
,
default
:()
=>
({
offset
:
10
,
page
:
1
,
total
:
0
})},
searchForm
:{
type
:
Array
,
default
:()
=>
[]},
// searchHandle:{ type:Array, default:()=>[] },
searchData
:{
type
:
Object
,
default
:()
=>
{}},
labelWidth
:{
type
:
String
,
default
:
'
100px
'
},
isTable
:{
type
:
Boolean
,
default
:
true
},
},
data
(){
return
{
options
:{
nianciOption
:[]}
}
},
watch
:{
'
defaultSelections
'
(
val
)
{
this
.
$nextTick
(
function
(){
if
(
Array
.
isArray
(
val
)){
val
.
forEach
(
row
=>
{
this
.
$refs
.
cesTable
.
toggleRowSelection
(
row
)
})
}
else
{
this
.
$refs
.
cesTable
.
toggleRowSelection
(
val
)
}
})
}
},
methods
:{
niancichange
(
value
){
console
.
log
(
this
.
searchData
)
},
// 表格勾选
select
(
rows
,
row
){
this
.
$emit
(
'
select
'
,
rows
,
row
);
},
// 全选
selectAll
(
rows
){
this
.
$emit
(
'
select-all
'
,
rows
)
},
//
handleCurrentChange
(
val
){
console
.
log
(
val
)
this
.
tablePage
.
page
=
val
;
this
.
$emit
(
'
currentchange
'
,
val
);
},
handleSizeChange
(
val
)
{
console
.
log
(
val
)
this
.
tablePage
.
offset
=
val
;
this
.
$emit
(
'
sizechange
'
,
val
);
},
importSuccess
(
res
,
listData
)
{
console
.
log
(
res
,
listData
,
"
打印上传后的结果
"
);
const
h
=
this
.
$createElement
;
const
newDatas
=
[]
if
(
res
.
code
==
1
){
res
.
data
.
forEach
(
el
=>
{
newDatas
.
push
(
h
(
'
p
'
,
null
,
el
.
name
+
'
-
'
+
el
.
msg
))
})
}
return
res
.
code
==
1
?
this
.
$notify
(
{
title
:
res
.
msg
,
dangerouslyUseHTMLString
:
true
,
message
:
h
(
'
div
'
,
null
,
newDatas
),
duration
:
5000
},
setTimeout
(()
=>
{
location
.
reload
()
},
2000
)
)
:
this
.
$message
.
error
(
'
上传失败,原因:
'
+
res
.
msg
);
},
renderHeader
(
h
,
obj
)
{
return
h
(
'
span
'
,{
class
:
'
ces-table-require
'
},
obj
.
column
.
label
)
},
},
created
(){
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.ces-search
{
padding
:
10px
0
20px
0
;
display
:
flex
;
justify-content
:
space-between
;
button
{
// margin:2px 0;
color
:
#FFFFFF
;
background-color
:
#1890ff
;
border-color
:
#1890ff
;
border
:none
;
}
.ces-handle
{
display
:
flex
;
justify-content
:
flex-end
;
button
{
margin
:
0
10px
0
0
;
background-color
:
#1890ff
;
border-color
:
#1890ff
;
border
:none
;
}
}
/
deep
/
.el-input__inner
{
height
:
35px
;
}
}
.
ces-table-require
:
:
before
{
content
:
'*'
;
color
:
F4483E
;
}
.el-table__row
td
{
text-align
:
center
!
important
;
}
.has-gutter
tr
th
{
text-align
:
center
!
important
;
}
.el-table__body-wrapper
{
height
:
500px
!
important
;
}
/
deep
/
.el-table__body
,
.el-table__footer
,
.el-table__header
{
table-layout
:
unset
!
important
;
}
/
deep
/
.el-table__header
{
table-layout
:
unset
!
important
;
}
/
deep
/
.el-form-item
{
margin
:
0
10px
0
0
;
width
:
120px
!
important
;
}
/
deep
/
.el-date-editor.el-input
{
width
:
120px
!
important
;
}
/
deep
/
.el-input--suffix
.el-input__inner
{
padding-left
:
10px
;
}
/
deep
/
.el-input__prefix
{
display
:
none
;
}
/
deep
/
.el-table__body-wrapper
{
height
:
auto
!
important
;
}
.improt
{
button
{
padding
:
9px
15px
!
important
;}}
</
style
>
\ No newline at end of file
linkwe-ui/src/config.js
浏览文件 @
6bded6bf
module
.
exports
=
{
import
{
getToken
}
from
'
@/utils/auth
'
window
.
CONFIG
=
{
/**
* 是否系统布局配置
*/
...
...
@@ -28,10 +30,12 @@ module.exports = {
errorLog
:
'
production
'
,
services
:
{
wecom
:
"
wecom
"
,
wecom
:
"
wecom
"
,
wecom
:
"
wecom
"
,
wecom
:
"
wecom
"
,
wecom
:
"
wecom
"
,
}
wecom
:
'
/wecom
'
,
}
,
get
headers
()
{
return
{
Authorization
:
'
Bearer
'
+
getToken
()
}
}
,
}
module
.
exports
=
window
.
CONFIG
linkwe-ui/src/main.js
浏览文件 @
6bded6bf
...
...
@@ -9,11 +9,13 @@ import Element from 'element-ui'
import
'
./styles/element-variables.scss
'
Vue
.
use
(
Element
,
{
size
:
Cookies
.
get
(
'
size
'
)
||
'
small
'
// set element-ui default size
size
:
Cookies
.
get
(
'
size
'
)
||
'
small
'
,
// set element-ui default size
})
import
'
@/styles/common.scss
'
// common css
import
'
@/styles/index.scss
'
// global css
import
config
from
'
@/config
'
import
App
from
'
./App
'
import
store
from
'
./store
'
import
router
from
'
./router
'
...
...
@@ -21,16 +23,24 @@ import permission from './directive/permission'
import
'
./assets/icons
'
// icon
import
'
./permission
'
// permission control
import
{
getDicts
}
from
"
@/api/system/dict/data
"
;
import
{
getConfigKey
}
from
"
@/api/system/config
"
;
import
{
parseTime
,
resetForm
,
addDateRange
,
selectDictLabel
,
selectDictLabels
,
download
,
handleTree
}
from
"
@/utils/common
"
;
import
Pagination
from
"
@/components/Pagination
"
;
import
{
getDicts
}
from
'
@/api/system/dict/data
'
import
{
getConfigKey
}
from
'
@/api/system/config
'
import
{
parseTime
,
resetForm
,
addDateRange
,
selectDictLabel
,
selectDictLabels
,
download
,
handleTree
,
}
from
'
@/utils/common
'
import
Pagination
from
'
@/components/Pagination
'
//自定义表格工具扩展
import
RightToolbar
from
"
@/components/RightToolbar
"
import
config
from
'
@/config
'
import
RightToolbar
from
'
@/components/RightToolbar
'
import
Upload
from
'
@/components/Upload
'
// 全局方法挂载
window
.
config
=
config
Vue
.
prototype
.
getDicts
=
getDicts
Vue
.
prototype
.
getConfigKey
=
getConfigKey
Vue
.
prototype
.
parseTime
=
parseTime
...
...
@@ -41,21 +51,22 @@ Vue.prototype.selectDictLabels = selectDictLabels
Vue
.
prototype
.
download
=
download
Vue
.
prototype
.
handleTree
=
handleTree
Vue
.
prototype
.
msgSuccess
=
function
(
msg
)
{
this
.
$message
({
showClose
:
true
,
message
:
msg
,
type
:
"
success
"
});
Vue
.
prototype
.
msgSuccess
=
function
(
msg
)
{
this
.
$message
({
showClose
:
true
,
message
:
msg
,
type
:
'
success
'
})
}
Vue
.
prototype
.
msgError
=
function
(
msg
)
{
this
.
$message
({
showClose
:
true
,
message
:
msg
,
type
:
"
error
"
});
Vue
.
prototype
.
msgError
=
function
(
msg
)
{
this
.
$message
({
showClose
:
true
,
message
:
msg
,
type
:
'
error
'
})
}
Vue
.
prototype
.
msgInfo
=
function
(
msg
)
{
this
.
$message
.
info
(
msg
)
;
Vue
.
prototype
.
msgInfo
=
function
(
msg
)
{
this
.
$message
.
info
(
msg
)
}
// 全局组件挂载
Vue
.
component
(
'
Pagination
'
,
Pagination
)
Vue
.
component
(
'
RightToolbar
'
,
RightToolbar
)
Vue
.
component
(
'
Upload
'
,
Upload
)
Vue
.
use
(
permission
)
...
...
@@ -74,5 +85,5 @@ new Vue({
el
:
'
#app
'
,
router
,
store
,
render
:
h
=>
h
(
App
)
render
:
(
h
)
=>
h
(
App
),
})
linkwe-ui/src/utils/request.js
浏览文件 @
6bded6bf
...
...
@@ -10,69 +10,71 @@ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL
:
process
.
env
.
VUE_APP_BASE_API
,
// 超时
timeout
:
10000
timeout
:
10000
,
})
// request拦截器
service
.
interceptors
.
request
.
use
(
config
=>
{
// 是否需要设置 token
const
isToken
=
(
config
.
headers
||
{}).
isToken
===
false
if
(
getToken
()
&&
!
isToken
)
{
config
.
headers
[
'
Authorization
'
]
=
'
Bearer
'
+
getToken
()
// 让每个请求携带自定义token 请根据实际情况自行修改
service
.
interceptors
.
request
.
use
(
(
config
)
=>
{
// 是否需要设置 token
const
isToken
=
(
config
.
headers
||
{}).
isToken
===
false
if
(
getToken
()
&&
!
isToken
)
{
config
.
headers
=
window
.
CONFIG
.
headers
// 让每个请求携带自定义token 请根据实际情况自行修改
}
return
config
},
(
error
)
=>
{
console
.
log
(
error
)
Promise
.
reject
(
error
)
}
return
config
},
error
=>
{
console
.
log
(
error
)
Promise
.
reject
(
error
)
})
)
// 响应拦截器
service
.
interceptors
.
response
.
use
(
res
=>
{
// 未设置状态码则默认成功状态
const
code
=
res
.
data
.
code
||
200
;
// 获取错误信息
const
msg
=
errorCode
[
code
]
||
res
.
data
.
msg
||
errorCode
[
'
default
'
]
if
(
code
===
200
)
{
return
res
.
data
}
else
if
(
code
===
401
)
{
// MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
// confirmButtonText: '重新登录',
// cancelButtonText: '取消',
// type: 'warning'
// }
// ).then(() => {
// store.dispatch('LogOut').then(() => {
// location.href = '/index';
// })
// })
}
else
if
(
code
===
500
)
{
Message
({
message
:
msg
,
type
:
'
error
'
})
return
Promise
.
reject
(
new
Error
(
msg
))
}
else
{
Notification
.
error
({
title
:
msg
})
return
Promise
.
reject
(
'
error
'
)
}
},
error
=>
{
console
.
log
(
'
err
'
+
error
)
let
{
message
}
=
error
;
if
(
message
==
"
Network Error
"
)
{
message
=
"
后端接口连接异常
"
;
service
.
interceptors
.
response
.
use
(
(
res
)
=>
{
// 未设置状态码则默认成功状态
const
code
=
res
.
data
.
code
||
200
// 获取错误信息
const
msg
=
errorCode
[
code
]
||
res
.
data
.
msg
||
errorCode
[
'
default
'
]
if
(
code
===
200
)
{
return
res
.
data
}
else
if
(
code
===
401
)
{
// MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
// confirmButtonText: '重新登录',
// cancelButtonText: '取消',
// type: 'warning'
// }
// ).then(() => {
// store.dispatch('LogOut').then(() => {
// location.href = '/index';
// })
// })
}
else
if
(
code
===
500
)
{
Message
({
message
:
msg
,
type
:
'
error
'
,
})
return
Promise
.
reject
(
new
Error
(
msg
))
}
else
{
Notification
.
error
({
title
:
msg
,
})
return
Promise
.
reject
(
'
error
'
)
}
else
if
(
message
.
includes
(
"
timeout
"
))
{
message
=
"
系统接口请求超时
"
;
}
else
if
(
message
.
includes
(
"
Request failed with status code
"
))
{
message
=
"
系统接口
"
+
message
.
substr
(
message
.
length
-
3
)
+
"
异常
"
;
},
(
error
)
=>
{
console
.
log
(
'
err
'
+
error
)
let
{
message
}
=
error
if
(
message
==
'
Network Error
'
)
{
message
=
'
后端接口连接异常
'
}
else
if
(
message
.
includes
(
'
timeout
'
))
{
message
=
'
系统接口请求超时
'
}
else
if
(
message
.
includes
(
'
Request failed with status code
'
))
{
message
=
'
系统接口
'
+
message
.
substr
(
message
.
length
-
3
)
+
'
异常
'
}
Message
({
message
:
message
,
type
:
'
error
'
,
duration
:
5
*
1000
duration
:
5
*
1000
,
})
return
Promise
.
reject
(
error
)
}
...
...
linkwe-ui/src/views/material/audio.vue
浏览文件 @
6bded6bf
...
...
@@ -17,9 +17,7 @@ export default {
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
userId
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
id
)
+
''
},
},
}
...
...
@@ -27,13 +25,9 @@ export default {
<
template
>
<MaPage
ref=
"page"
type=
"1"
@
listChange=
"listChange"
>
<el-table
v-loading=
"loading"
:data=
"userList"
@
selection-change=
"handleSelectionChange"
>
<el-table
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
/>
<el-table-column
label=
"语音"
align=
"center"
prop=
"
userName
"
/>
<el-table-column
label=
"语音"
align=
"center"
prop=
"
materialUrl
"
/>
<el-table-column
label=
"时长"
align=
"center"
...
...
@@ -61,7 +55,7 @@ export default {
size=
"mini"
type=
"text"
icon=
"el-icon-key"
@
click=
"
handleResetPw
d(scope.row)"
@
click=
"
$refs.page.downloa
d(scope.row)"
v-hasPermi=
"['system:user:resetPwd']"
>
下载
</el-button
>
...
...
@@ -69,7 +63,7 @@ export default {
size=
"mini"
type=
"text"
icon=
"el-icon-edit"
@
click=
"
handleUpdate
(scope.row)"
@
click=
"
$refs.page.edit
(scope.row)"
v-hasPermi=
"['system:user:edit']"
>
修改
</el-button
>
...
...
@@ -78,7 +72,7 @@ export default {
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"
handleDelet
e(scope.row)"
@
click=
"
$refs.page.remov
e(scope.row)"
v-hasPermi=
"['system:user:remove']"
>
删除
</el-button
>
...
...
linkwe-ui/src/views/material/components/MaPage.vue
浏览文件 @
6bded6bf
...
...
@@ -12,6 +12,7 @@ import {
remove
,
moveGroup
,
}
from
'
@/api/material
'
export
default
{
name
:
'
MaPage
'
,
components
:
{},
...
...
@@ -36,6 +37,7 @@ export default {
pageSize
:
10
,
categoryId
:
''
,
search
:
''
,
mediaType
:
'
4
'
,
},
list
:
[],
// 列表
total
:
0
,
// 总条数
...
...
@@ -62,6 +64,7 @@ export default {
typeTitle
:
[
'
图片
'
,
'
语音
'
,
'
视频
'
,
'
普通文件
'
,
'
文本
'
],
form
:
{},
// 素材表单
fileUrl
:
''
,
dialogVisible
:
false
,
// 素材表格对话框显隐
// 表单校验
rules
:
Object
.
freeze
({
...
...
@@ -78,6 +81,7 @@ export default {
watch
:
{},
computed
:
{},
created
()
{
this
.
query
.
mediaType
=
this
.
type
this
.
getTree
()
this
.
getList
()
},
...
...
@@ -260,7 +264,7 @@ export default {
style=
"width: 300px;"
/>
<el-button
class=
"ml10"
@
click=
"getList(1)"
>
搜索
</el-button>
<el-button
@
click=
"remove"
:disabled=
"selected.length"
<el-button
@
click=
"remove"
:disabled=
"selected.length
=== 0
"
>
删除
</el-button
>
<el-popover
placement=
"top"
width=
"260"
v-model=
"groupDialogVisible"
>
...
...
@@ -280,7 +284,10 @@ export default {
>
确定
</el-button
>
</div>
<el-button
slot=
"reference"
class=
"ml10"
:disabled=
"selected.length"
<el-button
slot=
"reference"
class=
"ml10"
:disabled=
"selected.length === 0"
>
移动分组
</el-button
>
</el-popover>
...
...
@@ -292,7 +299,7 @@ export default {
</div>
</div>
<div
v-loading=
"loading"
>
<div
v-loading=
"loading"
class=
"mt20"
>
<slot></slot>
</div>
...
...
@@ -319,6 +326,7 @@ export default {
maxlength=
"20"
show-word-limit
placeholder=
"分类名称"
@
keyup.enter.native=
"treeSubmit"
></el-input>
</el-form-item>
<!--
<el-form-item
label=
"所属分类"
v-if=
"treeForm.pName"
>
...
...
@@ -346,6 +354,7 @@ export default {
:props=
"groupProps"
></el-cascader>
</el-form-item>
<el-form-item
label=
"文本内容"
prop=
"content"
v-if=
"type === '4'"
>
<el-input
v-model=
"form.content"
...
...
@@ -356,63 +365,39 @@ export default {
</el-form-item>
<el-form-item
label=
"图片"
prop=
"materialUrl"
v-else-if=
"type === '0'"
>
<el-upload
action
:show-file-list=
"false"
:on-success=
"d"
:before-upload=
"d"
>
<img
v-if=
"imageUrl"
:src=
"imageUrl"
/>
<i
v-else
class=
"el-icon-plus avatar-uploader-icon"
></i>
</el-upload>
<div>
支持JPG,PNG格式,图片大小不超过2M,建议上传宽高1:1的图片
</div>
<upload
:fileUrl.sync=
"form.fileUrl"
:mediaType=
"type"
>
<div
slot=
"tip"
>
支持JPG,PNG格式,图片大小不超过2M,建议上传宽高1:1的图片
</div>
</upload>
</el-form-item>
<el-form-item
label=
"语音"
prop=
"materialUrl"
v-else-if=
"type === '1'"
>
<el-upload
action=
""
:on-remove=
"d"
:before-remove=
"d"
multiple
:limit=
"3"
:on-exceed=
"d"
:file-list=
"[
{ name: 'name', url: 'url' }]"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
<upload
:fileUrl.sync=
"form.fileUrl"
:mediaType=
"type"
>
<div
slot=
"tip"
>
只能上传amr格式的语音文件。单个文件大小不超过2M,时长不超过1分钟
</div>
</
el-
upload>
</upload>
</el-form-item>
<template
v-else-if=
"type === '2'"
>
<el-form-item
label=
"视频"
prop=
"materialUrl"
>
<el-upload
action
:show-file-list=
"false"
:on-success=
"d"
:before-upload=
"d"
>
<img
v-if=
"imageUrl"
:src=
"imageUrl"
/>
<i
v-else
class=
"el-icon-plus avatar-uploader-icon"
></i>
</el-upload>
<div>
不超过10M, 文件格式: mp4
</div>
<upload
:fileUrl.sync=
"form.fileUrl"
:mediaType=
"type"
>
<div
slot=
"tip"
>
不超过10M, 文件格式: mp4
</div>
</upload>
</el-form-item>
<el-form-item
label=
"封面"
>
<el-upload
action
:show-file-list=
"false"
:on-success=
"d"
:before-upload=
"d"
>
<img
v-if=
"imageUrl"
:src=
"imageUrl"
/>
<i
v-else
class=
"el-icon-plus avatar-uploader-icon"
></i>
</el-upload>
<div>
建议尺寸:1068*455
</div>
<upload
:fileUrl.sync=
"form.coverUrl"
mediaType=
"0"
>
<div
slot=
"tip"
>
建议尺寸:1068*455
</div>
</upload>
</el-form-item>
<el-form-item
label=
"摘要"
>
<el-input
v-model=
"form.
remark
"
v-model=
"form.
digest
"
type=
"textarea"
placeholder=
"非必填,限120字,如不填会自动抓取正文前54个字"
></el-input>
...
...
@@ -420,18 +405,11 @@ export default {
</
template
>
<el-form-item
label=
"文件"
prop=
"materialUrl"
v-else-if=
"type === '3'"
>
<el-upload
action=
""
:on-remove=
"d"
:before-remove=
"d"
multiple
:limit=
"3"
:on-exceed=
"d"
:file-list=
"[{ name: 'name', url: 'url' }]"
>
<el-button
size=
"small"
type=
"primary"
>
点击上传
</el-button>
<div
slot=
"tip"
class=
"el-upload__tip"
>
单个文件大小不超过20M
</div>
</el-upload>
<upload
:fileUrl.sync=
"form.coverUrl"
:mediaType=
"type"
>
<div
slot=
"tip"
>
单个文件大小不超过20M
</div>
</upload>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
...
...
linkwe-ui/src/views/material/file.vue
浏览文件 @
6bded6bf
...
...
@@ -31,7 +31,7 @@ export default {
<el-table-column
label=
"文件名"
align=
"center"
prop=
"
userName
"
prop=
"
materialUrl
"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"大小"
align=
"center"
prop=
"userName"
/>
...
...
@@ -57,7 +57,7 @@ export default {
size=
"mini"
type=
"text"
icon=
"el-icon-key"
@
click=
"
handleResetPw
d(scope.row)"
@
click=
"
$refs.page.downloa
d(scope.row)"
v-hasPermi=
"['system:user:resetPwd']"
>
下载
</el-button
>
...
...
@@ -65,7 +65,7 @@ export default {
size=
"mini"
type=
"text"
icon=
"el-icon-edit"
@
click=
"
handleUpdate
(scope.row)"
@
click=
"
$refs.page.edit
(scope.row)"
v-hasPermi=
"['system:user:edit']"
>
修改
</el-button
>
...
...
@@ -74,7 +74,7 @@ export default {
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"
handleDelet
e(scope.row)"
@
click=
"
$refs.page.remov
e(scope.row)"
v-hasPermi=
"['system:user:remove']"
>
删除
</el-button
>
...
...
linkwe-ui/src/views/material/image.vue
浏览文件 @
6bded6bf
...
...
@@ -22,8 +22,6 @@ export default {
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
userId
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
},
},
}
...
...
@@ -34,8 +32,8 @@ export default {
<el-row
:gutter=
"20"
>
<el-col
:span=
"6"
style=
"margin-
top
: 24px;"
v-for=
"(item, index) in
10
"
style=
"margin-
bottom
: 24px;"
v-for=
"(item, index) in
list
"
:key=
"index"
>
<el-card
shadow=
"hover"
body-style=
"padding: 0px;"
>
...
...
@@ -45,16 +43,22 @@ export default {
:preview-src-list=
"srcList"
></el-image>
<div
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"edit(file)"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"$refs.page.edit(item)"
>
<i
class=
"el-icon-edit"
></i>
</span>
<span
class=
"el-upload-list__item-"
@
click=
"handleRemove(file)"
>
<span
class=
"el-upload-list__item-"
@
click=
"$refs.page.remove(item)"
>
<i
class=
"el-icon-delete"
></i>
</span>
</div>
</div>
<div
style=
"padding: 14px;"
>
<el-checkbox
v-model=
"
kl"
>
16545awfe.jpg
</el-checkbox>
<el-checkbox
v-model=
"
ids"
>
{{
item
.
name
}}
</el-checkbox>
</div>
</el-card>
</el-col>
...
...
linkwe-ui/src/views/material/text.vue
浏览文件 @
6bded6bf
...
...
@@ -26,11 +26,7 @@ export default {
<
template
>
<MaPage
ref=
"page"
type=
"4"
@
listChange=
"listChange"
:selected=
"ids"
>
<el-table
class=
"mt20"
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
/>
<el-table-column
label=
"文本内容"
...
...
linkwe-ui/src/views/material/video.vue
浏览文件 @
6bded6bf
...
...
@@ -31,31 +31,40 @@ export default {
<el-col
:span=
"6"
style=
"margin-top: 24px;"
v-for=
"(item, index) in
10
"
v-for=
"(item, index) in
list
"
:key=
"index"
>
<el-card
shadow=
"hover"
body-style=
"padding: 0px;"
>
<div
class=
"img-wrap"
>
<el-image
:src=
"
require('@/assets/image/profile.jpg')
"
:src=
"
item.coverUrl
"
:preview-src-list=
"srcList"
></el-image>
<div
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"edit(file)"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"$refs.page.download(item)"
>
<i
class=
"el-icon-download"
></i>
</span>
<span
class=
"el-upload-list__item-preview"
@
click=
"edit(file)"
>
<span
class=
"el-upload-list__item-preview"
@
click=
"$refs.page.edit(item)"
>
<i
class=
"el-icon-edit"
></i>
</span>
<span
class=
"el-upload-list__item-"
@
click=
"handleRemove(file)"
>
<span
class=
"el-upload-list__item-"
@
click=
"$refs.page.remove(item)"
>
<i
class=
"el-icon-delete"
></i>
</span>
</div>
</div>
<div
style=
"padding: 14px;"
>
<el-checkbox
v-model=
"kl"
>
2020-02-02
</el-checkbox>
<div>
sdghwery阿瑟他五色土
</div>
<div>
sdghwery阿瑟他五色土
</div>
<el-checkbox
v-model=
"kl"
>
{{
item
.
createTime
}}
</el-checkbox>
<div>
{{
item
.
digest
}}
</div>
<div>
{{
item
.
digest
}}
</div>
</div>
</el-card>
</el-col>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录