mirror of
https://gitee.com/niucloud-team/javashop.git
synced 2026-05-28 03:33:44 +00:00
Niucloud JAVA版框架1.1.0更新内容
新增
* 增加小程序展示线上版本号
* 发布小程序添加自定义版本号
* 添加后台取消小程序绑定微信公众平台授权
* 管理端核销功能
* 用户端导入微信地址功能
优化
* 装修页面时可自定义底部导航
* 小程序添加版权信息展示
* 应用菜单结构优化:取消独立营销菜单,统一在应用菜单下按分类
* 分页列表增加缓存,记录当前页信息,操作完成后,返回当前页
* 开启标签栏时对标签页面进行缓存
* 统一框架装修自定义使用底部导航数据结构
修复
* 删除表单报错
* admin首页点击未安装、已安装应用,页面跳转空白
* 修复插件云安装错误时同时显示安装失败和安装完成
商城1.0.5更新内容
新增
* 用户端添加订单开具发票功能
* 管理后台添加补开发票功能
优化
* 商品列表增加相关活动的关联展示
* 限时折扣、积分商城增加批量操作
* 积分商品,若有规格未参与积分活动,则无法购买
* 复制商品,提示语优化
修复
* 满减送活动赠品设置多件,只展示1件
* 满减送赠品未扣除库存问题
* 商品列表批量设置分类后商品分类查询不到商品的问题
* 商品标签状态已经关闭添加商品时依旧可以选择
* 商家地址库联系方式搜索无效
* 商品分类拖动排序无效
* 参与满减活动再使用优惠券,订单0元申请退款时,退款金额出现负数
* 积分商城规格值设置不参与积分兑换提交订单未拦截
* 虚拟商品核销码设置的永久有效,核销时提示商品已过期
* 订单满减送退款售后点击详情报错
* 按会员标签发放优惠券异常一直未发放
* 微信支付申请退款售后点击转账跳转404
* 订单列表输入会员编号、账号点击搜索筛选不出来内容
* 多商品组商品来源选择分组,只有一个商品分类时多商品组商品展示不正确
* 商品组件排序方式选择为价格时报错
* 图文导航选择积分商品报错
200 lines
11 KiB
Smarty
200 lines
11 KiB
Smarty
<template>
|
|
<view class="diy-group" id="componentList">
|
|
<top-tabbar
|
|
v-if="data.global && Object.keys(data.global).length && data.global.topStatusBar && data.global.topStatusBar.isShow"
|
|
:scrollBool="diyGroup.componentsScrollBool.TopTabbar" ref="topTabbarRef" :data="data.global" />
|
|
<pop-ads
|
|
v-if="data.global && Object.keys(data.global).length && data.global.popWindow && data.global.popWindow.show"
|
|
ref="popAbsRef" :data="data.global" />
|
|
<template v-for="(component, index) in data.value" :key="component.id">
|
|
<view v-show="component.componentIsShow" @click="diyStore.changeCurrentIndex(index, component)"
|
|
:class="diyGroup.getComponentClass(index,component)" :style="component.pageStyle">
|
|
<view class="relative"
|
|
:style="{ marginTop : component.margin.top < 0 ? (component.margin.top * 2) + 'rpx' : '0', marginBottom : component.margin.bottom < 0 ? (component.margin.bottom * 2) + 'rpx' : '0' }">
|
|
|
|
<!-- 装修模式下,设置负上边距后超出的内容,禁止选中设置 -->
|
|
<view v-if="diyGroup.isShowPlaceHolder(index,component)" class="absolute w-full z-1"
|
|
:style="{ height : (component.margin.top * 2 * -1) + 'rpx' }"
|
|
@click.stop="diyGroup.placeholderEvent"></view>
|
|
|
|
<template v-if="component.componentName == 'GraphicNav'">
|
|
<diy-graphic-nav :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'HorzBlank'">
|
|
<diy-horz-blank :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'HorzLine'">
|
|
<diy-horz-line :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'HotArea'">
|
|
<diy-hot-area :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'ImageAds'">
|
|
<diy-image-ads :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'MemberInfo'">
|
|
<diy-member-info :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'MemberLevel'">
|
|
<diy-member-level :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'Notice'">
|
|
<diy-notice :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'RubikCube'">
|
|
<diy-rubik-cube :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'Text'">
|
|
<diy-text :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'RichText'">
|
|
<diy-rich-text :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'ActiveCube'">
|
|
<diy-active-cube :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FloatBtn'">
|
|
<diy-float-btn :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'CarouselSearch'">
|
|
<diy-carousel-search :scrollBool="diyGroup.componentsScrollBool.CarouselSearch"
|
|
:component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'PictureShow'">
|
|
<diy-picture-show :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormSubmit'">
|
|
<diy-form-submit :component="component" :global="data.global" :index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormInput'">
|
|
<diy-form-input ref="diyFormInputRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormTextarea'">
|
|
<diy-form-textarea ref="diyFormTextareaRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormIdentity'">
|
|
<diy-form-identity ref="diyFormIdentityRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormEmail'">
|
|
<diy-form-email ref="diyFormEmailRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormMobile'">
|
|
<diy-form-mobile ref="diyFormMobileRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormWechatName'">
|
|
<diy-form-wechat-name ref="diyFormWechatNameRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormNumber'">
|
|
<diy-form-number ref="diyFormNumberRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormRadio'">
|
|
<diy-form-radio ref="diyFormRadioRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormCheckbox'">
|
|
<diy-form-checkbox ref="diyFormCheckboxRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormTable'">
|
|
<diy-form-table ref="diyFormTableRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormDate'">
|
|
<diy-form-date ref="diyFormDateRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormDateScope'">
|
|
<diy-form-date-scope ref="diyFormDateScopeRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormTime'">
|
|
<diy-form-time ref="diyFormTimeRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormTimeScope'">
|
|
<diy-form-time-scope ref="diyFormTimeScopeRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormLocation'">
|
|
<diy-form-location ref="diyFormLocationRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormAddress'">
|
|
<diy-form-address ref="diyFormAddressRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormImage'">
|
|
<diy-form-image ref="diyFormImageRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormVideo'">
|
|
<diy-form-video ref="diyFormVideoRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
<template v-if="component.componentName == 'FormFile'">
|
|
<diy-form-file ref="diyFormFileRef" :component="component" :global="data.global"
|
|
:index="index" />
|
|
</template>
|
|
{{ component }}
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<template
|
|
v-if="data.global && diyGroup.showCopyright.value && data.global.copyright && data.global.copyright.isShow">
|
|
<copy-right :textColor="data.global.copyright.textColor" />
|
|
</template>
|
|
|
|
<template
|
|
v-if="diyStore.mode == '' && data.global && data.global.bottomTabBar && data.global.bottomTabBar.isShow">
|
|
<view class="pt-[20rpx]"></view>
|
|
<tabbar :addon="data.global.bottomTabBar.designNav?.key" />
|
|
</template>
|
|
</view>
|
|
</template>
|
|
<script lang="ts" setup>
|
|
{{ componentImport }}
|
|
import topTabbar from '@/components/top-tabbar/top-tabbar.vue'
|
|
import popAds from '@/components/pop-ads/pop-ads.vue'
|
|
import { useDiyGroup } from './useDiyGroup'
|
|
import useDiyStore from '@/app/stores/diy';
|
|
import { ref, getCurrentInstance } from 'vue';
|
|
|
|
const props = defineProps(['data']);
|
|
const instance : any = getCurrentInstance();
|
|
const getFormRef = () => {
|
|
return {
|
|
componentRefs: instance.refs
|
|
}
|
|
}
|
|
|
|
const diyStore = useDiyStore();
|
|
|
|
|
|
const diyGroup = useDiyGroup({
|
|
...props,
|
|
getFormRef
|
|
});
|
|
|
|
const data = ref(diyGroup.data)
|
|
|
|
// 监听页面加载完成
|
|
diyGroup.onMounted()
|
|
|
|
// 监听滚动事件
|
|
diyGroup.onPageScroll()
|
|
|
|
defineExpose({
|
|
refresh: diyGroup.refresh,
|
|
getFormRef
|
|
})
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
@import './index.scss';
|
|
</style> |