Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
quantum-blocks
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ui
quantum-blocks
Commits
ee7a9c05
Commit
ee7a9c05
authored
Jun 10, 2025
by
孙 楠
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add i18n messages
parent
20c7bde2
Changes
80
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
80 changed files
with
1391 additions
and
619 deletions
+1391
-619
.gitignore
.gitignore
+2
-2
editor.ts
app/controller/editor.ts
+2
-2
navigator.ts
app/controller/navigator.ts
+5
-5
helper.ts
app/extend/helper.ts
+1
-1
en.js
app/i18n/en.js
+389
-0
zh.js
app/i18n/zh.js
+389
-0
index.vue
app/web/component/layout/editor/micro/index.vue
+4
-4
index.ts
app/web/component/layout/editor/single/index.ts
+1
-1
index.vue
app/web/component/layout/editor/single/index.vue
+6
-6
navigatorCol.config.ts
app/web/config/navigatorCol.config.ts
+12
-12
index.vue
app/web/lib/Coupon/index.vue
+4
-4
index.vue
app/web/lib/DownloadGuide/index.vue
+1
-1
index.vue
app/web/lib/Form/index.vue
+13
-13
jy.ts
app/web/lib/Form/jy/jy.ts
+1
-1
index.vue
app/web/lib/Goods/index.vue
+2
-4
config.ts
app/web/lib/config.ts
+7
-7
index.ts
app/web/page/editor/component/BasicPageFormModal/index.ts
+5
-5
index.vue
app/web/page/editor/component/BasicPageFormModal/index.vue
+21
-21
index.vue
app/web/page/editor/component/DynamicComponent/index.vue
+2
-2
index.vue
...r/component/DynamicForm/component/BackTopPicker/index.vue
+9
-9
index.vue
...ponent/DynamicForm/component/BatchGoodsSelector/index.vue
+7
-8
index.vue
...omponent/DynamicForm/component/CategorySelector/index.vue
+26
-26
index.vue
...nent/DynamicForm/component/CategoryTypeSelector/index.vue
+3
-3
index.vue
...r/component/DynamicForm/component/ColorSelector/index.vue
+3
-3
index.vue
.../component/DynamicForm/component/ColumnSelector/index.vue
+3
-3
coupon.column.ts
...cForm/component/CouponTableModal/columns/coupon.column.ts
+26
-26
index.ts
...component/DynamicForm/component/CouponTableModal/index.ts
+1
-1
index.vue
...omponent/DynamicForm/component/CouponTableModal/index.vue
+1
-1
index.vue
...ent/DynamicForm/component/DiscountGoodsSelector/index.vue
+12
-12
index.vue
...t/DynamicForm/component/DiscountGoodsSelectorV2/index.vue
+10
-11
index.vue
...ponent/DynamicForm/component/FontWeightSelector/index.vue
+3
-3
index.vue
...editor/component/DynamicForm/component/FormList/index.vue
+3
-3
index.vue
.../DynamicForm/component/GoodsChannelTypeSelector/index.vue
+2
-2
index.vue
...mponent/DynamicForm/component/GoodsCubeSelector/index.vue
+7
-8
index.vue
...ynamicForm/component/GoodsPromotionTypeSelector/index.vue
+4
-4
index.vue
...ent/DynamicForm/component/GoodsResourceSelector/index.vue
+18
-18
index.vue
...onent/DynamicForm/component/GoodsSwiperSelector/index.vue
+6
-7
goods.column.ts
...micForm/component/GoodsTableModal/columns/goods.column.ts
+19
-19
goodsLabel.column.ts
...rm/component/GoodsTableModal/columns/goodsLabel.column.ts
+5
-5
goodsSpecial.column.ts
.../component/GoodsTableModal/columns/goodsSpecial.column.ts
+5
-5
index.ts
.../component/DynamicForm/component/GoodsTableModal/index.ts
+3
-3
index.vue
...component/DynamicForm/component/GoodsTableModal/index.vue
+1
-1
index.vue
...component/DynamicForm/component/SeckillSelector/index.vue
+9
-9
index.vue
...nt/DynamicForm/component/SnapUpActivitySelector/index.vue
+9
-9
index.vue
...ponent/DynamicForm/component/SwiperListSelector/index.vue
+9
-9
index.vue
...t/DynamicForm/component/SwiperStyleTypeSelector/index.vue
+2
-2
index.vue
...ditor/component/DynamicForm/component/SwitchBtn/index.vue
+2
-2
index.ts
...ditor/component/DynamicForm/component/TableModal/index.ts
+1
-1
index.vue
...e/editor/component/DynamicForm/component/Upload/index.vue
+6
-6
index.vue
...t/DynamicForm/component/VerticalAdStyleSelector/index.vue
+2
-2
index.ts
app/web/page/editor/component/DynamicForm/index.ts
+28
-28
index.vue
app/web/page/editor/component/DynamicForm/index.vue
+10
-10
index.vue
app/web/page/editor/component/DynamicFormTabs/index.vue
+3
-3
index.ts
app/web/page/editor/component/DynamicPageForm/index.ts
+29
-29
index.vue
app/web/page/editor/component/DynamicPageForm/index.vue
+7
-7
index.vue
app/web/page/editor/component/MaterialMenu/index.vue
+3
-3
index.vue
...component/OperationPanel/component/TitlePreview/index.vue
+1
-1
records.vue
app/web/page/editor/component/QgTable/components/records.vue
+7
-7
index.vue
app/web/page/editor/component/QgTable/index.vue
+6
-6
testTable.vue
app/web/page/editor/component/QgTable/testTable.vue
+23
-23
index.vue
app/web/page/editor/component/RecordModal/index.vue
+2
-2
contextMenu.mixin.ts
app/web/page/editor/mixins/contextMenu.mixin.ts
+4
-4
goodsTabs.mixin.ts
app/web/page/editor/mixins/goodsTabs.mixin.ts
+3
-3
index.ts
app/web/page/editor/view/dashboard/index.ts
+12
-12
index.vue
app/web/page/editor/view/dashboard/index.vue
+3
-3
index.ts
app/web/page/editor/view/home/index.ts
+1
-1
index.vue
app/web/page/editor/view/myPage/index.vue
+9
-9
activityPageTable.vue
...ge/editor/view/navigator/components/activityPageTable.vue
+12
-12
addOrEditNavigator.vue
...e/editor/view/navigator/components/addOrEditNavigator.vue
+40
-40
expandRow.vue
app/web/page/editor/view/navigator/components/expandRow.vue
+2
-2
featurePageTable.vue
...age/editor/view/navigator/components/featurePageTable.vue
+6
-6
navigatorPageTable.vue
...e/editor/view/navigator/components/navigatorPageTable.vue
+9
-9
index.vue
app/web/page/editor/view/navigator/index.vue
+11
-11
index.vue
app/web/page/editor/view/pageList/index.vue
+18
-18
index.vue
app/web/page/editor/view/template/index.vue
+9
-9
index.vue
app/web/page/login/index.vue
+7
-7
state.ts
app/web/page/store/modules/editor/state.ts
+3
-3
http.service.ts
app/web/service/http.service.ts
+16
-16
qiniu.service.ts
app/web/service/qiniu.service.ts
+17
-17
staticData.service.ts
app/web/service/staticData.service.ts
+6
-6
No files found.
.gitignore
View file @
ee7a9c05
...
...
@@ -13,7 +13,7 @@ artifacts.json
*tmp
_site
logs
app/**/*.js
#
app/**/*.js
config/plugin.local.js
config/plugin.js
config/config.*.js
...
...
app/controller/editor.ts
View file @
ee7a9c05
...
...
@@ -26,7 +26,7 @@ export default class EditorController extends Controller {
await
ctx
.
service
.
redis
.
del
(
`page:
${
uuid
}
`
);
}
catch
(
error
)
{
if
(
error
.
message
.
indexOf
(
'
Data too long
'
)
>
-
1
&&
error
.
message
.
indexOf
(
'
page_data
'
)
>
-
1
)
{
error
.
message
=
'
配置组件过多,请对组件进行删减
'
;
error
.
message
=
$t
(
'
too.many.components.reduce.them
'
)
;
}
ctx
.
body
=
ctx
.
helper
.
fail
(
error
);
}
...
...
@@ -51,7 +51,7 @@ export default class EditorController extends Controller {
ctx
.
body
=
ctx
.
helper
.
ok
(
result
);
}
catch
(
error
)
{
if
(
error
.
message
.
indexOf
(
'
Data too long
'
)
>
-
1
&&
error
.
message
.
indexOf
(
'
page_data
'
)
>
-
1
)
{
error
.
message
=
'
配置组件过多,请对组件进行删减
'
;
error
.
message
=
$t
(
'
too.many.components.reduce.them
'
)
;
}
ctx
.
body
=
ctx
.
helper
.
fail
(
error
);
}
...
...
app/controller/navigator.ts
View file @
ee7a9c05
...
...
@@ -10,7 +10,7 @@ export default class NavigatorController extends Controller {
}
catch
(
e
)
{
ctx
.
logger
.
info
(
`获取导航配置数据异常,
${
JSON
.
stringify
(
e
)}
`
);
ctx
.
body
=
ctx
.
helper
.
fail
({
message
:
'
获取数据异常
'
message
:
$t
(
'
data.fetch.error
'
)
});
}
}
...
...
@@ -23,7 +23,7 @@ export default class NavigatorController extends Controller {
}
catch
(
e
)
{
ctx
.
logger
.
info
(
`获取导航配置数据异常,
${
JSON
.
stringify
(
e
)}
`
);
ctx
.
body
=
ctx
.
helper
.
fail
({
message
:
'
获取数据异常
'
message
:
$t
(
'
data.fetch.error
'
)
});
}
}
...
...
@@ -36,7 +36,7 @@ export default class NavigatorController extends Controller {
}
catch
(
e
)
{
ctx
.
logger
.
info
(
`删除导航配置异常,
${
JSON
.
stringify
(
e
)}
`
);
ctx
.
body
=
ctx
.
helper
.
fail
({
message
:
'
删除导航配置失败
'
message
:
$t
(
'
failed.to.delete.nav.config
'
)
});
}
}
...
...
@@ -65,7 +65,7 @@ export default class NavigatorController extends Controller {
}
catch
(
e
)
{
ctx
.
logger
.
info
(
`保存导航配置异常,
${
JSON
.
stringify
(
e
)}
`
);
ctx
.
body
=
ctx
.
helper
.
fail
({
message
:
'
保存导航配置失败
'
message
:
$t
(
'
failed.to.save.nav.config
'
)
});
}
}
...
...
@@ -78,7 +78,7 @@ export default class NavigatorController extends Controller {
}
catch
(
e
)
{
ctx
.
logger
.
info
(
`查询导航配置异常,
${
JSON
.
stringify
(
e
)}
`
);
ctx
.
body
=
ctx
.
helper
.
fail
({
message
:
'
查询导航配置失败
'
message
:
$t
(
'
failed.to.query.nav.config
'
)
});
}
return
...
...
app/extend/helper.ts
View file @
ee7a9c05
...
...
@@ -14,7 +14,7 @@ export function ok(data) {
};
}
export
function
fail
({
message
=
'
服务异常
'
,
code
=
'
0001
'
,
businessCode
=
'
0001
'
})
{
export
function
fail
({
message
=
$t
(
'
service.error
'
)
,
code
=
'
0001
'
,
businessCode
=
'
0001
'
})
{
return
{
code
,
businessCode
,
...
...
app/i18n/en.js
0 → 100644
View file @
ee7a9c05
This diff is collapsed.
Click to expand it.
app/i18n/zh.js
0 → 100644
View file @
ee7a9c05
This diff is collapsed.
Click to expand it.
app/web/component/layout/editor/micro/index.vue
View file @
ee7a9c05
...
...
@@ -46,25 +46,25 @@ export default {
openNames
:
[
'
0
'
],
isCollapsed
:
false
,
page
:
[{
name
:
'
作品列表
'
,
name
:
$t
(
'
works.list
'
)
,
icon
:
'
ios-list
'
,
path
:
'
list
'
,
children
:
[]
},
{
name
:
'
我的草稿
'
,
name
:
$t
(
'
my.drafts
'
)
,
icon
:
'
ios-book
'
,
path
:
'
my
'
,
children
:
[]
},
{
name
:
'
创意模板
'
,
name
:
$t
(
'
creative.template
'
)
,
icon
:
'
ios-compose
'
,
path
:
'
template
'
,
children
:
[]
},
{
name
:
'
导航配置
'
,
name
:
$t
(
'
navigation.config
'
)
,
icon
:
'
ios-compose
'
,
path
:
'
navigator
'
,
children
:
[]
...
...
app/web/component/layout/editor/single/index.ts
View file @
ee7a9c05
...
...
@@ -27,7 +27,7 @@ if (process.env.SENTRY_ENV !== 'test' && process.env.NODE_ENV === 'production')
})
export
default
class
Layout
extends
Vue
{
activeName
:
string
=
'
list
'
;
username
:
string
=
localStorage
.
get
(
'
user
'
)?.
name
||
'
陌生人
'
;
username
:
string
=
localStorage
.
get
(
'
user
'
)?.
name
||
$t
(
'
stranger
'
)
;
@
Action
(
'
fetchTenantAuthData
'
)
fetchTenantAuthData
;
@
State
(
state
=>
state
.
tenant
)
tenant
;
...
...
app/web/component/layout/editor/single/index.vue
View file @
ee7a9c05
...
...
@@ -10,18 +10,18 @@
accordion
@
on-select=
"select"
>
<div
class=
"layout-logo-left"
>
低代码平台
</div>
<Menu-item
name=
"list"
>
作品列表
</Menu-item>
<Menu-item
name=
"my"
>
我的草稿
</Menu-item>
<Menu-item
name=
"template"
>
创意模板
</Menu-item>
<Menu-item
name=
"navigator"
>
导航配置
</Menu-item>
<div
class=
"layout-logo-left"
>
{{
$t
(
'
lowcode.platform
'
)
}}
</div>
<Menu-item
name=
"list"
>
{{
$t
(
'
works.list
'
)
}}
</Menu-item>
<Menu-item
name=
"my"
>
{{
$t
(
'
my.drafts
'
)
}}
</Menu-item>
<Menu-item
name=
"template"
>
{{
$t
(
'
creative.template
'
)
}}
</Menu-item>
<Menu-item
name=
"navigator"
>
{{
$t
(
'
navigation.config
'
)
}}
</Menu-item>
</Menu>
</i-col>
<i-col
:span=
"21"
class=
"layout-menu-right"
>
<div
class=
"layout-header"
>
<div
class=
"avator"
>
<span>
{{
username
}}
</span>
<span
@
click=
"logOut"
style=
"cursor: pointer;"
>
退出
</span>
<span
@
click=
"logOut"
style=
"cursor: pointer;"
>
{{
$t
(
'
logout
'
)
}}
</span>
</div>
</div>
<div
class=
"layout-content"
>
...
...
app/web/config/navigatorCol.config.ts
View file @
ee7a9c05
...
...
@@ -9,12 +9,12 @@ export const columns = function(pointer) {
},
{
align
:
'
center
'
,
title
:
'
名称
'
,
title
:
$t
(
'
name
'
)
,
key
:
'
name
'
},
{
align
:
'
center
'
,
title
:
'
所选页面
'
,
title
:
$t
(
'
selected.page
'
)
,
render
:
(
h
,
params
)
=>
{
const
navigatorData
=
params
.
row
.
navigatorData
;
let
str
=
''
;
...
...
@@ -31,17 +31,17 @@ export const columns = function(pointer) {
},
{
align
:
'
center
'
,
title
:
'
作者
'
,
title
:
$t
(
'
author
'
)
,
key
:
'
author
'
},
{
align
:
'
center
'
,
title
:
'
更新时间
'
,
title
:
$t
(
'
update.time
'
)
,
key
:
'
updatedAt
'
},
{
align
:
'
center
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
key
:
'
updateTime
'
,
render
:
(
h
,
params
)
=>
{
const
row
=
params
.
row
;
...
...
@@ -59,7 +59,7 @@ export const columns = function(pointer) {
pointer
.
showAddr
(
row
);
}
}
},
'
地址列表
'
),
},
$t
(
'
address.list
'
)
),
// h('Button', {
// props: {
// type: 'primary',
...
...
@@ -87,7 +87,7 @@ export const columns = function(pointer) {
pointer
.
edit
(
row
);
}
}
},
'
修改
'
),
},
$t
(
'
edit
'
)
),
h
(
'
Button
'
,
{
props
:
{
type
:
'
error
'
,
...
...
@@ -98,7 +98,7 @@ export const columns = function(pointer) {
pointer
.
delete
(
row
);
}
}
},
'
删除
'
),
},
$t
(
'
delete
'
)
),
]);
},
width
:
300
...
...
@@ -111,25 +111,25 @@ export const urlTableColumns = function(pointer) {
return
[
{
align
:
'
center
'
,
title
:
'
排序
'
,
title
:
$t
(
'
sort
'
)
,
key
:
'
id
'
,
width
:
80
},
{
align
:
'
center
'
,
title
:
'
导航名称
'
,
title
:
$t
(
'
nav.name
'
)
,
key
:
'
configName
'
,
width
:
120
},
{
align
:
'
center
'
,
title
:
'
所选页面
'
,
title
:
$t
(
'
selected.page
'
)
,
key
:
'
pageName
'
,
width
:
120
},
{
align
:
'
center
'
,
title
:
'
跳转链接
'
,
title
:
$t
(
'
redirect.link
'
)
,
key
:
'
pageUrl
'
},
];
...
...
app/web/lib/Coupon/index.vue
View file @
ee7a9c05
...
...
@@ -11,7 +11,7 @@
</div>
<cr-button
class=
"Gi_one-right"
type=
"primary"
@
click=
"pickupCoupon(coupon)"
>
{{
btnText
(
coupon
.
pickupAble
)
}}
</cr-button>
<div
class=
"coupon-item-mask"
v-if=
"!coupon.pickupAble && coupon.publishCountFinished"
>
<p>
已抢空
</p>
<p>
{{
$t
(
'
sold.out
'
)
}}
</p>
</div>
</div>
</div>
...
...
@@ -24,7 +24,7 @@
{{
btnText
(
coupon
.
pickupAble
)
}}
</cr-button>
<div
class=
"coupon-item-mask"
v-if=
"!coupon.pickupAble && coupon.publishCountFinished"
>
<p>
已抢空
</p>
<p>
{{
$t
(
'
sold.out
'
)
}}
</p>
</div>
</div>
</div>
...
...
@@ -76,7 +76,7 @@
async
pickupCoupon
(
coupon
)
{
if
(
!
coupon
.
pickupAble
)
{
await
operationApi
.
pickupCoupon
({
couponId
:
coupon
.
id
});
this
.
$toast
.
success
(
'
领取成功
'
);
this
.
$toast
.
success
(
$t
(
'
claimed.successfully
'
)
);
await
this
.
getCoupons
([
coupon
.
id
]);
}
else
{
window
.
location
.
href
=
coupon
.
navUrl
;
...
...
@@ -87,7 +87,7 @@
if
(
coupons
&&
coupons
.
length
)
this
.
list
=
coupons
;
},
btnText
(
pickupAble
)
{
return
pickupAble
?
'
去使用
'
:
'
立即领取
'
;
return
pickupAble
?
$t
(
'
use.now
'
)
:
$t
(
'
claim.now
'
)
;
}
}
}
...
...
app/web/lib/DownloadGuide/index.vue
View file @
ee7a9c05
...
...
@@ -3,7 +3,7 @@
<img
class=
"top-bar-left"
:src=
"leftImg"
/>
<div
class=
"top-bar-right"
>
<a
:href=
"href"
>
<button
class=
"top-bar-button"
>
打开APP
</button>
<button
class=
"top-bar-button"
>
{{
$t
(
'
open.app
'
)
}}
</button>
</a>
<img
class=
"top-bar-close"
@
click=
"close"
src=
"./images/close@2x.png"
/>
</div>
...
...
app/web/lib/Form/index.vue
View file @
ee7a9c05
...
...
@@ -12,7 +12,7 @@
name=
"phoneNo"
type=
"tel"
label=
""
placeholder=
"请填写您的手机号
"
:placeholder=
"$t('enter.your.phone.number')
"
:rules=
"validOptions[0]"
/>
<cr-field
...
...
@@ -22,7 +22,7 @@
name=
"captcha"
type=
"digit"
label=
""
placeholder=
"请填写图片验证码
"
:placeholder=
"$t('enter.image.verification.code')
"
:rules=
"validOptions[1]"
>
<template
slot=
"button"
>
...
...
@@ -35,7 +35,7 @@
name=
"verifyCode"
type=
"tel"
label=
""
placeholder=
"请填写验证码
"
:placeholder=
"$t('enter.verification.code')
"
:rules=
"validOptions[1]"
>
<
template
slot=
"button"
>
...
...
@@ -65,10 +65,10 @@ import config from '@/config/index';
const
validOptions
=
[
[
{
required
:
true
,
message
:
"
请填写您的手机号
"
},
{
validator
:
isPhone
,
message
:
"
请填写正确的手机号码
"
}
{
required
:
true
,
message
:
$t
(
'
enter.your.phone.number
'
)
},
{
validator
:
isPhone
,
message
:
$t
(
'
enter.valid.phone.number
'
)
}
],
[{
required
:
true
,
message
:
"
请填写验证码
"
}]
[{
required
:
true
,
message
:
$t
(
'
enter.verification.code
'
)
}]
];
let
timer
=
null
;
let
sa
=
null
;
...
...
@@ -115,7 +115,7 @@ export default {
return
!
isPhone
(
this
.
formData
.
phoneNo
);
},
captchaBtnText
()
{
return
this
.
showCount
?
`剩余
${
this
.
count
}
秒`
:
'
获取验证码
'
;
return
this
.
showCount
?
`剩余
${
this
.
count
}
秒`
:
$t
(
'
get.verification.code
'
)
;
},
btnStyles
()
{
return
this
.
btnImage
?
{
...
...
@@ -175,7 +175,7 @@ export default {
function
(
captchaObj
)
{
vm
.
$refs
.
sendVcode
.
addEventListener
(
'
click
'
,
function
()
{
if
(
!
isPhone
(
vm
.
formData
.
phoneNo
))
{
vm
.
$notify
({
type
:
"
warning
"
,
message
:
"
请填写正确的手机号码
"
});
vm
.
$notify
({
type
:
"
warning
"
,
message
:
$t
(
'
enter.valid.phone.number
'
)
});
return
;
}
if
(
vm
.
showCount
)
return
;
...
...
@@ -189,7 +189,7 @@ export default {
vm
.
getCode
(
captchaObj
);
});
captchaObj
.
onError
(
function
()
{
vm
.
$toast
(
"
尝试过多,请点击重试
"
);
vm
.
$toast
(
$t
(
'
too.many.attempts.retry
'
)
);
});
}
);
...
...
@@ -201,14 +201,14 @@ export default {
},
async
getCode
(
captchaObj
)
{
if
(
!
isPhone
(
this
.
formData
.
phoneNo
))
{
this
.
$notify
({
type
:
"
warning
"
,
message
:
"
请填写正确的手机号码
"
});
this
.
$notify
({
type
:
"
warning
"
,
message
:
$t
(
'
enter.valid.phone.number
'
)
});
return
;
}
if
(
timer
)
return
;
try
{
await
this
.
sendCode
();
this
.
smsCount
();
this
.
$notify
({
type
:
"
success
"
,
message
:
"
短信验证码已发送,请注意查收
"
});
this
.
$notify
({
type
:
"
success
"
,
message
:
$t
(
'
sms.code.sent
'
)
});
}
finally
{
this
.
resetJyState
(
captchaObj
);
}
...
...
@@ -247,8 +247,8 @@ export default {
this
.
goNext
();
}
finally
{
sa
.
track
(
'
LoginEvent
'
,
{
le_login_action
:
'
注册/登录
'
,
le_login_type
:
'
验证码登录
'
,
le_login_action
:
$t
(
'
registerlogin
'
)
,
le_login_type
:
$t
(
'
verify.code.login
'
)
,
le_is_login_success
,
le_channel_code
:
this
.
registerFrom
,
});
...
...
app/web/lib/Form/jy/jy.ts
View file @
ee7a9c05
...
...
@@ -215,7 +215,7 @@
};
const
throwError
=
function
(
errorType
,
config
)
{
const
errors
=
{
networkError
:
'
网络错误
'
networkError
:
$t
(
'
network.error
'
)
};
if
(
typeof
config
.
onError
===
'
function
'
)
{
config
.
onError
(
errors
[
errorType
]);
...
...
app/web/lib/Goods/index.vue
View file @
ee7a9c05
...
...
@@ -15,9 +15,7 @@
shape=
"circle"
type=
"primary"
@
click=
"go('detail', goods.skuNo)"
>
立即抢购
</cr-button>
>
{{
$t
(
'
buy.now
'
)
}}
</cr-button>
</div>
</div>
</div>
...
...
@@ -111,7 +109,7 @@
const
{
skuNo
,
skuSource
}
=
goods
;
const
params
=
[{
skuId
:
skuNo
,
skuNum
:
1
,
skuSource
,
type
:
1
}];
await
operationApi
.
addShopCart
({
shopCartBaseList
:
params
});
this
.
$toast
.
success
(
'
添加成功
'
);
this
.
$toast
.
success
(
$t
(
'
added.successfully
'
)
);
}
}
}
...
...
app/web/lib/config.ts
View file @
ee7a9c05
...
...
@@ -5,12 +5,12 @@ export const basicComponents = [
{
eleName
:
'
freedom-container
'
,
coverImage
:
'
https://img.91xr.cn/citrus-ui/cherry-component-cover-free-container.png
'
,
title
:
'
自由容器
'
,
title
:
$t
(
'
free.container
'
)
,
config
:
[
{
key
:
'
link
'
,
name
:
'
跳转链接
'
,
desc
:
'
跳转链接
'
,
name
:
$t
(
'
redirect.link
'
)
,
desc
:
$t
(
'
redirect.link
'
)
,
type
:
'
text
'
,
},
// {
...
...
@@ -21,14 +21,14 @@ export const basicComponents = [
// },
{
key
:
'
isFinance
'
,
name
:
'
是否导流
'
,
desc
:
'
是否导流
'
,
name
:
$t
(
'
diversion
'
)
,
desc
:
$t
(
'
diversion
'
)
,
type
:
'
checkbox
'
,
},
{
key
:
'
needLogin
'
,
name
:
'
是否登录
'
,
desc
:
'
是否登录
'
,
name
:
$t
(
'
logged.in
'
)
,
desc
:
$t
(
'
logged.in
'
)
,
type
:
'
checkbox
'
,
}
],
...
...
app/web/page/editor/component/BasicPageFormModal/index.ts
View file @
ee7a9c05
...
...
@@ -21,7 +21,7 @@ export default class DynamicForm extends Vue {
formCustom
:
PageInfo
=
{};
ruleCustom
:
object
=
{
pageName
:
[
{
required
:
true
,
message
:
'
请输入页面名称
'
,
trigger
:
'
blur
'
}
{
required
:
true
,
message
:
$t
(
'
enter.page.name
'
)
,
trigger
:
'
blur
'
}
],
shareOpenMethod
:
[
{
validator
:
this
.
validateOpenMethod
,
trigger
:
'
blur
'
}
...
...
@@ -29,7 +29,7 @@ export default class DynamicForm extends Vue {
};
get
enableShare
()
{
return
this
.
pageData
.
props
?.
btAttachVal
.
some
(
item
=>
item
.
persets
===
'
分享
'
);
return
this
.
pageData
.
props
?.
btAttachVal
.
some
(
item
=>
item
.
persets
===
$t
(
'
share
'
)
);
}
@
Watch
(
'
pageData
'
,
{
immediate
:
true
})
...
...
@@ -79,17 +79,17 @@ export default class DynamicForm extends Vue {
}
preview
()
{
this
.
formCustom
.
pageName
=
this
.
formCustom
.
pageName
||
'
未命名
'
;
this
.
formCustom
.
pageName
=
this
.
formCustom
.
pageName
||
$t
(
'
unnamed
'
)
;
this
.
handleSubmit
(
'
preview
'
);
}
autoSave
()
{
this
.
formCustom
.
pageName
=
this
.
formCustom
.
pageName
||
'
未命名
'
;
this
.
formCustom
.
pageName
=
this
.
formCustom
.
pageName
||
$t
(
'
unnamed
'
)
;
this
.
handleSubmit
(
'
autoSave
'
);
}
validateOpenMethod
(
rule
,
value
,
callback
)
{
if
(
!
value
&&
this
.
enableShare
)
{
callback
(
new
Error
(
'
请选择分享打开方式
'
));
callback
(
new
Error
(
$t
(
'
select.share.method
'
)
));
}
else
{
callback
();
}
...
...
app/web/page/editor/component/BasicPageFormModal/index.vue
View file @
ee7a9c05
...
...
@@ -2,45 +2,45 @@
<Modal
v-model=
"showPopup"
width=
"380"
@
on-visible-change=
"change"
class-name=
'basic-form'
>
<!--
{{
formCustom
}}
-->
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"formCustom"
:rules=
"ruleCustom"
:label-width=
"80"
label-position=
"left"
>
<FormItem
label=
"页面名称
"
prop=
"pageName"
>
<Input
v-model=
"formCustom.pageName"
placeholder=
"请输入页面名称
"
></Input>
<FormItem
:label=
"$t('page.name')
"
prop=
"pageName"
>
<Input
v-model=
"formCustom.pageName"
:placeholder=
"$t('enter.page.name')
"
></Input>
</FormItem>
<FormItem
label=
"页面描述
"
prop=
"pageDescribe"
>
<Input
v-model=
"formCustom.pageDescribe"
type=
"textarea"
placeholder=
"请输入页面描述
"
:rows=
"3"
></Input>
<FormItem
:label=
"$t('page.description')
"
prop=
"pageDescribe"
>
<Input
v-model=
"formCustom.pageDescribe"
type=
"textarea"
:placeholder=
"$t('enter.page.description')
"
:rows=
"3"
></Input>
</FormItem>
<FormItem
label=
"页面关键字
"
prop=
"pageKeywords"
>
<Input
v-model=
"formCustom.pageKeywords"
type=
"textarea"
placeholder=
"请输入页面关键字
"
:rows=
"3"
></Input>
<FormItem
:label=
"$t('page.keywords')
"
prop=
"pageKeywords"
>
<Input
v-model=
"formCustom.pageKeywords"
type=
"textarea"
:placeholder=
"$t('enter.page.keywords')
"
:rows=
"3"
></Input>
</FormItem>
<FormItem
label=
"页面缩略图
"
prop=
"shareCoverImage"
>
<FormItem
:label=
"$t('page.thumbnail')
"
prop=
"shareCoverImage"
>
<Upload
v-model=
"formCustom.shareCoverImage"
:show-input=
"false"
/>
<p
class=
"basic-form__tip"
>
可选,默认使用页面缩略图,建议图片比例1:1,图片格式jpg、png
</p>
<p
class=
"basic-form__tip"
>
{{
$t
(
'
optional.defaults.to.thumbnail.11.jpgpng
'
)
}}
</p>
</FormItem>
<FormItem
label=
"分享打开方式
"
prop=
"shareOpenMethod"
v-if=
"cartAndShareBtn"
>
<FormItem
:label=
"$t('share.method')
"
prop=
"shareOpenMethod"
v-if=
"cartAndShareBtn"
>
<RadioGroup
v-model=
"formCustom.shareOpenMethod"
>
<Radio
:label=
"1"
:disabled=
"!enableShare"
>
小程序
</Radio>
<Radio
:label=
"1"
:disabled=
"!enableShare"
>
{{
$t
(
'
mini.program
'
)
}}
</Radio>
<Radio
:label=
"2"
:disabled=
"!enableShare"
>
APP
</Radio>
</RadioGroup>
<p
class=
"basic-form__tip"
>
在H5中打开哪一个终端,当分享功能未启用时,此处不可选
</p>
<p
class=
"basic-form__tip"
>
{{
$t
(
'
h5.terminal.selection.disabled.when.sharing.off
'
)
}}
</p>
</FormItem>
<FormItem
label=
"是否发布
"
prop=
"isPublish"
>
<FormItem
:label=
"$t('publish')
"
prop=
"isPublish"
>
<i-switch
v-model=
"formCustom.isPublish"
></i-switch>
</FormItem>
<FormItem
label=
"活动有效期
"
prop=
"redirectUrl"
>
<DatePicker
v-model=
"validTime"
@
on-change=
"validTimeChange"
format=
"yyyy/MM/dd HH:mm:ss"
type=
"datetimerange"
placeholder=
"选填,留空默认长期有效
"
style=
"width: 100%"
></DatePicker>
<FormItem
:label=
"$t('activity.period')
"
prop=
"redirectUrl"
>
<DatePicker
v-model=
"validTime"
@
on-change=
"validTimeChange"
format=
"yyyy/MM/dd HH:mm:ss"
type=
"datetimerange"
:placeholder=
"$t('optional.default.permanent')
"
style=
"width: 100%"
></DatePicker>
</FormItem>
<FormItem
label=
"活动结束url
"
prop=
"redirectUrl"
>
<Input
v-model=
"formCustom.redirectUrl"
placeholder=
"选填,留空默认首页
"
:rows=
"3"
></Input>
<FormItem
:label=
"$t('activity.end.url')
"
prop=
"redirectUrl"
>
<Input
v-model=
"formCustom.redirectUrl"
:placeholder=
"$t('optional.default.homepage')
"
:rows=
"3"
></Input>
</FormItem>
<FormItem
label=
"导流url
"
prop=
"diversion"
>
<Input
v-model=
"formCustom.diversion"
placeholder=
"选填,具体url请联系对应导流项目的产品或开发
"
:rows=
"3"
></Input>
<FormItem
:label=
"$t('diversion.url')
"
prop=
"diversion"
>
<Input
v-model=
"formCustom.diversion"
:placeholder=
"$t('optional.contact.pmdev.for.url')
"
:rows=
"3"
></Input>
</FormItem>
<FormItem
label=
"设为模板
"
prop=
"isTemplate"
v-if=
"formCustom.isPublish"
>
<FormItem
:label=
"$t('set.as.template')
"
prop=
"isTemplate"
v-if=
"formCustom.isPublish"
>
<i-switch
v-model=
"formCustom.isTemplate"
></i-switch>
</FormItem>
</Form>
<div
slot=
"footer"
>
<Button
type=
"success"
:loading=
"loadingSave"
@
click=
"handleSubmit('save')"
>
保存
</Button>
<Button
type=
"info"
:loading=
"loadingPreview"
@
click=
"handleSubmit('preview')"
>
保存并预览
</Button>
<Button
type=
"success"
:loading=
"loadingSave"
@
click=
"handleSubmit('save')"
>
{{
$t
(
'
save
'
)
}}
</Button>
<Button
type=
"info"
:loading=
"loadingPreview"
@
click=
"handleSubmit('preview')"
>
{{
$t
(
'
save.preview
'
)
}}
</Button>
</div>
</Modal>
</
template
>
...
...
app/web/page/editor/component/DynamicComponent/index.vue
View file @
ee7a9c05
...
...
@@ -14,7 +14,7 @@
:src=
"config.coverImage || 'http://activitystatic.q-gp.com/low_code.jpg'"
/>
</div>
<span
class=
"dynamic-row-popup"
>
拖拽或双击
</span>
<span
class=
"dynamic-row-popup"
>
{{
$t
(
'
drag.or.doubleclick
'
)
}}
</span>
</Card>
</Col>
</Row>
...
...
@@ -33,7 +33,7 @@
:src=
"config.coverImage || 'http://activitystatic.q-gp.com/low_code.jpg'"
/>
</div>
<span
class=
"dynamic-row-popup"
>
拖拽或双击
</span>
<span
class=
"dynamic-row-popup"
>
{{
$t
(
'
drag.or.doubleclick
'
)
}}
</span>
</Card>
</Col>
</Row>
...
...
app/web/page/editor/component/DynamicForm/component/BackTopPicker/index.vue
View file @
ee7a9c05
...
...
@@ -2,8 +2,8 @@
<div
class=
"form-list"
>
<Card
class=
"form-list-card"
:key=
"index"
v-for=
"(item, index) in list"
>
<div
slot=
'title'
class=
"Fl-card-title"
>
<h4>
项目
{{
index
+
1
}}
</h4>
<a
@
click=
"del(index)"
>
删除
</a>
<h4>
{{
$t
(
'
item
'
)
}}
{{
index
+
1
}}
</h4>
<a
@
click=
"del(index)"
>
{{
$t
(
'
delete
'
)
}}
</a>
</div>
<Form
@
submit
.
native
.
prevent
:model=
"item"
:label-width=
"50"
>
<FormItem
:prop=
"`$
{keywords.key}`" :label="keywords.name" :key="idx" v-for="(keywords, idx) in formControl">
...
...
@@ -12,7 +12,7 @@
</Form>
</Card>
<div
class=
"form-list-button"
>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
添加项目
</Button>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
{{
$t
(
'
add.item
'
)
}}
</Button>
</div>
</div>
</
template
>
...
...
@@ -22,9 +22,9 @@ import { SHOP_CART_CONFIG, SHARE_CONFIG, DEFAULT_CONFIG } from '@service/staticD
import
{
v4
as
uuid
}
from
'
uuid
'
;
const
CONFIG_MAP
=
{
[
'
购物车
'
]:
SHOP_CART_CONFIG
,
[
'
分享
'
]:
SHARE_CONFIG
,
[
'
自定义
'
]:
DEFAULT_CONFIG
[
$t
(
'
shopping.cart
'
)
]:
SHOP_CART_CONFIG
,
[
$t
(
'
share
'
)
]:
SHARE_CONFIG
,
[
$t
(
'
custom
'
)
]:
DEFAULT_CONFIG
};
export
default
{
name
:
'
BackTopPicker
'
,
...
...
@@ -36,7 +36,7 @@ const CONFIG_MAP = {
},
methods
:
{
shareDisableUrl
(
item
,
keywords
)
{
return
item
.
persets
===
'
分享
'
&&
keywords
.
key
===
'
url
'
;
return
item
.
persets
===
$t
(
'
share
'
)
&&
keywords
.
key
===
'
url
'
;
},
handleModelChange
(
e
,
key
,
index
)
{
if
(
key
!==
'
persets
'
)
return
;
...
...
@@ -50,8 +50,8 @@ const CONFIG_MAP = {
pre
[
cur
.
key
]
=
this
.
formDefault
[
cur
.
key
]
||
''
;
return
pre
;
},
{});
if
(
object
.
persets
===
'
自定义
'
)
{
object
.
name
=
'
自定义-
'
+
uuid
().
slice
(
19
);
if
(
object
.
persets
===
$t
(
'
custom
'
)
)
{
object
.
name
=
$t
(
'
custom
'
)
+
uuid
().
slice
(
19
);
}
this
.
list
.
push
(
object
);
},
...
...
app/web/page/editor/component/DynamicForm/component/BatchGoodsSelector/index.vue
View file @
ee7a9c05
...
...
@@ -4,29 +4,28 @@
v-model=
"data.ids"
type=
"textarea"
:autosize=
"
{minRows: 3,maxRows: 10}"
placeholder="请输入skuNo,每个skuNo使用英文逗号隔开
"
:placeholder="$t('enter.skuno.separated.by.commas')
"
@on-blur="changeIds"
/>
<div
class=
"goodsItem"
v-for=
"(item, index) in data.data"
:key=
"index"
>
<div
class=
"title"
>
商品
{{
index
+
1
}}
<div
class=
"title"
>
{{
$t
(
'
product
'
)
}}{{
index
+
1
}}
</div>
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"item"
:label-width=
"90"
label-position=
"left"
>
<FormItem
label=
"sku_no"
prop=
"skuNo"
>
<Input
v-model=
"item.skuNo"
disabled
/>
</FormItem>
<FormItem
label=
"商品名称
"
prop=
"goodsName"
>
<FormItem
:label=
"$t('product.name')
"
prop=
"goodsName"
>
<Input
v-model=
"item.goodsName"
/>
</FormItem>
<FormItem
label=
"商品主图
"
prop=
"img"
>
<FormItem
:label=
"$t('product.image')
"
prop=
"img"
>
<Upload
v-model=
"item.img"
></Upload>
</FormItem>
<FormItem
label=
"商品横幅文案
"
prop=
"subtitle"
>
<FormItem
:label=
"$t('product.banner.text')
"
prop=
"subtitle"
>
<Input
v-model=
"item.subtitle"
/>
</FormItem>
</Form>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
删除
</Button>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
</div>
</
template
>
...
...
@@ -113,7 +112,7 @@ export default {
const
skus
=
ids
?
ids
.
split
(
'
,
'
)
:
[];
if
(
skus
.
length
)
{
if
(
skus
.
length
>
15
)
{
this
.
$toast
(
'
最多填入15个商品
'
);
this
.
$toast
(
$t
(
'
max.15.products
'
)
);
return
;
}
this
.
getGoods
({
...
...
app/web/page/editor/component/DynamicForm/component/CategorySelector/index.vue
View file @
ee7a9c05
...
...
@@ -3,37 +3,37 @@
<!--
<Button
type=
"primary"
@
click=
"save"
>
保存
</Button>
-->
<div
class=
"item"
v-for=
"(item, index) in categoryData"
:key=
"index"
>
<Form
ref=
"formInline"
:model=
"item"
inline
>
<FormItem
label=
"素材名称
"
prop=
"name"
>
<FormItem
:label=
"$t('material.name')
"
prop=
"name"
>
<Input
v-model=
"item.name"
placeholder=
""
/>
</FormItem>
<FormItem
label=
"素材图片
"
prop=
"img"
>
<FormItem
:label=
"$t('material.image')
"
prop=
"img"
>
<Upload
v-model=
"item.img"
></Upload>
</FormItem>
<FormItem
label=
"利益点
"
prop=
"text"
>
<FormItem
:label=
"$t('benefit.point')
"
prop=
"text"
>
<Input
v-model=
"item.text"
placeholder=
""
/>
</FormItem>
<FormItem
label=
"logo图
"
prop=
"logoUrl"
>
<FormItem
:label=
"$t('logo.image')
"
prop=
"logoUrl"
>
<Upload
v-model=
"item.logoUrl"
></Upload>
</FormItem>
<FormItem
label=
"跳转链接
"
prop=
"link"
>
<FormItem
:label=
"$t('redirect.link')
"
prop=
"link"
>
<Input
v-model=
"item.link"
placeholder=
""
/>
</FormItem>
</Form>
<Button
long
type=
"error"
@
click=
"del(index)"
>
删除
</Button>
<Button
long
type=
"error"
@
click=
"del(index)"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
<Button
type=
"ghost"
@
click=
"add"
>
添加项目
</Button>
<Modal
v-model=
"showModal"
:mask-closable=
"false"
title=
"选择品类/品牌
"
width=
"700"
>
<Button
type=
"ghost"
@
click=
"add"
>
{{
$t
(
'
add.item
'
)
}}
</Button>
<Modal
v-model=
"showModal"
:mask-closable=
"false"
:title=
"$t('select.categorybrand')
"
width=
"700"
>
<Tabs
:value=
"type"
@
on-click=
"selectType"
>
<TabPane
label=
"品类
"
name=
"1"
>
<TabPane
:label=
"$t('category')
"
name=
"1"
>
<div
class=
"search"
>
<Form
class=
"searchFormStyle"
inline
>
<FormItem
label=
"类目名称
"
prop=
"name"
>
<FormItem
:label=
"$t('category.name')
"
prop=
"name"
>
<Input
v-model=
"searchParams.name"
placeholder=
""
/>
</FormItem>
<FormItem
label=
"类目编码
"
prop=
"name"
>
<FormItem
:label=
"$t('category.code')
"
prop=
"name"
>
<Input
v-model=
"searchParams.sceneId"
placeholder=
""
/>
</FormItem>
<Button
type=
"primary"
@
click=
"search"
>
查询
</Button>
<Button
type=
"primary"
@
click=
"search"
>
{{
$t
(
'
search
'
)
}}
</Button>
</Form>
</div>
<Table
...
...
@@ -44,16 +44,16 @@
/>
<Page
class=
"page"
:total=
"total"
@
on-change=
"changePageNo"
show-total
></Page>
</TabPane>
<TabPane
label=
"品牌
"
name=
"2"
>
<TabPane
:label=
"$t('brand')
"
name=
"2"
>
<div
class=
"search"
>
<Form
class=
"searchFormStyle"
inline
>
<FormItem
label=
"品牌名称
"
prop=
"name"
>
<FormItem
:label=
"$t('brand.name')
"
prop=
"name"
>
<Input
v-model=
"searchParams.name"
placeholder=
""
/>
</FormItem>
<FormItem
label=
"品牌编码
"
prop=
"name"
>
<FormItem
:label=
"$t('brand.code')
"
prop=
"name"
>
<Input
v-model=
"searchParams.sceneId"
placeholder=
""
/>
</FormItem>
<Button
type=
"primary"
@
click=
"search"
>
查询
</Button>
<Button
type=
"primary"
@
click=
"search"
>
{{
$t
(
'
search
'
)
}}
</Button>
</Form>
</div>
<Table
...
...
@@ -84,24 +84,24 @@ const categoryCol = function() {
return
[
{
align
:
'
center
'
,
title
:
'
类目名称
'
,
title
:
$t
(
'
category.name
'
)
,
key
:
'
categoryName
'
,
},
{
align
:
'
center
'
,
title
:
'
类目编码
'
,
title
:
$t
(
'
category.code
'
)
,
key
:
'
sceneId
'
,
width
:
120
},
{
align
:
'
center
'
,
title
:
'
类目级别
'
,
title
:
$t
(
'
category.level
'
)
,
key
:
'
categoryLevel
'
,
width
:
120
},
{
align
:
'
center
'
,
title
:
'
图片
'
,
title
:
$t
(
'
image
'
)
,
render
:
(
h
,
params
)
=>
{
const
row
=
params
.
row
;
return
h
(
'
div
'
,
{
...
...
@@ -123,7 +123,7 @@ const categoryCol = function() {
},
{
align
:
'
center
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
width
:
120
,
render
:
(
h
,
params
)
=>
{
const
row
=
params
.
row
;
...
...
@@ -138,7 +138,7 @@ const categoryCol = function() {
this
.
select
(
row
);
}
}
},
'
选择
'
)
},
$t
(
'
select
'
)
)
]
)
}
...
...
@@ -150,12 +150,12 @@ const brandCol = function() {
return
[
{
align
:
'
center
'
,
title
:
'
品牌名称
'
,
title
:
$t
(
'
brand.name
'
)
,
key
:
'
brandName
'
,
},
{
align
:
'
center
'
,
title
:
'
品牌编码
'
,
title
:
$t
(
'
brand.code
'
)
,
key
:
'
sceneId
'
,
width
:
120
},
...
...
@@ -183,7 +183,7 @@ const brandCol = function() {
},
{
align
:
'
center
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
width
:
120
,
render
:
(
h
,
params
)
=>
{
const
row
=
params
.
row
;
...
...
@@ -198,7 +198,7 @@ const brandCol = function() {
this
.
select
(
row
);
}
}
},
'
选择
'
)
},
$t
(
'
select
'
)
)
]
)
}
...
...
app/web/page/editor/component/DynamicForm/component/CategoryTypeSelector/index.vue
View file @
ee7a9c05
...
...
@@ -30,9 +30,9 @@ export default {
data
()
{
return
{
options
:
[
{
id
:
'
1
'
,
label
:
'
基础款
'
},
{
id
:
'
2
'
,
label
:
'
无logo
'
},
{
id
:
'
3
'
,
label
:
'
无利益点
'
},
{
id
:
'
1
'
,
label
:
$t
(
'
basic.version
'
)
},
{
id
:
'
2
'
,
label
:
$t
(
'
no.logo
'
)
},
{
id
:
'
3
'
,
label
:
$t
(
'
no.benefit.point
'
)
},
],
selected
:
0
}
...
...
app/web/page/editor/component/DynamicForm/component/ColorSelector/index.vue
View file @
ee7a9c05
...
...
@@ -2,19 +2,19 @@
<div>
<div
class=
"color-selector-gradient"
v-if=
"gradient"
:class=
"
{ active: showToColor }">
<div
class=
"color-selector"
>
<Input
class=
"color-selector-input"
v-model=
"color"
placeholder=
"请输入
"
@
input=
"change"
></Input>
<Input
class=
"color-selector-input"
v-model=
"color"
:placeholder=
"$t('enter.input')
"
@
input=
"change"
></Input>
<ColorPicker
placement=
"bottom-end"
v-model=
"color"
:alpha=
"alpha"
@
on-active-change=
"change($event)"
@
on-change=
"change($event)"
/>
</div>
<div
class=
"color-selector-switch"
@
click=
"showToColor = !showToColor"
>
<Icon
type=
"ios-arrow-forward"
/>
</div>
<div
class=
"color-selector"
v-if=
"showToColor"
>
<Input
class=
"color-selector-input"
v-model=
"toColor"
placeholder=
"请输入
"
@
input=
"change($event, 'to')"
></Input>
<Input
class=
"color-selector-input"
v-model=
"toColor"
:placeholder=
"$t('enter.input')
"
@
input=
"change($event, 'to')"
></Input>
<ColorPicker
placement=
"bottom-end"
v-model=
"toColor"
:alpha=
"alpha"
@
on-active-change=
"change($event, 'to')"
@
on-change=
"change($event, 'to')"
/>
</div>
</div>
<div
class=
"color-selector"
v-else
>
<Input
class=
"color-selector-input"
v-model=
"color"
placeholder=
"请输入
"
@
input=
"change"
></Input>
<Input
class=
"color-selector-input"
v-model=
"color"
:placeholder=
"$t('enter.input')
"
@
input=
"change"
></Input>
<ColorPicker
placement=
"bottom-end"
v-model=
"color"
:alpha=
"alpha"
@
on-active-change=
"change($event)"
@
on-change=
"change($event)"
/>
</div>
</div>
...
...
app/web/page/editor/component/DynamicForm/component/ColumnSelector/index.vue
View file @
ee7a9c05
<
template
>
<div
class=
"column-selector"
>
<Tooltip
placement=
"top"
content=
"通栏
"
>
<Tooltip
placement=
"top"
:content=
"$t('full.width')
"
>
<Button
type=
"ghost"
icon=
"minus-round"
@
click=
"select(1)"
></Button>
</Tooltip>
<Tooltip
placement=
"top"
content=
"两列
"
>
<Tooltip
placement=
"top"
:content=
"$t('two.columns')
"
>
<Button
type=
"ghost"
icon=
"ios-pause"
@
click=
"select(2)"
></Button>
</Tooltip>
<Tooltip
placement=
"top"
content=
"多列
"
v-show=
"!hide3Column"
>
<Tooltip
placement=
"top"
:content=
"$t('multicolumn')
"
v-show=
"!hide3Column"
>
<Button
type=
"ghost"
icon=
"navicon-round"
@
click=
"select(3)"
></Button>
</Tooltip>
</div>
...
...
app/web/page/editor/component/DynamicForm/component/CouponTableModal/columns/coupon.column.ts
View file @
ee7a9c05
const
couponTypeList
:
object
[]
=
[
{
id
:
1
,
name
:
'
满减券
'
,
name
:
$t
(
'
discount.coupon
'
)
,
},
{
id
:
2
,
name
:
'
运费券
'
,
name
:
$t
(
'
shipping.coupon
'
)
,
},
{
id
:
3
,
name
:
'
现金券
'
,
name
:
$t
(
'
cash.coupon
'
)
,
},
{
id
:
21
,
name
:
'
享花券
'
,
name
:
$t
(
'
huabei.coupon
'
)
,
},
];
const
receiverTypeList
:
object
[]
=
[
{
id
:
1
,
name
:
'
主动领取
'
,
name
:
$t
(
'
active.claim
'
)
,
},
{
id
:
2
,
name
:
'
系统发放
'
,
name
:
$t
(
'
system.issued
'
)
,
},
// {
// id: 3,
...
...
@@ -34,33 +34,33 @@ const receiverTypeList: object[] = [
const
listStatus
:
object
[]
=
[
{
id
:
'
WAIT_ON_LINE
'
,
name
:
'
待发布
'
,
name
:
$t
(
'
pending.publish
'
)
,
},
{
id
:
'
ON_LINE
'
,
name
:
'
已上架
'
,
name
:
$t
(
'
online
'
)
,
},
{
id
:
'
OFF_LINE
'
,
name
:
'
已下架
'
,
name
:
$t
(
'
offline
'
)
,
},
];
const
statusList
:
object
[]
=
[
{
id
:
1
,
name
:
'
待发布
'
,
name
:
$t
(
'
pending.publish
'
)
,
},
{
id
:
2
,
name
:
'
已上架
'
,
name
:
$t
(
'
online
'
)
,
},
{
id
:
3
,
name
:
'
已下架
'
,
name
:
$t
(
'
offline
'
)
,
},
{
id
:
4
,
name
:
'
已过期
'
,
name
:
$t
(
'
expired
'
)
,
},
];
const
columns
:
object
[]
=
[
...
...
@@ -70,23 +70,23 @@ const columns: object[] = [
hideSearch
:
true
},
{
title
:
'
批次id
'
,
title
:
$t
(
'
batch.id
'
)
,
key
:
'
id
'
,
hideSearch
:
true
},
{
title
:
'
批次id
'
,
title
:
$t
(
'
batch.id
'
)
,
hideTable
:
true
,
key
:
'
couponId
'
,
formType
:
'
input
'
},
{
title
:
'
优惠券名称
'
,
title
:
$t
(
'
coupon.name
'
)
,
key
:
'
name
'
,
hideSearch
:
true
},
{
title
:
'
优惠券类型
'
,
title
:
$t
(
'
coupon.type
'
)
,
key
:
'
couponType
'
,
formType
:
'
select
'
,
valueEnum
:
couponTypeList
.
reduce
((
pre
,
cur
)
=>
{
...
...
@@ -99,12 +99,12 @@ const columns: object[] = [
},
},
{
title
:
'
优惠券面值
'
,
title
:
$t
(
'
coupon.value
'
)
,
key
:
'
couponAmt
'
,
hideSearch
:
true
,
},
{
title
:
'
优惠券属性
'
,
title
:
$t
(
'
coupon.attribute
'
)
,
key
:
''
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
...
...
@@ -113,22 +113,22 @@ const columns: object[] = [
},
},
{
title
:
'
发行数量
'
,
title
:
$t
(
'
issue.quantity
'
)
,
key
:
'
pushCount
'
,
hideSearch
:
true
,
},
{
title
:
'
发行有效期
'
,
title
:
$t
(
'
issue.period
'
)
,
key
:
'
receiverTime
'
,
hideSearch
:
true
},
{
title
:
'
使用有效期
'
,
title
:
$t
(
'
usage.period
'
)
,
key
:
'
useTime
'
,
hideSearch
:
true
},
{
title
:
'
领取方式
'
,
title
:
$t
(
'
claim.method
'
)
,
formType
:
'
select
'
,
key
:
'
receiverType
'
,
valueEnum
:
receiverTypeList
.
reduce
((
pre
,
cur
)
=>
{
...
...
@@ -138,12 +138,12 @@ const columns: object[] = [
render
:
(
h
,
params
)
=>
{
const
obj
=
receiverTypeList
.
find
(
item
=>
item
.
id
===
params
.
row
.
receiverType
)
||
{};
// 处理优惠券列表显示券码的问题
if
(
+
params
.
row
.
receiverType
===
4
)
{
return
h
(
'
div
'
,
'
券码兑换
'
);
}
if
(
+
params
.
row
.
receiverType
===
4
)
{
return
h
(
'
div
'
,
$t
(
'
coupon.redemption
'
)
);
}
return
h
(
'
div
'
,
obj
.
name
);
},
},
{
title
:
'
状态
'
,
title
:
$t
(
'
status
'
)
,
key
:
'
status
'
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
...
...
@@ -152,7 +152,7 @@ const columns: object[] = [
}
},
{
title
:
'
状态
'
,
title
:
$t
(
'
status
'
)
,
key
:
'
status
'
,
formType
:
'
select
'
,
hideTable
:
true
,
...
...
app/web/page/editor/component/DynamicForm/component/CouponTableModal/index.ts
View file @
ee7a9c05
...
...
@@ -13,7 +13,7 @@ export default class CouponTableModal extends Vue {
templates
:
object
[]
=
[];
table
:
object
[]
=
[
{
title
:
'
选择优惠券
'
,
title
:
$t
(
'
select.coupon
'
)
,
type
:
'
coupon
'
,
multiple
:
true
,
columns
:
couponColumn
,
...
...
app/web/page/editor/component/DynamicForm/component/CouponTableModal/index.vue
View file @
ee7a9c05
<
template
>
<table-modal
:table=
"table"
:templates.sync=
"templates"
:formControl=
"formControl"
v-model=
"coupon"
title=
"优惠券
"
></table-modal>
<table-modal
:table=
"table"
:templates.sync=
"templates"
:formControl=
"formControl"
v-model=
"coupon"
:title=
"$t('coupon')
"
></table-modal>
</
template
>
<
script
lang=
"ts"
src=
"./index.ts"
></
script
>
<
style
></
style
>
\ No newline at end of file
app/web/page/editor/component/DynamicForm/component/DiscountGoodsSelector/index.vue
View file @
ee7a9c05
<
template
>
<div
class=
"discountGoodsContainer"
>
<div
class=
"discountGoodsItem"
v-for=
"(item, index) in goods"
:key=
"index"
>
<p>
商品
{{
index
+
1
}}
<span
v-if=
"item.status == 2"
>
(已隐藏,商品已下架)
</span></p>
<p>
{{
$t
(
'
product
'
)
}}{{
index
+
1
}}
<span
v-if=
"item.status == 2"
>
{{
$t
(
'
hidden.product.removed
'
)
}}
</span></p>
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"item"
:label-width=
"90"
label-position=
"left"
>
<FormItem
label=
"sku_no"
prop=
"skuNo"
>
<Input
v-model=
"item.skuNo"
placeholder=
"请输入商品sku编码
"
@
on-focus=
"setPrevVal(item.skuNo)"
@
on-blur=
"getSkuInfo(item.skuNo, index)"
></Input>
<Input
v-model=
"item.skuNo"
:placeholder=
"$t('enter.product.sku.code')
"
@
on-focus=
"setPrevVal(item.skuNo)"
@
on-blur=
"getSkuInfo(item.skuNo, index)"
></Input>
</FormItem>
<FormItem
label=
"商品名称
"
prop=
"skuName"
>
<Input
v-model=
"item.skuName"
placeholder=
"请输入商品名称
"
></Input>
<FormItem
:label=
"$t('product.name')
"
prop=
"skuName"
>
<Input
v-model=
"item.skuName"
:placeholder=
"$t('enter.product.name')
"
></Input>
</FormItem>
<FormItem
label=
"商品横幅文案
"
prop=
"subtitle"
>
<Input
v-model=
"item.subtitle"
placeholder=
"请输入商品横幅文案
"
></Input>
<FormItem
:label=
"$t('product.banner.text')
"
prop=
"subtitle"
>
<Input
v-model=
"item.subtitle"
:placeholder=
"$t('enter.product.banner.text')
"
></Input>
</FormItem>
<FormItem
label=
"商品标签文案
"
prop=
"tag"
>
<Input
v-model=
"item.tag"
placeholder=
"请输入商品标签文案
"
></Input>
<FormItem
:label=
"$t('product.tag.text')
"
prop=
"tag"
>
<Input
v-model=
"item.tag"
:placeholder=
"$t('enter.product.tag.text')
"
></Input>
</FormItem>
<FormItem
label=
"商品标签文案颜色
"
prop=
"tagColor"
>
<FormItem
:label=
"$t('product.tag.color')
"
prop=
"tagColor"
>
<ColorSelector
v-model=
"item.goodsTagFontColor"
@
input=
"updateStyle($event, 'tagColor', item)"
></ColorSelector>
</FormItem>
<FormItem
label=
"商品标签背景"
prop=
"tagBg"
title=
"要求尺寸:134px * 46px
"
>
<FormItem
:label=
"$t('product.tag.background')"
prop=
"tagBg"
:title=
"$t('required.size.134px.46px')
"
>
<Upload
v-model=
"item.goodsTagBgImg"
@
change=
"updateStyle($event, 'tagBg', item)"
></Upload>
</FormItem>
</Form>
<Button
type=
"error"
@
click=
"del(index)"
class=
"deleteGood"
>
删除
</Button>
<Button
type=
"error"
@
click=
"del(index)"
class=
"deleteGood"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
添加商品
</Button>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
{{
$t
(
'
add.product
'
)
}}
</Button>
<!--
<Button
type=
"primary"
@
click=
"save"
>
保存
</Button>
-->
</div>
</
template
>
...
...
app/web/page/editor/component/DynamicForm/component/DiscountGoodsSelectorV2/index.vue
View file @
ee7a9c05
...
...
@@ -4,38 +4,37 @@
v-model=
"data.ids"
type=
"textarea"
:autosize=
"
{minRows: 3,maxRows: 10}"
placeholder="请输入skuNo,每个skuNo使用英文逗号隔开
"
:placeholder="$t('enter.skuno.separated.by.commas')
"
@on-blur="changeIds"
/>
<div
class=
"goodsItem"
v-for=
"(item, index) in data.data"
:key=
"index"
>
<div
class=
"title"
>
商品
{{
index
+
1
}}
<div
class=
"title"
>
{{
$t
(
'
product
'
)
}}{{
index
+
1
}}
</div>
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"item"
:label-width=
"90"
label-position=
"left"
>
<FormItem
label=
"sku_no"
prop=
"skuNo"
>
<Input
v-model=
"item.skuNo"
disabled
/>
</FormItem>
<FormItem
label=
"商品名称
"
prop=
"goodsName"
>
<FormItem
:label=
"$t('product.name')
"
prop=
"goodsName"
>
<Input
v-model=
"item.goodsName"
/>
</FormItem>
<FormItem
label=
"商品主图
"
prop=
"img"
>
<FormItem
:label=
"$t('product.image')
"
prop=
"img"
>
<Upload
v-model=
"item.img"
></Upload>
</FormItem>
<FormItem
label=
"横幅文案
"
prop=
"subtitle"
>
<FormItem
:label=
"$t('banner.text')
"
prop=
"subtitle"
>
<Input
v-model=
"item.subtitle"
/>
</FormItem>
<FormItem
label=
"标签文案
"
prop=
"tag"
>
<FormItem
:label=
"$t('tag.text')
"
prop=
"tag"
>
<Input
v-model=
"item.tag"
/>
</FormItem>
<FormItem
label=
"标签文案颜色
"
prop=
"tagColor"
>
<FormItem
:label=
"$t('tag.text.color')
"
prop=
"tagColor"
>
<ColorSelector
v-model=
"item.tagColor"
/>
</FormItem>
<FormItem
label=
"标签背景图
"
prop=
"tagBgImg"
>
<FormItem
:label=
"$t('tag.background')
"
prop=
"tagBgImg"
>
<Upload
v-model=
"item.tagBgImg"
></Upload>
</FormItem>
</Form>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
删除
</Button>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
</div>
</
template
>
...
...
@@ -129,7 +128,7 @@ export default {
const
skus
=
ids
?
ids
.
split
(
'
,
'
)
:
[];
if
(
skus
.
length
)
{
if
(
skus
.
length
>
15
)
{
this
.
$toast
(
'
最多填入15个商品
'
);
this
.
$toast
(
$t
(
'
max.15.products
'
)
);
return
;
}
this
.
getGoods
({
...
...
app/web/page/editor/component/DynamicForm/component/FontWeightSelector/index.vue
View file @
ee7a9c05
...
...
@@ -30,9 +30,9 @@ export default {
data
()
{
return
{
options
:
[
{
id
:
'
normal
'
,
label
:
'
标准
'
},
{
id
:
'
medium
'
,
label
:
'
中粗
'
},
{
id
:
'
bold
'
,
label
:
'
加粗
'
}
{
id
:
'
normal
'
,
label
:
$t
(
'
standard
'
)
},
{
id
:
'
medium
'
,
label
:
$t
(
'
semibold
'
)
},
{
id
:
'
bold
'
,
label
:
$t
(
'
bold
'
)
}
],
selected
:
''
}
...
...
app/web/page/editor/component/DynamicForm/component/FormList/index.vue
View file @
ee7a9c05
...
...
@@ -2,8 +2,8 @@
<div
class=
"form-list"
>
<Card
class=
"form-list-card"
:key=
"index"
v-for=
"(item, index) in list"
>
<div
slot=
'title'
class=
"Fl-card-title"
>
<h4>
项目
{{
index
+
1
}}
</h4>
<a
@
click=
"del(index)"
>
删除
</a>
<h4>
{{
$t
(
'
item
'
)
}}
{{
index
+
1
}}
</h4>
<a
@
click=
"del(index)"
>
{{
$t
(
'
delete
'
)
}}
</a>
</div>
<Form
@
submit
.
native
.
prevent
:model=
"item"
:label-width=
"50"
>
<FormItem
:prop=
"`$
{keywords.key}`" :label="keywords.name" :key="idx" v-for="(keywords, idx) in formControl">
...
...
@@ -12,7 +12,7 @@
</Form>
</Card>
<div
class=
"form-list-button"
>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
添加项目
</Button>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
{{
$t
(
'
add.item
'
)
}}
</Button>
</div>
</div>
</
template
>
...
...
app/web/page/editor/component/DynamicForm/component/GoodsChannelTypeSelector/index.vue
View file @
ee7a9c05
...
...
@@ -30,8 +30,8 @@ export default {
data
()
{
return
{
options
:
[
{
id
:
'
1
'
,
label
:
'
单行
'
},
{
id
:
'
2
'
,
label
:
'
双行
'
},
{
id
:
'
1
'
,
label
:
$t
(
'
single.row
'
)
},
{
id
:
'
2
'
,
label
:
$t
(
'
double.row
'
)
},
],
selected
:
0
}
...
...
app/web/page/editor/component/DynamicForm/component/GoodsCubeSelector/index.vue
View file @
ee7a9c05
...
...
@@ -4,29 +4,28 @@
v-model=
"data.ids"
type=
"textarea"
:autosize=
"
{minRows: 3,maxRows: 10}"
placeholder="请输入skuNo,每个skuNo使用英文逗号隔开
"
:placeholder="$t('enter.skuno.separated.by.commas')
"
@on-blur="changeIds"
/>
<div
class=
"goodsItem"
v-for=
"(item, index) in data.data"
:key=
"index"
>
<div
class=
"title"
>
商品
{{
index
+
1
}}
<div
class=
"title"
>
{{
$t
(
'
product
'
)
}}{{
index
+
1
}}
</div>
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"item"
:label-width=
"90"
label-position=
"left"
>
<FormItem
label=
"sku_no"
prop=
"skuNo"
>
<Input
v-model=
"item.skuNo"
disabled
/>
</FormItem>
<FormItem
label=
"商品名称
"
prop=
"skuName"
>
<FormItem
:label=
"$t('product.name')
"
prop=
"skuName"
>
<Input
v-model=
"item.skuName"
/>
</FormItem>
<FormItem
label=
"商品图片
"
prop=
"skuUrl"
>
<FormItem
:label=
"$t('product.photo')
"
prop=
"skuUrl"
>
<Upload
v-model=
"item.skuUrl"
></Upload>
</FormItem>
<FormItem
label=
"商品横幅文案
"
prop=
"subTitle"
>
<FormItem
:label=
"$t('product.banner.text')
"
prop=
"subTitle"
>
<Input
v-model=
"item.subTitle"
/>
</FormItem>
</Form>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
删除
</Button>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
</div>
</
template
>
...
...
@@ -112,7 +111,7 @@ export default {
const
skus
=
ids
?
ids
.
split
(
'
,
'
)
:
[];
if
(
skus
.
length
)
{
if
(
skus
.
length
>
30
)
{
this
.
$toast
(
'
最多填入30个商品
'
);
this
.
$toast
(
$t
(
'
max.30.products
'
)
);
return
;
}
this
.
getGoods
({
...
...
app/web/page/editor/component/DynamicForm/component/GoodsPromotionTypeSelector/index.vue
View file @
ee7a9c05
...
...
@@ -30,10 +30,10 @@ export default {
data
()
{
return
{
options
:
[
{
id
:
'
1
'
,
label
:
'
左一带五
'
},
{
id
:
'
2
'
,
label
:
'
右一带五
'
},
{
id
:
'
3
'
,
label
:
'
左二带四
'
},
{
id
:
'
4
'
,
label
:
'
右二带四
'
},
{
id
:
'
1
'
,
label
:
$t
(
'
15.left
'
)
},
{
id
:
'
2
'
,
label
:
$t
(
'
15.right
'
)
},
{
id
:
'
3
'
,
label
:
$t
(
'
24.left
'
)
},
{
id
:
'
4
'
,
label
:
$t
(
'
24.right
'
)
},
],
selected
:
0
}
...
...
app/web/page/editor/component/DynamicForm/component/GoodsResourceSelector/index.vue
View file @
ee7a9c05
...
...
@@ -4,22 +4,22 @@
{{
item
.
label
}}
</span>
<div
v-if=
"dataValue.type == 'category'"
>
<Button
type=
"primary"
@
click=
"add"
>
选择品类
</Button>
<Button
type=
"primary"
@
click=
"add"
>
{{
$t
(
'
select.category
'
)
}}
</Button>
</div>
<div
v-if=
"dataValue.type == 'brand'"
>
<Button
type=
"primary"
@
click=
"add"
>
选择品牌
</Button>
<Button
type=
"primary"
@
click=
"add"
>
{{
$t
(
'
select.brand
'
)
}}
</Button>
</div>
<Modal
v-model=
"showModal"
:mask-closable=
"false"
:title=
"modalTitle"
width=
"600"
>
<div
v-if=
"dataValue.type == 'category'"
>
<div
class=
"search"
>
<Form
class=
"searchFormStyle"
inline
>
<FormItem
label=
"类目名称
"
prop=
"name"
>
<FormItem
:label=
"$t('category.name')
"
prop=
"name"
>
<Input
v-model=
"searchParams.name"
placeholder=
""
/>
</FormItem>
<FormItem
label=
"类目编码
"
prop=
"name"
>
<FormItem
:label=
"$t('category.code')
"
prop=
"name"
>
<Input
v-model=
"searchParams.sceneId"
placeholder=
""
/>
</FormItem>
<Button
type=
"primary"
@
click=
"searchList"
>
查询
</Button>
<Button
type=
"primary"
@
click=
"searchList"
>
{{
$t
(
'
search
'
)
}}
</Button>
</Form>
</div>
<Table
...
...
@@ -36,13 +36,13 @@
<div
v-if=
"dataValue.type == 'brand'"
>
<div
class=
"search"
>
<Form
class=
"searchFormStyle"
inline
>
<FormItem
label=
"品牌名称
"
prop=
"name"
>
<FormItem
:label=
"$t('brand.name')
"
prop=
"name"
>
<Input
v-model=
"searchParams.name"
placeholder=
""
/>
</FormItem>
<FormItem
label=
"品牌编码
"
prop=
"name"
>
<FormItem
:label=
"$t('brand.code')
"
prop=
"name"
>
<Input
v-model=
"searchParams.sceneId"
placeholder=
""
/>
</FormItem>
<Button
type=
"primary"
@
click=
"searchList"
>
查询
</Button>
<Button
type=
"primary"
@
click=
"searchList"
>
{{
$t
(
'
search
'
)
}}
</Button>
</Form>
</div>
<Table
...
...
@@ -57,8 +57,8 @@
<Page
class=
"page"
:total=
"total"
@
on-change=
"changePageNo"
show-total
></Page>
</div>
<div
slot=
"footer"
>
<Button
@
click=
"showModal = false"
>
取消
</Button>
<Button
type=
"primary"
@
click=
"submitSelect"
>
确认
</Button>
<Button
@
click=
"showModal = false"
>
{{
$t
(
'
cancel
'
)
}}
</Button>
<Button
type=
"primary"
@
click=
"submitSelect"
>
{{
$t
(
'
ok
'
)
}}
</Button>
</div>
</Modal>
</div>
...
...
@@ -74,12 +74,12 @@ const categoryCol = function() {
},
{
align
:
'
center
'
,
title
:
'
类目名称
'
,
title
:
$t
(
'
category.name
'
)
,
key
:
'
categoryName
'
,
},
{
align
:
'
center
'
,
title
:
'
类目编码
'
,
title
:
$t
(
'
category.code
'
)
,
key
:
'
sceneId
'
,
width
:
180
},
...
...
@@ -94,12 +94,12 @@ const brandCol = function() {
},
{
align
:
'
center
'
,
title
:
'
品牌名称
'
,
title
:
$t
(
'
brand.name
'
)
,
key
:
'
brandName
'
,
},
{
align
:
'
center
'
,
title
:
'
品牌编码
'
,
title
:
$t
(
'
brand.code
'
)
,
key
:
'
sceneId
'
,
width
:
120
},
...
...
@@ -138,7 +138,7 @@ export default {
},
computed
:
{
modalTitle
()
{
return
this
.
dataValue
.
type
===
'
category
'
?
'
选择品类
'
:
'
选择品牌
'
return
this
.
dataValue
.
type
===
'
category
'
?
$t
(
'
select.category
'
)
:
$t
(
'
select.brand
'
)
}
},
watch
:
{
...
...
@@ -246,9 +246,9 @@ export default {
data
()
{
return
{
options
:
[
{
id
:
'
all
'
,
label
:
'
全部商品
'
},
{
id
:
'
category
'
,
label
:
'
按照品类
'
},
{
id
:
'
brand
'
,
label
:
'
按照品牌
'
}
{
id
:
'
all
'
,
label
:
$t
(
'
all.products
'
)
},
{
id
:
'
category
'
,
label
:
$t
(
'
by.category
'
)
},
{
id
:
'
brand
'
,
label
:
$t
(
'
by.brand
'
)
}
],
dataValue
:
{},
showModal
:
false
,
...
...
app/web/page/editor/component/DynamicForm/component/GoodsSwiperSelector/index.vue
View file @
ee7a9c05
...
...
@@ -4,26 +4,25 @@
v-model=
"data.ids"
type=
"textarea"
:autosize=
"
{minRows: 3,maxRows: 10}"
placeholder="请输入skuNo,每个skuNo使用英文逗号隔开
"
:placeholder="$t('enter.skuno.separated.by.commas')
"
@on-blur="changeIds"
/>
<div
class=
"goodsItem"
v-for=
"(item, index) in data.data"
:key=
"index"
>
<div
class=
"title"
>
商品
{{
index
+
1
}}
<div
class=
"title"
>
{{
$t
(
'
product
'
)
}}{{
index
+
1
}}
</div>
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"item"
:label-width=
"90"
label-position=
"left"
>
<FormItem
label=
"sku_no"
prop=
"skuNo"
>
<Input
v-model=
"item.skuNo"
disabled
/>
</FormItem>
<FormItem
label=
"商品名称
"
prop=
"goodsName"
>
<FormItem
:label=
"$t('product.name')
"
prop=
"goodsName"
>
<Input
v-model=
"item.goodsName"
/>
</FormItem>
<FormItem
label=
"商品图片
"
prop=
"img"
>
<FormItem
:label=
"$t('product.photo')
"
prop=
"img"
>
<Upload
v-model=
"item.img"
></Upload>
</FormItem>
</Form>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
删除
</Button>
<Button
type=
"error"
long
@
click=
"del(index, item.skuNo)"
class=
"deleteGood"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
</div>
</
template
>
...
...
@@ -109,7 +108,7 @@ export default {
const
skus
=
ids
?
ids
.
split
(
'
,
'
)
:
[];
if
(
skus
.
length
)
{
if
(
skus
.
length
>
15
)
{
this
.
$toast
(
'
最多填入15个商品
'
);
this
.
$toast
(
$t
(
'
max.15.products
'
)
);
return
;
}
this
.
getGoods
({
...
...
app/web/page/editor/component/DynamicForm/component/GoodsTableModal/columns/goods.column.ts
View file @
ee7a9c05
const
commodityChannel
:
object
[]
=
[
{
id
:
1
,
name
:
'
自营
'
,
name
:
$t
(
'
selfoperated
'
)
,
},
{
id
:
2
,
name
:
'
京东开普勒
'
,
name
:
$t
(
'
jd.kepler
'
)
,
},
{
id
:
3
,
name
:
'
京东联盟
'
,
name
:
$t
(
'
jd.union
'
)
,
},
{
id
:
4
,
name
:
'
众联
'
,
name
:
$t
(
'
zhonglian
'
)
,
},
{
id
:
5
,
name
:
'
企业购
'
,
name
:
$t
(
'
enterprise.purchase
'
)
,
},
];
const
goodsStatus
:
object
[]
=
[
{
id
:
1
,
name
:
'
未上架
'
,
name
:
$t
(
'
not.online
'
)
,
},
{
id
:
2
,
name
:
'
审核中
'
,
name
:
$t
(
'
in.review
'
)
,
},
{
id
:
3
,
name
:
'
已上架
'
,
name
:
$t
(
'
online
'
)
,
},
{
id
:
4
,
name
:
'
我方下架
'
,
name
:
$t
(
'
internal.removal
'
)
,
},
{
id
:
5
,
name
:
'
三方下架
'
,
name
:
$t
(
'
thirdparty.removal
'
)
,
},
];
const
columns
=
function
()
{
...
...
@@ -50,7 +50,7 @@ const columns = function() {
hideSearch
:
true
},
{
title
:
'
商品ID
'
,
title
:
$t
(
'
product.id
'
)
,
key
:
'
id
'
,
formType
:
'
input
'
},
...
...
@@ -60,7 +60,7 @@ const columns = function() {
formType
:
'
input
'
},
{
title
:
'
商品图片
'
,
title
:
$t
(
'
product.photo
'
)
,
key
:
'
imageUrl
'
,
width
:
130
,
hideSearch
:
true
,
...
...
@@ -75,13 +75,13 @@ const columns = function() {
}
},
{
title
:
'
商品名称
'
,
title
:
$t
(
'
product.name
'
)
,
key
:
'
skuName
'
,
width
:
155
,
hideSearch
:
true
},
{
title
:
'
商品渠道
'
,
title
:
$t
(
'
product.channel
'
)
,
key
:
'
skuSource
'
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
...
...
@@ -90,17 +90,17 @@ const columns = function() {
},
},
{
title
:
'
销售价格
'
,
title
:
$t
(
'
sale.price
'
)
,
key
:
'
salePrice
'
,
hideSearch
:
true
},
{
title
:
'
划线价格
'
,
title
:
$t
(
'
strikethrough.price
'
)
,
key
:
'
marketPrice
'
,
hideSearch
:
true
},
{
title
:
'
发布状态
'
,
title
:
$t
(
'
publish.status
'
)
,
key
:
'
status
'
,
formType
:
'
select
'
,
valueEnum
:
goodsStatus
.
reduce
((
pre
,
cur
)
=>
{
...
...
@@ -113,7 +113,7 @@ const columns = function() {
},
},
{
title
:
'
标签
'
,
title
:
$t
(
'
tag
'
)
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
const
labelName
=
[];
...
...
@@ -126,7 +126,7 @@ const columns = function() {
},
},
{
title
:
'
商品类目
'
,
title
:
$t
(
'
product.category
'
)
,
key
:
'
cid1
'
,
formType
:
'
treeSelect
'
,
hideTable
:
true
,
...
...
app/web/page/editor/component/DynamicForm/component/GoodsTableModal/columns/goodsLabel.column.ts
View file @
ee7a9c05
...
...
@@ -6,27 +6,27 @@ const groupColumns = function() {
hideSearch
:
true
},
{
title
:
'
标签ID
'
,
title
:
$t
(
'
tag.id
'
)
,
key
:
'
id
'
,
formType
:
'
input
'
},
{
title
:
'
标签名称
'
,
title
:
$t
(
'
tag.name
'
)
,
key
:
'
labelName
'
,
formType
:
'
input
'
},
{
title
:
'
商品数量
'
,
title
:
$t
(
'
product.quantity
'
)
,
key
:
'
skuNum
'
,
hideSearch
:
true
},
{
title
:
'
品类数量
'
,
title
:
$t
(
'
category.count
'
)
,
key
:
'
cidNum
'
,
hideSearch
:
true
},
{
title
:
'
创建时间
'
,
title
:
$t
(
'
create.time
'
)
,
key
:
'
createdAt
'
,
hideSearch
:
true
,
}
...
...
app/web/page/editor/component/DynamicForm/component/GoodsTableModal/columns/goodsSpecial.column.ts
View file @
ee7a9c05
...
...
@@ -6,17 +6,17 @@ const groupColumns = function() {
hideSearch
:
true
},
{
title
:
'
专题ID
'
,
title
:
$t
(
'
topic.id
'
)
,
key
:
'
id
'
,
formType
:
'
input
'
},
{
title
:
'
专题名称
'
,
title
:
$t
(
'
topic.name
'
)
,
key
:
'
name
'
,
formType
:
'
input
'
},
{
title
:
'
有效期
'
,
title
:
$t
(
'
validity.period
'
)
,
key
:
'
validityTime
'
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
...
...
@@ -25,7 +25,7 @@ const groupColumns = function() {
},
},
{
title
:
'
标签
'
,
title
:
$t
(
'
tag
'
)
,
key
:
'
labelName
'
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
...
...
@@ -37,7 +37,7 @@ const groupColumns = function() {
},
},
{
title
:
'
创建时间
'
,
title
:
$t
(
'
create.time
'
)
,
key
:
'
createdAt
'
,
hideSearch
:
true
,
}
...
...
app/web/page/editor/component/DynamicForm/component/GoodsTableModal/index.ts
View file @
ee7a9c05
...
...
@@ -18,7 +18,7 @@ export default class GoodsTableModal extends Vue {
goods
:
object
=
cloneDeep
(
this
.
value
);
table
:
object
[]
=
[
{
title
:
'
选择商品
'
,
title
:
$t
(
'
select.product
'
)
,
type
:
'
goods
'
,
key
:
'
skuNo
'
,
multiple
:
true
,
...
...
@@ -26,7 +26,7 @@ export default class GoodsTableModal extends Vue {
query
:
this
.
query
},
{
title
:
'
选择商品标签
'
,
title
:
$t
(
'
select.product.tag
'
)
,
type
:
'
goodsLabel
'
,
key
:
'
id
'
,
multiple
:
false
,
...
...
@@ -34,7 +34,7 @@ export default class GoodsTableModal extends Vue {
query
:
this
.
queryLabel
},
{
title
:
'
选择商品专题
'
,
title
:
$t
(
'
select.product.topic
'
)
,
type
:
'
goodsGroup
'
,
key
:
'
id
'
,
multiple
:
false
,
...
...
app/web/page/editor/component/DynamicForm/component/GoodsTableModal/index.vue
View file @
ee7a9c05
<
template
>
<table-modal
:table=
"table"
:templates.sync=
"templates"
:formControl=
"formControl"
v-model=
"goods"
title=
"商品
"
></table-modal>
<table-modal
:table=
"table"
:templates.sync=
"templates"
:formControl=
"formControl"
v-model=
"goods"
:title=
"$t('product')
"
></table-modal>
</
template
>
<
script
lang=
"ts"
src=
"./index.ts"
></
script
>
<
style
></
style
>
\ No newline at end of file
app/web/page/editor/component/DynamicForm/component/SeckillSelector/index.vue
View file @
ee7a9c05
<
template
>
<div
class=
"seckillActivityContainer"
>
<Button
style=
"margin-bottom: 4px"
@
click=
"showRules"
size=
"small"
>
规则说明
</Button>
<Button
style=
"margin-bottom: 4px"
@
click=
"showRules"
size=
"small"
>
{{
$t
(
'
rule.description
'
)
}}
</Button>
<div>
<Button
style=
"margin-bottom: 4px"
type=
"primary"
@
click=
"openDialog"
>
填写活动ID
</Button>
<Button
style=
"margin-bottom: 4px"
type=
"primary"
@
click=
"openDialog"
>
{{
$t
(
'
fill.activity.id
'
)
}}
</Button>
</div>
<Modal
v-model=
"showModal"
title=
"填写活动
"
:title=
"$t('fill.activity')
"
:closable=
"false"
:mask-closable=
"false"
>
<Input
v-model=
"cacheId"
type=
"textarea"
placeholder=
"请输入活动ID, 英文逗号分隔
"
:rows=
"3"
/>
<Input
v-model=
"cacheId"
type=
"textarea"
:placeholder=
"$t('enter.activity.ids.comma.separated')
"
:rows=
"3"
/>
<div
slot=
"footer"
>
<Button
@
click=
"cancel"
>
取消
</Button>
<Button
type=
"primary"
@
click=
"ok"
>
确定
</Button>
<Button
@
click=
"cancel"
>
{{
$t
(
'
cancel
'
)
}}
</Button>
<Button
type=
"primary"
@
click=
"ok"
>
{{
$t
(
'
confirm
'
)
}}
</Button>
</div>
</Modal>
<!--
<Input
v-model=
"activityInfoId"
type=
"textarea"
placeholder=
"请输入活动ID, 英文逗号分隔"
:rows=
"3"
/>
-->
...
...
@@ -79,7 +79,7 @@ export default {
invalidArr
.
map
(
item
=>
{
ids
+=
`
${
item
.
id
}
,`
})
this
.
$Notice
.
error
({
title
:
'
提示
'
,
desc
:
`以下活动id不符合当前活动类型:
${
ids
}
`
});
this
.
$Notice
.
error
({
title
:
$t
(
'
hint
'
)
,
desc
:
`以下活动id不符合当前活动类型:
${
ids
}
`
});
return
;
}
// 判断填入的活动ID是否存在重复的渠道ID的情况
...
...
@@ -110,7 +110,7 @@ export default {
console
.
log
(
channel2Id
,
'
channel2Id
'
)
for
(
let
i
in
channel2Id
)
{
if
(
channel2Id
[
i
].
length
>
1
)
{
this
.
$Notice
.
error
({
title
:
'
提示
'
,
desc
:
`
${
i
==
'
common
'
?
'
通用渠道
'
:
'
渠道
'
+
i
}
存在重复的活动ID:
${
channel2Id
[
i
].
join
(
'
,
'
)}
`
});
this
.
$Notice
.
error
({
title
:
$t
(
'
hint
'
),
desc
:
`
${
i
==
'
common
'
?
'
通用渠道
'
:
$t
(
'
channel
'
)
+
i
}
存在重复的活动ID:
${
channel2Id
[
i
].
join
(
'
,
'
)}
`
});
return
;
}
}
...
...
@@ -126,7 +126,7 @@ export default {
},
showRules
()
{
this
.
$Modal
.
info
({
title
:
'
规则说明
'
,
title
:
$t
(
'
rule.description
'
)
,
content
:
`
<p style="width: 100%;word-break: break-all;">1、秒杀活动ID手动填写,多个ID使用英文逗号分隔;</p>
<p style="width: 100%;word-break: break-all;">2、同一个H5渠道仅可以填入一个对应渠道的秒杀活动ID;</p>
...
...
app/web/page/editor/component/DynamicForm/component/SnapUpActivitySelector/index.vue
View file @
ee7a9c05
...
...
@@ -3,21 +3,21 @@
<!--
<Select
v-model=
"activityInfoId"
filterable
>
<Option
v-for=
"item in list"
:value=
"item.id"
:key=
"item.id"
>
{{
`id ${item.id
}
- ${item.title
}
`
}}
<
/Option
>
<
/Select> --
>
<
Button
style
=
"
margin-bottom: 4px
"
@
click
=
"
showRules
"
size
=
"
small
"
>
规则说明
<
/Button
>
<
Button
style
=
"
margin-bottom: 4px
"
@
click
=
"
showRules
"
size
=
"
small
"
>
{{
$t
(
'
rule.description
'
)
}}
<
/Button
>
<
div
>
<
Button
style
=
"
margin-bottom: 4px
"
type
=
"
primary
"
@
click
=
"
openDialog
"
>
填写活动
ID
<
/Button
>
<
Button
style
=
"
margin-bottom: 4px
"
type
=
"
primary
"
@
click
=
"
openDialog
"
>
{{
$t
(
'
fill.activity.id
'
)
}}
<
/Button
>
<
/div
>
<
Modal
v
-
model
=
"
showModal
"
title
=
"
填写活动
"
:
title
=
"
$t('fill.activity')
"
:
closable
=
"
false
"
:
mask
-
closable
=
"
false
"
>
<
Input
v
-
model
=
"
cacheId
"
type
=
"
textarea
"
placeholder
=
"
请输入活动ID, 英文逗号分隔
"
:
rows
=
"
3
"
/>
<
Input
v
-
model
=
"
cacheId
"
type
=
"
textarea
"
:
placeholder
=
"
$t('enter.activity.ids.comma.separated')
"
:
rows
=
"
3
"
/>
<
div
slot
=
"
footer
"
>
<
Button
@
click
=
"
cancel
"
>
取消
<
/Button
>
<
Button
type
=
"
primary
"
@
click
=
"
ok
"
>
确定
<
/Button
>
<
Button
@
click
=
"
cancel
"
>
{{
$t
(
'
cancel
'
)
}}
<
/Button
>
<
Button
type
=
"
primary
"
@
click
=
"
ok
"
>
{{
$t
(
'
confirm
'
)
}}
<
/Button
>
<
/div
>
<
/Modal
>
<
/div
>
...
...
@@ -80,7 +80,7 @@ export default {
invalidArr
.
map
(
item
=>
{
ids
+=
`${item.id
}
,`
}
)
this
.
$Notice
.
error
({
title
:
'
提示
'
,
desc
:
`以下活动id不符合当前活动类型: ${ids
}
`
}
);
this
.
$Notice
.
error
({
title
:
$t
(
'
hint
'
)
,
desc
:
`以下活动id不符合当前活动类型: ${ids
}
`
}
);
return
;
}
// 判断填入的活动ID是否存在重复的渠道ID的情况
...
...
@@ -111,7 +111,7 @@ export default {
console
.
log
(
channel2Id
,
'
channel2Id
'
)
for
(
let
i
in
channel2Id
)
{
if
(
channel2Id
[
i
].
length
>
1
)
{
this
.
$Notice
.
error
({
title
:
'
提示
'
,
desc
:
`${i == 'common' ? '通用渠道' : '渠道'
+ i
}
存在重复的活动ID: ${channel2Id[i].join(',')
}
`
}
);
this
.
$Notice
.
error
({
title
:
$t
(
'
hint
'
),
desc
:
`${i == 'common' ? '通用渠道' : $t('channel')
+ i
}
存在重复的活动ID: ${channel2Id[i].join(',')
}
`
}
);
return
;
}
}
...
...
@@ -127,7 +127,7 @@ export default {
}
,
showRules
()
{
this
.
$Modal
.
info
({
title
:
'
规则说明
'
,
title
:
$t
(
'
rule.description
'
)
,
content
:
`
<p style="width: 100%;word-break: break-all;">1、抢购活动ID手动填写,多个ID使用英文逗号分隔;</p>
<p style="width: 100%;word-break: break-all;">2、同一个H5渠道仅可以填入一个对应渠道的抢购活动ID;</p>
...
...
app/web/page/editor/component/DynamicForm/component/SwiperListSelector/index.vue
View file @
ee7a9c05
<
template
>
<div
class=
"swiperListSelector"
>
<div
class=
"listItem"
v-for=
"(item, index) in lists"
:key=
"index"
>
<p>
素材
{{
index
+
1
}}
</p>
<p>
{{
$t
(
'
material
'
)
}}
{{
index
+
1
}}
</p>
<Form
@
submit
.
native
.
prevent
ref=
"formCustom"
:model=
"item"
:label-width=
"90"
label-position=
"left"
>
<FormItem
label=
"素材名称
"
prop=
"name"
>
<Input
v-model=
"item.name"
placeholder=
"请输入素材名称
"
/>
<FormItem
:label=
"$t('material.name')
"
prop=
"name"
>
<Input
v-model=
"item.name"
:placeholder=
"$t('enter.material.name')
"
/>
</FormItem>
<FormItem
label=
"轮播图
"
prop=
"img"
>
<FormItem
:label=
"$t('carousel')
"
prop=
"img"
>
<Upload
v-model=
"item.img"
/>
</FormItem>
<FormItem
label=
"跳转链接
"
prop=
"link"
>
<Input
v-model=
"item.link"
placeholder=
"请输入跳转链接
"
/>
<FormItem
:label=
"$t('redirect.link')
"
prop=
"link"
>
<Input
v-model=
"item.link"
:placeholder=
"$t('enter.redirect.link')
"
/>
</FormItem>
</Form>
<Button
type=
"error"
@
click=
"del(index)"
class=
"delete"
>
删除
</Button>
<Button
type=
"error"
@
click=
"del(index)"
class=
"delete"
>
{{
$t
(
'
delete
'
)
}}
</Button>
</div>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
添加素材
</Button>
<Button
type=
"dashed"
icon=
"plus-round"
@
click=
"add"
>
{{
$t
(
'
add.material
'
)
}}
</Button>
<!--
<Button
type=
"primary"
@
click=
"save"
>
保存
</Button>
-->
</div>
</
template
>
...
...
@@ -56,7 +56,7 @@ export default {
methods
:
{
add
()
{
if
(
this
.
lists
&&
this
.
lists
.
length
>=
8
)
{
this
.
$toast
(
'
最多允许添加8个素材
'
);
this
.
$toast
(
$t
(
'
max.8.materials
'
)
);
return
}
this
.
lists
.
push
({
...
...
app/web/page/editor/component/DynamicForm/component/SwiperStyleTypeSelector/index.vue
View file @
ee7a9c05
...
...
@@ -30,8 +30,8 @@ export default {
data
()
{
return
{
options
:
[
{
id
:
'
1
'
,
label
:
'
平铺
'
},
{
id
:
'
2
'
,
label
:
'
主次
'
}
{
id
:
'
1
'
,
label
:
$t
(
'
tile
'
)
},
{
id
:
'
2
'
,
label
:
$t
(
'
primarysecondary
'
)
}
],
selected
:
0
}
...
...
app/web/page/editor/component/DynamicForm/component/SwitchBtn/index.vue
View file @
ee7a9c05
<
template
>
<iSwitch
v-model=
"switchVal"
size=
"large"
class=
"switch-btn"
>
<span
slot=
"open"
>
开启
</span>
<span
slot=
"close"
>
关闭
</span>
<span
slot=
"open"
>
{{
$t
(
'
enable
'
)
}}
</span>
<span
slot=
"close"
>
{{
$t
(
'
close
'
)
}}
</span>
</iSwitch>
</
template
>
<
script
>
...
...
app/web/page/editor/component/DynamicForm/component/TableModal/index.ts
View file @
ee7a9c05
...
...
@@ -143,7 +143,7 @@ export default class DynamicForm extends Mixins(DynamicFormMixin) {
selectionChange
(
selection
)
{
if
(
!
this
.
table
[
this
.
activeName
]?.
multiple
&&
selection
.
length
>
1
)
{
this
.
$Notice
.
warning
({
title
:
'
商品组只能单选
'
title
:
$t
(
'
single.select.for.product.group
'
)
});
return
this
.
templates
;
}
...
...
app/web/page/editor/component/DynamicForm/component/Upload/index.vue
View file @
ee7a9c05
...
...
@@ -92,13 +92,13 @@
console
.
log
(
files
.
length
)
if
(
files
.
length
>
1
)
{
up
.
removeFile
(
files
[
0
]);
this
.
$toast
(
'
视频背景只允许上传单个文件
'
);
this
.
$toast
(
$t
(
'
video.background.allows.only.single.file
'
)
);
return
false
;
}
console
.
log
(
files
[
0
].
type
,
999
)
if
(
files
[
0
].
type
.
indexOf
(
'
video
'
)
===
-
1
)
{
up
.
removeFile
(
files
[
0
]);
this
.
$toast
(
'
只允许上传视频格式文件
'
);
this
.
$toast
(
$t
(
'
video.files.only
'
)
);
return
false
;
}
// 自由容器视频背景,只允许上传video
...
...
@@ -115,7 +115,7 @@
});
}
else
{
this
.
$Notice
.
success
({
title
:
'
上传成功
'
,
title
:
$t
(
'
upload.success
'
)
,
desc
:
''
,
});
this
.
img
=
config
.
qiniuHost
+
'
/
'
+
res
.
hash
;
...
...
@@ -135,7 +135,7 @@
this
.
fileType
=
'
image
'
;
limit
=
5
*
1024
*
1024
;
if
(
size
>
limit
)
{
this
.
$toast
(
'
gif图大小不允许超过5Mb
'
);
this
.
$toast
(
$t
(
'
gif.size.exceeds.5mb.limit
'
)
);
up
.
removeFile
(
file
);
return
false
;
}
...
...
@@ -144,7 +144,7 @@
this
.
fileType
=
'
video
'
;
limit
=
4
*
1024
*
1024
;
if
(
size
>
limit
)
{
this
.
$toast
(
'
文件大小不允许超过4Mb
'
);
this
.
$toast
(
$t
(
'
file.exceeds.4mb
'
)
);
up
.
removeFile
(
file
);
return
false
;
}
...
...
@@ -153,7 +153,7 @@
this
.
fileType
=
'
image
'
;
limit
=
800
*
1024
;
if
(
size
>
limit
)
{
this
.
$toast
(
'
文件大小不允许超过800Kb
'
);
this
.
$toast
(
$t
(
'
file.exceeds.800kb
'
)
);
up
.
removeFile
(
file
);
return
false
;
}
...
...
app/web/page/editor/component/DynamicForm/component/VerticalAdStyleSelector/index.vue
View file @
ee7a9c05
...
...
@@ -26,11 +26,11 @@ export default {
list
:
[
{
id
:
'
1
'
,
title
:
'
一行一组
'
title
:
$t
(
'
one.group.per.row
'
)
},
{
id
:
'
2
'
,
title
:
'
两行一组
'
title
:
$t
(
'
two.rows.per.group
'
)
}
],
styleType
:
''
...
...
app/web/page/editor/component/DynamicForm/index.ts
View file @
ee7a9c05
...
...
@@ -75,127 +75,127 @@ export default class DynamicForm extends Mixins(ContextMenuMixin, DynamicFormMix
styleSchame
:
object
=
{
curEle
:
[
{
label
:
'
定位
'
,
label
:
$t
(
'
position
'
)
,
list
:
[
{
content
:
'
上对齐
'
,
content
:
$t
(
'
top.align
'
)
,
icon
:
'
arrow-up-c
'
,
args
:
'
top
'
},
{
content
:
'
右对齐
'
,
content
:
$t
(
'
right.align
'
)
,
icon
:
'
arrow-right-c
'
,
args
:
'
right
'
},
{
content
:
'
下对齐
'
,
content
:
$t
(
'
bottom.align
'
)
,
icon
:
'
arrow-down-c
'
,
args
:
'
bottom
'
},
{
content
:
'
左对齐
'
,
content
:
$t
(
'
left.align
'
)
,
icon
:
'
arrow-left-c
'
,
args
:
'
left
'
},
{
content
:
'
垂直居中
'
,
content
:
$t
(
'
vertical.center
'
)
,
icon
:
'
android-film
'
,
args
:
'
vertical
'
},
{
content
:
'
水平居中
'
,
content
:
$t
(
'
horizontal.center
'
)
,
icon
:
'
android-film
'
,
args
:
'
horizontal
'
},
]
},
{
label
:
'
位置
'
label
:
$t
(
'
position
'
)
},
{
label
:
'
尺寸
'
,
label
:
$t
(
'
size
'
)
,
list
:
[
{
content
:
'
全屏
'
,
content
:
$t
(
'
fullscreen
'
)
,
icon
:
'
arrow-resize
'
,
args
:
'
full
'
},
{
content
:
'
宽100%
'
,
content
:
$t
(
'
100.width
'
)
,
icon
:
'
arrow-swap
'
,
args
:
'
width
'
},
{
content
:
'
高100%
'
,
content
:
$t
(
'
height.100
'
)
,
icon
:
'
arrow-swap
'
,
args
:
'
height
'
},
]
},
{
label
:
'
宽高
'
label
:
$t
(
'
dimensions
'
)
},
{
label
:
'
背景图片
'
label
:
$t
(
'
background.image
'
)
},
{
label
:
'
背景颜色
'
label
:
$t
(
'
background.color
'
)
}
],
curChild
:
[
{
label
:
'
容器尺寸
'
,
label
:
$t
(
'
container.dimensions
'
)
,
list
:
[
{
content
:
'
全屏
'
,
content
:
$t
(
'
fullscreen
'
)
,
icon
:
'
arrow-resize
'
,
args
:
[
667
,
375
],
},
{
content
:
'
根据背景图片调整宽高
'
,
content
:
$t
(
'
autosize.by.background
'
)
,
icon
:
'
image
'
,
args
:
[
667
,
375
,
'
image
'
],
},
{
content
:
'
根据元素默认尺寸调整宽高
'
,
content
:
$t
(
'
autosize.by.element
'
)
,
icon
:
'
stop
'
,
args
:
[
''
,
''
,
'
element
'
],
},
{
content
:
'
宽100%
'
,
content
:
$t
(
'
100.width
'
)
,
icon
:
'
arrow-swap
'
,
args
:
[
null
,
375
]
},
{
content
:
'
高100%
'
,
content
:
$t
(
'
height.100
'
)
,
icon
:
'
arrow-swap
'
,
args
:
[
667
,
null
]
}
]
},
{
label
:
'
容器宽高
'
label
:
$t
(
'
container.size
'
)
},
{
label
:
'
背景图片
'
label
:
$t
(
'
background.image
'
)
},
{
label
:
'
背景颜色
'
label
:
$t
(
'
background.color
'
)
},
{
label
:
'
上边距
'
,
label
:
$t
(
'
top.margin
'
)
,
key
:
'
paddingTop
'
},
{
label
:
'
下边距
'
,
label
:
$t
(
'
bottom.margin
'
)
,
key
:
'
paddingBottom
'
},
{
label
:
'
左边距
'
,
label
:
$t
(
'
left.margin
'
)
,
key
:
'
paddingLeft
'
},
{
label
:
'
右边距
'
,
label
:
$t
(
'
right.margin
'
)
,
key
:
'
paddingRight
'
},
]
...
...
app/web/page/editor/component/DynamicForm/index.vue
View file @
ee7a9c05
...
...
@@ -5,7 +5,7 @@
<div>
{{
`组件ID: ${curElement.id
}
`
}}
<
/div
>
<
/div
>
<
Form
class
=
"
dynamic-form-component
"
@
submit
.
native
.
prevent
:
label
-
width
=
"
110
"
:
model
=
"
form
"
v
-
if
=
"
currentSchame && currentSchame.length
"
>
<
h3
v
-
if
=
"
!hasGroup
"
>
组件属性
<
/h3
>
<
h3
v
-
if
=
"
!hasGroup
"
>
{{
$t
(
'
component.attribute
'
)
}}
<
/h3
>
<
template
v
-
for
=
"
(item, index) in currentSchame
"
>
<
div
v
-
if
=
"
item.title
"
>
<
h3
>
{{
item
.
title
}}
<
/h3
>
...
...
@@ -22,20 +22,20 @@
<
/template
>
<
/Form
>
<
Form
class
=
"
dynamic-form-basic
"
@
submit
.
native
.
prevent
:
label
-
width
=
"
110
"
>
<
h3
>
基础样式
<
/h3
>
<
h3
>
{{
$t
(
'
basic.style
'
)
}}
<
/h3
>
<
template
v
-
if
=
"
childSelected
"
>
<
template
v
-
for
=
"
item in styleSchame.curEle
"
>
<
FormItem
:
label
=
"
item.label
"
>
<
template
v
-
if
=
"
item.label ===
'宽高'
"
>
<
template
v
-
if
=
"
item.label ===
$t('dimensions')
"
>
<
InputNumber
class
=
"
Df-basic-inputnumber
"
:
max
=
"
375
"
:
min
=
"
0
"
v
-
model
=
"
commonStyle.width
"
@
on
-
change
=
"
updateStyle($event, 'width')
"
><
/InputNumber
>
<
InputNumber
:
max
=
"
667
"
:
min
=
"
0
"
v
-
model
=
"
commonStyle.height
"
@
on
-
change
=
"
updateStyle($event, 'height')
"
><
/InputNumber
>
<
/template
>
<
template
v
-
else
-
if
=
"
item.label ===
'位置'
"
>
<
template
v
-
else
-
if
=
"
item.label ===
$t('position')
"
>
<
InputNumber
class
=
"
Df-basic-inputnumber
"
v
-
model
=
"
commonStyle.left
"
@
on
-
change
=
"
updateStyle($event, 'left')
"
><
/InputNumber
>
<
InputNumber
v
-
model
=
"
commonStyle.top
"
@
on
-
change
=
"
updateStyle($event, 'top')
"
><
/InputNumber
>
<
/template
>
<
upload
v
-
else
-
if
=
"
item.label ===
'背景图片'
"
v
-
model
=
"
commonStyle.backgroundImage
"
@
change
=
"
updateStyle($event, 'backgroundImage')
"
><
/upload
>
<
ColorSelector
v
-
else
-
if
=
"
item.label ===
'背景颜色'
"
v
-
model
=
"
commonStyle.backgroundColor
"
@
input
=
"
updateStyle($event, 'backgroundColor')
"
><
/ColorSelector
>
<
upload
v
-
else
-
if
=
"
item.label ===
$t('background.image')
"
v
-
model
=
"
commonStyle.backgroundImage
"
@
change
=
"
updateStyle($event, 'backgroundImage')
"
><
/upload
>
<
ColorSelector
v
-
else
-
if
=
"
item.label ===
$t('background.color')
"
v
-
model
=
"
commonStyle.backgroundColor
"
@
input
=
"
updateStyle($event, 'backgroundColor')
"
><
/ColorSelector
>
<
template
v
-
else
>
<
Tooltip
placement
=
"
top
"
:
content
=
"
child.content
"
v
-
for
=
"
child in item.list
"
:
key
=
"
child.content
"
>
<
Button
type
=
"
ghost
"
:
icon
=
"
child.icon
"
@
click
=
"
changeAlignType(child.args)
"
><
/Button
>
...
...
@@ -47,15 +47,15 @@
<
template
v
-
if
=
"
parentSelected
"
>
<
template
v
-
for
=
"
item in styleSchame.curChild
"
>
<
FormItem
:
label
=
"
item.label
"
>
<
template
v
-
if
=
"
item.label ===
'容器宽高'
"
>
<
template
v
-
if
=
"
item.label ===
$t('container.size')
"
>
<
InputNumber
class
=
"
Df-basic-inputnumber
"
:
max
=
"
375
"
:
min
=
"
0
"
v
-
model
=
"
point.w
"
@
on
-
change
=
"
updatePoint($event, 'w')
"
><
/InputNumber
>
<
InputNumber
:
max
=
"
667
"
:
min
=
"
0
"
v
-
model
=
"
point.h
"
@
on
-
change
=
"
updatePoint($event, 'h')
"
><
/InputNumber
>
<
/template
>
<
template
v
-
else
-
if
=
"
item.label.indexOf('边距') > -1
"
>
<
template
v
-
else
-
if
=
"
$t('itemlabelindexofmargin.1')
"
>
<
Slider
v
-
model
=
"
commonStyle[item.key]
"
@
on
-
input
=
"
changeMargin
"
/>
<
/template
>
<
upload
v
-
else
-
if
=
"
item.label ===
'背景图片'
"
v
-
model
=
"
commonStyle.backgroundImage
"
@
change
=
"
updateStyle($event, 'backgroundImage')
"
><
/upload
>
<
ColorSelector
v
-
else
-
if
=
"
item.label ===
'背景颜色'
"
v
-
model
=
"
commonStyle.backgroundColor
"
@
input
=
"
updateStyle($event, 'backgroundColor')
"
><
/ColorSelector
>
<
upload
v
-
else
-
if
=
"
item.label ===
$t('background.image')
"
v
-
model
=
"
commonStyle.backgroundImage
"
@
change
=
"
updateStyle($event, 'backgroundImage')
"
><
/upload
>
<
ColorSelector
v
-
else
-
if
=
"
item.label ===
$t('background.color')
"
v
-
model
=
"
commonStyle.backgroundColor
"
@
input
=
"
updateStyle($event, 'backgroundColor')
"
><
/ColorSelector
>
<
template
v
-
else
>
<
Tooltip
placement
=
"
top
"
:
content
=
"
child.content
"
v
-
for
=
"
child in item.list
"
:
key
=
"
child.content
"
>
<
Button
type
=
"
ghost
"
:
icon
=
"
child.icon
"
@
click
=
"
resizedEvent(...child.args)
"
><
/Button
>
...
...
app/web/page/editor/component/DynamicFormTabs/index.vue
View file @
ee7a9c05
<
template
>
<Tabs
class=
"dynamic-form-tabs"
:value=
"curRightTabName"
>
<TabPane
name=
"组件设置"
label=
"组件设置
"
>
<TabPane
:name=
"$t('component.settings')"
:label=
"$t('component.settings')
"
>
<dynamic-form
@
modProps=
"modProps"
@
resizedChildEvent=
"resizedChildEvent"
></dynamic-form>
</TabPane>
<!--
<TabPane
label=
"事件"
>
事件
</TabPane>
-->
<TabPane
name=
"页面设置"
label=
"页面设置
"
>
<TabPane
:name=
"$t('page.settings')"
:label=
"$t('page.settings')
"
>
<dynamic-page-form
@
modProps=
"modProps"
@
resizedChildEvent=
"resizedChildEvent"
></dynamic-page-form>
</TabPane>
<TabPane
name=
"组件管理"
label=
"组件管理
"
>
<TabPane
:name=
"$t('component.management')"
:label=
"$t('component.management')
"
>
<dynamic-component-sort
/>
</TabPane>
</Tabs>
...
...
app/web/page/editor/component/DynamicPageForm/index.ts
View file @
ee7a9c05
...
...
@@ -18,32 +18,32 @@ export default class DynamicPageForm extends Mixins(ContextMenuMixin) {
@
Getter
(
'
pageData
'
)
pageData
;
@
State
(
state
=>
state
.
tenant
.
cartAndShareBtn
)
cartAndShareBtn
;
title
:
string
=
'
页面
'
;
title
:
string
=
$t
(
'
page
'
)
;
commonStyleForm
:
object
=
{};
propsForm
:
object
=
{};
commonStyleSchame
:
object
[]
=
[
{
key
:
'
backgroundImage
'
,
name
:
'
背景图片
'
,
name
:
$t
(
'
background.image
'
)
,
type
:
'
Upload
'
,
},
{
key
:
'
backgroundColor
'
,
name
:
'
背景颜色
'
,
name
:
$t
(
'
background.color
'
)
,
type
:
'
ColorSelector
'
}
];
baseConfigSchema
:
object
[]
=
[
{
key
:
'
pageNeedLogin
'
,
name
:
'
是否登录
'
,
name
:
$t
(
'
logged.in
'
)
,
type
:
'
SwitchBtn
'
},
];
,
titleSchema
:
object
[]
=
[
{
key
:
'
titleBgColor
'
,
name
:
'
背景色
'
,
name
:
$t
(
'
background.color
'
)
,
type
:
'
ColorSelector
'
,
props
:
{
gradient
:
true
,
...
...
@@ -53,90 +53,90 @@ export default class DynamicPageForm extends Mixins(ContextMenuMixin) {
// 支持运营内部福利赛需求,包括优惠券组件也做了处理,如果后期不用,可以考虑下线
{
key
:
'
titleUseUrl
'
,
name
:
'
从URL中获取标题
'
,
name
:
$t
(
'
fetch.title.from.url
'
)
,
type
:
'
SwitchBtn
'
},
];
bottomSchema
:
object
[]
=
[
{
key
:
'
showPageBottomTip
'
,
name
:
'
状态
'
,
name
:
$t
(
'
status
'
)
,
type
:
'
SwitchBtn
'
},
{
key
:
'
pageBottomTxt
'
,
name
:
'
提示文案
'
,
name
:
$t
(
'
hint.text
'
)
,
type
:
'
Input
'
},
{
key
:
'
pageBottomColor
'
,
name
:
'
提示颜色
'
,
name
:
$t
(
'
hint.color
'
)
,
type
:
'
ColorSelector
'
},
];
floatSchema
:
object
[]
=
[
{
key
:
'
showBackTop
'
,
name
:
'
返回顶部
'
,
name
:
$t
(
'
back.to.top
'
)
,
type
:
'
SwitchBtn
'
},
{
key
:
'
btAttachVal
'
,
name
:
'
添加按钮
'
,
desc
:
'
添加按钮
'
,
name
:
$t
(
'
add.button
'
)
,
desc
:
$t
(
'
add.button
'
)
,
type
:
'
BackTopPicker
'
,
formControl
:
[
{
key
:
'
persets
'
,
name
:
'
预设属性
'
,
name
:
$t
(
'
preset.attributes
'
)
,
type
:
'
select
'
,
options
:
[
'
购物车
'
,
'
分享
'
,
'
自定义
'
]
options
:
[
$t
(
'
shopping.cart
'
),
$t
(
'
share
'
),
$t
(
'
custom
'
)
]
},
{
key
:
'
name
'
,
name
:
'
名称
'
,
name
:
$t
(
'
name
'
)
,
type
:
'
text
'
,
props
:
{
require
:
true
,
placeholder
:
'
(必填) 区分埋点
'
placeholder
:
$t
(
'
required.tracking.point
'
)
}
},
{
key
:
'
txt
'
,
name
:
'
文字
'
,
name
:
$t
(
'
text
'
)
,
type
:
'
text
'
,
props
:
{
placeholder
:
'
(选填) 图标下方文字
'
,
placeholder
:
$t
(
'
optional.text.below.icon
'
)
,
}
},
{
key
:
'
url
'
,
name
:
'
链接
'
,
name
:
$t
(
'
link
'
)
,
type
:
'
text
'
},
{
key
:
'
icon
'
,
name
:
'
图片
'
,
name
:
$t
(
'
image
'
)
,
type
:
'
Upload
'
},
{
key
:
'
color
'
,
name
:
'
文字颜色
'
,
name
:
$t
(
'
text.color
'
)
,
type
:
'
ColorSelector
'
},
{
key
:
'
iconColor
'
,
name
:
'
图标颜色
'
,
name
:
$t
(
'
icon.color
'
)
,
type
:
'
ColorSelector
'
},
{
key
:
'
background
'
,
name
:
'
背景颜色
'
,
name
:
$t
(
'
background.color
'
)
,
type
:
'
ColorSelector
'
},
{
key
:
'
size
'
,
name
:
'
尺寸
'
,
name
:
$t
(
'
size
'
)
,
type
:
'
Slider
'
,
props
:
{
min
:
14
,
...
...
@@ -145,7 +145,7 @@ export default class DynamicPageForm extends Mixins(ContextMenuMixin) {
},
{
key
:
'
iconSize
'
,
name
:
'
图标尺寸
'
,
name
:
$t
(
'
icon.size
'
)
,
type
:
'
Slider
'
,
props
:
{
min
:
14
,
...
...
@@ -154,12 +154,12 @@ export default class DynamicPageForm extends Mixins(ContextMenuMixin) {
},
{
key
:
'
radius
'
,
name
:
'
圆角
'
,
name
:
$t
(
'
border.radius
'
)
,
type
:
'
checkbox
'
},
{
key
:
'
shadow
'
,
name
:
'
阴影
'
,
name
:
$t
(
'
shadow
'
)
,
type
:
'
checkbox
'
}
],
...
...
@@ -169,7 +169,7 @@ export default class DynamicPageForm extends Mixins(ContextMenuMixin) {
floatModal
:
object
[]
=
[
{
key
:
'
couponModal
'
,
name
:
'
优惠券弹窗
'
,
name
:
$t
(
'
coupon.popup
'
)
,
type
:
'
CouponModalSelector
'
},
];
...
...
@@ -191,7 +191,7 @@ export default class DynamicPageForm extends Mixins(ContextMenuMixin) {
@
Watch
(
'
cartAndShareBtn
'
,
{
immediate
:
true
})
onAuthStateChange
(
val
)
{
const
options
=
val
?
[
'
购物车
'
,
'
分享
'
,
'
自定义
'
]
:
[
'
自定义
'
];
const
options
=
val
?
[
$t
(
'
shopping.cart
'
),
$t
(
'
share
'
),
$t
(
'
custom
'
)]
:
[
$t
(
'
custom
'
)
];
this
.
$set
(
this
.
floatSchema
[
1
].
formControl
[
0
],
'
options
'
,
options
);
this
.
$set
(
this
.
floatSchema
[
1
],
'
formDefault
'
,
val
?
SHOP_CART_CONFIG
:
DEFAULT_CONFIG
);
}
...
...
app/web/page/editor/component/DynamicPageForm/index.vue
View file @
ee7a9c05
...
...
@@ -2,32 +2,32 @@
<div
class=
"dynamic-form"
>
<h2>
{{
title
}}
</h2>
<Form
class=
"dynamic-form-component"
:label-width=
"80"
:model=
"propsForm"
@
submit
.
native
.
prevent
>
<h3>
基础属性
</h3>
<h4>
基础配置
</h4>
<h3>
{{
$t
(
'
basic.attributes
'
)
}}
</h3>
<h4>
{{
$t
(
'
basic.config
'
)
}}
</h4>
<template
v-for=
"(item, index) in baseConfigSchema"
>
<FormItem
class=
"Df-component-formitem"
:label=
"item.name"
:key=
"'baseConfigSchema_' + index"
>
<component
:is=
"item.type"
:options=
"item.options"
v-bind=
"item.props"
v-model=
"propsForm[item.key]"
:formControl=
"item.formControl"
/>
</FormItem>
</
template
>
<h4>
标题栏
</h4>
<h4>
{{ $t('title.bar') }}
</h4>
<
template
v-for=
"(item, index) in titleSchema"
>
<FormItem
class=
"Df-component-formitem"
:label=
"item.name"
:key=
"'titleSchema_' + index"
>
<component
:is=
"item.type"
:options=
"item.options"
v-bind=
"item.props"
v-model=
"propsForm[item.key]"
:formControl=
"item.formControl"
/>
</FormItem>
</
template
>
<h4>
底部提示
</h4>
<h4>
{{ $t('bottom.tip') }}
</h4>
<
template
v-for=
"(item, index) in bottomSchema"
>
<FormItem
class=
"Df-component-formitem"
:label=
"item.name"
:key=
"'bottomSchema_' + index"
>
<component
:is=
"item.type"
:options=
"item.options"
v-bind=
"item.props"
v-model=
"propsForm[item.key]"
:formControl=
"item.formControl"
/>
</FormItem>
</
template
>
<h4>
悬浮窗
</h4>
<h4>
{{ $t('floating.window') }}
</h4>
<
template
v-for=
"(item, index) in floatSchema"
>
<FormItem
class=
"Df-component-formitem"
:label=
"item.name"
:key=
"'floatSchema_' + index"
>
<component
:is=
"item.type"
:options=
"item.options"
v-bind=
"item.props"
v-model=
"propsForm[item.key]"
:formDefault=
"item.formDefault"
:formControl=
"item.formControl"
/>
</FormItem>
</
template
>
<h4>
弹窗
</h4>
<h4>
{{ $t('popup') }}
</h4>
<
template
v-for=
"(item, index) in floatModal"
>
<FormItem
class=
"Df-component-formitem"
:label=
"item.name"
:key=
"'floatModal_' + index"
>
<component
:is=
"item.type"
:options=
"item.options"
v-bind=
"item.props"
v-model=
"propsForm[item.key]"
:formDefault=
"item.formDefault"
:formControl=
"item.formControl"
/>
...
...
@@ -35,7 +35,7 @@
</
template
>
</Form>
<Form
class=
"dynamic-form-component"
:label-width=
"80"
:model=
"commonStyleForm"
@
submit
.
native
.
prevent
>
<h3>
基础样式
</h3>
<h3>
{{ $t('basic.style') }}
</h3>
<
template
v-for=
"(item, index) in commonStyleSchame"
>
<FormItem
class=
"Df-component-formitem"
:label=
"item.name"
:key=
"index"
>
<component
:is=
"item.type"
:options=
"item.options"
v-bind=
"item.props"
v-model=
"commonStyleForm[item.key]"
/>
...
...
app/web/page/editor/component/MaterialMenu/index.vue
View file @
ee7a9c05
...
...
@@ -3,15 +3,15 @@
<Menu
class=
"Dc-left-menu"
active-name=
"1"
@
on-select=
"selectMaterial"
>
<MenuItem
name=
"1"
>
<Icon
type=
"android-apps"
></Icon>
<span>
基础库
</span>
<span>
{{
$t
(
'
base.library
'
)
}}
</span>
</MenuItem>
<MenuItem
name=
"2"
>
<Icon
type=
"android-apps"
></Icon>
<span>
业务库
</span>
<span>
{{
$t
(
'
business.db
'
)
}}
</span>
</MenuItem>
<MenuItem
name=
"3"
>
<Icon
type=
"android-apps"
></Icon>
<span>
模版
</span>
<span>
{{
$t
(
'
template
'
)
}}
</span>
</MenuItem>
</Menu>
<div
class=
"Dc-left-content"
>
...
...
app/web/page/editor/component/OperationPanel/component/TitlePreview/index.vue
View file @
ee7a9c05
...
...
@@ -16,7 +16,7 @@ export default {
computed
:
{
...
mapGetters
([
'
pageData
'
,
'
pageInfo
'
]),
title
()
{
return
this
.
pageInfo
.
pageName
||
'
标题
'
;
return
this
.
pageInfo
.
pageName
||
$t
(
'
title
'
)
;
},
titleStyle
()
{
const
{
titleBgColor
}
=
this
.
pageData
.
props
;
...
...
app/web/page/editor/component/QgTable/components/records.vue
View file @
ee7a9c05
<
template
>
<Modal
width=
"700"
v-model=
"show"
title=
"历史记录
"
@
on-visible-change=
"change"
>
<Modal
width=
"700"
v-model=
"show"
:title=
"$t('history')
"
@
on-visible-change=
"change"
>
<Table
:columns=
"columns"
:data=
"records"
...
...
@@ -34,7 +34,7 @@
show
:
false
,
columns
:
[
{
title
:
'
版本
'
,
title
:
$t
(
'
version
'
)
,
align
:
'
center
'
,
render
:
(
h
,
params
)
=>
{
console
.
log
(
params
);
...
...
@@ -53,17 +53,17 @@
}
},
{
title
:
'
更新时间
'
,
title
:
$t
(
'
update.time
'
)
,
key
:
'
updatedAt
'
,
align
:
'
center
'
},
{
key
:
'
author
'
,
title
:
'
操作人
'
,
title
:
$t
(
'
operator
'
)
,
align
:
'
center
'
},
{
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
align
:
'
center
'
,
render
:
(
h
,
params
)
=>
{
const
props
=
{
...
...
@@ -79,7 +79,7 @@
props
:
{
confirm
:
true
,
transfer
:
true
,
title
:
'
确认恢复到此版本?
'
,
title
:
$t
(
'
confirm.restore.this.version
'
)
,
},
style
:
{
...
style
,
...
...
@@ -100,7 +100,7 @@
{
...
props
},
'
恢复
'
$t
(
'
restore
'
)
),
]
)
...
...
app/web/page/editor/component/QgTable/index.vue
View file @
ee7a9c05
...
...
@@ -8,22 +8,22 @@
<Option
:value=
"isNum(value, item.number)"
:key=
"value"
v-for=
"(label,value) in item.option"
:label=
"label"
/>
</Select>
<DatePicker
v-else-if=
"item.type === 'date'"
class=
"timeWidth"
type=
"datetimerange"
placeholder=
""
v-model=
"searchForm[item.key]"
></DatePicker>
<treeselect
v-else-if=
"item.type === 'treeSelect'"
v-model.number=
"searchForm[item.key]"
:multiple=
"false"
:options=
"item.option"
placeholder=
"请选择
"
:normalizer=
"normalizer"
style=
"width: 180px;"
/>
<treeselect
v-else-if=
"item.type === 'treeSelect'"
v-model.number=
"searchForm[item.key]"
:multiple=
"false"
:options=
"item.option"
:placeholder=
"$t('select')
"
:normalizer=
"normalizer"
style=
"width: 180px;"
/>
</FormItem>
<FormItem
class=
"btnGroupStyle"
>
<div>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
重置
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"query()"
>
查询
</Button>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
{{
$t
(
'
reset
'
)
}}
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"query()"
>
{{
$t
(
'
search
'
)
}}
</Button>
</div>
</FormItem>
</Form>
</div>
<div
class=
"tableGroupStyle"
>
<div
v-if=
"!hideAdd"
class=
"toolBarStyle"
>
<h3>
查询数据
</h3>
<h3>
{{
$t
(
'
query.data
'
)
}}
</h3>
<div>
<Button
type=
"warning"
class=
"btnStyle"
@
click=
"$emit('clearCache')"
>
清除缓存
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"newEvent()"
>
新增
</Button>
<Button
type=
"warning"
class=
"btnStyle"
@
click=
"$emit('clearCache')"
>
{{
$t
(
'
clear.cache
'
)
}}
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"newEvent()"
>
{{
$t
(
'
add
'
)
}}
</Button>
<slot></slot>
</div>
</div>
...
...
app/web/page/editor/component/QgTable/testTable.vue
View file @
ee7a9c05
...
...
@@ -5,13 +5,13 @@
:request=
"query"
:toolBar=
"gettoolBar"
>
<Button>
新增
</Button>
<Button>
{{
$t
(
'
add
'
)
}}
</Button>
</QGTable>
</div>
</
template
>
<
script
>
import
QGTable
from
'
./index.vue
'
;
const
statusList
=
[{
label
:
'
有效
'
,
value
:
1
},{
label
:
'
无效
'
,
value
:
2
}];
const
statusList
=
[{
label
:
$t
(
'
valid
'
),
value
:
1
},{
label
:
$t
(
'
invalid
'
)
,
value
:
2
}];
const
showTitle
=
function
(){}
const
type
=
''
export
default
{
...
...
@@ -34,30 +34,30 @@ export default {
columns
:
[
{
type
:
'
index
'
,
title
:
'
序号
'
,
title
:
$t
(
'
sequence
'
)
,
},
{
key
:
'
componentName
'
,
title
:
'
模版ID
'
,
title
:
$t
(
'
template.id
'
)
,
formType
:
'
input
'
,
value
:
'
11
'
,
},
{
key
:
'
templateType
'
,
title
:
'
模版名称
'
,
title
:
$t
(
'
template.name
'
)
,
formType
:
'
input
'
,
hideTable
:
true
,
},
{
key
:
'
page
'
,
title
:
'
模版类型
'
,
title
:
$t
(
'
template.type
'
)
,
formType
:
'
select
'
,
value
:
1
,
number
:
true
,
valueEnum
:
{
1
:
'
好的
'
,
2
:
'
行动
'
,
3
:
'
可以的
'
,
1
:
$t
(
'
ok
'
)
,
2
:
$t
(
'
action
'
)
,
3
:
$t
(
'
allowed
'
)
,
},
render
:
(
h
,
params
)
=>
{
return
h
(
'
div
'
,
showTitle
(
'
page
'
,
type
,
params
));
...
...
@@ -65,25 +65,25 @@ export default {
},
{
key
:
'
terminal
'
,
title
:
'
内容
'
,
title
:
$t
(
'
content
'
)
,
},
{
key
:
'
status
'
,
title
:
'
状态
'
,
title
:
$t
(
'
status
'
)
,
render
:
(
h
,
params
)
=>
{
return
h
(
'
div
'
,
showTitle
(
'
status
'
,
statusList
,
params
));
},
},
{
key
:
'
time
'
,
title
:
'
发布时间
'
,
title
:
$t
(
'
publish.time
'
)
,
render
:
(
h
,
params
)
=>
{
return
h
(
'
div
'
,
`
${(
params
.
row
.
startTime
&&
params
.
row
.
startTime
)
||
''
}
-
${(
params
.
row
.
endTime
&&
params
.
row
.
endTime
)
||
''
}
`
);
},
},
{
key
:
'
action
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
width
:
200
,
render
:
(
h
,
params
)
=>
{
const
props
=
{
...
...
@@ -110,11 +110,11 @@ export default {
},
on
:
{
click
:
()
=>
{
console
.
log
(
'
查看
'
);
console
.
log
(
$t
(
'
view
'
)
);
},
},
},
'
查看
'
$t
(
'
view
'
)
),
h
(
'
Button
'
,
...
...
@@ -126,11 +126,11 @@ export default {
},
on
:
{
click
:
()
=>
{
console
.
log
(
'
修改!
'
)
console
.
log
(
$t
(
'
edit
'
)
)
},
},
},
'
修改
'
$t
(
'
edit
'
)
),
h
(
'
Poptip
'
,
...
...
@@ -138,14 +138,14 @@ export default {
props
:
{
confirm
:
true
,
transfer
:
true
,
title
:
'
确认启用?
'
,
title
:
$t
(
'
confirm.enable
'
)
,
},
style
:
{
display
:
isShow
(
2
),
},
on
:
{
'
on-ok
'
:
()
=>
{
console
.
log
(
'
启用
'
)
console
.
log
(
$t
(
'
enable
'
)
)
},
},
...
...
@@ -157,7 +157,7 @@ export default {
props
,
style
,
},
'
启用
'
$t
(
'
enable
'
)
),
]
),
...
...
@@ -167,7 +167,7 @@ export default {
props
:
{
confirm
:
true
,
transfer
:
true
,
title
:
'
确认删除?
'
,
title
:
$t
(
'
confirm.delete
'
)
,
},
style
:
{
...
style
,
...
...
@@ -175,7 +175,7 @@ export default {
},
on
:
{
'
on-ok
'
:
()
=>
{
console
.
log
(
'
删除
'
)
console
.
log
(
$t
(
'
delete
'
)
)
},
},
},
...
...
@@ -185,7 +185,7 @@ export default {
{
props
,
},
'
删除
'
$t
(
'
delete
'
)
),
]
),
...
...
app/web/page/editor/component/RecordModal/index.vue
View file @
ee7a9c05
...
...
@@ -6,10 +6,10 @@
width=
"360"
>
<p
slot=
"header"
style=
"color:#2d8cf0;text-align:center"
>
<Icon
type=
"information-circled"
></Icon>
<span>
恢复提醒
</span>
<span>
{{
$t
(
'
restore.reminder
'
)
}}
</span>
</p>
<div
style=
"text-align:center"
>
<p>
已检测到您上次编辑但未保存, 是否恢复?
</p>
<p>
{{
$t
(
'
restore.unsaved.edits
'
)
}}
</p>
</div>
</Modal>
</
template
>
...
...
app/web/page/editor/mixins/contextMenu.mixin.ts
View file @
ee7a9c05
...
...
@@ -14,19 +14,19 @@ export default class ContextMenuMixin extends Vue {
this
.
$contextmenu
({
items
:
[
{
label
:
'
复制
'
,
label
:
$t
(
'
copy
'
)
,
onClick
:
()
=>
{
// PERF 可以抽象
const
ComInfo
=
this
.
pageData
.
elements
[
containerIndex
];
if
(
ComInfo
.
name
===
'
cs-search-bar
'
)
{
this
.
$Notice
.
warning
({
title
:
'
搜索框只能添加一个
'
title
:
$t
(
'
only.1.search.box
'
)
});
return
;
}
if
(
ComInfo
.
name
===
'
cs-floor-nav
'
)
{
this
.
$Notice
.
warning
({
title
:
'
楼层导航只能添加一个
'
title
:
$t
(
'
only.1.floor.nav
'
)
});
return
;
}
...
...
@@ -35,7 +35,7 @@ export default class ContextMenuMixin extends Vue {
}
},
{
label
:
'
删除
'
,
label
:
$t
(
'
delete
'
)
,
onClick
:
()
=>
{
// console.log('删除', event, containerIndex, childIndex);
this
.
updatePageData
({
type
:
'
delete
'
,
containerIndex
,
childIndex
});
...
...
app/web/page/editor/mixins/goodsTabs.mixin.ts
View file @
ee7a9c05
...
...
@@ -32,10 +32,10 @@ export default class GoodsTabsMixin extends Vue {
const
childIndexs
=
[];
const
idList
=
element
.
props
.
list
.
map
(
v
=>
v
.
componentId
);
if
(
idList
.
some
(
v
=>
!
v
))
{
throw
new
Error
(
'
商品导航组件不可为空
'
);
throw
new
Error
(
$t
(
'
product.nav.required
'
)
);
}
if
(
idList
.
length
&&
idList
.
length
!==
Array
.
from
(
new
Set
(
idList
)).
length
)
{
throw
new
Error
(
'
商品导航不可重复选择组件
'
);
throw
new
Error
(
$t
(
'
duplicate.product.nav.components
'
)
);
}
element
.
props
.
list
.
forEach
((
data
,
index
)
=>
{
const
index
=
pageData
.
elements
.
findIndex
(
v
=>
v
.
id
===
data
.
componentId
);
...
...
@@ -128,7 +128,7 @@ export default class GoodsTabsMixin extends Vue {
if
(
element
.
name
===
'
cs-floor-nav
'
)
{
const
idList
=
element
.
props
.
list
.
map
(
v
=>
v
.
componentId
);
if
(
idList
.
some
(
v
=>
!
v
))
{
throw
new
Error
(
'
楼层导航组件不可为空
'
);
throw
new
Error
(
$t
(
'
floor.nav.required
'
)
);
}
}
});
...
...
app/web/page/editor/view/dashboard/index.ts
View file @
ee7a9c05
...
...
@@ -107,7 +107,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
if
(
pageInfo
.
redirectUrl
.
indexOf
(
'
https://
'
)
!=
0
&&
pageInfo
.
redirectUrl
.
indexOf
(
'
xyqb://
'
)
!=
0
)
{
// 校验活动结束地址链接配置是否满足https和xyqb协议
this
.
$Notice
.
error
({
title
:
'
链接地址错误或域名不支持,请重新输入
'
,
title
:
$t
(
'
invalid.link.or.domain.try.again
'
)
,
desc
:
''
,
});
this
.
showSubmitPopup
=
false
;
...
...
@@ -124,12 +124,12 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
if
(
type
===
'
preview
'
)
{
window
.
open
(
`
${
config
.
h5Host
}
/activity/
${
this
.
uuid
}
?tenantId=
${
this
.
pageInfo
.
tenantId
}
&isPreview=1`
);
}
else
{
this
.
$Notice
.
success
({
title
:
'
保存成功!
'
});
this
.
$Notice
.
success
({
title
:
$t
(
'
saved.successfully
'
)
});
}
}
}
catch
(
e
)
{
this
.
showSubmitPopup
=
false
;
this
.
$Notice
.
error
({
title
:
'
提示
'
,
desc
:
e
?.
message
||
'
出现未知错误!
'
});
this
.
$Notice
.
error
({
title
:
$t
(
'
hint
'
),
desc
:
e
?.
message
||
$t
(
'
unknown.error.occurred
'
)
});
}
finally
{
this
.
inTheSave
=
false
;
}
...
...
@@ -149,12 +149,12 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
this
.
toggle
(
false
);
this
.
setCurEleIndex
(
curEleIndex
);
this
.
setCurChildIndex
(
curChildIndex
);
this
.
setRightTabName
(
'
组件设置
'
);
this
.
setRightTabName
(
$t
(
'
component.settings
'
)
);
}
handlePageSetClick
()
{
this
.
toggle
(
false
);
this
.
setRightTabName
(
'
页面设置
'
);
this
.
setRightTabName
(
$t
(
'
page.settings
'
)
);
}
toggle
(
val
)
{
...
...
@@ -247,7 +247,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
// 限制searchNav只添加一个
if
(
el
.
data
.
name
===
'
cs-search-bar
'
&&
this
.
hasSearchBarCom
)
{
this
.
$Notice
.
warning
({
title
:
'
搜索框只能添加一个
'
title
:
$t
(
'
only.1.search.box
'
)
});
return
;
}
...
...
@@ -255,12 +255,12 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
if
(
el
.
data
.
name
===
'
cs-floor-nav
'
)
{
if
(
this
.
hasFloorNavCom
)
{
this
.
$Notice
.
warning
({
title
:
'
楼层导航目前只支持添加一个
'
title
:
$t
(
'
only.1.floor.nav
'
)
});
return
;
}
else
{
this
.
$Message
.
error
({
content
:
'
楼层导航添加后,商品导航中的锚点滚动将会无效
'
,
content
:
$t
(
'
floor.nav.disables.product.nav.anchor
'
)
,
duration
:
10
});
}
...
...
@@ -268,7 +268,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
if
(
el
.
data
.
name
===
'
cs-snap-up
'
)
{
if
(
this
.
hasSnapUpCom
)
{
this
.
$Notice
.
warning
({
title
:
'
抢购组件目前只支持添加一个
'
title
:
$t
(
'
only.1.flash.sale.component
'
)
});
return
;
}
...
...
@@ -276,7 +276,7 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
if
(
el
.
data
.
name
===
'
cs-seckill
'
)
{
if
(
this
.
hasSeckillCom
)
{
this
.
$Notice
.
warning
({
title
:
'
秒杀组件目前只支持添加一个
'
title
:
$t
(
'
only.1.seckill.component
'
)
});
return
;
}
...
...
@@ -285,12 +285,12 @@ export default class DashBoard extends Mixins(ContextMenuMixin, GoodsTabsMixin,
if
(
el
.
data
.
name
===
'
cs-goods-tabs
'
)
{
if
(
this
.
hasGoodsNavCom
)
{
this
.
$Message
.
error
({
content
:
'
添加多个商品导航后,商品导航中的锚点滚动将会无效
'
,
content
:
$t
(
'
multiproduct.nav.disables.anchor
'
)
,
duration
:
10
});
}
else
if
(
this
.
hasFloorNavCom
)
{
this
.
$Message
.
error
({
content
:
'
已添加楼层导航后,商品导航中的锚点滚动将会无效
'
,
content
:
$t
(
'
floor.nav.disables.product.nav.anchor
'
)
,
duration
:
10
});
}
...
...
app/web/page/editor/view/dashboard/index.vue
View file @
ee7a9c05
...
...
@@ -2,11 +2,11 @@
<Row
class=
"dashboard"
>
<Row
class=
"dashboard-header"
type=
"flex"
align=
"middle"
>
<Col
span=
"20"
offset=
"2"
>
<Button
@
click=
"preview()"
>
预览
</Button>
<Button
type=
"primary"
@
click=
"save()"
>
保存
</Button>
<Button
@
click=
"preview()"
>
{{
$t
(
'
preview
'
)
}}
</Button>
<Button
type=
"primary"
@
click=
"save()"
>
{{
$t
(
'
save
'
)
}}
</Button>
</Col>
<Col
span=
"2"
>
<Button
@
click=
"exit"
>
取消
</Button>
<Button
@
click=
"exit"
>
{{
$t
(
'
cancel
'
)
}}
</Button>
</Col>
</Row>
<Row
class=
"dashboard-container"
>
...
...
app/web/page/editor/view/home/index.ts
View file @
ee7a9c05
...
...
@@ -9,6 +9,6 @@ import Layout from 'component/layout/editor/index';
export
default
class
Home
extends
Vue
{
created
()
{
console
.
log
(
'
created进来了
'
);
console
.
log
(
$t
(
'
created.entry
'
)
);
}
}
\ No newline at end of file
app/web/page/editor/view/myPage/index.vue
View file @
ee7a9c05
...
...
@@ -21,23 +21,23 @@ export default {
columns
:
[
{
key
:
'
id
'
,
title
:
'
编号
'
,
title
:
$t
(
'
id
'
)
,
formType
:
'
input
'
,
hideSearch
:
true
},
{
key
:
'
pageName
'
,
title
:
'
名称
'
,
title
:
$t
(
'
name
'
)
,
formType
:
'
input
'
,
},
{
key
:
'
pageDescribe
'
,
title
:
'
描述
'
,
title
:
$t
(
'
description
'
)
,
formType
:
'
input
'
,
},
{
key
:
'
coverImage
'
,
title
:
'
封面
'
,
title
:
$t
(
'
cover
'
)
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
return
h
(
...
...
@@ -68,12 +68,12 @@ export default {
},
{
key
:
'
updatedAt
'
,
title
:
'
更新时间
'
,
title
:
$t
(
'
update.time
'
)
,
hideSearch
:
true
},
{
key
:
'
action
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
width
:
200
,
render
:
(
h
,
params
)
=>
{
const
props
=
{
...
...
@@ -98,7 +98,7 @@ export default {
},
},
},
'
修改
'
$t
(
'
edit
'
)
),
h
(
'
Poptip
'
,
...
...
@@ -106,7 +106,7 @@ export default {
props
:
{
confirm
:
true
,
transfer
:
true
,
title
:
'
确认删除?
'
,
title
:
$t
(
'
confirm.delete
'
)
,
},
style
:
{
...
style
,
...
...
@@ -124,7 +124,7 @@ export default {
{
props
,
},
'
删除
'
$t
(
'
delete
'
)
),
]
),
...
...
app/web/page/editor/view/navigator/components/activityPageTable.vue
View file @
ee7a9c05
...
...
@@ -2,19 +2,19 @@
<div>
<div
class=
"search-bar"
>
<Form
@
submit
.
native
.
prevent
inline
ref=
"searchForm"
:model=
"searchForm"
class=
"inline"
>
<Form-item
label=
"名称
"
prop=
"name"
>
<Form-item
:label=
"$t('name')
"
prop=
"name"
>
<Input
v-model=
"searchForm.pageName"
class=
"comWidth"
/>
</Form-item>
<Form-item
label=
"描述
"
prop=
"pageDescribe"
>
<Form-item
:label=
"$t('description')
"
prop=
"pageDescribe"
>
<Input
v-model=
"searchForm.pageDescribe"
class=
"comWidth"
/>
</Form-item>
<Form-item
label=
"作者
"
prop=
"author"
>
<Form-item
:label=
"$t('author')
"
prop=
"author"
>
<Input
v-model=
"searchForm.author"
class=
"comWidth"
/>
</Form-item>
<FormItem
class=
"btnGroupStyle"
>
<div>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
重置
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"filter"
>
查询
</Button>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
{{
$t
(
'
reset
'
)
}}
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"filter"
>
{{
$t
(
'
search
'
)
}}
</Button>
</div>
</FormItem>
</Form>
...
...
@@ -58,25 +58,25 @@ export default {
columns
:
[
{
align
:
'
center
'
,
title
:
'
页面名称
'
,
title
:
$t
(
'
page.name
'
)
,
key
:
'
pageName
'
,
width
:
150
,
},
{
align
:
'
center
'
,
title
:
'
描述
'
,
title
:
$t
(
'
description
'
)
,
key
:
'
pageDescribe
'
,
width
:
150
,
},
{
align
:
'
center
'
,
title
:
'
作者
'
,
title
:
$t
(
'
author
'
)
,
key
:
'
author
'
,
width
:
100
},
{
align
:
'
center
'
,
title
:
'
封面
'
,
title
:
$t
(
'
cover
'
)
,
width
:
60
,
render
:
(
h
,
params
)
=>
{
return
h
(
'
div
'
,
{
...
...
@@ -100,14 +100,14 @@ export default {
},
{
align
:
'
center
'
,
title
:
'
链接
'
,
title
:
$t
(
'
link
'
)
,
render
:
(
h
,
params
)
=>
{
return
h
(
'
span
'
,
`
${
config
.
h5Host
}
/activity/
${
params
.
row
.
uuid
}
?tenantId=
${
params
.
row
.
tenantId
}
&vccToken={token}`
)
}
},
{
align
:
'
center
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
width
:
80
,
render
:
(
h
,
params
)
=>
{
const
row
=
params
.
row
;
...
...
@@ -122,7 +122,7 @@ export default {
this
.
select
(
row
);
}
}
},
'
选择
'
)
},
$t
(
'
select
'
)
)
]);
},
}
...
...
app/web/page/editor/view/navigator/components/addOrEditNavigator.vue
View file @
ee7a9c05
This diff is collapsed.
Click to expand it.
app/web/page/editor/view/navigator/components/expandRow.vue
View file @
ee7a9c05
...
...
@@ -3,7 +3,7 @@
<div
class=
"expand-row"
v-for=
"(item, idx) in row.navigatorData"
:key=
"idx"
>
<div
class=
"block"
></div>
<div
class=
"id"
>
<span
class=
"expand-key"
>
次序:
</span>
<span
class=
"expand-key"
>
{{
$t
(
'
order
'
)
}}
</span>
<span
class=
"expand-value"
>
{{
idx
+
1
}}
</span>
</div>
<div
class=
"name"
>
...
...
@@ -25,7 +25,7 @@
<span
class=
"expand-value"
>
{{ row.updatedAt }}
</span>
</div>
<div
class=
"operation"
>
<span
class=
"expand-value"
><Button
:disabled=
"item.pageType == 1"
@
click=
"select(item)"
type=
"primary"
size=
"small"
>
选择
</Button></span>
<span
class=
"expand-value"
><Button
:disabled=
"item.pageType == 1"
@
click=
"select(item)"
type=
"primary"
size=
"small"
>
{{ $t('select') }}
</Button></span>
</div>
</div>
</div>
...
...
app/web/page/editor/view/navigator/components/featurePageTable.vue
View file @
ee7a9c05
...
...
@@ -14,13 +14,13 @@ export default {
columns
:
[
{
align
:
'
center
'
,
title
:
'
页面名称
'
,
title
:
$t
(
'
page.name
'
)
,
key
:
'
name
'
,
},
{
align
:
'
center
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
render
:
(
h
,
params
)
=>
{
const
row
=
params
.
row
;
return
h
(
'
div
'
,
[
...
...
@@ -34,22 +34,22 @@ export default {
this
.
select
(
row
);
}
}
},
'
选择
'
)
},
$t
(
'
select
'
)
)
]);
},
}
],
tableData
:
[
{
name
:
'
首页tab
'
,
name
:
$t
(
'
home.tab
'
)
,
url
:
'
home
'
},
{
name
:
'
购物车tab
'
,
name
:
$t
(
'
cart.tab
'
)
,
url
:
'
shopcart
'
},
{
name
:
'
我的tab
'
,
name
:
$t
(
'
my.tab
'
)
,
url
:
'
user
'
}
]
...
...
app/web/page/editor/view/navigator/components/navigatorPageTable.vue
View file @
ee7a9c05
...
...
@@ -2,16 +2,16 @@
<div>
<div
class=
"search-bar"
>
<Form
@
submit
.
native
.
prevent
inline
ref=
"searchForm"
:model=
"searchForm"
class=
"inline"
>
<Form-item
label=
"名称
"
prop=
"name"
>
<Form-item
:label=
"$t('name')
"
prop=
"name"
>
<Input
v-model=
"searchForm.name"
class=
"comWidth"
/>
</Form-item>
<Form-item
label=
"作者
"
prop=
"author"
>
<Form-item
:label=
"$t('author')
"
prop=
"author"
>
<Input
v-model=
"searchForm.author"
class=
"comWidth"
/>
</Form-item>
<FormItem
class=
"btnGroupStyle"
>
<div>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
重置
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"filter"
>
查询
</Button>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
{{
$t
(
'
reset
'
)
}}
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"filter"
>
{{
$t
(
'
search
'
)
}}
</Button>
</div>
</FormItem>
</Form>
...
...
@@ -90,30 +90,30 @@ export default {
},
{
align
:
'
center
'
,
title
:
'
名称
'
,
title
:
$t
(
'
name
'
)
,
width
:
160
,
key
:
'
name
'
},
{
align
:
'
center
'
,
title
:
'
页面地址
'
,
title
:
$t
(
'
page.url
'
)
,
width
:
250
},
{
align
:
'
center
'
,
title
:
'
作者
'
,
title
:
$t
(
'
author
'
)
,
key
:
'
author
'
,
width
:
90
},
{
align
:
'
center
'
,
title
:
'
更新时间
'
,
title
:
$t
(
'
update.time
'
)
,
key
:
'
updatedAt
'
,
width
:
170
},
{
align
:
'
center
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
key
:
'
operation
'
}
]
...
...
app/web/page/editor/view/navigator/index.vue
View file @
ee7a9c05
...
...
@@ -2,25 +2,25 @@
<div
class=
"tableComStyle"
>
<div
class=
"searchFormStyle"
>
<Form
@
submit
.
native
.
prevent
inline
ref=
"searchForm"
:model=
"searchForm"
class=
"inline"
>
<Form-item
label=
"名称
"
prop=
"name"
>
<Input
v-model=
"searchForm.name"
class=
"comWidth"
placeholder=
"请输入名称
"
/>
<Form-item
:label=
"$t('name')
"
prop=
"name"
>
<Input
v-model=
"searchForm.name"
class=
"comWidth"
:placeholder=
"$t('enter.name')
"
/>
</Form-item>
<Form-item
label=
"作者
"
prop=
"author"
>
<Input
v-model=
"searchForm.author"
class=
"comWidth"
placeholder=
"请输入作者
"
/>
<Form-item
:label=
"$t('author')
"
prop=
"author"
>
<Input
v-model=
"searchForm.author"
class=
"comWidth"
:placeholder=
"$t('enter.author')
"
/>
</Form-item>
<FormItem
class=
"btnGroupStyle"
>
<div>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
重置
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"query"
>
查询
</Button>
<Button
class=
"btnStyle"
@
click=
"reset()"
>
{{
$t
(
'
reset
'
)
}}
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"query"
>
{{
$t
(
'
search
'
)
}}
</Button>
</div>
</FormItem>
</Form>
</div>
<div
class=
"tableGroupStyle"
>
<div
class=
"toolBarStyle"
>
<h3>
查询数据
</h3>
<h3>
{{
$t
(
'
query.data
'
)
}}
</h3>
<div>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"add"
>
新增
</Button>
<Button
type=
"primary"
class=
"btnStyle"
@
click=
"add"
>
{{
$t
(
'
add
'
)
}}
</Button>
<slot></slot>
</div>
</div>
...
...
@@ -41,7 +41,7 @@
@
on-page-size-change=
"changePageSize"
/>
</div>
<Modal
v-model=
"showPagesUrl"
title=
"页面地址列表
"
width=
"900"
>
<Modal
v-model=
"showPagesUrl"
:title=
"$t('page.url.list')
"
width=
"900"
>
<Table
:columns=
"urlTableColumns"
:data=
"urlTableData"
...
...
@@ -145,13 +145,13 @@ export default {
delete
(
row
)
{
// 删除
this
.
$Modal
.
confirm
({
title
:
'
提示
'
,
title
:
$t
(
'
hint
'
)
,
content
:
`是否删除导航
${
row
.
name
}
`
,
onOk
:
async
()
=>
{
const
deleteRes
=
await
navigatorApi
.
deleteNavigator
({
id
:
row
.
id
});
this
.
$toast
(
'
删除成功
'
);
this
.
$toast
(
$t
(
'
deleted.successfully
'
)
);
this
.
query
();
}
})
...
...
app/web/page/editor/view/pageList/index.vue
View file @
ee7a9c05
...
...
@@ -21,18 +21,18 @@ export default {
columns
:
[
{
key
:
"
id
"
,
title
:
"
编号
"
,
title
:
$t
(
'
id
'
)
,
formType
:
"
input
"
,
hideSearch
:
true
,
},
{
key
:
"
pageName
"
,
title
:
"
名称
"
,
title
:
$t
(
'
name
'
)
,
formType
:
"
input
"
,
},
{
key
:
"
pageDescribe
"
,
title
:
"
描述
"
,
title
:
$t
(
'
description
'
)
,
formType
:
"
input
"
,
},
{
...
...
@@ -43,12 +43,12 @@ export default {
},
{
key
:
"
author
"
,
title
:
"
作者
"
,
title
:
$t
(
'
author
'
)
,
formType
:
"
input
"
,
},
{
key
:
"
coverImage
"
,
title
:
"
封面
"
,
title
:
$t
(
'
cover
'
)
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
return
h
(
...
...
@@ -81,7 +81,7 @@ export default {
},
{
key
:
"
id
"
,
title
:
"
链接
"
,
title
:
$t
(
'
link
'
)
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
return
h
(
...
...
@@ -92,23 +92,23 @@ export default {
},
{
key
:
"
isTemplate
"
,
title
:
"
是否模板
"
,
title
:
$t
(
'
is.template
'
)
,
formType
:
"
select
"
,
number
:
true
,
hideSearch
:
true
,
valueEnum
:
{
0
:
"
否
"
,
1
:
"
是
"
,
0
:
$t
(
'
no
'
)
,
1
:
$t
(
'
yes
'
)
,
},
},
{
key
:
"
updatedAt
"
,
title
:
"
更新时间
"
,
title
:
$t
(
'
update.time
'
)
,
hideSearch
:
true
,
},
{
key
:
"
action
"
,
title
:
"
操作
"
,
title
:
$t
(
'
action
'
)
,
width
:
250
,
render
:
(
h
,
params
)
=>
{
const
props
=
{
...
...
@@ -134,7 +134,7 @@ export default {
},
},
},
"
预览
"
$t
(
'
preview
'
)
),
h
(
"
Button
"
,
...
...
@@ -150,7 +150,7 @@ export default {
},
},
},
"
修改
"
$t
(
'
edit
'
)
),
h
(
"
Button
"
,
...
...
@@ -169,7 +169,7 @@ export default {
},
},
},
"
历史记录
"
$t
(
'
history
'
)
),
h
(
"
Poptip
"
,
...
...
@@ -177,7 +177,7 @@ export default {
props
:
{
confirm
:
true
,
transfer
:
true
,
title
:
"
确认删除?
"
,
title
:
$t
(
'
confirm.delete
'
)
,
},
style
:
{
...
style
,
...
...
@@ -195,7 +195,7 @@ export default {
{
props
,
},
"
删除
"
$t
(
'
delete
'
)
),
]
),
...
...
@@ -224,10 +224,10 @@ export default {
async
refreshData
()
{
try
{
await
editorApi
.
refreshCache
();
this
.
$Notice
.
success
({
title
:
"
刷新成功!
"
});
this
.
$Notice
.
success
({
title
:
$t
(
'
refresh.success
'
)
});
}
catch
(
error
)
{
console
.
log
(
error
);
this
.
$Notice
.
warning
({
title
:
"
刷新失败!
"
});
this
.
$Notice
.
warning
({
title
:
$t
(
'
refresh.failed
'
)
});
}
},
},
...
...
app/web/page/editor/view/template/index.vue
View file @
ee7a9c05
...
...
@@ -20,28 +20,28 @@ export default {
columns
:
[
{
key
:
'
id
'
,
title
:
'
编号
'
,
title
:
$t
(
'
id
'
)
,
formType
:
'
input
'
,
hideSearch
:
true
},
{
key
:
'
pageName
'
,
title
:
'
名称
'
,
title
:
$t
(
'
name
'
)
,
formType
:
'
input
'
,
},
{
key
:
'
pageDescribe
'
,
title
:
'
描述
'
,
title
:
$t
(
'
description
'
)
,
formType
:
'
input
'
,
},
{
key
:
'
author
'
,
title
:
'
作者
'
,
title
:
$t
(
'
author
'
)
,
formType
:
'
input
'
,
},
{
key
:
'
coverImage
'
,
title
:
'
封面
'
,
title
:
$t
(
'
cover
'
)
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
return
h
(
...
...
@@ -72,7 +72,7 @@ export default {
},
{
key
:
'
id
'
,
title
:
'
链接
'
,
title
:
$t
(
'
link
'
)
,
hideSearch
:
true
,
render
:
(
h
,
params
)
=>
{
return
h
(
'
span
'
,
`
${
config
.
h5Host
}
/activity/
${
params
.
row
.
uuid
}
`
)
...
...
@@ -80,12 +80,12 @@ export default {
},
{
key
:
'
updatedAt
'
,
title
:
'
更新时间
'
,
title
:
$t
(
'
update.time
'
)
,
hideSearch
:
true
},
{
key
:
'
action
'
,
title
:
'
操作
'
,
title
:
$t
(
'
action
'
)
,
width
:
200
,
render
:
(
h
,
params
)
=>
{
const
props
=
{
...
...
@@ -108,7 +108,7 @@ export default {
},
},
},
'
立即使用
'
$t
(
'
use.now
'
)
);
},
}
...
...
app/web/page/login/index.vue
View file @
ee7a9c05
<
template
>
<layout>
<div
class=
"wrapper"
>
<h1>
低代码平台
</h1>
<h1>
{{
$t
(
'
lowcode.platform
'
)
}}
</h1>
<div
class=
"login"
>
<i-form
ref=
"formMail"
:model=
"formMail"
:rules=
"ruleFormMail"
>
<FormItem
prop=
"usernameMail"
>
...
...
@@ -16,10 +16,10 @@
</i-input>
</FormItem>
<FormItem>
<i-button
@
click=
"login(formMail)"
type=
"primary"
long
>
登录
</i-button>
<i-button
@
click=
"login(formMail)"
type=
"primary"
long
>
{{
$t
(
'
login
'
)
}}
</i-button>
</FormItem>
</i-form>
<div
style=
"color: #98a6ad; text-align: center; margin-bottom: 50px;"
>
量化派 ©
{{
this
.
year
}}
</div>
<div
style=
"color: #98a6ad; text-align: center; margin-bottom: 50px;"
>
{{
$t
(
'
quantgroup
'
)
}}
{{
this
.
year
}}
</div>
</div>
</div>
</layout>
...
...
@@ -36,16 +36,16 @@ export default {
data
()
{
return
{
showTips
:
true
,
tips
:
'
为提升各位同学使用体验,内部在用系统后续将统一迁移至量星球,请提前做好准备~
'
,
tips
:
$t
(
'
migrating.to.liangxing.soon.prepare.now
'
)
,
formMail
:
{
usernameMail
:
undefined
,
passwordMail
:
undefined
,
captcha
:
undefined
,
},
ruleFormMail
:
{
usernameMail
:
[{
required
:
true
,
message
:
'
请输入用户名
'
,
trigger
:
'
blur
'
}],
passwordMail
:
[{
required
:
true
,
message
:
'
请输入密码
'
,
trigger
:
'
blur
'
}],
captcha
:
[{
required
:
true
,
message
:
'
请输入验证码
'
,
trigger
:
'
blur
'
}],
usernameMail
:
[{
required
:
true
,
message
:
$t
(
'
enter.username
'
)
,
trigger
:
'
blur
'
}],
passwordMail
:
[{
required
:
true
,
message
:
$t
(
'
enter.password
'
)
,
trigger
:
'
blur
'
}],
captcha
:
[{
required
:
true
,
message
:
$t
(
'
enter.verification.code
'
)
,
trigger
:
'
blur
'
}],
},
year
:
new
Date
().
getFullYear
(),
captcha
:
defaultCaptcha
,
...
...
app/web/page/store/modules/editor/state.ts
View file @
ee7a9c05
...
...
@@ -120,14 +120,14 @@ export const defaultState = {
titleBgColor
:
'
#fff
'
,
titleUseUrl
:
false
,
showPageBottomTip
:
true
,
pageBottomTxt
:
'
没有更多啦~
'
,
pageBottomTxt
:
$t
(
'
no.more.data
'
)
,
pageBottomColor
:
'
#333
'
,
couponModal
:
[],
showBackTop
:
true
,
btAttachVal
:
[
{
persets
:
'
购物车
'
,
name
:
'
购物车
'
,
persets
:
$t
(
'
shopping.cart
'
)
,
name
:
$t
(
'
shopping.cart
'
)
,
icon
:
'
shopping-cart
'
,
url
:
'
xyqb://shoppingCart?needLogin=1
'
,
color
:
'
#333
'
,
...
...
app/web/service/http.service.ts
View file @
ee7a9c05
...
...
@@ -5,18 +5,18 @@ import Notify from '@qg/cherry-ui/src/notify';
const
ERR_MESSAGE_MAP
=
{
status
:
{
400
:
'
错误请求
'
,
401
:
'
未授权,请重新登录
'
,
403
:
'
拒绝访问
'
,
404
:
'
请求错误,未找到该资源
'
,
405
:
'
请求方法未允许
'
,
408
:
'
请求超时
'
,
500
:
'
服务器端出错
'
,
501
:
'
网络未实现
'
,
502
:
'
网络错误
'
,
503
:
'
服务不可用
'
,
504
:
'
网络超时
'
,
505
:
'
http版本不支持该请求
'
400
:
$t
(
'
bad.request
'
)
,
401
:
$t
(
'
unauthorized.relogin
'
)
,
403
:
$t
(
'
access.denied
'
)
,
404
:
$t
(
'
request.error.resource.not.found
'
)
,
405
:
$t
(
'
method.not.allowed
'
)
,
408
:
$t
(
'
request.timeout
'
)
,
500
:
$t
(
'
server.error
'
)
,
501
:
$t
(
'
network.not.implemented
'
)
,
502
:
$t
(
'
network.error
'
)
,
503
:
$t
(
'
service.unavailable
'
)
,
504
:
$t
(
'
network.timeout
'
)
,
505
:
$t
(
'
http.version.not.supported
'
)
}
};
...
...
@@ -87,7 +87,7 @@ instance.interceptors.request.use(
// beforeRequest();
// 发起请求时,取消掉当前正在进行的相同请求
if
(
pending
[
config
.
url
as
string
])
{
pending
[
config
.
url
as
string
](
'
取消重复请求
'
);
pending
[
config
.
url
as
string
](
$t
(
'
cancel.duplicate.request
'
)
);
}
config
.
cancelToken
=
new
CancelToken
(
c
=>
(
pending
[(
config
.
url
+
JSON
.
stringify
(
config
.
data
))
as
string
]
=
c
));
// 添加token
...
...
@@ -125,7 +125,7 @@ instance.interceptors.response.use(
Notify
({
type
:
notifyType
,
message
:
response
.
data
.
msg
||
'
后端服务异常
'
,
message
:
response
.
data
.
msg
||
$t
(
'
backend.service.error
'
)
,
duration
:
notifyType
===
'
warning
'
?
6000
:
3000
});
if
(
response
.
data
.
code
===
'
40100
'
)
{
...
...
@@ -136,7 +136,7 @@ instance.interceptors.response.use(
async
err
=>
{
// afterRequest();
// 判断是否取消请求
if
(
err
?.
message
===
'
取消重复请求
'
)
{
if
(
err
?.
message
===
$t
(
'
cancel.duplicate.request
'
)
)
{
const
res
=
{
status
:
409
,
data
:
{}
...
...
@@ -172,7 +172,7 @@ instance.interceptors.response.use(
if
(
err
.
response
)
{
message
=
ERR_MESSAGE_MAP
.
status
[
err
.
response
.
status
]
||
`连接错误
${
err
.
response
.
status
}
`
;
}
else
{
message
=
'
连接到服务器失败
'
;
message
=
$t
(
'
failed.to.connect.to.server
'
)
;
}
Notify
({
type
:
'
danger
'
,
message
});
return
Promise
.
reject
(
err
);
...
...
app/web/service/qiniu.service.ts
View file @
ee7a9c05
...
...
@@ -1136,20 +1136,20 @@
if
(
file
)
{
switch
(
err
.
code
)
{
case
plupload
.
FAILED
:
errTip
=
'
上传失败。请稍后再试。
'
;
errTip
=
$t
(
'
upload.failed.try.again.later
'
)
;
break
;
case
plupload
.
FILE_SIZE_ERROR
:
let
max_file_size
=
up
.
getOption
&&
up
.
getOption
(
'
max_file_size
'
);
max_file_size
=
max_file_size
||
(
up
.
settings
&&
up
.
settings
.
max_file_size
);
errTip
=
'
浏览器最大可上传
'
+
max_file_size
+
'
。更大文件请使用命令行工具。
'
;
errTip
=
$t
(
'
browser.upload.limit
'
)
+
max_file_size
+
$t
(
'
use.cli.for.larger.files
'
)
;
break
;
case
plupload
.
FILE_EXTENSION_ERROR
:
errTip
=
'
文件验证失败。请稍后重试。
'
;
errTip
=
$t
(
'
file.validation.failed.retry.later
'
)
;
break
;
case
plupload
.
HTTP_ERROR
:
if
(
err
.
response
===
''
)
{
// Fix parseJSON error ,when http error is like net::ERR_ADDRESS_UNREACHABLE
errTip
=
err
.
message
||
'
未知网络错误。
'
;
errTip
=
err
.
message
||
$t
(
'
unknown.network.error
'
)
;
if
(
!
unknow_error_retry
(
file
))
{
return
;
}
...
...
@@ -1159,25 +1159,25 @@
let
errorText
=
errorObj
.
error
;
switch
(
err
.
status
)
{
case
400
:
errTip
=
'
请求报文格式错误。
'
;
errTip
=
$t
(
'
request.format.error
'
)
;
break
;
case
401
:
errTip
=
'
客户端认证授权失败。请重试或提交反馈。
'
;
errTip
=
$t
(
'
client.auth.failed.retry.or.report
'
)
;
break
;
case
405
:
errTip
=
'
客户端请求错误。请重试或提交反馈。
'
;
errTip
=
$t
(
'
client.request.error.retry.or.report
'
)
;
break
;
case
579
:
errTip
=
'
资源上传成功,但回调失败。
'
;
errTip
=
$t
(
'
resource.uploaded.but.callback.failed
'
)
;
break
;
case
599
:
errTip
=
'
网络连接异常。请重试或提交反馈。
'
;
errTip
=
$t
(
'
network.error.retry.or.submit.feedback
'
)
;
if
(
!
unknow_error_retry
(
file
))
{
return
;
}
break
;
case
614
:
errTip
=
'
文件已存在。
'
;
errTip
=
$t
(
'
file.exists
'
)
;
try
{
errorObj
=
that
.
parseJSON
(
errorObj
.
error
);
errorText
=
errorObj
.
error
||
'
file exists
'
;
...
...
@@ -1186,13 +1186,13 @@
}
break
;
case
631
:
errTip
=
'
指定空间不存在。
'
;
errTip
=
$t
(
'
space.not.found
'
)
;
break
;
case
701
:
errTip
=
'
上传数据块校验出错。请重试或提交反馈。
'
;
errTip
=
$t
(
'
chunk.verification.error.retry.or.report
'
)
;
break
;
default
:
errTip
=
'
未知错误。
'
;
errTip
=
$t
(
'
unknown.error
'
)
;
if
(
!
unknow_error_retry
(
file
))
{
return
;
}
...
...
@@ -1201,16 +1201,16 @@
errTip
=
errTip
+
'
(
'
+
err
.
status
+
'
:
'
+
errorText
+
'
)
'
;
break
;
case
plupload
.
SECURITY_ERROR
:
errTip
=
'
安全配置错误。请联系网站管理员。
'
;
errTip
=
$t
(
'
security.config.error.contact.admin
'
)
;
break
;
case
plupload
.
GENERIC_ERROR
:
errTip
=
'
上传失败。请稍后再试。
'
;
errTip
=
$t
(
'
upload.failed.try.again.later
'
)
;
break
;
case
plupload
.
IO_ERROR
:
errTip
=
'
上传失败。请稍后再试。
'
;
errTip
=
$t
(
'
upload.failed.try.again.later
'
)
;
break
;
case
plupload
.
INIT_ERROR
:
errTip
=
'
网站配置错误。请联系网站管理员。
'
;
errTip
=
$t
(
'
website.configuration.error.contact.admin
'
)
;
uploader
.
destroy
();
break
;
default
:
...
...
app/web/service/staticData.service.ts
View file @
ee7a9c05
'
use strict
'
;
export
const
SHOP_CART_CONFIG
=
{
persets
:
'
购物车
'
,
persets
:
$t
(
'
shopping.cart
'
)
,
txt
:
''
,
name
:
'
购物车
'
,
name
:
$t
(
'
shopping.cart
'
)
,
icon
:
'
shopping-cart
'
,
url
:
'
xyqb://shoppingCart?needLogin=1
'
,
color
:
'
#333
'
,
...
...
@@ -15,7 +15,7 @@ export const SHOP_CART_CONFIG = {
};
export
const
BACK_TOP_CONFIG
=
{
persets
:
'
自定义
'
,
persets
:
$t
(
'
custom
'
)
,
name
:
''
,
icon
:
'
back-top
'
,
background
:
'
#fff
'
,
...
...
@@ -26,8 +26,8 @@ export const BACK_TOP_CONFIG = {
};
export
const
SHARE_CONFIG
=
{
persets
:
'
分享
'
,
name
:
'
分享
'
,
persets
:
$t
(
'
share
'
)
,
name
:
$t
(
'
share
'
)
,
txt
:
''
,
icon
:
'
share
'
,
url
:
''
,
...
...
@@ -41,7 +41,7 @@ export const SHARE_CONFIG = {
};
export
const
DEFAULT_CONFIG
=
{
persets
:
'
自定义
'
,
persets
:
$t
(
'
custom
'
)
,
name
:
''
,
txt
:
''
,
icon
:
''
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment