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