Commit ee7a9c05 authored by 孙 楠's avatar 孙 楠

add i18n messages

parent 20c7bde2
...@@ -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
...@@ -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);
} }
......
...@@ -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
......
...@@ -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,
......
// 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",
};
// 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": "众联",
};
...@@ -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: []
......
...@@ -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;
......
...@@ -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">
......
...@@ -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'
}, },
]; ];
......
...@@ -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');
} }
} }
} }
......
...@@ -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>
......
...@@ -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,
}); });
......
...@@ -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]);
......
...@@ -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'));
} }
} }
} }
......
...@@ -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',
} }
], ],
......
...@@ -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();
} }
......
...@@ -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>
......
...@@ -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>
......
...@@ -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);
}, },
......
...@@ -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({
......
...@@ -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'))
] ]
) )
} }
......
...@@ -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
} }
......
...@@ -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>
......
<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>
......
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,
......
...@@ -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,
......
<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
<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>
......
...@@ -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({
......
...@@ -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: ''
} }
......
...@@ -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>
......
...@@ -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
} }
......
...@@ -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({
......
...@@ -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
} }
......
...@@ -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,
......
...@@ -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({
......
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,
......
...@@ -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,
} }
......
...@@ -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,
} }
......
...@@ -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,
......
<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
<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>
......
...@@ -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>
......
<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({
......
...@@ -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
} }
......
<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>
......
...@@ -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;
} }
......
...@@ -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;
} }
......
...@@ -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: ''
......
...@@ -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'
}, },
] ]
......
...@@ -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>
......
<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>
......
...@@ -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);
} }
......
...@@ -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]" />
......
...@@ -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">
......
...@@ -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;
......
<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')
), ),
] ]
) )
......
...@@ -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>
......
...@@ -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')
), ),
] ]
), ),
......
...@@ -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>
......
...@@ -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});
......
...@@ -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'));
} }
} }
}); });
......
...@@ -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
}); });
} }
......
...@@ -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">
......
...@@ -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
...@@ -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')
), ),
] ]
), ),
......
...@@ -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'))
]); ]);
}, },
} }
......
<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();
}, },
......
...@@ -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>
......
...@@ -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'
} }
] ]
......
...@@ -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'
} }
] ]
......
...@@ -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();
} }
}) })
......
...@@ -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') });
} }
}, },
}, },
......
...@@ -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')
); );
}, },
} }
......
<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,
......
...@@ -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',
......
...@@ -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);
......
...@@ -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:
......
'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: '',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment