├── src ├── lang │ ├── distribution │ │ ├── set │ │ │ ├── en.js │ │ │ └── zh.js │ │ ├── user │ │ │ ├── en.js │ │ │ └── zh.js │ │ ├── distribution-user-income │ │ │ ├── en.js │ │ │ └── zh.js │ │ └── notice │ │ │ ├── zh.js │ │ │ └── en.js │ ├── product │ │ ├── spu-detail │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── spu-tag │ │ │ ├── en.js │ │ │ └── zh.js │ │ ├── brand │ │ │ ├── en.js │ │ │ └── zh.js │ │ ├── attr │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── spu │ │ │ ├── zh.js │ │ │ └── en.js │ │ └── category │ │ │ ├── zh.js │ │ │ └── en.js │ ├── biz │ │ ├── area │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── imgbox │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── videobox │ │ │ ├── zh.js │ │ │ └── en.js │ │ └── notify │ │ │ └── zh.js │ ├── rbac │ │ ├── menu-resource │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── role │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── menu-permission │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── menu │ │ │ ├── en.js │ │ │ └── zh.js │ │ └── web-config │ │ │ ├── zh.js │ │ │ └── en.js │ ├── platform │ │ ├── sys-user-account │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── hot-search │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── notice │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── sys-user │ │ │ ├── zh.js │ │ │ └── en.js │ │ └── shop-addr │ │ │ ├── en.js │ │ │ └── zh.js │ ├── printer │ │ ├── zh.js │ │ └── en.js │ ├── delivery │ │ ├── delivery-company │ │ │ ├── en.js │ │ │ └── zh.js │ │ └── transport │ │ │ ├── zh.js │ │ │ └── en.js │ ├── outletConfig │ │ ├── zh.js │ │ └── en.js │ ├── components │ │ └── category-selector │ │ │ ├── zh.js │ │ │ └── en.js │ ├── station │ │ ├── zh.js │ │ └── en.js │ ├── constant │ │ ├── zh.js │ │ └── en.js │ ├── user │ │ ├── score │ │ │ ├── en.js │ │ │ └── zh.js │ │ ├── rights │ │ │ ├── zh.js │ │ │ └── en.js │ │ ├── recharge │ │ │ ├── zh.js │ │ │ └── en.js │ │ └── level │ │ │ └── zh.js │ ├── live │ │ ├── zh.js │ │ └── en.js │ ├── seckill │ │ ├── zh.js │ │ └── en.js │ ├── coupon │ │ └── coupon │ │ │ ├── zh.js │ │ │ └── en.js │ ├── index.js │ ├── chat │ │ ├── zh.js │ │ └── en.js │ └── discount │ │ └── zh.js ├── utils │ ├── $t.js │ ├── debounce.js │ ├── auth.js │ ├── i18n.js │ ├── excelRequest.js │ ├── datetime.js │ └── addr.js ├── assets │ ├── chat │ │ ├── msg.png │ │ ├── upload.png │ │ ├── userImg.jpg │ │ ├── link-send.png │ │ └── upload-on.png │ ├── im_box │ │ ├── msg.png │ │ ├── upload.png │ │ ├── userImg.jpg │ │ ├── link-send.png │ │ ├── upload-on.png │ │ └── customer-service.png │ ├── images │ │ ├── car.png │ │ ├── def.png │ │ ├── Frame.png │ │ ├── buyer.png │ │ ├── horn.png │ │ ├── logo.png │ │ ├── login-bg.jpg │ │ ├── number.png │ │ ├── password.png │ │ ├── success.png │ │ ├── user_img.jpg │ │ ├── Frame-view.png │ │ ├── icon-tishi.png │ │ └── login-img.jpg │ ├── icon │ │ ├── 699@2x.png │ │ ├── 700@2x.png │ │ ├── access@2x.png │ │ ├── tips-icon.png │ │ ├── upArrow@2x.png │ │ ├── downArrow@2x.png │ │ ├── conversion@2x.png │ │ ├── slide-left-arrow@2x.png │ │ ├── slide-right-arrow@2x.png │ │ └── data-nalysis-ideas@2x.png │ ├── 401_images │ │ └── 401.gif │ ├── 404_images │ │ ├── 404.png │ │ └── 404_cloud.png │ ├── micro-page │ │ ├── ad-1.png │ │ ├── ad-2.png │ │ ├── ad-3.png │ │ ├── ad-4.png │ │ ├── card.png │ │ ├── def.png │ │ ├── menu.png │ │ ├── class.png │ │ ├── notice.png │ │ ├── p-link.png │ │ ├── p-tabs.png │ │ ├── p-text.png │ │ ├── p-ad-def.png │ │ ├── p-hotarea.png │ │ ├── p-notice.png │ │ ├── p-search.png │ │ ├── p-image-ad.png │ │ ├── p-prod-list.png │ │ ├── p-promotion.png │ │ ├── one-line-one.png │ │ ├── p-link-active.png │ │ ├── p-tabs-active.png │ │ ├── p-text-active.png │ │ ├── carousel-swiper.png │ │ ├── goods-waterfall.png │ │ ├── lateral-sliding.png │ │ ├── p-hotarea-active.png │ │ ├── p-notice-active.png │ │ ├── p-search-active.png │ │ ├── micro-create-header.png │ │ ├── one-line-one-active.png │ │ ├── p-image-ad-active.png │ │ ├── p-prod-list-active.png │ │ ├── p-promotion-active.png │ │ ├── micro-create-header1.png │ │ ├── carousel-swiper-active.png │ │ ├── goods-waterfall-active.png │ │ └── lateral-sliding-active.png │ ├── empty │ │ └── empty_contacts.png │ ├── example-img │ │ ├── idcard1.png │ │ ├── idcard2.png │ │ └── Business-license.png │ ├── home │ │ ├── goods-received.png │ │ ├── ic-arrow-normal.png │ │ ├── orde-management.png │ │ ├── order-shipped.png │ │ ├── publish-product.png │ │ ├── return-address.png │ │ ├── stock-warning.png │ │ ├── store-settlement.png │ │ ├── collection-account.png │ │ ├── commodity-management.png │ │ ├── commodity-reviewed.png │ │ ├── ic-arrow-narrow-down.png │ │ ├── ic-arrow-narrow-up.png │ │ ├── refund-after-sales.png │ │ ├── distribution-settings.png │ │ ├── Illegal-goods-off-shelves.png │ │ └── price-adjustment-record.png │ ├── outlet-config │ │ ├── jd-one.png │ │ ├── jd-two.png │ │ ├── sf-one.png │ │ ├── sf-two.png │ │ ├── ems-one.png │ │ ├── ems-two.png │ │ ├── htky-one.png │ │ ├── sto-one.png │ │ ├── yto-one.png │ │ ├── yto-two.png │ │ ├── zto-one.png │ │ ├── zto-two.png │ │ ├── yunda-one.png │ │ └── yunda-two.png │ ├── pc-micro-page │ │ ├── has_end.png │ │ ├── new_cart.png │ │ ├── offlined.png │ │ ├── pc-logo.png │ │ ├── togger_icon.png │ │ ├── been_shelves.png │ │ ├── icons.88a567a.png │ │ ├── pc_goods_list.png │ │ ├── pc_modal_bulk.png │ │ ├── pc_modal_cart.png │ │ ├── pc_modal_live.png │ │ ├── pc_modal_new.png │ │ ├── pc_picture_by.png │ │ ├── pc_shop_signs.png │ │ ├── pc_store_list.png │ │ ├── selected_link.png │ │ ├── show-default.png │ │ ├── goods_list_five.png │ │ ├── goods_list_four.png │ │ ├── goods_list_three.png │ │ ├── goods_recommand.png │ │ ├── pc-category_icon.png │ │ ├── pc_floor_title.png │ │ ├── pc_goods_module.png │ │ ├── pc_limited_skill.png │ │ ├── pc_modal_index.png │ │ ├── pc_modal_members.png │ │ ├── pc_modal_order.png │ │ ├── pc_modal_profile.png │ │ ├── pc_modal_skill.png │ │ ├── pc_discount_coupon.png │ │ ├── pc_modal_integral.png │ │ ├── pc_auxiliary_interval.png │ │ ├── pc_floor_title_active.png │ │ ├── pc_goods_list_active.png │ │ ├── pc_modal_collection.png │ │ ├── pc_modal_distribution.png │ │ ├── pc_modal_preferential.png │ │ ├── pc_modal_securities.png │ │ ├── pc_picture_by_active.png │ │ ├── pc_shop_signs_active.png │ │ ├── pc_store_list_active.png │ │ ├── pc_universal_hotspot.png │ │ ├── goods_list_five_active.png │ │ ├── goods_list_four_active.png │ │ ├── goods_list_three_active.png │ │ ├── pc_goods_module_active.png │ │ ├── pc_limited_skill_active.png │ │ ├── pc_discount_coupon_active.png │ │ ├── pc_auxiliary_interval_active.png │ │ └── pc_universal_hotspot_active.png │ └── website-config │ │ ├── login-bg.jpg │ │ ├── title-icon.png │ │ └── menu-top-icon.png ├── stores │ ├── index.js │ └── modules │ │ ├── cancel-focus-interval.js │ │ ├── common.js │ │ ├── app.js │ │ └── web-config.js ├── components │ ├── icons-select │ │ ├── svg-icons.js │ │ └── index.vue │ ├── Verifition │ │ ├── utils │ │ │ ├── ase.js │ │ │ ├── axios.js │ │ │ └── util.js │ │ └── api │ │ │ └── index.js │ ├── product-details │ │ └── index.vue │ ├── img-show │ │ └── index.vue │ ├── picture-preview │ │ └── index.vue │ └── pagination │ │ └── index.vue ├── icons │ ├── svg │ │ ├── link.svg │ │ ├── user.svg │ │ ├── example.svg │ │ ├── table.svg │ │ ├── password.svg │ │ ├── index-select.svg │ │ ├── report.svg │ │ ├── nested.svg │ │ ├── order.svg │ │ ├── index.svg │ │ ├── distribution.svg │ │ ├── live.svg │ │ ├── group.svg │ │ ├── eye.svg │ │ ├── shop.svg │ │ ├── analysis.svg │ │ ├── icon-zhedie.svg │ │ ├── language.svg │ │ ├── promotion.svg │ │ ├── product.svg │ │ ├── eye-open.svg │ │ ├── tree.svg │ │ ├── dashboard.svg │ │ └── form.svg │ └── svg-icon.vue ├── App.vue ├── styles │ ├── element-variables.scss │ ├── variables.scss │ ├── transition.scss │ ├── mixin.scss │ └── btn.scss ├── api │ ├── auth │ │ └── auth.js │ ├── platform │ │ ├── sys-config.js │ │ ├── sys-user-account.js │ │ ├── notice.js │ │ ├── index-img.js │ │ ├── hot-search.js │ │ ├── sys-user.js │ │ └── shop.js │ ├── biz │ │ ├── attach-file.js │ │ └── oss.js │ ├── product │ │ ├── prod-info.js │ │ ├── spu.js │ │ ├── attr.js │ │ ├── spu-detail.js │ │ ├── brand.js │ │ ├── category.js │ │ └── list.js │ ├── system │ │ └── addr-manage.js │ ├── discount │ │ └── discount.js │ ├── distribution-manage │ │ └── transport.js │ ├── delivery │ │ ├── delivery-company.js │ │ └── transport.js │ └── rbac │ │ ├── role.js │ │ ├── menu-permission.js │ │ └── menu.js ├── views │ └── common │ │ ├── redirect │ │ └── index.vue │ │ └── error-page │ │ └── 401.vue ├── directive │ ├── index.js │ ├── rich │ │ └── index.js │ ├── cancelFocus │ │ └── index.js │ └── permission │ │ └── index.js ├── layout │ ├── components │ │ ├── Sidebar │ │ │ ├── Item.vue │ │ │ └── main-sidebar-sub-menu.vue │ │ └── AppMain.vue │ └── index.vue ├── main.js ├── router │ └── index.js └── permission.js ├── Dockerfile ├── doc └── img │ └── readme │ ├── 商务二维码.png │ ├── image-20210705143529597.png │ ├── image-20231130110522682.png │ └── image-20231130110607548.png ├── .npmrc ├── .editorconfig ├── .eslintignore ├── tsconfig.json ├── platform.conf ├── nginx.conf ├── .gitignore ├── .env.production ├── .env.development ├── index.html ├── package.json └── .eslintrc.cjs /src/lang/distribution/set/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | turnOn: '开启', 3 | close: '关闭' 4 | } 5 | -------------------------------------------------------------------------------- /src/lang/distribution/set/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | turnOn: '开启', 3 | close: '关闭' 4 | } 5 | -------------------------------------------------------------------------------- /src/lang/distribution/user/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | turnOn: '开启', 3 | close: '关闭' 4 | } 5 | -------------------------------------------------------------------------------- /src/lang/distribution/user/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | turnOn: '开启', 3 | close: '关闭' 4 | } 5 | -------------------------------------------------------------------------------- /src/lang/product/spu-detail/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | spuId: '商品id', 3 | detail: '商品详情' 4 | } 5 | -------------------------------------------------------------------------------- /src/utils/$t.js: -------------------------------------------------------------------------------- 1 | import { i18n } from '@/lang' 2 | const $t = i18n.global.t 3 | export default $t 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.20 2 | COPY ./dist /usr/share/nginx/html/dist 3 | COPY ./nginx.conf /etc/nginx/conf.d -------------------------------------------------------------------------------- /src/lang/product/spu-detail/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | spuId: 'spu id', 3 | detail: 'detail' 4 | } 5 | -------------------------------------------------------------------------------- /doc/img/readme/商务二维码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/doc/img/readme/商务二维码.png -------------------------------------------------------------------------------- /src/assets/chat/msg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/chat/msg.png -------------------------------------------------------------------------------- /src/assets/im_box/msg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/im_box/msg.png -------------------------------------------------------------------------------- /src/assets/images/car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/car.png -------------------------------------------------------------------------------- /src/assets/images/def.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/def.png -------------------------------------------------------------------------------- /src/assets/chat/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/chat/upload.png -------------------------------------------------------------------------------- /src/assets/chat/userImg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/chat/userImg.jpg -------------------------------------------------------------------------------- /src/assets/icon/699@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/699@2x.png -------------------------------------------------------------------------------- /src/assets/icon/700@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/700@2x.png -------------------------------------------------------------------------------- /src/assets/images/Frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/Frame.png -------------------------------------------------------------------------------- /src/assets/images/buyer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/buyer.png -------------------------------------------------------------------------------- /src/assets/images/horn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/horn.png -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/lang/distribution/distribution-user-income/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | turnOn: '开启', 3 | close: '关闭' 4 | } 5 | -------------------------------------------------------------------------------- /src/lang/distribution/distribution-user-income/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | turnOn: '开启', 3 | close: '关闭' 4 | } 5 | -------------------------------------------------------------------------------- /src/assets/401_images/401.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/401_images/401.gif -------------------------------------------------------------------------------- /src/assets/404_images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/404_images/404.png -------------------------------------------------------------------------------- /src/assets/chat/link-send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/chat/link-send.png -------------------------------------------------------------------------------- /src/assets/chat/upload-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/chat/upload-on.png -------------------------------------------------------------------------------- /src/assets/icon/access@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/access@2x.png -------------------------------------------------------------------------------- /src/assets/icon/tips-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/tips-icon.png -------------------------------------------------------------------------------- /src/assets/icon/upArrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/upArrow@2x.png -------------------------------------------------------------------------------- /src/assets/im_box/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/im_box/upload.png -------------------------------------------------------------------------------- /src/assets/im_box/userImg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/im_box/userImg.jpg -------------------------------------------------------------------------------- /src/assets/images/login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/login-bg.jpg -------------------------------------------------------------------------------- /src/assets/images/number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/number.png -------------------------------------------------------------------------------- /src/assets/images/password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/password.png -------------------------------------------------------------------------------- /src/assets/images/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/success.png -------------------------------------------------------------------------------- /src/assets/images/user_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/user_img.jpg -------------------------------------------------------------------------------- /src/assets/micro-page/ad-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/ad-1.png -------------------------------------------------------------------------------- /src/assets/micro-page/ad-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/ad-2.png -------------------------------------------------------------------------------- /src/assets/micro-page/ad-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/ad-3.png -------------------------------------------------------------------------------- /src/assets/micro-page/ad-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/ad-4.png -------------------------------------------------------------------------------- /src/assets/micro-page/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/card.png -------------------------------------------------------------------------------- /src/assets/micro-page/def.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/def.png -------------------------------------------------------------------------------- /src/assets/micro-page/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/menu.png -------------------------------------------------------------------------------- /src/assets/icon/downArrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/downArrow@2x.png -------------------------------------------------------------------------------- /src/assets/im_box/link-send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/im_box/link-send.png -------------------------------------------------------------------------------- /src/assets/im_box/upload-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/im_box/upload-on.png -------------------------------------------------------------------------------- /src/assets/images/Frame-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/Frame-view.png -------------------------------------------------------------------------------- /src/assets/images/icon-tishi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/icon-tishi.png -------------------------------------------------------------------------------- /src/assets/images/login-img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/images/login-img.jpg -------------------------------------------------------------------------------- /src/assets/micro-page/class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/class.png -------------------------------------------------------------------------------- /src/assets/micro-page/notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/notice.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-link.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-tabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-tabs.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-text.png -------------------------------------------------------------------------------- /src/assets/404_images/404_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/404_images/404_cloud.png -------------------------------------------------------------------------------- /src/assets/empty/empty_contacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/empty/empty_contacts.png -------------------------------------------------------------------------------- /src/assets/example-img/idcard1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/example-img/idcard1.png -------------------------------------------------------------------------------- /src/assets/example-img/idcard2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/example-img/idcard2.png -------------------------------------------------------------------------------- /src/assets/home/goods-received.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/goods-received.png -------------------------------------------------------------------------------- /src/assets/home/ic-arrow-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/ic-arrow-normal.png -------------------------------------------------------------------------------- /src/assets/home/orde-management.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/orde-management.png -------------------------------------------------------------------------------- /src/assets/home/order-shipped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/order-shipped.png -------------------------------------------------------------------------------- /src/assets/home/publish-product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/publish-product.png -------------------------------------------------------------------------------- /src/assets/home/return-address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/return-address.png -------------------------------------------------------------------------------- /src/assets/home/stock-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/stock-warning.png -------------------------------------------------------------------------------- /src/assets/icon/conversion@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/conversion@2x.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-ad-def.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-ad-def.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-hotarea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-hotarea.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-notice.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-search.png -------------------------------------------------------------------------------- /src/assets/outlet-config/jd-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/jd-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/jd-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/jd-two.png -------------------------------------------------------------------------------- /src/assets/outlet-config/sf-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/sf-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/sf-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/sf-two.png -------------------------------------------------------------------------------- /src/assets/home/store-settlement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/store-settlement.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-image-ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-image-ad.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-prod-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-prod-list.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-promotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-promotion.png -------------------------------------------------------------------------------- /src/assets/outlet-config/ems-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/ems-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/ems-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/ems-two.png -------------------------------------------------------------------------------- /src/assets/outlet-config/htky-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/htky-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/sto-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/sto-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/yto-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/yto-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/yto-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/yto-two.png -------------------------------------------------------------------------------- /src/assets/outlet-config/zto-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/zto-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/zto-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/zto-two.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/has_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/has_end.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/new_cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/new_cart.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/offlined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/offlined.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc-logo.png -------------------------------------------------------------------------------- /src/lang/biz/area/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | areaId: '', 3 | areaName: '地址', 4 | parentId: '上级地址', 5 | level: '等级(从1开始)' 6 | } 7 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict = true 2 | shamefully-hoist = true 3 | strict-peer-dependencies = false 4 | registry = https://registry.npmmirror.com 5 | -------------------------------------------------------------------------------- /src/assets/home/collection-account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/collection-account.png -------------------------------------------------------------------------------- /src/assets/home/commodity-management.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/commodity-management.png -------------------------------------------------------------------------------- /src/assets/home/commodity-reviewed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/commodity-reviewed.png -------------------------------------------------------------------------------- /src/assets/home/ic-arrow-narrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/ic-arrow-narrow-down.png -------------------------------------------------------------------------------- /src/assets/home/ic-arrow-narrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/ic-arrow-narrow-up.png -------------------------------------------------------------------------------- /src/assets/home/refund-after-sales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/refund-after-sales.png -------------------------------------------------------------------------------- /src/assets/icon/slide-left-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/slide-left-arrow@2x.png -------------------------------------------------------------------------------- /src/assets/icon/slide-right-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/slide-right-arrow@2x.png -------------------------------------------------------------------------------- /src/assets/im_box/customer-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/im_box/customer-service.png -------------------------------------------------------------------------------- /src/assets/micro-page/one-line-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/one-line-one.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-link-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-link-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-tabs-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-tabs-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-text-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-text-active.png -------------------------------------------------------------------------------- /src/assets/outlet-config/yunda-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/yunda-one.png -------------------------------------------------------------------------------- /src/assets/outlet-config/yunda-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/outlet-config/yunda-two.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/togger_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/togger_icon.png -------------------------------------------------------------------------------- /src/assets/website-config/login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/website-config/login-bg.jpg -------------------------------------------------------------------------------- /src/assets/website-config/title-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/website-config/title-icon.png -------------------------------------------------------------------------------- /doc/img/readme/image-20210705143529597.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/doc/img/readme/image-20210705143529597.png -------------------------------------------------------------------------------- /doc/img/readme/image-20231130110522682.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/doc/img/readme/image-20231130110522682.png -------------------------------------------------------------------------------- /doc/img/readme/image-20231130110607548.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/doc/img/readme/image-20231130110607548.png -------------------------------------------------------------------------------- /src/assets/home/distribution-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/distribution-settings.png -------------------------------------------------------------------------------- /src/assets/icon/data-nalysis-ideas@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/icon/data-nalysis-ideas@2x.png -------------------------------------------------------------------------------- /src/assets/micro-page/carousel-swiper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/carousel-swiper.png -------------------------------------------------------------------------------- /src/assets/micro-page/goods-waterfall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/goods-waterfall.png -------------------------------------------------------------------------------- /src/assets/micro-page/lateral-sliding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/lateral-sliding.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-hotarea-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-hotarea-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-notice-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-notice-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-search-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-search-active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/been_shelves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/been_shelves.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/icons.88a567a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/icons.88a567a.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_goods_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_goods_list.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_bulk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_bulk.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_cart.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_live.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_new.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_picture_by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_picture_by.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_shop_signs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_shop_signs.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_store_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_store_list.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/selected_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/selected_link.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/show-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/show-default.png -------------------------------------------------------------------------------- /src/assets/example-img/Business-license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/example-img/Business-license.png -------------------------------------------------------------------------------- /src/assets/home/Illegal-goods-off-shelves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/Illegal-goods-off-shelves.png -------------------------------------------------------------------------------- /src/assets/home/price-adjustment-record.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/home/price-adjustment-record.png -------------------------------------------------------------------------------- /src/assets/micro-page/micro-create-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/micro-create-header.png -------------------------------------------------------------------------------- /src/assets/micro-page/one-line-one-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/one-line-one-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-image-ad-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-image-ad-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-prod-list-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-prod-list-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/p-promotion-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/p-promotion-active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_list_five.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_list_five.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_list_four.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_list_four.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_list_three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_list_three.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_recommand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_recommand.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc-category_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc-category_icon.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_floor_title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_floor_title.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_goods_module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_goods_module.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_limited_skill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_limited_skill.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_index.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_members.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_members.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_order.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_profile.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_skill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_skill.png -------------------------------------------------------------------------------- /src/assets/website-config/menu-top-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/website-config/menu-top-icon.png -------------------------------------------------------------------------------- /src/assets/micro-page/micro-create-header1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/micro-create-header1.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_discount_coupon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_discount_coupon.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_integral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_integral.png -------------------------------------------------------------------------------- /src/lang/biz/area/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | areaId: 'area id', 3 | areaName: 'area name', 4 | parentId: 'parent id', 5 | level: 'level' 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/micro-page/carousel-swiper-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/carousel-swiper-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/goods-waterfall-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/goods-waterfall-active.png -------------------------------------------------------------------------------- /src/assets/micro-page/lateral-sliding-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/micro-page/lateral-sliding-active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_auxiliary_interval.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_auxiliary_interval.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_floor_title_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_floor_title_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_goods_list_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_goods_list_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_collection.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_distribution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_distribution.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_preferential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_preferential.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_modal_securities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_modal_securities.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_picture_by_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_picture_by_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_shop_signs_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_shop_signs_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_store_list_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_store_list_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_universal_hotspot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_universal_hotspot.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_list_five_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_list_five_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_list_four_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_list_four_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/goods_list_three_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/goods_list_three_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_goods_module_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_goods_module_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_limited_skill_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_limited_skill_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_discount_coupon_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_discount_coupon_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_auxiliary_interval_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_auxiliary_interval_active.png -------------------------------------------------------------------------------- /src/assets/pc-micro-page/pc_universal_hotspot_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gz-yami/mall4cloud-platform/HEAD/src/assets/pc-micro-page/pc_universal_hotspot_active.png -------------------------------------------------------------------------------- /src/lang/rbac/menu-resource/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | platformsMenuResources: '平台菜单资源', 3 | suppliersMenuResources: '供应商菜单资源', 4 | merchantsMenuResources: '商家菜单资源' 5 | } 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | [*] 3 | charset = utf-8 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | -------------------------------------------------------------------------------- /src/lang/product/spu-tag/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | spuId: 'spu id', 3 | brandId: 'brand id', 4 | categoryId: 'category id', 5 | inputNotEmpty: 'Cannot be an empty string' 6 | } 7 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | /src/components/verifition 6 | /test/unit/coverage/ 7 | /src/icons/iconfont.js 8 | /components.d.ts 9 | /src/auto-import 10 | -------------------------------------------------------------------------------- /src/lang/platform/sys-user-account/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | email: '邮箱', 3 | phone: '手机号', 4 | username: '用户名', 5 | password: '密码', 6 | mobileNumber: '手机号码', 7 | status: '状态' 8 | } 9 | -------------------------------------------------------------------------------- /src/stores/index.js: -------------------------------------------------------------------------------- 1 | import { createPinia } from 'pinia' 2 | const store = createPinia() 3 | // 全局注册 store 4 | export function setupStore (app) { 5 | app.use(store) 6 | } 7 | 8 | export { store } 9 | -------------------------------------------------------------------------------- /src/lang/rbac/role/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | roleId: '角色id', 3 | roleName: '角色名称', 4 | remark: '备注', 5 | createUserId: '创建者ID', 6 | bizType: '业务类型 0平台菜单 1 店铺菜单', 7 | tenantId: '所属租户' 8 | } 9 | -------------------------------------------------------------------------------- /src/lang/distribution/notice/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | msgId: '公告表', 3 | msgTitle: '公告标题', 4 | startTime: '指定上线时间', 5 | endTime: '指定下线时间', 6 | isTop: '是否置顶(0 不置顶 1 置顶)', 7 | content: '公告内容' 8 | } 9 | -------------------------------------------------------------------------------- /src/lang/distribution/notice/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | msgId: 'msg id', 3 | msgTitle: 'msg title', 4 | startTime: 'start time', 5 | endTime: 'end time', 6 | isTop: 'is top', 7 | content: 'content' 8 | } 9 | -------------------------------------------------------------------------------- /src/lang/rbac/role/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | roleId: 'role id', 3 | roleName: 'role name', 4 | remark: 'remark', 5 | createUserId: 'create user id', 6 | bizType: 'biz type', 7 | tenantId: 'tenant id' 8 | } 9 | -------------------------------------------------------------------------------- /src/lang/platform/hot-search/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | hotSearchId: '主键', 3 | shopId: '店铺ID', 4 | content: '热搜内容', 5 | createDate: '创建时间', 6 | seq: '顺序', 7 | status: '状态', 8 | title: '热搜标题' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/platform/sys-user-account/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | email: 'email', 3 | phone: 'phone', 4 | username: 'username', 5 | phoneNumber: 'phone number', 6 | password: 'password', 7 | status: 'status' 8 | } 9 | -------------------------------------------------------------------------------- /src/lang/rbac/menu-resource/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | platformsMenuResources: 'platforms menu resources', 3 | suppliersMenuResources: 'suppliers menu resources', 4 | merchantsMenuResources: 'merchants menu resources' 5 | } 6 | -------------------------------------------------------------------------------- /src/lang/platform/notice/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | id: '公告id', 3 | shopId: '店铺id', 4 | title: '公告标题', 5 | content: '公告内容', 6 | type: '类型', 7 | status: '状态', 8 | isTop: '是否置顶', 9 | publishTime: '发布时间' 10 | } 11 | -------------------------------------------------------------------------------- /src/lang/printer/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | printerId: '打印机id', 3 | shopId: '店铺id', 4 | supplierId: '供应商id', 5 | printerName: '打印机名称', 6 | siid: '设备码', 7 | printerRemark: '打印机备注', 8 | isDefault: '是否默认' 9 | } 10 | -------------------------------------------------------------------------------- /src/components/icons-select/svg-icons.js: -------------------------------------------------------------------------------- 1 | const files = import.meta.glob('../../icons/svg/*.svg') 2 | 3 | const svgIcons = Object.keys(files).map((path) => { 4 | return path.match(/\/([^/]+)\.svg$/)[1] 5 | }) 6 | export default svgIcons 7 | -------------------------------------------------------------------------------- /src/lang/product/brand/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | brandId: 'brand id', 3 | name: 'name', 4 | desc: 'describe', 5 | imgUrl: 'logo', 6 | firstLetter: 'first letter', 7 | seq: 'seqencing', 8 | status: 'status' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/product/brand/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | brandId: 'brand_id', 3 | name: '品牌名称', 4 | desc: '品牌描述', 5 | imgUrl: '品牌logo', 6 | firstLetter: '检索首字母', 7 | seq: '排序', 8 | isTop: '置顶', 9 | status: '状态' 10 | } 11 | -------------------------------------------------------------------------------- /src/lang/platform/hot-search/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | hotSearchId: 'hot search id', 3 | shopId: 'shop id', 4 | content: 'content', 5 | createDate: 'create date', 6 | seq: 'seq', 7 | status: 'status', 8 | title: 'title' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/platform/notice/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | id: 'id', 3 | shopId: 'shop id', 4 | title: 'title', 5 | content: 'content', 6 | type: 'type', 7 | status: 'status', 8 | isTop: 'is top', 9 | publishTime: 'publish time' 10 | } 11 | -------------------------------------------------------------------------------- /src/lang/rbac/menu-permission/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | menuPermissionId: '菜单资源用户id', 3 | menuTitle: '资源关联菜单', 4 | bizType: '业务类型 0平台菜单 1 店铺菜单', 5 | permission: '权限对应的编码', 6 | name: '资源名称', 7 | uri: '资源对应服务器路径', 8 | method: '请求方法' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/printer/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | printerId: 'printer id', 3 | shopId: 'shop id', 4 | supplierId: 'supplier id', 5 | printerName: 'printer name', 6 | siid: 'siid', 7 | printerRemark: 'printer remark', 8 | isDefault: 'is default' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/rbac/menu-permission/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | menuPermissionId: 'menu permission id', 3 | menuTitle: 'menu title', 4 | bizType: 'biz type', 5 | permission: 'permission', 6 | name: 'name', 7 | uri: 'uri', 8 | method: 'method' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/delivery/delivery-company/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | deliveryCompanyId: 'delivery company id', 3 | name: 'name', 4 | homeUrl: 'home url', 5 | aliNo: 'ali no', 6 | birdNo: 'bird no', 7 | hundredNo: 'hundred no', 8 | otherNo: 'other no' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/delivery/delivery-company/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | deliveryCompanyId: 'ID', 3 | name: '物流公司名称', 4 | homeUrl: '公司主页', 5 | aliNo: '物流公司编号(阿里)', 6 | birdNo: '物流公司编号(快递鸟)', 7 | hundredNo: '物流公司编号(快递100)', 8 | otherNo: '物流公司编号(其他不知名公司)' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/platform/sys-user/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | shopUserId: '商家用户id', 3 | shopId: '关联店铺id', 4 | nickName: '昵称', 5 | avatar: '头像', 6 | status: '状态', 7 | code: '员工编号', 8 | phoneNum: '联系方式', 9 | mobileNumber: '手机号码', 10 | hasAccount: '是否已经设置账号' 11 | } 12 | -------------------------------------------------------------------------------- /src/lang/outletConfig/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | deliveryCompanyType: '快递公司类型', 3 | shipper: '发货人', 4 | mobile: '发货人电话', 5 | partnerId: '电子面单客户账户或月结账号', 6 | partnerKey: '电子面单密码', 7 | net: '收件网点名称', 8 | paperSize: '纸张规格 1.一联面单 2.二联面单', 9 | isDefault: '是否默认' 10 | } 11 | -------------------------------------------------------------------------------- /src/lang/components/category-selector/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | categorySelector: '分类选择器', 3 | chooseProdCateg: '选择商品分类', 4 | currCho: '你当前的选择是', 5 | isItAComtionPro: '是否为组合商品', 6 | generalMerchandise: '普通商品', 7 | combinationGoods: '组合商品', 8 | haveReadFol: '确认选择' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/product/attr/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | attrId: 'attr id', 3 | name: '属性名称', 4 | nameZh: '中文属性名称', 5 | nameEn: '英文属性名称', 6 | desc: '属性描述', 7 | descZh: '中文属性描述', 8 | descEn: '英文属性描述', 9 | searchType: '是否搜索', 10 | attrType: '属性类型', 11 | attrValue: '属性值' 12 | } 13 | -------------------------------------------------------------------------------- /src/icons/svg/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 14 | -------------------------------------------------------------------------------- /src/lang/outletConfig/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | deliveryCompanyType: 'delivery company type', 3 | shipper: 'shipper', 4 | mobile: 'mobile', 5 | partnerId: 'partner id', 6 | partnerKey: 'partner key', 7 | net: 'net', 8 | paperSize: 'paper size', 9 | isDefault: 'is default' 10 | } 11 | -------------------------------------------------------------------------------- /src/lang/product/attr/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | attrId: 'attr id', 3 | name: 'name', 4 | nameZh: 'Chinese name', 5 | nameEn: 'English name', 6 | desc: 'desc', 7 | descZh: 'Chinese desc', 8 | descEn: 'English desc', 9 | searchType: 'search type', 10 | attrType: 'attr type' 11 | } 12 | -------------------------------------------------------------------------------- /src/lang/platform/sys-user/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | shopUserId: 'shop user id', 3 | shopId: 'shop id', 4 | nickName: 'nick name', 5 | avatar: 'avatar', 6 | status: 'status', 7 | code: 'code', 8 | phoneNum: 'phone num', 9 | phoneNumber: 'phone number', 10 | hasAccount: 'has account' 11 | } 12 | -------------------------------------------------------------------------------- /src/lang/station/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | stationName: '自提点', 3 | stationNames: '自提点名称', 4 | addr: '地址', 5 | number: '号码', 6 | account: '账号', 7 | close: '关闭', 8 | open: '开启', 9 | business: '营业', 10 | platformClosed: '平台关闭', 11 | underReview: '审核中', 12 | auditFailure: '审核失败' 13 | } 14 | -------------------------------------------------------------------------------- /src/lang/constant/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | noNull: '不能为空', 3 | product: '商品', 4 | shop: '店铺', 5 | contactName: '联系人', 6 | contactTel: '联系电话', 7 | consignee: '收货人', 8 | mobilePhone: '手机号码', 9 | deliveryAddr: '收货地址', 10 | name: '名称', 11 | dollar: '元', 12 | piece: '件', 13 | normal: '正常' 14 | } 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "sourceMap": true, 6 | "skipLibCheck": true 7 | }, 8 | "exclude": [ 9 | "node_modules" 10 | ], 11 | "include": [ 12 | "src/auto-import/components.d.ts", 13 | "src/auto-import/imports.d.ts" 14 | ] 15 | } -------------------------------------------------------------------------------- /src/styles/element-variables.scss: -------------------------------------------------------------------------------- 1 | // element-plus 2 | :root { 3 | --el-color-primary: #155BD4; 4 | --el-color-primary-light-3: #447cdd; 5 | --el-menu-item-height: 40px !important; 6 | --el-menu-sub-item-height: 40px !important; 7 | --el-button-hover-link-text-color: #155BD4; 8 | --el-color-primary-light-5: #155BD4; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/api/auth/auth.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function login (data) { 4 | return request({ 5 | url: '/mall4cloud_auth/ua/login', 6 | method: 'post', 7 | data 8 | }) 9 | } 10 | 11 | export function logout () { 12 | return request({ 13 | url: '/mall4cloud_auth/login_out', 14 | method: 'post' 15 | }) 16 | } 17 | -------------------------------------------------------------------------------- /platform.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name cloud-platform.mall4j.com; 4 | 5 | location / { 6 | root /usr/share/nginx/html/platform; 7 | } 8 | 9 | error_page 404 /404.html; 10 | location = /404-light.html { 11 | } 12 | 13 | error_page 500 502 503 504 /50x.html; 14 | location = /50x.html { 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/views/common/redirect/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 18 | -------------------------------------------------------------------------------- /src/lang/station/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | stationName: 'Station name', 3 | stationNames: 'Station name', 4 | addr: 'Address', 5 | number: 'Number', 6 | account: 'Account', 7 | close: 'Close', 8 | open: 'Open', 9 | business: 'Business', 10 | platformClosed: 'Platform closed', 11 | underReview: 'Under review', 12 | auditFailure: 'Audit failure' 13 | } 14 | -------------------------------------------------------------------------------- /src/lang/components/category-selector/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | categorySelector: 'Category selector', 3 | chooseProdCateg: 'Select product category', 4 | currCho: 'Your current choice is', 5 | isItAComtionPro: 'Is it a combination product ', 6 | generalMerchandise: 'General Product', 7 | combinationGoods: 'Combined product', 8 | haveReadFol: 'Confirm selection' 9 | } 10 | -------------------------------------------------------------------------------- /src/lang/constant/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | noNull: 'No null', 3 | product: 'Product', 4 | shop: 'Shop', 5 | contactName: 'Contact person', 6 | contactTel: 'Contact number', 7 | consignee: 'consignee', 8 | mobilePhone: 'Mobile phone', 9 | deliveryAddr: ' delivery address', 10 | name: 'Name', 11 | dollar: ' Dollar ', 12 | piece: 'Pieces', 13 | normal: 'Normal' 14 | } 15 | -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name cloud-platform.mall4j.com; 4 | 5 | location / { 6 | try_files $uri $uri/ /; 7 | root /usr/share/nginx/html/dist; 8 | } 9 | 10 | error_page 404 /404.html; 11 | location = /404-light.html { 12 | } 13 | 14 | error_page 500 502 503 504 /50x.html; 15 | location = /50x.html { 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | **/*.log 8 | 9 | tests/**/coverage/ 10 | tests/e2e/reports 11 | selenium-debug.log 12 | 13 | # Editor directories and files 14 | .idea 15 | .vscode 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.local 21 | 22 | package-lock.json 23 | yarn.lock 24 | pnpm-lock.yaml 25 | 26 | /src/auto-import 27 | -------------------------------------------------------------------------------- /src/api/platform/sys-config.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function get (key) { 4 | return request({ 5 | url: '/mall4cloud_platform/sys_config/info/' + key, 6 | method: 'get', 7 | params: '' 8 | }) 9 | } 10 | export function save (data) { 11 | return request({ 12 | url: '/mall4cloud_platform/sys_config/save/', 13 | method: 'post', 14 | data 15 | }) 16 | } 17 | -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | # just a flag 2 | VITE_APP_ENV = 'production' 3 | 4 | # 环境变量必须以VITE_APP_为开头。如:VITE_APP_API、VITE_APP_TITLE 5 | # 你在代码中可以通过如下方式获取: 6 | # import.meta.env.VITE_APP_XXX 7 | 8 | # base api 9 | VITE_APP_BASE_API = 'http://192.168.1.80:8000' 10 | 11 | # 访问文件存储资源的url 对应阿里云的Bucket域名 12 | VITE_APP_RESOURCES_URL = 'http://192.168.1.80:9000/mall4cloud' 13 | 14 | # 文件上传类型 0.阿里云 1.minIo 15 | VITE_APP_RESOURCES_TYPE = '1' 16 | -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | # just a flag 2 | VITE_APP_ENV = 'development' 3 | 4 | # 环境变量必须以VITE_APP_为开头。如:VITE_APP_API、VITE_APP_TITLE 5 | # 你在代码中可以通过如下方式获取: 6 | # import.meta.env.VITE_APP_XXX 7 | 8 | # base api 9 | VITE_APP_BASE_API = 'http://192.168.1.80:8000' 10 | 11 | # 访问文件存储资源的url 对应阿里云的Bucket域名 12 | VITE_APP_RESOURCES_URL = 'http://192.168.1.80:9000/mall4cloud' 13 | 14 | # 文件上传类型 0.阿里云 1.minIo 15 | VITE_APP_RESOURCES_TYPE = '1' 16 | -------------------------------------------------------------------------------- /src/utils/debounce.js: -------------------------------------------------------------------------------- 1 | // 防抖 防止表单重复提交 2 | export const Debounce = (fn, t) => { 3 | const delay = t || 1000 4 | let timer 5 | return function () { 6 | const args = arguments 7 | if (timer) { 8 | clearTimeout(timer) 9 | } 10 | 11 | const callNow = !timer 12 | 13 | timer = setTimeout(() => { 14 | timer = null 15 | }, delay) 16 | 17 | if (callNow) fn.apply(this, args) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/directive/index.js: -------------------------------------------------------------------------------- 1 | import { checkPermission } from './permission' 2 | import { cancelFocus } from './cancelFocus' 3 | import { richDirective } from './rich' 4 | 5 | // 全局注册 directive 6 | export function setupDirective (app) { 7 | // v-permission 挂载到全局 8 | app.directive('permission', checkPermission) 9 | // v-cancel-focus 挂载到全局 10 | app.directive('cancelFocus', cancelFocus) 11 | app.directive('rich', richDirective) 12 | } 13 | -------------------------------------------------------------------------------- /src/icons/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lang/platform/shop-addr/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | shopRefundAddrId: 'shop refund id', 3 | shopId: 'shop id', 4 | mobile: 'mobile', 5 | isDefault: 'default', 6 | consignee: 'consignee', 7 | provinceId: 'province id', 8 | province: 'region', 9 | cityId: 'city id', 10 | city: 'city', 11 | areaId: 'area id', 12 | area: 'area', 13 | addr: 'addr', 14 | postCode: 'post code', 15 | lng: 'lng', 16 | lat: 'lat' 17 | } 18 | -------------------------------------------------------------------------------- /src/components/Verifition/utils/ase.js: -------------------------------------------------------------------------------- 1 | import CryptoJS from 'crypto-js' 2 | /** 3 | * @word 要加密的内容 4 | * @keyWord String 服务器随机返回的关键字 5 | * */ 6 | export function aesEncrypt (word, keyWord = 'XwKsGlMcdPMEhR1B') { 7 | const key = CryptoJS.enc.Utf8.parse(keyWord) 8 | const srcs = CryptoJS.enc.Utf8.parse(word) 9 | const encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) 10 | return encrypted.toString() 11 | } 12 | -------------------------------------------------------------------------------- /src/lang/product/spu-tag/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | tagName: '分组名称', 3 | prodCount: '商品数量', 4 | seq: '排序号', 5 | list: '列表样式', 6 | type: '类型', 7 | defaultType: '默认类型', 8 | customType: '自定义类型', 9 | oneInARow: '一列一个', 10 | twoInARow: '一列两个', 11 | threeInARow: '一列三个', 12 | pleaseEnterALabelName: '请输入分组名称', 13 | prodManage: '商品管理', 14 | updateProdTagSeq: '修改商品分组排序', 15 | returnTagManage: '返回分组', 16 | serialNoEnter: '请输入排序值', 17 | inputNotEmpty: '不能为空字符串' 18 | } 19 | -------------------------------------------------------------------------------- /src/icons/svg/example.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lang/user/score/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | spuId: 'spu id', 3 | brandId: 'brand id', 4 | categoryId: 'category id', 5 | name: 'name', 6 | sellingPoint: 'selling point', 7 | imgUrls: 'img urls', 8 | priceFee: 'price fee', 9 | priceScale: 'price scale', 10 | marketPriceFee: 'market price fee', 11 | marketPriceScale: 'market price scale', 12 | status: 'status', 13 | growthDescription: 'Member Benefits', 14 | memberBenefitsPageDisplaySet: 'Member benefits page display settings' 15 | } 16 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/utils/auth.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | import Cookies from 'vue-cookies' 11 | 12 | const TokenKey = 'Luck-platform-Token' 13 | 14 | export function getToken () { 15 | return Cookies.get(TokenKey) 16 | } 17 | 18 | export function setToken (token) { 19 | return Cookies.set(TokenKey, token, { sameSite: 'Lax' }) 20 | } 21 | 22 | export function removeToken () { 23 | return Cookies.remove(TokenKey) 24 | } 25 | -------------------------------------------------------------------------------- /src/utils/i18n.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | 11 | import { i18n } from '@/lang' 12 | 13 | // translate router.meta.title, be used in breadcrumb sidebar tagsview 14 | export function generateTitle (title) { 15 | const hasKey = i18n.global.te('route.' + title) 16 | if (hasKey) { 17 | // $t :this method from vue-i18n, inject in @/lang/index.js 18 | return $t('route.' + title) 19 | } 20 | return title 21 | } 22 | -------------------------------------------------------------------------------- /src/lang/product/spu/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | spuId: 'spu id', 3 | brandId: '品牌ID', 4 | categoryId: '分类ID', 5 | name: '商品名称', 6 | sellingPoint: '卖点', 7 | imgUrls: '图片', 8 | priceFee: '售价', 9 | priceScale: '售价', 10 | marketPriceFee: '市场价', 11 | marketPriceScale: '市场价', 12 | prodSelect: '商品选择', 13 | status: '状态', 14 | categoryName: '商品分类', 15 | fileSuccess: '文件导入成功', 16 | fileFail: '文件导入失败', 17 | fileUploadFail: '文件上传失败!', 18 | downloadTemplateTips1: '上传模板只能是 xls、xlsx格式!', 19 | downloadTemplateTips2: '上传模板大小不能超过 10MB!' 20 | } 21 | -------------------------------------------------------------------------------- /src/components/Verifition/api/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 此处可直接引用自己项目封装好的 axios 配合后端联调 3 | */ 4 | 5 | import request from './../utils/axios' // 组件内部封装的axios 6 | // import request from "@/api/axios.js" //调用项目封装的axios 7 | 8 | // 获取验证图片 以及token 9 | export function reqGet (data) { 10 | return request({ 11 | url: '/mall4cloud_auth/ua/captcha/get', 12 | method: 'post', 13 | data 14 | }) 15 | } 16 | 17 | // 滑动或者点选验证 18 | export function reqCheck (data) { 19 | return request({ 20 | url: '/mall4cloud_auth/ua/captcha/check', 21 | method: 'post', 22 | data 23 | }) 24 | } 25 | -------------------------------------------------------------------------------- /src/icons/svg/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lang/rbac/menu/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | menuId: 'menu id', 3 | parentId: 'parent id', 4 | bizType: 'biz type', 5 | permission: 'permission', 6 | path: 'path', 7 | component: 'component', 8 | redirect: 'redirect', 9 | alwaysShow: 'always show', 10 | hidden: 'hidden', 11 | name: 'name', 12 | title: 'title', 13 | icon: 'icon', 14 | noCache: 'no cache', 15 | breadcrumb: 'breadcrumb', 16 | affix: 'affix', 17 | activeMenu: 'active menu', 18 | seq: 'seq', 19 | platformMenu: 'Platform side menu', 20 | supplierMenu: 'Supplier Side Menu', 21 | shopMenu: 'Merchant Side Menu' 22 | } 23 | -------------------------------------------------------------------------------- /src/api/platform/sys-user-account.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function get (userId) { 4 | return request({ 5 | url: '/mall4cloud_platform/sys_user/account', 6 | method: 'get', 7 | params: { 8 | userId 9 | } 10 | }) 11 | } 12 | 13 | export function save (data) { 14 | return request({ 15 | url: '/mall4cloud_platform/sys_user/account', 16 | method: 'post', 17 | data 18 | }) 19 | } 20 | 21 | export function update (data) { 22 | return request({ 23 | url: '/mall4cloud_platform/sys_user/account', 24 | method: 'put', 25 | data 26 | }) 27 | } 28 | -------------------------------------------------------------------------------- /src/icons/svg/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lang/user/rights/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | rightsName: '权益名称', 3 | status: '状态', 4 | rightsIcon: '权益图标', 5 | rightsIntroduce: '权益简介', 6 | rightDetail: '权益详情', 7 | sequence: '顺序', 8 | customBenefits: '新建', 9 | enterContent: '请输入内容,长度不超过6个字符', 10 | errorIntegerTip: '请输入整数', 11 | nameCanNotEmpty: '权益名称不能为空', 12 | iconCanNotEmpty: '权益图标不能为空', 13 | intrCanNotEmpty: '权益简介不能为空', 14 | rightsType: '权益类型', 15 | customization: '自定义', 16 | rointsRebateMultiplier: '积分回馈倍率', 17 | coupons: '优惠券', 18 | bonusPoints: '积分赠送', 19 | discountRange: '会员折扣', 20 | memberDiscount: '会员折扣', 21 | packageType: '包邮' 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/components/Verifition/utils/axios.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | axios.defaults.baseURL = import.meta.env.VITE_APP_BASE_API 4 | 5 | const service = axios.create({ 6 | timeout: 40000, 7 | headers: { 8 | 'X-Requested-With': 'XMLHttpRequest', 9 | 'Content-Type': 'application/json; charset=UTF-8' 10 | } 11 | }) 12 | service.interceptors.request.use( 13 | config => { 14 | return config 15 | }, 16 | error => { 17 | Promise.reject(error) 18 | } 19 | ) 20 | 21 | // response interceptor 22 | service.interceptors.response.use( 23 | response => { 24 | return response.data 25 | } 26 | ) 27 | export default service 28 | -------------------------------------------------------------------------------- /src/layout/components/Sidebar/Item.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 31 | 36 | -------------------------------------------------------------------------------- /src/lang/product/category/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | categoryId: '分类ID', 3 | shopId: '店铺ID', 4 | parentId: '父分类ID', 5 | name: '分类名称', 6 | desc: '分类描述', 7 | path: '分类地址', 8 | status: '状态', // 1:enable, 0:disable, -1:deleted 9 | icon: '分类图标', 10 | imgUrl: '分类图片', 11 | level: '分类层级', 12 | deductionRate: '分类扣率', 13 | seq: '排序', 14 | normal: '正常', 15 | offline: '下架', 16 | disable: '禁用', 17 | recommImgSize: '建议图片尺寸为', 18 | categoryParent: '上级分类', 19 | categoryParentTip: '创建分类后,上级分类不支持修改', 20 | nameNotEmpty: '名称不能只有空格', 21 | categoryNoNull: '分类名称不能为空', 22 | imageNoNull: '图片不能为空', 23 | deductionRateNoNull: '分类扣率不能为空', 24 | enterCateName: '请输入分类名称' 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/directive/rich/index.js: -------------------------------------------------------------------------------- 1 | import DOMPurify from 'dompurify' 2 | // 记录旧数据 3 | let oldInnerHTML = '' 4 | 5 | function setHTML (el, value) { 6 | let innerHTML = value 7 | innerHTML = DOMPurify.sanitize(innerHTML, { ADD_ATTR: ['target'] }) 8 | el.innerHTML = innerHTML 9 | } 10 | 11 | export const richDirective = { 12 | mounted (el, binding) { 13 | if (binding.value) { 14 | setHTML(el, binding.value) 15 | } 16 | }, 17 | updated (el, binding) { 18 | // 如果旧数据跟新数据一样 直接 return 19 | if (binding.value === oldInnerHTML && !binding.value) { 20 | return 21 | } 22 | oldInnerHTML = binding.value 23 | if (binding.value) { 24 | setHTML(el, binding.value) 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/components/product-details/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 29 | 30 | 40 | -------------------------------------------------------------------------------- /src/icons/svg/index-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/lang/product/spu/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | spuId: 'spu id', 3 | brandId: 'brand id', 4 | categoryId: 'category id', 5 | name: 'name', 6 | sellingPoint: 'selling point', 7 | imgUrls: 'img', 8 | priceFee: 'price fee', 9 | priceScale: 'price scale', 10 | marketPriceFee: 'market price fee', 11 | marketPriceScale: 'market price scale', 12 | prodSelect: 'Product selection', 13 | status: 'status', 14 | categoryName: 'Product Categories', 15 | fileSuccess: 'File imported successfully', 16 | fileFail: 'File import failed', 17 | fileUploadFail: 'File upload failed!', 18 | downloadTemplateTips1: 'Upload template can only be XLS, xlsx format!', 19 | downloadTemplateTips2: 'Upload template size cannot exceed 10MB!' 20 | } 21 | -------------------------------------------------------------------------------- /src/lang/biz/imgbox/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | picManager: '图片管理器', 3 | choosePic: '选择图片', 4 | picName: '图片名称', 5 | query: '查询', 6 | uploadPic: '上传图片', 7 | selectLocalPic: '请选择本地图片上传:', 8 | confirmUpload: '确定上传', 9 | revisePicName: '修改图片名称和分组', 10 | oldName: '原名称', 11 | revName: '修改名称', 12 | inputNewName: '请输入新的图片名称', 13 | superiorLimit: '可选择照片数量已达上限', 14 | onlyPictures: '只支持图片格式、大小不能超过2m,其他文件已清除', 15 | onlySupported: '仅支持', 16 | pic: '图片', 17 | notExceed: '大小不能超过', 18 | alreadyExist: '已有', 19 | soonUpload: '即将上传', 20 | unit: '张图片', 21 | upload: '上传', 22 | remainder: '还可以选择', 23 | maxSelect: '当前最多只能选择', 24 | requestError: '服务器打了个盹^_^', 25 | PicMaxQuantity: '图片最大数量为:', 26 | groupEmpty: '分组名称不能为空' 27 | } 28 | -------------------------------------------------------------------------------- /src/lang/platform/shop-addr/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | shopRefundAddrId: '商家退货地址id', 3 | shopId: '店铺id', 4 | mobile: '手机', 5 | isDefault: '默认地址', 6 | consignee: '收货人', 7 | provinceId: '省ID', 8 | province: '地区', 9 | cityId: '城市ID', 10 | city: '城市', 11 | areaId: '区ID', 12 | area: '区', 13 | addr: '地址', 14 | postCode: '邮编', 15 | lng: '经度', 16 | lat: '纬度', 17 | consigneeNotEmpty: '收货人不能为空', 18 | mobilePhoneNoNull: '手机号不能为空', 19 | mobileFormattingError: '请输入正确的手机号', 20 | cityCannotBeEmpty: '城市不能为空', 21 | provinceCannotBeEmpty: '省份不能为空', 22 | districtCounEmpty: '区/县不能为空', 23 | addressCannotBeEmpty: '地址不能为空', 24 | changeAddrTipTitle: '确认修改发货地址', 25 | changeAddrTip: '发货网点配置已引用该地址,修改后可能导致发货地址与网点账号信息错乱,请谨慎修改!' 26 | } 27 | -------------------------------------------------------------------------------- /src/lang/biz/videobox/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | videoManager: '视频管理器', 3 | chooseVideo: '选择视频', 4 | videoName: '视频名称', 5 | query: '查询', 6 | uploadVideo: '上传视频', 7 | selectLocalVideo: '请选择本地视频上传:', 8 | confirmUpload: '确定上传', 9 | reviseVideoName: '修改视频名称与分组', 10 | oldName: '原名称', 11 | revName: '新名称', 12 | inputNewName: '请输入新的视频名称', 13 | superiorLimit: '可选择照片数量已达上限', 14 | onlyVideos: '只支持视频格式、大小不能超过20m,其他文件已清除', 15 | onlySupported: '仅支持', 16 | video: '视频', 17 | notExceed: '大小不能超过', 18 | alreadyExist: '已有', 19 | soonUpload: '即将上传', 20 | unit: '个视频', 21 | upload: '上传', 22 | remainder: '还可以选择', 23 | maxSelect: '当前最多只能选择', 24 | requestError: '服务器打了个盹^_^', 25 | VideoMaxQuantity: '视频最大数量为:', 26 | pleaseSelectGroup: '请选择视频' 27 | } 28 | -------------------------------------------------------------------------------- /src/directive/cancelFocus/index.js: -------------------------------------------------------------------------------- 1 | import { useCancelFocusIntervalStore } from '@/stores/modules/cancel-focus-interval.js' 2 | 3 | /** 4 | * 元素被点击后一段时间自动取消聚焦 5 | * 主要用于解决 element-ui 按钮点击后高亮显示不会复原问题 6 | * binding.value 设定几秒后取消,尽可能不低于1000,防止定时器内存占用过大(单位:毫秒) 7 | */ 8 | export const cancelFocus = { 9 | mounted: (el, binding) => { 10 | const btnInterval = useCancelFocusIntervalStore() 11 | let time = binding.value 12 | if (time < 1000 || !time) time = 1500 13 | el.addEventListener('click', ($event) => { 14 | btnInterval.createInterval($event, time) 15 | }) 16 | }, 17 | beforeUnmount: (el) => { 18 | const btnInterval = useCancelFocusIntervalStore() 19 | btnInterval.clearInterval() 20 | el.removeEventListener('click', () => {}) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/icons/svg/report.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/directive/permission/index.js: -------------------------------------------------------------------------------- 1 | import { useUserStore } from '@/stores/modules/user' 2 | 3 | /** 4 | * 按钮权限 5 | */ 6 | export const checkPermission = { 7 | mounted (el, binding) { 8 | const { roles, isAdmin } = useUserStore() 9 | if (isAdmin) { 10 | return true 11 | } 12 | // 「其他角色」按钮权限校验 13 | const { value } = binding 14 | if (value) { 15 | const requiredPerms = value // DOM绑定需要的按钮权限标识 16 | const hasPerm = roles?.some(perm => { 17 | return requiredPerms.includes(perm) 18 | }) 19 | 20 | if (!hasPerm) { 21 | el.parentNode && el.parentNode.removeChild(el) 22 | } 23 | } else { 24 | throw new Error( 25 | "need perms! Like v-has-perm=\"['sys:user:add','sys:user:edit']\"" 26 | ) 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/icons/svg/nested.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lang/user/recharge/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | title: '标题', 3 | rechargeAmount: '充值金额', 4 | bgImg: '背景图片', 5 | noPic: '暂无图片', 6 | sequence: '顺序', 7 | titleNoEnter: '请输入标题名称', 8 | enterRechargeAmount: '请输入充值金额', 9 | rewardAmount: '赠送金额', 10 | enterRewardAmount: '请输入赠送金额', 11 | reward: '赠送', 12 | rewardScore: '赠送积分', 13 | enterRewardScore: '请输入赠送积分', 14 | rewardGrowthValue: '赠送成长值', 15 | enterRewardGrowthValue: '请输入赠送成长值', 16 | rewardCoupon: '赠送优惠券', 17 | couponUpperLimit: '领券上限', 18 | amount: '金额', 19 | score: '积分', 20 | growth: '成长值', 21 | selectCoupons: '选择优惠券', 22 | couponName: '优惠券名称', 23 | titCanNoBlank: '标题不能为空', 24 | bgImgCannotEmpty: '背景图片不能为空', 25 | rechargeAmountLimited: '充值金额必须大于0', 26 | moreThan0: '充值金额必须大于0', 27 | quantity: '数量', 28 | 29 | end: 'end' 30 | } 31 | -------------------------------------------------------------------------------- /src/stores/modules/cancel-focus-interval.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | /** 4 | * 为解决element-ui按钮点击后,聚焦不会自动消失问题, 5 | * 定义统一定时器进行清除聚焦操作 6 | */ 7 | export const useCancelFocusIntervalStore = defineStore('cancelFocus', { 8 | state: () => { 9 | return { 10 | value: null 11 | } 12 | }, 13 | actions: { 14 | clearInterval () { 15 | clearInterval(this.value) 16 | }, 17 | createInterval ($event, time) { 18 | if (this.value) { 19 | clearInterval(this.value) 20 | this.value = null 21 | } 22 | this.value = setInterval(() => { 23 | let target = $event.target 24 | if (target.nodeName === 'SPAN') { 25 | target = $event.target.parentNode 26 | } 27 | target.blur() 28 | }, time) 29 | } 30 | } 31 | }) 32 | -------------------------------------------------------------------------------- /src/icons/svg/order.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/api/biz/attach-file.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 保存上传文件记录 4 | export function save (data) { 5 | return request({ 6 | url: '/mall4cloud_biz/m/attach_file', 7 | method: 'post', 8 | data 9 | }) 10 | } 11 | 12 | // 获取上传文件记录表列表 13 | export function page (pageParam) { 14 | return request({ 15 | url: '/mall4cloud_biz/m/attach_file/page', 16 | method: 'get', 17 | params: pageParam 18 | }) 19 | } 20 | 21 | // 更新文件记录 22 | export function updateFileName (data) { 23 | return request({ 24 | url: '/mall4cloud_biz/m/attach_file/update_file', 25 | method: 'put', 26 | data 27 | }) 28 | } 29 | 30 | // 删除上传文件记录 31 | export function deleteFile (param) { 32 | return request({ 33 | url: '/mall4cloud_biz/m/attach_file', 34 | method: 'delete', 35 | params: param 36 | }) 37 | } 38 | -------------------------------------------------------------------------------- /src/icons/svg/index.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 12 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/api/product/prod-info.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_product/m/spu/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function getProdInfoPage (spuId) { 12 | return request({ 13 | url: '/mall4cloud_product/admin/spu', 14 | method: 'get', 15 | params: { 16 | spuId 17 | } 18 | }) 19 | } 20 | 21 | export function deleteById (spuId) { 22 | return request({ 23 | url: '/mall4cloud_product/m/spu', 24 | method: 'delete', 25 | params: { 26 | spuId 27 | } 28 | }) 29 | } 30 | 31 | export function getAttrsByCategoryId (param) { 32 | return request({ 33 | url: '/mall4cloud_product/admin/attr/get_attrs_by_category_id', 34 | method: 'get', 35 | params: param 36 | }) 37 | } 38 | -------------------------------------------------------------------------------- /src/lang/product/category/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | categoryId: 'category id', 3 | shopId: 'shop id', 4 | parentId: 'parent id', 5 | name: 'name', 6 | desc: 'desc', 7 | path: 'path', 8 | status: 'status', 9 | icon: 'icon', 10 | imgUrl: 'img url', 11 | level: 'level', 12 | deductionRate: 'Deduction Rate', 13 | seq: 'seq', 14 | normal: 'normal', 15 | offline: 'Off shelf', 16 | recommImgSize: 'Carousel pictures', 17 | categoryParent: 'Category parent', 18 | categoryParentTip: 'After you create a classification, the parent classification does not support modification', 19 | nameNotEmpty: 'The name cannot have only spaces', 20 | categoryNoNull: 'Category name cannot be empty', 21 | imageNoNull: 'Image cannot be empty', 22 | deductionRateNoNull: 'Deduction rate cannot be empty', 23 | enterCateName: 'Please enter the category name' 24 | } 25 | -------------------------------------------------------------------------------- /src/lang/user/rights/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | rightsName: 'Name of rights', 3 | status: 'Status', 4 | rightsIcon: 'Equity Icons', 5 | rightsIntroduce: 'Benefits Introduction', 6 | rightDetail: 'Benefit Details', 7 | sequence: 'Seq', 8 | customBenefits: 'New', 9 | enterContent: 'Please enter the content, no more than six characters in length', 10 | errorIntegerTip: 'Please enter an integer', 11 | nameCanNotEmpty: 'Rights name cannot be blank', 12 | iconCanNotEmpty: 'The rights icon cannot be empty', 13 | intrCanNotEmpty: 'Rights introduction cannot be blank', 14 | rightsType: 'Type of interest', 15 | customization: 'Customization', 16 | rointsRebateMultiplier: 'Points rebate multiplier', 17 | coupons: 'Coupons', 18 | bonusPoints: 'Bonus Points', 19 | discountRange: 'Member Discount', 20 | memberDiscount: 'Member Discount', 21 | packageType: 'Package' 22 | } 23 | -------------------------------------------------------------------------------- /src/icons/svg/distribution.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/icons/svg/live.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 14 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/icons/svg/group.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 12 | 14 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/lang/rbac/menu/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | menuId: '菜单id', 3 | parentId: '父菜单ID,一级菜单为0', 4 | bizType: '业务类型 0平台菜单 1 店铺菜单', 5 | permission: '权限,需要有哪个权限才能访问该菜单', 6 | path: '路径 就像uri', 7 | component: '组件如:1.layout/Layout 为布局,不会跳页面 2.views/components-demo/tinymce 跳转到该页面', 8 | redirect: '当设置 noRedirect 的时候该路由在面包屑导航中不可被点击', 9 | alwaysShow: '一直显示根路由', 10 | hidden: '当设置 true 的时候该路由不会在侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1', 11 | name: '设定路由的名字,一定要填写不然使用时会出现各种问题', 12 | title: '设置该路由在侧边栏和面包屑中展示的名字', 13 | icon: '设置该路由的图标,支持 svg-class,也支持 el-icon-x element-ui 的 icon', 14 | noCache: '如果设置为true,则不会被 缓存(默认 false)', 15 | breadcrumb: '如果设置为false,则不会在breadcrumb面包屑中显示(默认 true)', 16 | affix: '若果设置为true,它则会固定在tags-view中(默认 false)', 17 | activeMenu: '当路由设置了该属性,则会高亮相对应的侧边栏。', 18 | seq: '排序,越小越靠前', 19 | platformMenu: '平台端菜单', 20 | supplierMenu: '供应商端菜单', 21 | shopMenu: '商家端菜单' 22 | } 23 | -------------------------------------------------------------------------------- /src/stores/modules/common.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | 3 | export const useCommonStore = defineStore('common', { 4 | state: () => { 5 | return { 6 | // 侧边栏, 折叠状态 7 | sidebarFold: true, 8 | menuIds: [], 9 | selectLeftId: '', 10 | selectRightId: '', 11 | pathHeader: '', 12 | // 当前选择的标签 13 | selectMenu: [], 14 | routeList: [] 15 | } 16 | }, 17 | actions: { 18 | updateRouteList (list) { 19 | this.routeList = list 20 | }, 21 | updatePathHeader (val) { 22 | this.pathHeader = val 23 | }, 24 | updateSelectLeftId (id) { 25 | this.selectLeftId = id 26 | }, 27 | updateSelectRightId (id) { 28 | this.selectRightId = id 29 | }, 30 | updateSelectMenu (list) { 31 | this.selectMenu = list 32 | }, 33 | updateSidebarFold (fold) { 34 | this.sidebarFold = fold 35 | } 36 | } 37 | }) 38 | -------------------------------------------------------------------------------- /src/api/system/addr-manage.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page () { 4 | return request({ 5 | url: '/mall4cloud_delivery/m/area/list', 6 | method: 'get' 7 | }) 8 | } 9 | 10 | export function get (areaId) { 11 | return request({ 12 | url: '/mall4cloud_delivery/m/area', 13 | method: 'get', 14 | params: { 15 | areaId 16 | } 17 | }) 18 | } 19 | 20 | export function save (data) { 21 | return request({ 22 | url: '/mall4cloud_delivery/m/area', 23 | method: 'post', 24 | data 25 | }) 26 | } 27 | 28 | export function update (data) { 29 | return request({ 30 | url: '/mall4cloud_delivery/m/area', 31 | method: 'put', 32 | data 33 | }) 34 | } 35 | 36 | export function deleteById (areaId) { 37 | return request({ 38 | url: '/mall4cloud_delivery/m/area', 39 | method: 'delete', 40 | params: { 41 | areaId 42 | } 43 | }) 44 | } 45 | -------------------------------------------------------------------------------- /src/icons/svg/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/common/error-page/401.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 26 | 27 | 44 | -------------------------------------------------------------------------------- /src/api/product/spu.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_product/m/spu/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (spuId) { 12 | return request({ 13 | url: '/mall4cloud_product/m/spu', 14 | method: 'get', 15 | params: { 16 | spuId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_product/m/spu', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_product/m/spu', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (spuId) { 38 | return request({ 39 | url: '/mall4cloud_product/m/spu', 40 | method: 'delete', 41 | params: { 42 | spuId 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/icons/svg/shop.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 12 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/lang/live/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | liveRoom: { 3 | view: '查看', 4 | viewLRoomInfo: '直播间信息', 5 | anchorName: '主播昵称', 6 | liveTime: '直播的时间', 7 | liveBackgroundImage: '直播背景图', 8 | anchorSharingPicture: '主播分享图', 9 | liveCoverImage: '直播封面图', 10 | prod: '直播商品', 11 | roomName: '直播间名称', 12 | over: '结束', 13 | anchorNickname: '主播昵称', 14 | anchorMobile: '主播手机号', 15 | liveRoomStatus: '直播间状态', 16 | whetherToTop: '是否置顶', 17 | liveBroadcastTime: '开播时间', 18 | LiveStartTime: '直播开始时间', 19 | LiveOverTime: '直播结束时间', 20 | live: '直播中', 21 | suspend: '暂停', 22 | notPinned: '未置顶', 23 | pinned: '已置顶', 24 | top: '置顶', 25 | cancelTopping: '取消置顶', 26 | violationOffShelf: '违规下架', 27 | reasonForOffline: '下线原因', 28 | offlineReasonTip1: '下线原因不能超过100字', 29 | offlineReasonTip: '下线原因不能为空', 30 | offlineTip: '确定对活动[ACTIVITYNAME]进行下线操作?如是,请填写下线理由', 31 | tips: '提示' 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/icons/svg-icon.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 30 | 31 | 48 | -------------------------------------------------------------------------------- /src/api/product/attr.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_product/admin/attr/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (attrId) { 12 | return request({ 13 | url: '/mall4cloud_product/admin/attr', 14 | method: 'get', 15 | params: { 16 | attrId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_product/admin/attr', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_product/admin/attr', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (attrId) { 38 | return request({ 39 | url: '/mall4cloud_product/admin/attr', 40 | method: 'delete', 41 | params: { 42 | attrId 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/api/platform/notice.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_multishop/admin/notice/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (id) { 12 | return request({ 13 | url: '/mall4cloud_multishop/admin/notice', 14 | method: 'get', 15 | params: { 16 | id 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_multishop/admin/notice', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_multishop/admin/notice', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (id) { 38 | return request({ 39 | url: '/mall4cloud_multishop/admin/notice', 40 | method: 'delete', 41 | params: { 42 | id 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/api/discount/discount.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_discount/m/discount/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (discountId) { 12 | return request({ 13 | url: `/mall4cloud_discount/m/discount/info/${discountId}`, 14 | method: 'get', 15 | params: { 16 | } 17 | }) 18 | } 19 | 20 | export function save (data) { 21 | return request({ 22 | url: '/mall4cloud_discount/m/discount', 23 | method: 'post', 24 | data 25 | }) 26 | } 27 | 28 | export function update (data) { 29 | return request({ 30 | url: '/mall4cloud_discount/m/discount', 31 | method: 'put', 32 | data 33 | }) 34 | } 35 | 36 | export function deleteById (discountId) { 37 | return request({ 38 | url: `/mall4cloud_discount/m/discount/${discountId}`, 39 | method: 'delete', 40 | params: { 41 | } 42 | }) 43 | } 44 | -------------------------------------------------------------------------------- /src/api/product/spu-detail.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_product/m/spu_detail/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (spuId) { 12 | return request({ 13 | url: '/mall4cloud_product/m/spu_detail', 14 | method: 'get', 15 | params: { 16 | spuId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_product/m/spu_detail', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_product/m/spu_detail', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (spuId) { 38 | return request({ 39 | url: '/mall4cloud_product/m/spu_detail', 40 | method: 'delete', 41 | params: { 42 | spuId 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/lang/seckill/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | actName: '活动名称', 3 | maxNum: '限购数量', 4 | actStartTime: '活动开始时间', 5 | selectedLot: '所选批次', 6 | maxCancelTime: '取消订单时间(分)', 7 | offViol: '违规下线', 8 | status: '状态', 9 | buyer: '买家', 10 | activTime: '活动时间', 11 | selectDate: '选择日期', 12 | inventory: '库存', 13 | product: '商品', 14 | unlimited: '不限', 15 | makeSurateTheAct: '确定使活动失效?', 16 | purcPerPerson: '每人限购', 17 | cancelTheOrder: '订单取消', 18 | unpaidnutes: '分钟未支付订单,订单取消', 19 | warning: '警告:秒杀商品采用独立库存请合理安排', 20 | price: '价格(元)', 21 | exisocks: '现有库存', 22 | pleaheyTime: '请选择活动时间', 23 | timeCanEmpty: '时间不可为空', 24 | evenBeEmpty: '活动名称不可为空', 25 | close: '关闭', 26 | invalidated: '已失效', 27 | open: '开启', 28 | theOrionEmpty: '订单取消时间不可为空', 29 | commoBeEmpty: '商品价格不能为空', 30 | commodiBeEmpty: '商品库存不能为空', 31 | enableMustOne: '请至少启用一个sku', 32 | pleaSenProc: '请选择活动商品', 33 | openPurchaseLimit: '开启限购', 34 | invalidActivity: '失效活动', 35 | canBePurcPer: '每人可购买' 36 | } 37 | -------------------------------------------------------------------------------- /src/lang/rbac/web-config/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | chinese: '中文', 3 | english: '英文', 4 | platformSideConfiguration: '平台端配置', 5 | merchantSideConfiguration: '商家端配置', 6 | supplierSideConfiguration: '供应商端配置', 7 | pcConfiguration: 'pc端配置', 8 | h5Configuration: 'h5端配置', 9 | stationConfiguration: '门店端配置', 10 | open: '开启', 11 | close: '关闭', 12 | determine: '确定', 13 | cancellation: '取消', 14 | loginLogo: '登录logo', 15 | logo: 'Logo', 16 | loginBg: '登录背景', 17 | bsCopyright: '版权声明', 18 | bsTitleContent: '标题文本', 19 | bsTitleImg: '标题图标', 20 | bsMenuTitleOpen: '菜单展开文本', 21 | bsMenuTitleClose: '菜单收缩文本', 22 | pcQrcodeImg: '底部二维码', 23 | pcCompanyName: '公司名称', 24 | pcCompanyInfo: '底部扩展信息', 25 | pcTitleContent: '网站标题文本', 26 | uniTitleContent: '网站标题', 27 | pcTitleImg: '网站标题图标', 28 | pcLogoImgText: '图文Logo', 29 | pcWelcome: '导航欢迎语', 30 | h5Welcome: '商城欢迎语', 31 | activationStatus: '激活状态', 32 | canNotBeEmpty: '不能为空', 33 | TopIcon: '菜单栏顶部图标', 34 | save: '保存信息' 35 | } 36 | -------------------------------------------------------------------------------- /src/api/distribution-manage/transport.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function transportPage () { 4 | return request({ 5 | url: 'mall4cloud_delivery/m/transport/list', 6 | method: 'get' 7 | }) 8 | } 9 | 10 | export function transportGet (attrId) { 11 | return request({ 12 | url: '/mall4cloud_delivery/m/transport', 13 | method: 'get', 14 | params: { 15 | attrId 16 | } 17 | }) 18 | } 19 | 20 | export function transportSave (data) { 21 | return request({ 22 | url: '/mall4cloud_delivery/m/transport', 23 | method: 'post', 24 | data 25 | }) 26 | } 27 | 28 | export function transportUpdate (data) { 29 | return request({ 30 | url: '/mall4cloud_delivery/m/transport', 31 | method: 'put', 32 | data 33 | }) 34 | } 35 | 36 | export function deleteTransportById (attrId) { 37 | return request({ 38 | url: '/mall4cloud_delivery/m/transport', 39 | method: 'delete', 40 | params: { 41 | attrId 42 | } 43 | }) 44 | } 45 | -------------------------------------------------------------------------------- /src/api/platform/index-img.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_multishop/admin/index_img/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (imgId) { 12 | return request({ 13 | url: '/mall4cloud_multishop/admin/index_img', 14 | method: 'get', 15 | params: { 16 | imgId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_multishop/admin/index_img', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_multishop/admin/index_img', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (imgId) { 38 | return request({ 39 | url: '/mall4cloud_multishop/admin/index_img', 40 | method: 'delete', 41 | params: { 42 | imgId 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/lang/coupon/coupon/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | couponId: '优惠券ID', 3 | shopId: '店铺ID', 4 | couponName: '优惠券名称', 5 | subTitle: '优惠券副标题', 6 | couponType: '优惠券类型', 7 | suitableProdType: '适用商品', 8 | getWay: '获取方式', 9 | ways1: '用户领取', 10 | ways2: '系统发放', 11 | validTimeType: '生效类型', 12 | deliveryTime: '投放时间', 13 | cashCondition: '使用条件', 14 | reduceAmount: '减免金额', 15 | couponDiscount: '折扣额度', 16 | startTime: '开始时间', 17 | endTime: '结束时间', 18 | afterReceiveDays: '领券后', 19 | validDays: '有效天数', 20 | totalStock: '总库存', 21 | stocks: '库存', 22 | limitNum: '每人限领', 23 | status: '过期状态', 24 | putonStatus: '状态', 25 | version: '版本号', 26 | selectCoupons: '选择优惠券', 27 | couponDscription: '优惠券描述', 28 | couponUpperLimit: '领券上限', 29 | platformDistribution: '平台发放', 30 | userClaim: '用户领取', 31 | receiveDirectly: '直接领取', 32 | systemIssue: '系统发放', 33 | couponStatus: '优惠券状态', 34 | cashCoupon: '代金券', 35 | discountVoucher: '折扣券', 36 | coinCertificate: '兑换券', 37 | reduce: '减', 38 | full: '满' 39 | } 40 | -------------------------------------------------------------------------------- /src/stores/modules/app.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { getLanguage } from '@/lang' 3 | import Cookies from 'vue-cookies' 4 | 5 | export const useAppStore = defineStore('app', { 6 | state: () => { 7 | return { 8 | sidebar: { 9 | opened: Cookies.get('cloudSidebarStatus') ? !!+Cookies.get('cloudSidebarStatus') : true, 10 | withoutAnimation: false 11 | }, 12 | language: getLanguage() 13 | } 14 | }, 15 | actions: { 16 | toggleSideBar () { 17 | this.sidebar.opened = !this.sidebar.opened 18 | this.sidebar.withoutAnimation = false 19 | Cookies.set('cloudSidebarStatus', Number(this.sidebar.opened)) 20 | }, 21 | closeSideBar ({ withoutAnimation }) { 22 | Cookies.set('cloudSidebarStatus', 0) 23 | this.sidebar.opened = false 24 | this.sidebar.withoutAnimation = withoutAnimation 25 | }, 26 | setLanguage (language) { 27 | this.language = language 28 | Cookies.set('cloudLanguage', language) 29 | } 30 | } 31 | }) 32 | -------------------------------------------------------------------------------- /src/api/delivery/delivery-company.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function list () { 4 | return request({ 5 | url: '/mall4cloud_delivery/p/delivery_company/list', 6 | method: 'get' 7 | }) 8 | } 9 | 10 | export function get (deliveryCompanyId) { 11 | return request({ 12 | url: '/mall4cloud_delivery/p/delivery_company', 13 | method: 'get', 14 | params: { 15 | deliveryCompanyId 16 | } 17 | }) 18 | } 19 | 20 | export function save (data) { 21 | return request({ 22 | url: '/mall4cloud_delivery/p/delivery_company', 23 | method: 'post', 24 | data 25 | }) 26 | } 27 | 28 | export function update (data) { 29 | return request({ 30 | url: '/mall4cloud_delivery/p/delivery_company', 31 | method: 'put', 32 | data 33 | }) 34 | } 35 | 36 | export function deleteById (deliveryCompanyId) { 37 | return request({ 38 | url: '/mall4cloud_delivery/p/delivery_company', 39 | method: 'delete', 40 | params: { 41 | deliveryCompanyId 42 | } 43 | }) 44 | } 45 | -------------------------------------------------------------------------------- /src/api/platform/hot-search.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_multishop/admin/hot_search/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (hotSearchId) { 12 | return request({ 13 | url: '/mall4cloud_multishop/admin/hot_search', 14 | method: 'get', 15 | params: { 16 | hotSearchId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_multishop/admin/hot_search', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_multishop/admin/hot_search', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (hotSearchId) { 38 | return request({ 39 | url: '/mall4cloud_multishop/admin/hot_search', 40 | method: 'delete', 41 | params: { 42 | hotSearchId 43 | } 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/api/rbac/role.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_rbac/role/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function list () { 12 | return request({ 13 | url: '/mall4cloud_rbac/role/list', 14 | method: 'get' 15 | }) 16 | } 17 | 18 | export function get (roleId) { 19 | return request({ 20 | url: '/mall4cloud_rbac/role', 21 | method: 'get', 22 | params: { 23 | roleId 24 | } 25 | }) 26 | } 27 | 28 | export function save (data) { 29 | return request({ 30 | url: '/mall4cloud_rbac/role', 31 | method: 'post', 32 | data 33 | }) 34 | } 35 | 36 | export function update (data) { 37 | return request({ 38 | url: '/mall4cloud_rbac/role', 39 | method: 'put', 40 | data 41 | }) 42 | } 43 | 44 | export function deleteById (roleId) { 45 | return request({ 46 | url: '/mall4cloud_rbac/role', 47 | method: 'delete', 48 | params: { 49 | roleId 50 | } 51 | }) 52 | } 53 | -------------------------------------------------------------------------------- /src/styles/variables.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | // base color 11 | $blue:#324157; 12 | $light-blue:#3A71A8; 13 | $red:#C03639; 14 | $pink: #E65D6E; 15 | $green: #30B08F; 16 | $tiffany: #4AB7BD; 17 | $yellow:#FEC171; 18 | $panGreen: #30B08F; 19 | 20 | // sidebar 21 | $menuText:#333333; 22 | $menuActiveText:#409EFF; 23 | $subMenuActiveText:#333333; // https://github.com/ElemeFE/element/issues/12951 24 | 25 | $menuBg:#ffffff; 26 | $menuHover:#e7eefb; 27 | 28 | $subMenuBg:#ffffff; 29 | $subMenuHover:#e7eefb; 30 | 31 | $sideBarWidth: 230px; 32 | 33 | // the :export directive is the magic sauce for webpack 34 | // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass 35 | :export { 36 | menuText: $menuText; 37 | menuActiveText: $menuActiveText; 38 | subMenuActiveText: $subMenuActiveText; 39 | menuBg: $menuBg; 40 | menuHover: $menuHover; 41 | subMenuBg: $subMenuBg; 42 | subMenuHover: $subMenuHover; 43 | sideBarWidth: $sideBarWidth; 44 | } 45 | -------------------------------------------------------------------------------- /src/styles/transition.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | // global transition css 11 | 12 | /* fade */ 13 | .fade-enter-active, 14 | .fade-leave-active { 15 | transition: opacity 0.28s; 16 | } 17 | 18 | .fade-enter, 19 | .fade-leave-active { 20 | opacity: 0; 21 | } 22 | 23 | /* fade-transform */ 24 | .fade-transform-leave-active, 25 | .fade-transform-enter-active { 26 | transition: all .5s; 27 | } 28 | 29 | .fade-transform-enter { 30 | opacity: 0; 31 | transform: translateX(-30px); 32 | } 33 | 34 | .fade-transform-leave-to { 35 | opacity: 0; 36 | transform: translateX(30px); 37 | } 38 | 39 | /* breadcrumb transition */ 40 | .breadcrumb-enter-active, 41 | .breadcrumb-leave-active { 42 | transition: all .5s; 43 | } 44 | 45 | .breadcrumb-enter, 46 | .breadcrumb-leave-active { 47 | opacity: 0; 48 | transform: translateX(20px); 49 | } 50 | 51 | .breadcrumb-move { 52 | transition: all .5s; 53 | } 54 | 55 | .breadcrumb-leave-active { 56 | position: absolute; 57 | } 58 | -------------------------------------------------------------------------------- /src/lang/biz/videobox/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | videoManager: 'Video Manager', 3 | chooseVideo: 'Select Video', 4 | videoName: 'Video name', 5 | query: 'query', 6 | uploadVideo: 'Upload videos', 7 | selectLocalVideo: 'Please select a local video to upload:', 8 | confirmUpload: 'Confirm upload', 9 | reviseVideoName: 'Modify video name', 10 | oldName: 'Old name', 11 | revName: 'Edit name', 12 | inputNewName: 'Please enter a new video name', 13 | superiorLimit: 'The number of selectable videos has reached the upper limit', 14 | onlyVideos: 'Only support videos format, size can not exceed 20m, other files have been cleared', 15 | onlySupported: 'Only supports', 16 | video: 'video', 17 | notExceed: 'Size cannot exceed', 18 | alreadyExist: 'Already existing', 19 | soonUpload: 'About to upload', 20 | unit: 'video', 21 | upload: 'Upload', 22 | remainder: 'There are also options', 23 | maxSelect: 'At present, you can only select at most', 24 | requestError: 'The server is dozing off^_^', 25 | VideoMaxQuantity: 'The maximum number of videos is:', 26 | pleaseSelectGroup: 'Please select video' 27 | } 28 | -------------------------------------------------------------------------------- /src/icons/svg/analysis.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/lang/biz/imgbox/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | picManager: 'Picture Manager', 3 | choosePic: 'Select Picture', 4 | picName: 'Picture name', 5 | query: 'query', 6 | uploadPic: 'Upload pictures', 7 | selectLocalPic: 'Please select a local image to upload:', 8 | confirmUpload: 'Confirm upload', 9 | revisePicName: 'Modify picture name and grouping', 10 | oldName: 'Old name', 11 | revName: 'Edit name', 12 | inputNewName: 'Please enter a new picture name', 13 | superiorLimit: 'The number of selectable photos has reached the upper limit', 14 | onlyPictures: 'Only support image format, size can not exceed 2m, other files have been cleared', 15 | onlySupported: 'Only supports', 16 | pic: 'picture', 17 | notExceed: 'Size cannot exceed', 18 | alreadyExist: 'Already existing', 19 | soonUpload: 'About to upload', 20 | unit: 'picture', 21 | upload: 'Upload', 22 | remainder: 'There are also options', 23 | maxSelect: 'At present, you can only select at most', 24 | requestError: 'The server is dozing off^_^', 25 | PicMaxQuantity: 'The maximum number of pictures is:', 26 | groupEmpty: 'Group name cannot be empty' 27 | } 28 | -------------------------------------------------------------------------------- /src/api/platform/sys-user.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function shopUserInfo () { 4 | return request({ 5 | url: '/mall4cloud_platform/sys_user/info', 6 | method: 'get' 7 | }) 8 | } 9 | 10 | export function page (pageParam) { 11 | return request({ 12 | url: '/mall4cloud_platform/sys_user/page', 13 | method: 'get', 14 | params: pageParam 15 | }) 16 | } 17 | 18 | export function get (sysUserId) { 19 | return request({ 20 | url: '/mall4cloud_platform/sys_user', 21 | method: 'get', 22 | params: { 23 | sysUserId 24 | } 25 | }) 26 | } 27 | 28 | export function save (data) { 29 | return request({ 30 | url: '/mall4cloud_platform/sys_user', 31 | method: 'post', 32 | data 33 | }) 34 | } 35 | 36 | export function update (data) { 37 | return request({ 38 | url: '/mall4cloud_platform/sys_user', 39 | method: 'put', 40 | data 41 | }) 42 | } 43 | 44 | export function deleteById (sysUserId) { 45 | return request({ 46 | url: '/mall4cloud_platform/sys_user', 47 | method: 'delete', 48 | params: { 49 | sysUserId 50 | } 51 | }) 52 | } 53 | -------------------------------------------------------------------------------- /src/icons/svg/icon-zhedie.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/lang/index.js: -------------------------------------------------------------------------------- 1 | import { createI18n } from 'vue-i18n' 2 | import en from './en' 3 | import zhCn from './zhCn' 4 | import Cookies from 'vue-cookies' 5 | const messages = { 6 | en: { 7 | ...en 8 | }, 9 | zh: { 10 | ...zhCn 11 | } 12 | } 13 | export function getLanguage () { 14 | const chooseLanguage = Cookies.get('cloudLanguage') 15 | if (chooseLanguage) return chooseLanguage 16 | // if has not choose language 17 | const language = (navigator.language || navigator.browserLanguage).toLowerCase() 18 | const locales = Object.keys(messages) 19 | for (const locale of locales) { 20 | if (language.indexOf(locale) > -1) { 21 | return locale 22 | } 23 | } 24 | return 'zh' 25 | } 26 | 27 | const localeData = { 28 | globalInjection: true, // 如果设置true, $t() 函数将注册到全局 29 | legacy: false, // 如果想在composition api中使用需要设置为false 30 | // 默认语言 31 | // locale: settings.defaultLanguage, 32 | locale: localStorage.getItem('cloudLanguage') || 'zh', 33 | messages // set locale messages 34 | } 35 | 36 | export const i18n = createI18n(localeData) 37 | export const setupI18n = { 38 | install (app) { 39 | app.use(i18n) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/lang/user/recharge/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | title: 'title', 3 | rechargeAmount: 'Recharge amount', 4 | bgImg: 'Background picture', 5 | noPic: 'No picture', 6 | sequence: 'sequence', 7 | titleNoEnter: 'Please enter a title name', 8 | enterRechargeAmount: 'Please enter the recharge amount', 9 | rewardAmount: 'Additional amount', 10 | enterRewardAmount: 'Please enter the reward amount', 11 | reward: 'Reward', 12 | rewardScore: 'Reward score', 13 | enterRewardScore: 'Please enter the reward score', 14 | rewardGrowthValue: 'Reward growth value', 15 | enterRewardGrowthValue: 'Please enter the reward growth value', 16 | rewardCoupon: 'Reward coupon', 17 | couponUpperLimit: 'Coupon upper limit', 18 | amount: 'Amount of money', 19 | score: 'score', 20 | growth: 'Growth value', 21 | selectCoupons: 'Select coupons', 22 | couponName: 'Coupon name', 23 | titCanNoBlank: 'Title cannot be empty', 24 | bgImgCannotEmpty: 'Background image cannot be empty', 25 | rechargeAmountLimited: 'RechargeAmount must be greater than 0', 26 | moreThan0: 'The recharge amount must be greater than 0', 27 | quantity: 'quantity', 28 | end: 'end' 29 | } 30 | -------------------------------------------------------------------------------- /src/api/rbac/menu-permission.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_rbac/menu_permission/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (menuPermissionId) { 12 | return request({ 13 | url: '/mall4cloud_rbac/menu_permission', 14 | method: 'get', 15 | params: { 16 | menuPermissionId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_rbac/menu_permission', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_rbac/menu_permission', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (menuPermissionId) { 38 | return request({ 39 | url: '/mall4cloud_rbac/menu_permission', 40 | method: 'delete', 41 | params: { 42 | menuPermissionId 43 | } 44 | }) 45 | } 46 | 47 | export function menuPermissionsList () { 48 | return request({ 49 | url: '/mall4cloud_rbac/menu_permission/list', 50 | method: 'get' 51 | }) 52 | } 53 | -------------------------------------------------------------------------------- /src/api/product/brand.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_product/platform/brand/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (brandId) { 12 | return request({ 13 | url: '/mall4cloud_product/platform/brand', 14 | method: 'get', 15 | params: { 16 | brandId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_product/platform/brand', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_product/platform/brand', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (brandId) { 38 | return request({ 39 | url: '/mall4cloud_product/platform/brand', 40 | method: 'delete', 41 | params: { 42 | brandId 43 | } 44 | }) 45 | } 46 | 47 | // 更新品牌状态(启用或禁用) 48 | export function enableOrDisable (data) { 49 | return request({ 50 | url: '/mall4cloud_product/platform/brand/update_brand_status', 51 | method: 'put', 52 | data 53 | }) 54 | } 55 | -------------------------------------------------------------------------------- /src/icons/svg/language.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/svg/promotion.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | -------------------------------------------------------------------------------- /src/icons/svg/product.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | -------------------------------------------------------------------------------- /src/icons/svg/eye-open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lang/coupon/coupon/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | couponId: 'coupon id', 3 | shopId: 'shop id', 4 | couponName: 'coupon name', 5 | subTitle: 'coupon sub title', 6 | couponType: 'coupon type', 7 | suitableProdType: 'suitable prod type', 8 | getWay: 'get way', 9 | ways1: 'User pickup', 10 | ways2: 'Distributed in stores', 11 | validTimeType: 'valid time type', 12 | cashCondition: 'cash condition', 13 | reduceAmount: 'reduce amount', 14 | couponDiscount: 'coupon discount', 15 | startTime: 'start time', 16 | endTime: 'end time', 17 | afterReceiveDays: 'after receive days', 18 | validDays: 'valid days', 19 | totalStock: 'total stock', 20 | stocks: 'stocks', 21 | limitNum: 'limit num', 22 | status: 'overdue status', 23 | putonStatus: 'status', 24 | version: 'version', 25 | selectCoupons: 'Select coupons', 26 | couponDscription: 'Coupon description', 27 | couponUpperLimit: 'Coupon upper limit', 28 | platformDistribution: 'Platform distribution', 29 | userClaim: 'User claim', 30 | receiveDirectly: 'Receive directly', 31 | systemIssue: 'System issue', 32 | couponStatus: 'Coupon status', 33 | cashCoupon: 'Cash Coupon', 34 | discountVoucher: 'Discount Voucher', 35 | coinCertificate: 'Coin Certificate', 36 | reduce: 'Reduce', 37 | full: 'Full ' 38 | } 39 | -------------------------------------------------------------------------------- /src/lang/rbac/web-config/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | chinese: 'CN', 3 | english: 'EN', 4 | platformSideConfiguration: 'Platform side configuration', 5 | merchantSideConfiguration: 'Merchant side configuration', 6 | supplierSideConfiguration: 'Supplier side configuration', 7 | pcConfiguration: 'Pc configuration', 8 | h5Configuration: 'H5 configuration', 9 | stationConfiguration: 'Stores configuration', 10 | open: 'Open', 11 | close: 'Close', 12 | determine: 'determine', 13 | cancellation: 'cancellation', 14 | loginLogo: 'Login logo', 15 | logo: 'Logo', 16 | loginBg: 'Login background', 17 | bsCopyright: 'Copyright', 18 | bsTitleContent: 'Title content', 19 | bsTitleImg: 'Title img', 20 | bsMenuTitleOpen: 'Menu title open', 21 | bsMenuTitleClose: 'Menu title close', 22 | pcQrcodeImg: 'Qr code img', 23 | pcCompanyName: 'Company name', 24 | pcCompanyInfo: 'Company info', 25 | pcTitleContent: 'Title content', 26 | uniTitleContent: 'Title content', 27 | pcTitleImg: 'Title img', 28 | pcLogoImgText: 'Logo img Text', 29 | pcWelcome: 'Navigation welcome message', 30 | h5Welcome: 'Mall Welcome Message', 31 | activationStatus: 'Activation status', 32 | canNotBeEmpty: 'Cannot be empty', 33 | TopIcon: 'Menu bar top icon', 34 | save: 'Save the information' 35 | } 36 | -------------------------------------------------------------------------------- /src/lang/live/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | liveRoom: { 3 | roomName: 'Live room name', 4 | view: 'View', 5 | viewLRoomInfo: 'View live room information', 6 | anchorName: 'Anchor Name', 7 | liveTime: 'Time of live broadcast', 8 | liveBackgroundImage: 'Live background image', 9 | prod: 'Live Prod', 10 | anchorSharingPicture: 'Anchor sharing picture', 11 | liveCoverImage: 'Live cover image', 12 | anchorNickname: 'Anchor nickname', 13 | anchorMobile: 'Anchor Mobile', 14 | liveRoomStatus: 'Live room status', 15 | whetherToTop: 'Whether to top', 16 | liveBroadcastTime: 'Broadcast time', 17 | live: 'Live', 18 | over: 'over', 19 | LiveStartTime: 'Live broadcast start time', 20 | LiveOverTime: 'Live broadcast end time', 21 | suspend: 'Time out', 22 | notPinned: 'Not pinned', 23 | pinned: 'Pinned', 24 | top: 'Top', 25 | cancelTopping: 'Cancel topping', 26 | violationOffShelf: 'Violation off shelf', 27 | reasonForOffline: 'Offline reason', 28 | offlineReasonTip1: 'The reason for going offline cannot exceed 100 words', 29 | offlineReasonTip: 'Offline reason cannot be empty', 30 | offlineTip: 'Are you sure to offline activity [ACTIVITYNAME]? If yes, please fill in the reason for offline', 31 | tips: 'Tips' 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/layout/components/Sidebar/main-sidebar-sub-menu.vue: -------------------------------------------------------------------------------- 1 | 2 | 11 | 28 | 29 | 41 | 53 | -------------------------------------------------------------------------------- /src/api/delivery/transport.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_delivery/m/transport/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (transportId) { 12 | return request({ 13 | url: '/mall4cloud_delivery/m/transport', 14 | method: 'get', 15 | params: { 16 | transportId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_delivery/m/transport', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_delivery/m/transport', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteById (transportId) { 38 | return request({ 39 | url: '/mall4cloud_delivery/m/transport', 40 | method: 'delete', 41 | params: { 42 | transportId 43 | } 44 | }) 45 | } 46 | 47 | export function listArea () { 48 | return request({ 49 | url: '/mall4cloud_delivery/m/area/list', 50 | method: 'get', 51 | params: {} 52 | }) 53 | } 54 | 55 | export function listAreaInfo () { 56 | return request({ 57 | url: '/mall4cloud_delivery/m/area/areaListInfo', 58 | method: 'get', 59 | params: {} 60 | }) 61 | } 62 | -------------------------------------------------------------------------------- /src/utils/excelRequest.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import { getToken } from '@/utils/auth' 3 | 4 | // create an axios instance 5 | const service = axios.create({ 6 | baseURL: import.meta.env.VITE_APP_BASE_API, // url = base url + request url 7 | responseType: 'blob', 8 | // withCredentials: true, // send cookies when cross-domain requests 9 | timeout: 500000 // request timeout 10 | }) 11 | 12 | // request interceptor 13 | service.interceptors.request.use( 14 | config => { 15 | const token = useUserStore().token 16 | // do something before request is sent 17 | if (token) { 18 | config.headers.Authorization = getToken() 19 | } 20 | return config 21 | }, 22 | error => { 23 | // do something with request error 24 | // eslint-disable-next-line no-console 25 | console.log(error) // for debug 26 | return Promise.reject(error) 27 | } 28 | ) 29 | 30 | // response interceptor 31 | service.interceptors.response.use( 32 | /** 33 | * If you want to get http information such as headers or status 34 | * Please return response => response 35 | */ 36 | 37 | /** 38 | * Determine the request status by custom code 39 | * Here is just an example 40 | * You can also judge the status by HTTP Status Code 41 | */ 42 | response => { 43 | return response.data 44 | } 45 | ) 46 | 47 | export default service 48 | -------------------------------------------------------------------------------- /src/api/rbac/menu.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_rbac/menu/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (menuId) { 12 | return request({ 13 | url: '/mall4cloud_rbac/menu', 14 | method: 'get', 15 | params: { 16 | menuId 17 | } 18 | }) 19 | } 20 | 21 | export function save (data) { 22 | return request({ 23 | url: '/mall4cloud_rbac/menu', 24 | method: 'post', 25 | data 26 | }) 27 | } 28 | 29 | export function update (data) { 30 | return request({ 31 | url: '/mall4cloud_rbac/menu', 32 | method: 'put', 33 | data 34 | }) 35 | } 36 | 37 | export function deleteByIdAndSysType (menuId, sysType) { 38 | return request({ 39 | url: '/mall4cloud_rbac/menu', 40 | method: 'delete', 41 | params: { 42 | menuId, sysType 43 | } 44 | }) 45 | } 46 | 47 | export function menuList (searchParam) { 48 | return request({ 49 | url: '/mall4cloud_rbac/menu/route', 50 | method: 'get', 51 | params: searchParam 52 | }) 53 | } 54 | 55 | export function listWithPermissions () { 56 | return request({ 57 | url: '/mall4cloud_rbac/menu/list_with_permissions', 58 | method: 'get' 59 | }) 60 | } 61 | 62 | export function listMenuIds () { 63 | return request({ 64 | url: '/mall4cloud_rbac/menu/list_menu_ids', 65 | method: 'get' 66 | }) 67 | } 68 | -------------------------------------------------------------------------------- /src/lang/seckill/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | actName: 'Activity Name', 3 | maxNum: 'Limit number of purchases', 4 | actStartTime: 'Activity start time', 5 | selectedLot: 'Selected lot', 6 | maxCancelTime: 'Order cancellation time (minutes)', 7 | offViol: 'Offending offline', 8 | status: 'Status', 9 | buyer: 'buyer', 10 | activTime: 'Activity time', 11 | selectDate: 'Select date', 12 | inventory: 'inventory', 13 | product: 'product', 14 | unlimited: 'unlimited', 15 | makeSurateTheAct: 'OK to make the activity expire?', 16 | purcPerPerson: 'Limit per person', 17 | cancelTheOrder: 'Order cancellation', 18 | unpaidnutes: 'minutes unpaid order, order cancelled', 19 | warning: 'Warning: seconds are in separate inventory, please arrange reasonably', 20 | price: 'Price ($)', 21 | exisocks: 'Existing stock', 22 | pleaheyTime: 'Please choose the event time', 23 | timeCanEmpty: 'Time cannot be empty', 24 | evenBeEmpty: 'Activity name must not be empty', 25 | close: 'close', 26 | invalidated: 'Invalidated', 27 | open: 'open', 28 | theOrionEmpty: 'Order cancellation time must not be empty', 29 | commoBeEmpty: 'The price of the product cannot be empty', 30 | commodiBeEmpty: 'Product inventory cannot be empty', 31 | enableMustOne: 'Please enable at least one sku', 32 | pleaSenProc: 'Please select the active product', 33 | openPurchaseLimit: 'Open Purchase Limit', 34 | invalidActivity: 'Invalid activity', 35 | canBePurcPer: 'per person can buy' 36 | } 37 | -------------------------------------------------------------------------------- /src/lang/delivery/transport/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: '模板名称', 3 | query: '查询', 4 | type: '模板类型', 5 | buyerPrice: '买家承担运费', 6 | shopPrice: '卖家包邮', 7 | setShopPrice: '设置包邮条件', 8 | chargePrice: '收费方式', 9 | byCount: '按件数', 10 | byWeight: '按重量', 11 | byVolume: '按体积', 12 | distributableArea: '可配送区域', 13 | allRegions: '所有地区', 14 | addPrice: '点击添加地区和运费', 15 | freePostage: '指定条件免邮费', 16 | selArea: '指定区域', 17 | selCity: '请选择指定包邮城市', 18 | fullPieces: '满件/重量/体积', 19 | fullAmount: '满金额', 20 | firstPiece: '首件(个)', 21 | transportationCost: '运费(元)', 22 | continuationPiece: '续件(个)', 23 | continuationCost: '续费(元)', 24 | firstWeight: '首重(kg)', 25 | continuedWeight: '续重(kg)', 26 | firstVolume: '首体积(m³)', 27 | continuedVolume: '续体积(m³)', 28 | freeShippCondi: '包邮条件', 29 | pwv: '件/重量/体积', 30 | chooseDeliveryArea: '选择配送区域', 31 | templateNameCannotBeEmpty: '模板名称不能为空', 32 | pleaseWriteInfo: '请填写模板信息', 33 | pleaseSelectADeliveryArea: '请选择可配送区域', 34 | deliveryArea: '配送区域', 35 | addAreaAndShipping: '点击添加可配送的区域和运费', 36 | freeShippingOnSpecifiedConditions: '指定条件包邮', 37 | pleaseSelectTheDesignatedShippingCity: '请选择指定包邮城市', 38 | clickToAddTheSpecifiedShippingConditions: '点击添加指定包邮条件', 39 | setRegionalConditions: '请设置指定区域包邮条件', 40 | shippinngs: '运费设置', 41 | shippingtBeEmpty: '运费模板不能为空', 42 | freeShipping: '包邮', 43 | further: '且', 44 | full: '满', 45 | dollar: '元', 46 | freeShiullAmount: '满金额包邮', 47 | freeippingR: '元金额包邮', 48 | pwvFree: '件/重量/体积包邮' 49 | } 50 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import { setupStore } from '@/stores' 3 | import App from './App.vue' 4 | import router from '@/router' 5 | // i18n 6 | import { setupI18n } from '@/lang' 7 | import 'virtual:svg-icons-register' 8 | import svgIcon from '@/icons/svg-icon.vue' 9 | import * as ElementPlusIconsVue from '@element-plus/icons-vue' 10 | import ElementPlus from 'element-plus' 11 | import 'element-plus/dist/index.css' 12 | 13 | // import 'default-passive-events' 14 | // 全局样式 15 | import '@/styles/index.scss' 16 | // 权限路由、菜单 17 | import '@/permission.js' 18 | // 自定义指令 19 | import { setupDirective } from '@/directive' 20 | import moment from 'moment' 21 | 22 | // element-plus 图标 23 | const app = createApp(App) 24 | for (const [key, component] of Object.entries( 25 | ElementPlusIconsVue)) { 26 | app.component(key, component) 27 | } 28 | 29 | // i18n 30 | app.use(setupI18n) 31 | // router 32 | app.use(router) 33 | // 状态管理 34 | setupStore(app) 35 | // 注册指令(directive) 36 | setupDirective(app) 37 | 38 | // svg 39 | app.component('SvgIcon', svgIcon) 40 | 41 | app.mount('#app') 42 | 43 | // element-plus 44 | app.use(ElementPlus) 45 | 46 | // 自定义moment(js时间组件) 47 | moment.locale('zh-cn', { 48 | longDateFormat: { 49 | LT: 'HH:mm', 50 | LTS: 'HH:mm:ss', 51 | L: 'YYYY-MM-DD', 52 | LL: 'YYYY-MM-DD HH:mm:ss' 53 | }, 54 | week: { 55 | // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 56 | dow: 1, // 星期一, 是一个星期的第一天 57 | doy: 4 // 1月4日所在的的一周是一年的第一周 58 | } 59 | }) 60 | -------------------------------------------------------------------------------- /src/stores/modules/web-config.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | export const useWebConfigStore = defineStore('webConfigStore', { 3 | state: () => { 4 | return { 5 | webConfig: { 6 | loginLogoImg: null, 7 | loginBgImg: null, 8 | copyrightCn: null, 9 | copyrightEn: null, 10 | titleContentCn: null, 11 | titleContentEn: null, 12 | titleImg: null, 13 | bsMenuTitleOpenCn: null, 14 | bsMenuTitleOpenEn: null, 15 | bsMenuTitleCloseCn: null, 16 | bsMenuTitleCloseEn: null 17 | } 18 | } 19 | }, 20 | actions: { 21 | addData (webConfigDataForm) { 22 | localStorage.setItem('cloudPlatformWebConfigData', JSON.stringify(webConfigDataForm || '{}')) 23 | this.webConfig = webConfigDataForm 24 | const lang = localStorage.getItem('cloudLang') 25 | if (lang !== 'en') { 26 | document.title = webConfigDataForm.titleContentCn || 'Mall4j白洞版-平台端' 27 | } else { 28 | document.title = webConfigDataForm.titleContentEn || 'Mall4j White hole version Supplier side' 29 | } 30 | 31 | let facicon = document.querySelector('link[rel="icon"]') 32 | if (facicon !== null) { 33 | facicon.href = webConfigDataForm.titleImg 34 | } else { 35 | facicon = document.createElement('link') 36 | facicon.rel = 'icon' 37 | facicon.href = webConfigDataForm.titleImg 38 | document.head.appendChild(facicon) 39 | } 40 | } 41 | } 42 | }) 43 | -------------------------------------------------------------------------------- /src/lang/chat/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | userName: '用户名', 3 | official: '官方', 4 | stores: '店铺', 5 | clickToLoadMore: '点击加载更多', 6 | mallCustomerService: '商城客服', 7 | sendLink: '发送链接', 8 | send: '发送', 9 | inquiring: '正在查询', 10 | myOrders: '我的订单', 11 | recentlyViewed: '最近浏览', 12 | orderNumber: '订单号', 13 | loading: '加载中', 14 | noMore: '没有更多了', 15 | read: '已读', 16 | unRead: '未读', 17 | noRecord: '暂无记录', 18 | customerOffline: '当前客服不在线', 19 | loginOtherSide: '用户在别处登陆,请刷新页面', 20 | reLogin: '无法获取用户信息,请重新登录', 21 | sendOrderNumber: '发送订单号', 22 | pleaseLoginAgain: '账号已下线,请重新登录', 23 | paymentAmount: '支付金额', 24 | onlineCustomerService: '在线客服', 25 | selectOnlineCustomerService: '选择在线的其他客服', 26 | productLinks: '商品链接', 27 | none: '无', 28 | image: '图片', 29 | pleaseSelectAcustomerService: '请选择一个客服转接', 30 | messageBox: '消息盒子', 31 | pendingPayment: '待支付', 32 | pendingDelivery: '待发货', 33 | pendingReceipt: '待收货', 34 | pendinEvaluation: '待评价', 35 | evaluated: '已评价', 36 | shipped: '已发货', 37 | completed: '已完成', 38 | canceled: '已取消', 39 | sorryYouHaveBeenDisconnected: '对不起您已断开连接,正在重连', 40 | notYourResponsibility: '不是你负责的客户', 41 | transferToCustomerService: '转接客服', 42 | transferTips: '可设置多个客服,在后台[系统一管理员列表]添加有客服角色权限的账号,有其他客服账号在线时可进行转接。', 43 | connetBroken: '连接已断开,请刷新页面重试', 44 | otherParIsNoOL: '对方不在线', 45 | idIsLoginInElse: '账户已在别处登录', 46 | notification: '通知', 47 | haveANewUnreadMessage: '你有新的未读消息', 48 | tips: '提示', 49 | confirm: '确认', 50 | cancel: '取消' 51 | } 52 | -------------------------------------------------------------------------------- /src/components/img-show/index.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 73 | 74 | 81 | -------------------------------------------------------------------------------- /src/components/picture-preview/index.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 41 | 42 | 73 | -------------------------------------------------------------------------------- /src/api/product/category.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 获取平台所有的分类信息 4 | export function categoryPage () { 5 | return request({ 6 | url: '/mall4cloud_product/admin/category/platform_categories', 7 | method: 'get', 8 | params: {} 9 | }) 10 | } 11 | 12 | // 获取店铺所有的分类信息 13 | export function shopCategoryPage () { 14 | return request({ 15 | url: '/mall4cloud_product/admin/category/shop_categories', 16 | method: 'get', 17 | params: {} 18 | }) 19 | } 20 | 21 | // 获取店铺中的销售属性 22 | export function getShopAttrs () { 23 | return request({ 24 | url: '/mall4cloud_product/admin/attr/get_shop_attrs', 25 | method: 'get', 26 | params: {} 27 | }) 28 | } 29 | 30 | export function get (categoryId) { 31 | return request({ 32 | url: '/mall4cloud_product/admin/category', 33 | method: 'get', 34 | params: { 35 | categoryId 36 | } 37 | }) 38 | } 39 | 40 | export function save (data) { 41 | return request({ 42 | url: '/mall4cloud_product/admin/category', 43 | method: 'post', 44 | data 45 | }) 46 | } 47 | 48 | export function update (data) { 49 | return request({ 50 | url: '/mall4cloud_product/admin/category', 51 | method: 'put', 52 | data 53 | }) 54 | } 55 | 56 | export function deleteById (categoryId) { 57 | return request({ 58 | url: '/mall4cloud_product/admin/category', 59 | method: 'delete', 60 | params: { 61 | categoryId 62 | } 63 | }) 64 | } 65 | 66 | export function enableOrDisable (data) { 67 | return request({ 68 | url: '/mall4cloud_product/admin/category/category_enable_or_disable', 69 | method: 'put', 70 | data 71 | }) 72 | } 73 | -------------------------------------------------------------------------------- /src/components/Verifition/utils/util.js: -------------------------------------------------------------------------------- 1 | export function resetSize (vm) { 2 | let img_width, img_height, bar_width, bar_height // 图片的宽度、高度,移动条的宽度、高度 3 | 4 | const parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth 5 | const parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight 6 | if (vm.imgSize.width.indexOf('%') != -1) { 7 | img_width = parseInt(vm.imgSize.width) / 100 * parentWidth + 'px' 8 | } else { 9 | img_width = vm.imgSize.width 10 | } 11 | 12 | if (vm.imgSize.height.indexOf('%') != -1) { 13 | img_height = parseInt(vm.imgSize.height) / 100 * parentHeight + 'px' 14 | } else { 15 | img_height = vm.imgSize.height 16 | } 17 | 18 | if (vm.barSize.width.indexOf('%') != -1) { 19 | bar_width = parseInt(vm.barSize.width) / 100 * parentWidth + 'px' 20 | } else { 21 | bar_width = vm.barSize.width 22 | } 23 | 24 | if (vm.barSize.height.indexOf('%') != -1) { 25 | bar_height = parseInt(vm.barSize.height) / 100 * parentHeight + 'px' 26 | } else { 27 | bar_height = vm.barSize.height 28 | } 29 | 30 | return { imgWidth: img_width, imgHeight: img_height, barWidth: bar_width, barHeight: bar_height } 31 | } 32 | 33 | export const _code_chars = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 34 | export const _code_color1 = ['#fffff0', '#f0ffff', '#f0fff0', '#fff0f0'] 35 | export const _code_color2 = ['#FF0033', '#006699', '#993366', '#FF9900', '#66CC66', '#FF33CC'] 36 | -------------------------------------------------------------------------------- /src/api/product/list.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function page (pageParam) { 4 | return request({ 5 | url: '/mall4cloud_search/p/search/page', 6 | method: 'get', 7 | params: pageParam 8 | }) 9 | } 10 | 11 | export function get (spuId) { 12 | return request({ 13 | url: '/mall4cloud_product/admin/spu', 14 | method: 'get', 15 | params: { 16 | spuId 17 | } 18 | }) 19 | } 20 | 21 | // 删除 22 | export function deleteById (spuId) { 23 | return request({ 24 | url: '/mall4cloud_product/admin/spu', 25 | method: 'delete', 26 | params: { 27 | spuId 28 | } 29 | }) 30 | } 31 | 32 | export function updateProdStatus (data) { 33 | return request({ 34 | url: '/mall4cloud_product/m/spu/prod_status', 35 | method: 'put', 36 | data 37 | }) 38 | } 39 | 40 | export function updatePartProdStatus (data) { 41 | return request({ 42 | url: '/mall4cloud_product/m/spu/update_spu_data', 43 | method: 'put', 44 | data 45 | }) 46 | } 47 | 48 | // 下线活动 49 | export function onOrOffTheShelf (data) { 50 | return request({ 51 | url: '/mall4cloud_product/admin/product_offline_handle_event/offline', 52 | method: 'POST', 53 | data 54 | }) 55 | } 56 | 57 | // 获取下线活动最新详情 58 | export function getOfflineDetailByProdId (prodId) { 59 | return request({ 60 | url: `/mall4cloud_product/admin/product_offline_handle_event/get_offline_handle_event_by_prodId/${prodId}`, 61 | method: 'GET' 62 | }) 63 | } 64 | 65 | // 审核 66 | export function examineProdOnShelfApply (data) { 67 | return request({ 68 | url: '/mall4cloud_product/admin/product_offline_handle_event/spu_audit', 69 | method: 'POST', 70 | data 71 | }) 72 | } 73 | -------------------------------------------------------------------------------- /src/api/biz/oss.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | export function ossInfo (fileNum) { 4 | return request({ 5 | url: '/mall4cloud_biz/oss/info', 6 | method: 'get', 7 | params: { fileNum } 8 | }) 9 | } 10 | 11 | export function pageFileGroup () { 12 | return request({ 13 | url: '/mall4cloud_biz/m/attach_file_group/list', 14 | method: 'get' 15 | }) 16 | } 17 | 18 | export function getFileGroup (param) { 19 | return request({ 20 | url: '/mall4cloud_biz/m/attach_file_group', 21 | method: 'get', 22 | params: param 23 | }) 24 | } 25 | 26 | export function saveFileGroup (data) { 27 | return request({ 28 | url: '/mall4cloud_biz/m/attach_file_group', 29 | method: 'post', 30 | data 31 | }) 32 | } 33 | 34 | export function updateFileGroup (data) { 35 | return request({ 36 | url: '/mall4cloud_biz/m/attach_file_group', 37 | method: 'put', 38 | data 39 | }) 40 | } 41 | 42 | export function deleteFileGroup (param) { 43 | return request({ 44 | url: '/mall4cloud_biz/m/attach_file_group', 45 | method: 'delete', 46 | params: param 47 | }) 48 | } 49 | 50 | /** 51 | * minIo上传文件 52 | * @param url 请求的url 53 | * @param data 图片文件 54 | */ 55 | export function minIoImgUpdate (url, data) { 56 | return request({ 57 | headers: { 58 | 'Content-Type': data.type 59 | }, 60 | url, 61 | method: 'put', 62 | data 63 | }) 64 | } 65 | 66 | // aliOss上传文件 67 | /** 68 | * aliOss上传文件 69 | * @param url 请求的url 70 | * @param data 图片文件+请求的参数 71 | */ 72 | export function aliImgUpdate (url, data) { 73 | return request({ 74 | headers: { 75 | 'Content-Type': data.type 76 | }, 77 | url, 78 | method: 'post', 79 | data 80 | }) 81 | } 82 | -------------------------------------------------------------------------------- /src/icons/svg/tree.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/styles/mixin.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | @mixin clearfix { 11 | &:after { 12 | content: ""; 13 | display: table; 14 | clear: both; 15 | } 16 | } 17 | 18 | @mixin scrollBar { 19 | &::-webkit-scrollbar-track-piece { 20 | background: #d3dce6; 21 | } 22 | 23 | &::-webkit-scrollbar { 24 | width: 6px; 25 | } 26 | 27 | &::-webkit-scrollbar-thumb { 28 | background: #99a9bf; 29 | border-radius: 20px; 30 | } 31 | } 32 | 33 | @mixin relative { 34 | position: relative; 35 | width: 100%; 36 | height: 100%; 37 | } 38 | 39 | @mixin pct($pct) { 40 | width: #{$pct}; 41 | position: relative; 42 | margin: 0 auto; 43 | } 44 | 45 | @mixin triangle($width, $height, $color, $direction) { 46 | $width: $width/2; 47 | $color-border-style: $height solid $color; 48 | $transparent-border-style: $width solid transparent; 49 | height: 0; 50 | width: 100px; 51 | 52 | @if $direction==up { 53 | border-bottom: $color-border-style; 54 | border-left: $transparent-border-style; 55 | border-right: $transparent-border-style; 56 | } 57 | 58 | @else if $direction==right { 59 | border-left: $color-border-style; 60 | border-top: $transparent-border-style; 61 | border-bottom: $transparent-border-style; 62 | } 63 | 64 | @else if $direction==down { 65 | border-top: $color-border-style; 66 | border-left: $transparent-border-style; 67 | border-right: $transparent-border-style; 68 | } 69 | 70 | @else if $direction==left { 71 | border-right: $color-border-style; 72 | border-top: $transparent-border-style; 73 | border-bottom: $transparent-border-style; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/api/platform/shop.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 审核列表 4 | export function page (pageParam) { 5 | return request({ 6 | url: '/mall4cloud_multishop/platform/shop_auditing/page', 7 | method: 'GET', 8 | params: pageParam 9 | }) 10 | } 11 | 12 | // 管理列表 13 | export function managePage (pageParam) { 14 | return request({ 15 | url: '/mall4cloud_multishop/platform/shop_detail/page', 16 | method: 'GET', 17 | params: pageParam 18 | }) 19 | } 20 | 21 | // 根据店铺id查询详情信息 22 | export function getDetail (shopId) { 23 | return request({ 24 | url: '/mall4cloud_multishop/platform/shop_detail/info', 25 | method: 'GET', 26 | params: { 27 | shopId 28 | } 29 | }) 30 | } 31 | 32 | // 校验店铺名 33 | export function examineShopName (param) { 34 | return request({ 35 | url: '/mall4cloud_multishop/platform/shop_detail/check_shop_name', 36 | method: 'GET', 37 | params: param 38 | }) 39 | } 40 | 41 | // 创建店铺 42 | export function creat (data) { 43 | return request({ 44 | url: '/mall4cloud_multishop/platform/shop_detail', 45 | method: 'POST', 46 | data 47 | }) 48 | } 49 | 50 | // 更新店铺 51 | export function update (data) { 52 | return request({ 53 | url: '/mall4cloud_multishop/platform/shop_detail/update_shop', 54 | method: 'PUT', 55 | data 56 | }) 57 | } 58 | 59 | // 管理-店铺详情 60 | export function getManageDetail (shopId) { 61 | return request({ 62 | url: '/mall4cloud_multishop/platform/shop_detail/info', 63 | method: 'GET', 64 | params: { 65 | shopId 66 | } 67 | }) 68 | } 69 | 70 | // 保存账号密码 71 | export function savaAccountAndPassword (data) { 72 | return request({ 73 | url: '/mall4cloud_multishop/platform/shop_detail/save_username_and_password', 74 | method: 'POST', 75 | data 76 | }) 77 | } 78 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | 3 | export const Layout = () => import('@/layout/index.vue') 4 | 5 | /** 6 | * constantRoutes 7 | * a base page that does not have permission requirements 8 | * all roles can be accessed 9 | */ 10 | export const constantRoutes = [ 11 | { path: '/', redirect: '/product/list' }, 12 | { 13 | path: '/redirect', 14 | component: Layout, 15 | hidden: true, 16 | children: [ 17 | { 18 | path: '/redirect/:path(.*)', 19 | component: () => import('@/views/common/redirect/index.vue') 20 | } 21 | ] 22 | }, 23 | { 24 | path: '/login', 25 | component: () => import('@/views/common/login/index.vue'), 26 | hidden: true 27 | }, 28 | { 29 | path: '/401', 30 | component: () => import('@/views/common/error-page/401.vue'), 31 | hidden: true 32 | }, 33 | { 34 | path: '/404', 35 | component: () => import('@/views/common/error-page/404.vue'), 36 | hidden: true 37 | } 38 | // { 39 | // path: '/', 40 | // component: Layout, 41 | // redirect: '/dashboard', 42 | // children: [ 43 | // { 44 | // path: 'dashboard', 45 | // component: () => import('@/views/common/dashboard/index.vue'), 46 | // name: 'Dashboard', 47 | // meta: { title: 'dashboard', icon: 'index', affix: true } 48 | // } 49 | // ] 50 | // } 51 | ] 52 | 53 | const router = createRouter({ 54 | history: createWebHistory(), 55 | isAddDynamicMenuRoutes: false, 56 | // 刷新时,滚动条位置还原 57 | scrollBehavior: () => ({ left: 0, top: 0 }), 58 | routes: constantRoutes 59 | }) 60 | 61 | /** 62 | * 重置路由 63 | */ 64 | export async function resetRouter () { 65 | router.options.isAddDynamicMenuRoutes = false 66 | await router.replace({ path: '/login' }) 67 | } 68 | export default router 69 | -------------------------------------------------------------------------------- /src/lang/discount/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | actName: '活动名称', 3 | status: '活动状态', 4 | turnOn: '开启', 5 | close: '关闭', 6 | subHeadings: '上级分类', 7 | shopName: '店铺名称', 8 | prodName: '商品名称', 9 | pic: '图片', 10 | viewProduct: '查看商品', 11 | startTimeCannotBeEmpty: '开始时间不能为空', 12 | endTimeCannotBeEmpty: '结束时间不能为空', 13 | endTimeIsTooSmall: '结束时间不能小于或等于开始时间', 14 | extendedEndTime: '结束时间只能延长,不能小于原本设定值', 15 | endTimeCheck: '活动结束时间不能少于当前时间', 16 | mobiltyDiagram: '移动端活动图', 17 | suggest1: '建议:移动端活动图尽量使用深色的图片', 18 | pcActivityListChart: 'PC活动列表图', 19 | pcActiviroundMap: 'PC活动背景图', 20 | activTime: '活动时间', 21 | chooseStartDate: '选择开始日期', 22 | chooseEndDate: '选择结束日期', 23 | typeOfActivity: '活动类型', 24 | fullMoneoney: '满钱减钱', 25 | fullMoneyDiscount: '满件打折', 26 | typeOfExemption: '减免类型', 27 | decreaseOestLevel: '按满足最高层级减一次', 28 | decreaeryTime: '每满一次减一次', 29 | offerContent: '优惠内容', 30 | activityLevel: '活动层级', 31 | everyFull: '每满', 32 | conditionsOfUseIn: '使用条件需要随活动层级的递增而递增', 33 | // pleaseEnteThan0: '请输入大于0的整数或者保留两位小数的正数', 34 | pleaseEnteThan0: '请输入大于等于1或保留两位小数的值', 35 | discountedPrice: '优惠金额', 36 | reducea: '减', 37 | dozen: '打', 38 | allProdsPar: '全部商品参与', 39 | participateInD: '指定商品参与', 40 | pleaseThan0: '请输入大于0的数字', 41 | pleaseEnterTheNumber010: '请输入大于0小于10的数字', 42 | maximumDiscountAmount: '优惠金额上限', 43 | applicableProductType: '适用商品类型', 44 | pleaseUploadAPicture: '请上传图片', 45 | item: '件', 46 | theConditierThan: '的使用条件需要大于', 47 | activimount: '活动条件金额必须大于优惠金额', 48 | activitytBeEmpty: '活动的使用条件不能为空', 49 | promotioBeEmpty: '活动的优惠金额不能为空', 50 | maximumDiscountAmountBig: '优惠金额上限必须大于或等于最小的优惠金额', 51 | pleaseSelectAProduct: '请选择商品', 52 | selectProd: '选择商品', 53 | eventEndanStartTime: '活动结束时间应该大于开始时间', 54 | addAct: '添加活动', 55 | conditionsOfUse: '使用条件', 56 | full: '满', 57 | fold: '折', 58 | fullDiscount: '满件打折' 59 | } 60 | -------------------------------------------------------------------------------- /src/layout/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 29 | 30 | 47 | 48 | 80 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mall4cloud-platform", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "preinstall": "npx only-allow pnpm", 8 | "dev": "vite", 9 | "build": "vite build", 10 | "preview": "vite preview", 11 | "lint": "eslint --ext .js,.vue src", 12 | "lint:fix": "eslint --fix --ext .js,.vue src", 13 | "lint:staged": "lint-staged" 14 | }, 15 | "dependencies": { 16 | "@element-plus/icons-vue": "2.1.0", 17 | "@tinymce/tinymce-vue": "5.1.0", 18 | "axios": "1.4.0", 19 | "big.js": "6.2.1", 20 | "browser-image-compression": "2.0.2", 21 | "clipboard": "2.0.11", 22 | "crypto-js": "4.1.1", 23 | "default-passive-events": "2.0.0", 24 | "dompurify": "3.0.3", 25 | "echarts": "5.4.2", 26 | "element-plus": "2.3.6", 27 | "js-base64": "3.7.5", 28 | "moment": "2.29.4", 29 | "pinia": "2.0.33", 30 | "pinia-plugin-persistedstate": "3.1.0", 31 | "qs": "6.11.2", 32 | "vue": "3.2.47", 33 | "vue-cookies": "1.8.3", 34 | "vue-draggable-next": "2.2.1", 35 | "vue-i18n": "9.2.2", 36 | "vue-router": "4.2.1", 37 | "vue-slicksort": "2.0.5", 38 | "vuedraggable": "2.24.3" 39 | }, 40 | "devDependencies": { 41 | "@iconify-json/ep": "1.1.10", 42 | "@vitejs/plugin-vue": "4.1.0", 43 | "eslint": "8.38.0", 44 | "eslint-config-standard": "17.0.0", 45 | "eslint-plugin-import": "2.25.2", 46 | "eslint-plugin-n": "15.0.0", 47 | "eslint-plugin-promise": "6.0.0", 48 | "eslint-plugin-vue": "9.14.0", 49 | "eslint-plugin-vue-scoped-css": "2.4.0", 50 | "lint-staged": "13.2.2", 51 | "sass": "1.62.1", 52 | "unplugin-auto-import": "0.16.2", 53 | "unplugin-vue-components": "0.24.1", 54 | "vite": "4.3.9", 55 | "vite-plugin-compression": "0.5.1", 56 | "vite-plugin-eslint": "1.8.1", 57 | "vite-plugin-svg-icons": "2.0.1" 58 | }, 59 | "engines": { 60 | "node": ">=16", 61 | "pnpm": ">7" 62 | }, 63 | "lint-staged": { 64 | "*.{js,vue}": [ 65 | "eslint --fix" 66 | ] 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/components/icons-select/index.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 56 | 57 | 83 | -------------------------------------------------------------------------------- /src/styles/btn.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | @import './variables.scss'; 11 | 12 | @mixin colorBtn($color) { 13 | background: $color; 14 | 15 | &:hover { 16 | color: $color; 17 | 18 | &:before, 19 | &:after { 20 | background: $color; 21 | } 22 | } 23 | } 24 | 25 | .blue-btn { 26 | @include colorBtn($blue) 27 | } 28 | 29 | .light-blue-btn { 30 | @include colorBtn($light-blue) 31 | } 32 | 33 | .red-btn { 34 | @include colorBtn($red) 35 | } 36 | 37 | .pink-btn { 38 | @include colorBtn($pink) 39 | } 40 | 41 | .green-btn { 42 | @include colorBtn($green) 43 | } 44 | 45 | .tiffany-btn { 46 | @include colorBtn($tiffany) 47 | } 48 | 49 | .yellow-btn { 50 | @include colorBtn($yellow) 51 | } 52 | 53 | .pan-btn { 54 | font-size: 14px; 55 | color: #fff; 56 | padding: 14px 36px; 57 | border-radius: 8px; 58 | border: none; 59 | outline: none; 60 | transition: 600ms ease all; 61 | position: relative; 62 | display: inline-block; 63 | 64 | &:hover { 65 | background: #fff; 66 | 67 | &:before, 68 | &:after { 69 | width: 100%; 70 | transition: 600ms ease all; 71 | } 72 | } 73 | 74 | &:before, 75 | &:after { 76 | content: ''; 77 | position: absolute; 78 | top: 0; 79 | right: 0; 80 | height: 2px; 81 | width: 0; 82 | transition: 400ms ease all; 83 | } 84 | 85 | &::after { 86 | right: inherit; 87 | top: inherit; 88 | left: 0; 89 | bottom: 0; 90 | } 91 | } 92 | 93 | .custom-button { 94 | display: inline-block; 95 | line-height: 1; 96 | white-space: nowrap; 97 | cursor: pointer; 98 | background: #fff; 99 | color: #fff; 100 | -webkit-appearance: none; 101 | text-align: center; 102 | box-sizing: border-box; 103 | outline: 0; 104 | margin: 0; 105 | padding: 10px 15px; 106 | font-size: 14px; 107 | border-radius: 4px; 108 | } 109 | -------------------------------------------------------------------------------- /src/utils/datetime.js: -------------------------------------------------------------------------------- 1 | // 日期格式化 2 | export function getParseTime (time = new Date().getTime(), pattern) { 3 | if (arguments.length === 0 || !time) { 4 | return null 5 | } 6 | const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' 7 | let date 8 | if (typeof time === 'object') { 9 | date = time 10 | } else { 11 | if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { 12 | time = parseInt(time) 13 | } else if (typeof time === 'string') { 14 | time = time.replace(/-/gm, '/').replace('T', ' ').replace(/\.[\d]{3}/gm, '') 15 | } 16 | if ((typeof time === 'number') && (time.toString().length === 10)) { 17 | time = time * 1000 18 | } 19 | date = new Date(time) 20 | } 21 | const formatObj = { 22 | y: date.getFullYear(), 23 | m: date.getMonth() + 1, 24 | d: date.getDate(), 25 | h: date.getHours(), 26 | i: date.getMinutes(), 27 | s: date.getSeconds(), 28 | a: date.getDay() 29 | } 30 | const timeStr = format.replace(/{([ymdhisa])+}/g, (result, key) => { 31 | let value = formatObj[key] 32 | // Note: getDay() returns 0 on Sunday 33 | if (key === 'a') { 34 | return ['日', '一', '二', '三', '四', '五', '六'][value] 35 | } 36 | if (result.length > 0 && value < 10) { 37 | value = '0' + value 38 | } 39 | return value || 0 40 | }) 41 | return timeStr 42 | } 43 | 44 | export function getDateTimeRange () { 45 | let time = new Date().getTime() 46 | let currentHour = parseInt(getParseTime(time, '{h}')) 47 | let currentMinute = parseInt(getParseTime(time, '{i}')) 48 | if (currentMinute >= 30) { 49 | if (currentHour === 23) { 50 | currentHour = '00' 51 | currentMinute = ':00' 52 | time += 24 * 60 * 60 * 1000 53 | } else { 54 | currentHour = currentHour + 1 55 | currentMinute = ':00' 56 | } 57 | } else { 58 | currentMinute = ':30' 59 | } 60 | currentHour = currentHour < 10 ? '0' + currentHour : currentHour + '' 61 | const currentTime = currentHour + currentMinute 62 | return { 63 | startTime: getParseTime(time, '{y}-{m}-{d}'), 64 | endTime: getParseTime(time + 24 * 60 * 60 * 1000, '{y}-{m}-{d}'), 65 | currentTime 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/lang/chat/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | clickToLoadMore: 'Click to load more', 3 | mallCustomerService: 'Mall Customer Service', 4 | sendLink: 'Send link', 5 | send: 'Send', 6 | inquiring: 'Inquiring', 7 | myOrders: 'My Orders', 8 | recentlyViewed: 'Recently Viewed', 9 | orderNumber: 'Order number', 10 | loading: 'Loading', 11 | noMore: 'No more', 12 | read: 'Read', 13 | unRead: 'Un read', 14 | noRecord: 'No record', 15 | customerOffline: 'Current customer service is not online', 16 | loginOtherSide: 'The user is logged in elsewhere, please refresh the page', 17 | sendOrderNumber: 'Send orderNumber', 18 | pleaseLoginAgain: 'Account is offline, please login again', 19 | paymentAmount: 'Payment amount', 20 | onlineCustomerService: 'Online Customer Service', 21 | selectOnlineCustomerService: 'Select other customer service online', 22 | productLinks: 'Product links', 23 | none: 'None', 24 | image: 'Image', 25 | pleaseSelectAcustomerService: 'Please select a customer service transfer', 26 | messageBox: 'Message box', 27 | pendingPayment: 'Pending Payment', 28 | pendingDelivery: 'Pending Delivery', 29 | pendingReceipt: 'Pending Receipt', 30 | pendinEvaluation: 'Pending Evaluation', 31 | grouping: 'Grouping', 32 | evaluated: 'Evaluated', 33 | shipped: 'Shipped', 34 | completed: 'Completed', 35 | canceled: 'Canceled', 36 | sorryYouHaveBeenDisconnected: 'Sorry you have been disconnected, reconnecting now', 37 | notYourResponsibility: 'Customers who are not your responsibility', 38 | transferToCustomerService: 'Transfer to Customer Service', 39 | transferTips: 'Multiple customer service can be set up, add accounts with customer service role privileges in the background [system a administrator list], and transfer when there are other customer service accounts online.', 40 | connetBroken: 'The connection has been broken, please refresh the page and try again', 41 | otherParIsNoOL: 'The other party is not online', 42 | idIsLoginInElse: 'The account is already logged in elsewhere', 43 | notification: 'Notification', 44 | haveANewUnreadMessage: 'Have a new unreadMessage', 45 | tips: 'Tips', 46 | confirm: 'Confirm', 47 | cancel: 'Cancel' 48 | } 49 | -------------------------------------------------------------------------------- /src/permission.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. 3 | * 4 | * https://www.mall4j.com/ 5 | * 6 | * 未经允许,不可做商业用途! 7 | * 8 | * 版权所有,侵权必究! 9 | */ 10 | import router from './router' 11 | import { getToken } from '@/utils/auth' // get token from cookie 12 | import { useUserStore } from '@/stores/modules/user.js' 13 | import { usePermissionStore } from '@/stores/modules/permission.js' 14 | 15 | const whiteList = ['/login'] // no redirect whitelist 16 | router.beforeEach(async (to, from, next) => { 17 | const userStore = useUserStore() 18 | const permissionStore = usePermissionStore() 19 | const hasToken = getToken() 20 | if (hasToken) { 21 | if (to.path === '/login') { 22 | next({ path: '/' }) 23 | } else { 24 | const hasRoles = userStore.roles && userStore.roles.length > 0 25 | if (hasRoles) { 26 | next() 27 | } else { 28 | try { 29 | // 获取用户信息 30 | const userInfo = await userStore.getUserInfo() 31 | // 获取权限信息 32 | await userStore.listPermissions() 33 | let menuIds = [] 34 | if (!userInfo.isAdmin) { 35 | // 获取菜单信息 36 | menuIds = await userStore.listMenuIds() 37 | } 38 | const accessRoutes = await permissionStore.generateRoutes(menuIds) 39 | accessRoutes.forEach(route => { 40 | if (route.path[0] !== '/') { 41 | route.path = `/${route.path}` 42 | } 43 | router.addRoute(route) 44 | }) 45 | // eslint-disable-next-line require-atomic-updates 46 | router.addRoute({ path: '/:pathMatch(.*)*', redirect: { path: '/404' } }) 47 | router.options.isAddDynamicMenuRoutes = true 48 | next({ ...to, replace: true }) 49 | } catch (error) { 50 | // eslint-disable-next-line no-console 51 | console.log('beforeEach error', error) 52 | await userStore.resetToken() 53 | next(`/login?redirect=${to.path}`) 54 | } 55 | } 56 | } 57 | } else { 58 | if (whiteList.indexOf(to.path) !== -1) { 59 | next() 60 | } else { 61 | next(`/login?redirect=${to.path}`) 62 | } 63 | } 64 | }) 65 | -------------------------------------------------------------------------------- /src/utils/addr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 通过地址id获取省市区的地址名 3 | * @param {*} s 4 | */ 5 | export function areaNameList (areaData, cityList) { 6 | // 插入数据 7 | cityList.forEach(element => { 8 | const city = element 9 | // 省 10 | for (let i = 0; i < areaData.length; i++) { 11 | // 市 12 | const cityIndex = areaData[i].areaIds.indexOf(city.parentId) 13 | if (cityIndex > -1) { 14 | // 区 15 | const areaIndex = areaData[i].areas[cityIndex].areaIds.indexOf(city.areaId) 16 | if (areaIndex > -1) { 17 | areaData[i].areas[cityIndex].areas[areaIndex].check = true 18 | } 19 | } 20 | } 21 | }) 22 | // 获取区域名 23 | let addrNameList = [] 24 | // 城市名 25 | let cityNameList = [] 26 | // 地区名 27 | let areaNameList = [] 28 | areaData.forEach(province => { 29 | const cityList = [] 30 | let cityAll = true 31 | // 市 32 | province.areas.forEach(city => { 33 | const areaList = [] 34 | let areaAll = true 35 | // 区 36 | city.areas.forEach(area => { 37 | if (area.check) { 38 | areaList.push(area.areaName) 39 | } else if (!areaAll) { 40 | // console.log(1) 41 | } else { 42 | areaAll = false 43 | cityAll = false 44 | } 45 | }) 46 | // 区 END 47 | if (areaAll) { 48 | // 该市下的区已全部勾选,则添加城市名 49 | cityList.push(city.areaName) 50 | city.check = true 51 | } else if (areaList.length > 0) { 52 | // 仅勾选部分区,把勾选的区添加到地区名名的数组中 53 | areaNameList = areaNameList.concat(areaList) 54 | } 55 | if (!city.check) { 56 | cityAll = false 57 | } 58 | }) 59 | // 市 END 60 | if (cityAll) { 61 | // 所有的城市都已勾选,则添加省名 62 | addrNameList.push(province.areaName) 63 | province.check = true 64 | } else if (cityList.length > 0) { 65 | // 只勾选部分城市,把勾选的城市添加到城市名的数组中 66 | cityNameList = cityNameList.concat(cityList) 67 | } 68 | }) 69 | // 拼接省->市->区 70 | if (cityNameList.length > 0) { 71 | addrNameList = addrNameList.concat(cityNameList) 72 | } 73 | if (areaNameList.length > 0) { 74 | addrNameList = addrNameList.concat(areaNameList) 75 | } 76 | return addrNameList 77 | } 78 | -------------------------------------------------------------------------------- /src/lang/user/score/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | growthSetting: '成长值获取设置', 3 | growthSwitch: '成长值开关:', 4 | perPurchase: '购买商品每消费:', 5 | rechargeGrowthValue: '充值赠送成长值', 6 | getOneGrowth: '获取一点成长值', 7 | completedOrderGet: '每完成一笔订单获取:', 8 | growth: '成长值', 9 | levelPageSet: '等级页展示设置', 10 | growthDescription: '会员权益', 11 | memberBenefitsPageDisplaySet: '会员权益页展示设置', 12 | displayContent: '展示内容:', 13 | levelPageConfiguration: '等级页展示配置', 14 | memberGrowthDescription: '会员中心成长值说明', 15 | consumptionGetGrowthCannotEmpty: '请输入正确的消费金额获取成长值', 16 | rechargeGetGrowthCannotEmpty: '充值赠送成长值不能为空', 17 | growthEarnSetting: '成长值获取设置', 18 | orderAcquisitionCannotEmpty: '请输入正确的订单获取成长值', 19 | pointsSet: '积分基础设置', 20 | pointsEarnOne: '连续签到1天可获取积分:', 21 | pointsEarnTwo: '连续签到2天可获取积分:', 22 | pointsEarnThree: '连续签到3天可获取积分:', 23 | pointsEarnFour: '连续签到4天可获取积分:', 24 | pointsEarnFive: '连续签到5天可获取积分:', 25 | pointsEarnSix: '连续签到6天可获取积分:', 26 | pointsEarnSeven: '连续签到7天可获取积分:', 27 | pointsForRegistration: '注册可获取的积分:', 28 | pointsSwitch: '购物使用积分开关:', 29 | earnOnePoint: '可获取1积分', 30 | pointsPurchase: '积分购买商品时每', 31 | pointsDeducted: '积分可抵扣1元', 32 | pointsEarnLimit: '积分获取上限', 33 | platformPercent: '全平台比例', 34 | categoryPercent: '商品分类比例', 35 | pointsUseLimit: '积分使用上限', 36 | getPercentLimit: '获取比例上限(%):', 37 | percent: '比例', 38 | usePercentLimit: '使用比例上限(%):', 39 | pointsOfRegistrationCannotEmpty: '注册积分获取不能为空', 40 | pointsOfShoppingCannotEmpty: '购物积分获取不能为空', 41 | shoppingPointsDeductedCannotEmpty: '购物积分抵扣不能为空', 42 | usePointsCannotEmpty: '使用积分上限百分比不能为零或者空', 43 | getPointsCannotEmpty: '获取积分上限百分比不能为零或者空', 44 | pointsExpirationSetting: '积分过期设置', 45 | expirationSwitch: '积分过期开关:', 46 | expiration: '积分过期时间:', 47 | year: '年', 48 | expirationDes: '配置的为最长的过期时间,即从获取积分开始,自最长的n-1年的年底会将积分清空。', 49 | expirationConfiguration: '积分过期配置', 50 | enterExpiration: '请输入过期时间', 51 | pointsDesSetting: '积分说明设置', 52 | pointsDes: '积分说明', 53 | pointsEarnSetting: '积分基础设置', 54 | otherConfiguration: '其他配置', 55 | pointsQuestionSetting: '积分常见问题设置:', 56 | pointsQusetion: '常见问题:', 57 | registerScore: '注册送积分', 58 | shopping: '购物', 59 | shoppingDeducteScore: '购物抵扣积分', 60 | scoreExpired: '积分过期', 61 | score: '积分', 62 | content: '请输入内容' 63 | } 64 | -------------------------------------------------------------------------------- /src/layout/components/AppMain.vue: -------------------------------------------------------------------------------- 1 | 10 | 40 | 41 | 53 | 54 | 88 | -------------------------------------------------------------------------------- /src/lang/user/level/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | addLevel: '添加等级', 3 | removeColumnTip: '默认等级不可移除', 4 | levelNameNotNull: '等级名称不能为空', 5 | levelConditionNotNull: '请至少选择一个等级条件', 6 | removeColumnTip2: '最多只能添加4个等级', 7 | conditionThan0: '至少选择一个等级条件', 8 | grade: '等级', 9 | ordinaryMember: '普通会员', 10 | paidMembership: '付费会员', 11 | ordinaryMemberSet: '普通会员设置', 12 | paidMembershipSet: '付费会员设置', 13 | generalConfiguration: '常规配置', 14 | noPictures: '暂无图片', 15 | off: '折', 16 | growth: '成长值', 17 | isDeleOper: '确定进行删除操作?', 18 | enterGradeName: '请输入等级名称', 19 | bgImg: '背景图片', 20 | paidMemberPrice: '付费会员价格', 21 | enterInteger: '请输入整数', 22 | timeType: '时间类型', 23 | week: '周', 24 | month: '月', 25 | season: '季', 26 | time: '时间', 27 | year: '年', 28 | requiredGrowthValue: '所需成长值', 29 | equityAllocation: '权益配置', 30 | selfFreeShipping: '自营店包邮', 31 | pointFeedbackRate: '积分回馈倍率', 32 | enterMagnification: '请输入倍率数', 33 | coupons: '优惠券', 34 | selectCoupons: '选择优惠券', 35 | etcCoupons: '等优惠券', 36 | bonusPoints: '赠送积分', 37 | discount: '折扣', 38 | discountTip1: '此处的折扣权益可以自定义适用范围', 39 | discountTip2: '此处的折扣权益整个平台的全部商品均适用,勾选之后会一并赠送给该等级的用户', 40 | discountRange: '请输入折扣范围', 41 | platform: '全平台', 42 | selfShop: '自营店', 43 | allProducts: '全部商品', 44 | categoryGoods: '分类下的商品', 45 | otherRights: '其他权益', 46 | bgImgCannotEmpty: '背景图片不能为空', 47 | selectCategory: '请选择分类', 48 | gradeNmaeCannotEmpty: '等级名称不能为空', 49 | feedback1: '积分回馈倍率必须大于1', 50 | bonus0: '赠送积分必须大于0', 51 | discountRangeValue: '折扣的取值范围为0.01-9.99', 52 | updateUserData: '更新用户数据', 53 | updateSoon: '用户等级更新后仅对新用户有效,老用户未生效,请尽快更新', 54 | growthRange: '等级成长值范围', 55 | memberDiscount: '会员折扣', 56 | someProducts: '部分商品', 57 | remove: '移除', 58 | atMost: '最多只能添加4个等级', 59 | saveFirst: '先保存上个等级才能创建新的等级', 60 | membershipLevel: '会员等级', 61 | level: '等级', 62 | levelName: '等级名称', 63 | noPic: '暂无图片', 64 | needGrowth: '购买VIP所需成长值', 65 | within: '内', 66 | vipLevel: 'VIP等级', 67 | memberType: '会员类型', 68 | userScore: '用户积分', 69 | stopRecruit: '停止招募', 70 | startRecruit: '开始招募', 71 | stopRecruitTip: '停止招募会员,现有的付费会员仍可享受权益至有效期结束,确定停止招募?', 72 | startRecruitTip: '开始招募会员后,如果要删除该等级,需要等到现有的付费会员享受权益至有效期结束,该等级下无会员后,才可以删除该等级', 73 | tips1: '会员权益不能为空', 74 | tips2: '请输入成长值' 75 | } 76 | -------------------------------------------------------------------------------- /src/icons/svg/dashboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | browser: true, 4 | es2021: true 5 | }, 6 | extends: [ 7 | 'standard', 8 | './.eslintrc-auto-import.json', 9 | 'plugin:vue/vue3-recommended', 10 | 'plugin:vue-scoped-css/vue3-recommended' 11 | ], 12 | overrides: [ 13 | ], 14 | parserOptions: { 15 | ecmaVersion: 'latest', 16 | sourceType: 'module' 17 | }, 18 | plugins: [ 19 | 'vue' 20 | ], 21 | rules: { 22 | // Possible Errors 23 | // 要求使用 let 或 const 而不是 var 24 | 'no-var': 'error', 25 | // 强制 "for" 循环中更新子句的计数器朝着正确的方向移动 26 | 'for-direction': 'error', 27 | // 强制 getter 函数中出现 return 语句 28 | 'getter-return': 'error', 29 | // 禁止在嵌套的块中出现变量声明或 function 声明 30 | 'no-inner-declarations': 'error', 31 | // 禁止由于 await 或 yield的使用而可能导致出现竞态条件的赋值 32 | 'require-atomic-updates': 'error', 33 | // console 警告 34 | 'no-console': 'warn', 35 | // 禁止出现未使用过的变量 36 | 'no-unused-vars': [ 37 | 'warn', 38 | { 39 | args: 'all', 40 | caughtErrors: 'none', 41 | ignoreRestSiblings: true, 42 | vars: 'all', 43 | // 符合规则的参数名将会忽略 44 | argsIgnorePattern: '^[rule, value, i, to, from]' 45 | } 46 | ], 47 | // 关闭名称校验 48 | 'vue/multi-word-component-names': 'off', 49 | // 非生产环境启用 debugger 50 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 51 | 52 | // Best Practices 53 | eqeqeq: 'off', 54 | 55 | // Stylistic Issues 56 | // 强制可嵌套的块的最大深度 57 | 'max-depth': ['error', 5], 58 | // 强制函数最大代码行数 59 | 'max-lines-per-function': [ 60 | 'error', 61 | { 62 | max: 150, 63 | skipBlankLines: true 64 | } 65 | ], 66 | // 强制回调函数最大嵌套深度 67 | 'max-nested-callbacks': ['error', { max: 10 }], 68 | // 强制函数定义中最多允许的参数数量 69 | 'max-params': ['error', { max: 5 }], 70 | // 强制每一行中所允许的最大语句数量 71 | 'max-statements-per-line': ['error', { max: 1 }], 72 | // 三目运算符换行 73 | 'multiline-ternary': ['error', 'never'], 74 | // 传值给组件时的使用 kebab-case 75 | 'vue/v-on-event-hyphenation': ['warn', 'always', { 76 | autofix: true, 77 | ignore: [] 78 | }], 79 | // 允许 promise.reject() 80 | 'prefer-promise-reject-errors': ['error', { 81 | allowEmptyReject: true 82 | }] 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/lang/delivery/transport/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | query: 'query', 3 | name: 'Template name', 4 | type: 'Template Type', 5 | buyerPrice: 'Buyers bear the freight', 6 | shopPrice: 'Seller postage', 7 | chargePrice: 'Way of collecting money', 8 | byCount: 'By number of pieces', 9 | byWeight: 'By weight', 10 | byVolume: 'By volume', 11 | distributableArea: 'Distributable area', 12 | allRegions: 'All regions', 13 | addPrice: 'Click to add the area and shipping cost', 14 | freePostage: 'Designated conditions free postage', 15 | selArea: 'Designated Area', 16 | selCity: 'Please select a designated postage free city', 17 | fullPieces: 'Cumulative number of pieces/weight/volume', 18 | fullAmount: 'Cantidad de consumo alcanzada', 19 | setShopPrice: 'Set postage free conditions', 20 | firstPiece: 'First piece(piece)', 21 | transportationCost: 'Transportation cost(cost)', 22 | continuationPiece: 'Continuation piece(piece)', 23 | continuationCost: 'Costo de continuación(costo)', 24 | firstWeight: 'Firest weight(kg)', 25 | continuedWeight: 'Continued weight(kg)', 26 | firstVolume: 'First volume(m³)', 27 | continuedVolume: 'Continued volume(m³)', 28 | freeShippCondi: 'Free shipping conditions', 29 | pwv: 'Pieces/weight/volume', 30 | chooseDeliveryArea: 'Select delivery area', 31 | templateNameCannotBeEmpty: 'Template name cannot be empty', 32 | pleaseWriteInfo: 'Please fill in the template information', 33 | pleaseSelectADeliveryArea: 'Please select a delivery area', 34 | addAreaAndShipping: 'Click to add a delivery area and freight', 35 | freeShippingOnSpecifiedConditions: 'Designated shipping conditions', 36 | pleaseSelectTheDesignatedShippingCity: 'Please select a designated shipping city', 37 | clickToAddTheSpecifiedShippingConditions: 'Click to add designated shipping conditions', 38 | setRegionalConditions: 'Please set up shipping conditions in a designated area', 39 | shippinngs: 'Shipping fee setting', 40 | shippingtBeEmpty: 'Shipping template cannot be empty', 41 | deliveryArea: 'Delivery area', 42 | freeShipping: ' free shipping', 43 | further: ' And ', 44 | full: 'Full ', 45 | dollar: ' dollar ', 46 | freeShiullAmount: 'Free shipping with full amount', 47 | freeippingR: '$ free shipping amount', 48 | pwvFree: 'Pieces/weight/volume Free shipping' 49 | } 50 | -------------------------------------------------------------------------------- /src/components/pagination/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 94 | 95 | 105 | -------------------------------------------------------------------------------- /src/lang/biz/notify/zh.js: -------------------------------------------------------------------------------- 1 | export default { 2 | officialAccount: '公众号', 3 | shortMessage: '短信', 4 | msgRemSet: '消息提醒设置', 5 | sendMsgRecord: '推送消息记录', 6 | smsSendRecord: '短信发送记录', 7 | success: '发送成功', 8 | fail: '发送失败', 9 | shopName: '店铺名称', 10 | sendTime: '发送时间', 11 | receiveName: '接收用户昵称', 12 | receivePhone: '接收手机号', 13 | sendStatus: '发送状态', 14 | msgSet: '短信设置', 15 | msgType: '消息类型', 16 | selectTag: '选择标签', 17 | smsNotifyContent: '短信通知内容', 18 | notifyContent: '通知内容', 19 | notifyType: '通知类型', 20 | msgNotify: '短信通知(计费发送)', 21 | canUseNotice: '通知方式', 22 | smsTemplateCode: '短信模板code', 23 | publicTemplateCode: '公众号模板code', 24 | tagList: '标签列表', 25 | smsTip1: '新增的短信模板并不会马上生效,需要技术人员配合开发。', 26 | errorTip1: '请至少选择一种通知方式!', 27 | selTagError: '请至少选择一个标签!', 28 | errorTip2: '公众号模板code不能为空', 29 | msgNotifyFree: '短信通知', 30 | publicNotify: '公众号通知', 31 | appletMessage: '站内信通知', 32 | applet: '站内信', 33 | sendType: '发送类型', 34 | seleMsgType: '请选择消息类型', 35 | notifyContenNoNull: '通知内容不能为空', 36 | seleNotifyType: '请至少选择一种通知方式', 37 | notifyTempNoNull: '短信模板code不能为空', 38 | status: '状态', 39 | orderPay: '订单催付', 40 | paySuccNotify: '付款成功通知', 41 | refusedRefund: '商家拒绝退款', 42 | merAgreeRefund: '商家同意退款', 43 | merRefuseRefund: '商家拒绝退款', 44 | wriOffRem: '核销提醒', 45 | shipRem: '发货提醒', 46 | groupFailRem: '拼团失败提醒', 47 | groupSuccRem: '拼团成功提醒', 48 | startGroupRem: '拼团开团提醒', 49 | memUpRem: '会员升级提醒', 50 | timeoutRem: '退款临近超时提醒', 51 | register: '用户注册验证码', 52 | login: '发送登录验证码', 53 | updatePassword: '修改密码验证码', 54 | vaild: '身份验证验证码', 55 | confirmReceRem: '确认收货提醒', 56 | buyerRefundRem: '买家发起退款提醒', 57 | buyerReturnRem: '买家已退货提醒', 58 | userPaymentSuccessReminder: '用户支付成功提醒', 59 | mallTranRem: '商城交易提醒', 60 | sendToShop: '发送给商家', 61 | sendToUser: '发送给用户', 62 | sendToCustom: '自定义消息', 63 | sendToSupplier: '发送给供应商', 64 | distributionApplySuccess: '分销员申请成功提醒', 65 | productRemovalReminder: '商品下架提醒', 66 | commodityAuditResultReminder: '商品审核结果提醒', 67 | commissionCommodityChangeReminder: '代销商品变更提醒', 68 | userConfirmsReceiptNotification: '用户确认收货通知', 69 | reminderOfPendingShipment: '待发货提醒', 70 | reminderToBePurchased: '待采购提醒', 71 | reminderOfPendingRefund: '待退款提醒', 72 | reminderToNeReceived: '买家已退货提醒', 73 | marketingCampaignRemovalReminder: '营销活动下架提醒', 74 | activityAuditResultReminder: '活动审核结果提醒' 75 | } 76 | -------------------------------------------------------------------------------- /src/icons/svg/form.svg: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------