Compare commits

...

22 Commits

Author SHA1 Message Date
赵毅
e7f7853feb 首页样式优化 2025-09-17 18:07:58 +08:00
赵毅
fd29fc9b20 修改取消支付报错的bug 2025-09-17 17:08:36 +08:00
赵毅
c642678502 提交订单页面,当取消支付之后调用取消订单的接口 2025-09-17 16:55:28 +08:00
赵毅
e44cf88635 修改团购备货中和待自提的数据异常问题 2025-09-17 16:52:39 +08:00
赵毅
ad7d404482 11 2025-09-17 16:29:04 +08:00
赵毅
c68243f95e 拆分售后订单的数据 -- 普通和团购 2025-09-17 16:24:34 +08:00
赵毅
a732eab59f 修改从订单列表执行立即付款时的执行逻辑 2025-09-17 16:05:48 +08:00
赵毅
3c87af65de 隐藏再来一单按钮操作 2025-09-17 15:48:42 +08:00
赵毅
4d6e41ed1c 修改湖畔社区页面的数据展示逻辑 2025-09-17 15:46:56 +08:00
赵毅
9bffd147ba 修改页面返回时因为webview数量限制而造成的页面返回错误问题 2025-09-17 15:39:36 +08:00
赵毅
8d7e59c095 修改湖畔缴费中点击立即缴费的提示 2025-09-17 15:25:55 +08:00
赵毅
a8168c6db1 修改未发货状态下的申请退款的请求接口 2025-09-17 15:10:20 +08:00
赵毅
80d6fb8cc9 添加智能设备路由 2025-09-17 15:01:29 +08:00
赵毅
210a3bec81 完成智能设备模块 2025-09-17 15:00:50 +08:00
赵毅
8d8df19256 修改团购的状态逻辑 2025-09-17 14:24:11 +08:00
赵毅
2b6b43afdd 修改物业管理 工单台页面的背景图 2025-09-17 11:59:51 +08:00
赵毅
d322370e44 使用插件实现输入付款金额 2025-09-17 11:54:43 +08:00
赵毅
bac043f2ba 11 2025-09-17 09:56:06 +08:00
赵毅
6625889aee 拆分订单为易购和团购两个列表 2025-09-17 09:52:24 +08:00
赵毅
9e260a1bb8 修改团购订单列表状态名称 2025-09-17 09:51:42 +08:00
赵毅
6e28dc148e 修复在订单列表页点击立即支付后在提交订单页没有自提点的bug 2025-09-17 09:47:00 +08:00
赵毅
d2f6efbd3f 实现底部导航栏中的扫一扫功能 2025-09-17 08:49:18 +08:00
33 changed files with 3757 additions and 338 deletions

View File

@ -8,4 +8,5 @@ export const apiArr = {
changeGoodsList: "/api/v2/wechat/commodity/after-sales/change-goods-list", //商品售后换货商品列表
updateApply: "/api/v2/wechat/commodity/after-sales/update-apply", //商品订单售后修改申请
createReview: "/api/v2/wechat/commodity/review/create", //创建订单评价
orderRefund: "/api/v2/wechat/commodity/order/refund", //商品订单退款
};

View File

@ -20,4 +20,5 @@ export const apiArr = {
mergePreorder: '/api/v2/wechat/commodity/order/preorder', // 商品订单合并预下单
goodsSearch: '/api/v2/wechat/commodity/search', // 商品搜索
cancelPay: '/api/v2/wechat/commodity/order/cancel_pay', // 用户取消支付
}

View File

@ -0,0 +1,282 @@
<template>
<view class="key-container" @click="hide" v-show="showMask">
<uni-transition :modeClass="['slide-bottom']" :show="show"
:styles="{height:'100vh'}"
:duration="duration">
<view class="key-content" @click.stop>
<slot></slot>
<view class="key-box block flex">
<view class="key-left">
<view class="key-top flex flex-wrap">
<view class="btn-box" v-for="(item,index) in numArr" :key="index">
<button hover-class="active" class="cu-btn key-btn text-black text-xl" @click.stop="keydown(item)">{{item}}</button>
</view>
</view>
<view class="key-bottom">
<view class="btn-zero">
<button hover-class="active" class="cu-btn key-btn text-black text-xl" @click.stop="keydown('0')">0</button>
</view>
<view class="btn-point">
<button hover-class="active" class="cu-btn key-btn text-black text-xl" @click.stop="keydown('.')">.</button>
</view>
</view>
</view>
<view class="key-right">
<view class="del">
<button hover-class="active" class="cu-btn key-btn text-black text-xl" @click.stop="del">
<text class="zm iconbackspace text-xl"></text>
</button>
</view>
<view class="confirm">
<button hover-class="active" :style="[confirmStyle]" class="cu-btn" @click.stop="confirm">
<text class="confirm-text">{{confirmText}}</text>
</button>
</view>
</view>
</view>
</view>
</uni-transition>
</view>
</template>
<script>
/**
* 付款组件
* @property {Number} duration - 弹出动画时长默认为300
* @event {Function} change - 数字改变触发参数为数字
* @event {Function} confirm - 付款时触发参数为数字
* @event {Function} hide - 关闭键盘触发参数为空
*/
// 使,exmple
import uniTransition from '../uni-transition/uni-transition.vue'
export default{
components:{
uniTransition
},
props:{
duration:{
type:Number,//
default:300
},
confirmText:{
type:String,
default:'付款'
},
confirmStyle:{
type:Object,
default:()=>{
return{
backgroundColor:'#57BE6D'
}
}
}
},
data(){
return{
value:'',//
show:false,//
showMask:false,//
numArr:[1,2,3,4,5,6,7,8,9]
}
},
watch:{
value(newval,oldval){
this.$emit("change",newval);
}
},
methods:{
close(){
this.show = false;
setTimeout(()=>{
this.showMask = false;
},this.duration)
},
open(){
this.value = '';
this.show = true;
this.showMask = true;
},
del(){
if(this.value.length){
this.value = this.value.slice(0,this.value.length-1);
}
},
keydown(e){
switch(e){
case '.':
//
if(!this.value.length){
this.value = '0.';
}else{
if(this.value.indexOf('.')>-1){
//
}else{
this.value = this.value+''+e;
}
}
break;
case '0':
if(this.value.length === 0){
this.value = this.value+''+e;
}
if(Number(this.value) === 0 && this.value.indexOf('.')== -1){
// value
}else{
this.value = this.value+''+e;
}
break;
default:
this.value = this.value+''+e;
break;
}
},
hide(){
this.$emit('hide');
this.close();
},
confirm(){
this.$emit('confirm',this.value);
this.close();
}
}
}
</script>
<style lang="scss" scoped>
@font-face {
font-family: 'zm'; /* project id 2442084 */
src: url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.eot');
src: url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.eot?#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.woff2') format('woff2'),
url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.woff') format('woff'),
url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.ttf') format('truetype'),
url('https://at.alicdn.com/t/font_2442084_o72ps3802ih.svg#zm') format('svg');
}
.zm {
font-family: "zm" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconbackspace:before {
content: "\ef11";
}
.flex{
display: flex;
}
.flex-wrap{
flex-wrap: wrap;
}
.cu-btn {
position: relative;
border: 0rpx;
display: inline-flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
padding: 0 30rpx;
font-size: 28rpx;
height: 64rpx;
line-height: 1;
text-align: center;
text-decoration: none;
overflow: visible;
margin-left: initial;
transform: translate(0rpx, 0rpx);
margin-right: initial;
}
.cu-btn::after {
display: none;
}
.text-xl{
font-size:36rpx;
font-weight: bold;
font-family: 'microsoft-yahei';
}
.text-black{
color:#333;
}
.active{
background-color: #ddd !important;
transform: translate(2rpx,2rpx);
}
.key-container{
position: fixed;
bottom: 0;
top:0;
left:0;
right:0;
.key-content{
position: absolute;
bottom: 0;
width: 100vw;
background-color: #F7F7F7;
}
}
.key-box{
width: 100%;
box-sizing: border-box;
padding:10rpx 10rpx 0;
.key-left{
width: 75%;
}
.key-right{
width: 25%;
display: flex;
flex-direction: column;
}
.key-bottom{
width: 100%;
display: flex;
}
}
.del{
width: 100%;
}
.btn-box{
width: 33.33%;
padding:0 10rpx 10rpx 0;
box-sizing: border-box;
}
.btn-zero{
width: 66.66%;
padding:0 10rpx 10rpx 0;
box-sizing: border-box;
}
.btn-point{
width: 33.33%;
padding:0 10rpx 10rpx 0;
box-sizing: border-box;
}
.key-right{
flex-shrink: 0;
}
.key-btn{
background-color: #fff;
width: 100%;
height: 90rpx;
}
.confirm{
width: 100%;
flex:1;
padding: 10rpx 0 10rpx 0;
box-sizing: border-box;
button{
width: 100%;
height: 100%;
.confirm-text{
color:#fff;
display: block;
font-size: 32rpx;
}
}
}
</style>

View File

@ -0,0 +1,41 @@
<template>
<view class="container">
<button type="default" @click="open">打开键盘</button>
{{value}}
<cu-keyboard ref="cukeyboard" @change="change" @confirm="confirm" @hide="hide"></cu-keyboard>
</view>
</template>
<script>
export default {
data() {
return {
value:''
}
},
mounted() {
},
methods: {
change(e){
this.value = e;
console.log("数字改变",e);
},
open(){
console.log("打开键盘");
this.$refs.cukeyboard.open();
},
confirm(e){
console.log("付款",e);
},
hide(){
console.log("关闭键盘")
}
}
}
</script>
<style>
</style>

View File

@ -67,7 +67,7 @@ export default {
photoAc:
"https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/footer_facilityAc.png",
nav_name: "智能设备",
url: "",
url: "/packages/smartDevice/index/index",
},
{
photo:
@ -161,6 +161,25 @@ export default {
jump(e) {
const url = e.currentTarget.dataset.url;
const index = e.currentTarget.dataset.idx;
const item = this.navList[index];
//
if (item.isScan) {
// uni-appAPI
uni.scanCode({
success: (res) => {
//
console.log('扫码结果:', res.result);
//
},
fail: (err) => {
console.log('扫码失败:', err);
}
});
return;
}
// url
if (!url || url.trim() === '') {
this.NotOpen();

View File

@ -0,0 +1,279 @@
<template>
<view v-if="isShow" ref="ani" class="uni-transition" :class="[ani.in]" :style="'transform:' +transform+';'+stylesObject"
@click="change">
<slot></slot>
</view>
</template>
<script>
// #ifdef APP-NVUE
const animation = uni.requireNativePlugin('animation');
// #endif
/**
* Transition 过渡动画
* @description 简单过渡动画组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=985
* @property {Boolean} show = [false|true] 控制组件显示或隐藏
* @property {Array} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
* @value fade 渐隐渐出过渡
* @value slide-top 由上至下过渡
* @value slide-right 由右至左过渡
* @value slide-bottom 由下至上过渡
* @value slide-left 由左至右过渡
* @value zoom-in 由小到大过渡
* @value zoom-out 由大到小过渡
* @property {Number} duration 过渡动画持续时间
* @property {Object} styles 组件样式 css 样式注意带-连接符的属性需要使用小驼峰写法如`backgroundColor:red`
*/
export default {
name: 'uniTransition',
props: {
show: {
type: Boolean,
default: false
},
modeClass: {
type: Array,
default () {
return []
}
},
duration: {
type: Number,
default: 300
},
styles: {
type: Object,
default () {
return {}
}
}
},
data() {
return {
isShow: false,
transform: '',
ani: { in: '',
active: ''
}
};
},
watch: {
show: {
handler(newVal) {
if (newVal) {
this.open()
} else {
this.close()
}
},
immediate: true
}
},
computed: {
stylesObject() {
let styles = {
...this.styles,
'transition-duration': this.duration / 1000 + 's'
}
let transfrom = ''
for (let i in styles) {
let line = this.toLine(i)
transfrom += line + ':' + styles[i] + ';'
}
return transfrom
}
},
created() {
// this.timer = null
// this.nextTick = (time = 50) => new Promise(resolve => {
// clearTimeout(this.timer)
// this.timer = setTimeout(resolve, time)
// return this.timer
// });
},
methods: {
change() {
this.$emit('click', {
detail: this.isShow
})
},
open() {
clearTimeout(this.timer)
this.isShow = true
this.transform = ''
this.ani.in = ''
for (let i in this.getTranfrom(false)) {
if (i === 'opacity') {
this.ani.in = 'fade-in'
} else {
this.transform += `${this.getTranfrom(false)[i]} `
}
}
this.$nextTick(() => {
setTimeout(() => {
this._animation(true)
}, 50)
})
},
close(type) {
clearTimeout(this.timer)
this._animation(false)
},
_animation(type) {
let styles = this.getTranfrom(type)
// #ifdef APP-NVUE
if(!this.$refs['ani']) return
animation.transition(this.$refs['ani'].ref, {
styles,
duration: this.duration, //ms
timingFunction: 'ease',
needLayout: false,
delay: 0 //ms
}, () => {
if (!type) {
this.isShow = false
}
this.$emit('change', {
detail: this.isShow
})
})
// #endif
// #ifndef APP-NVUE
this.transform = ''
for (let i in styles) {
if (i === 'opacity') {
this.ani.in = `fade-${type?'out':'in'}`
} else {
this.transform += `${styles[i]} `
}
}
this.timer = setTimeout(() => {
if (!type) {
this.isShow = false
}
this.$emit('change', {
detail: this.isShow
})
}, this.duration)
// #endif
},
getTranfrom(type) {
let styles = {
transform: ''
}
this.modeClass.forEach((mode) => {
switch (mode) {
case 'fade':
styles.opacity = type ? 1 : 0
break;
case 'slide-top':
styles.transform += `translateY(${type?'0':'-100%'}) `
break;
case 'slide-right':
styles.transform += `translateX(${type?'0':'100%'}) `
break;
case 'slide-bottom':
styles.transform += `translateY(${type?'0':'100%'}) `
break;
case 'slide-left':
styles.transform += `translateX(${type?'0':'-100%'}) `
break;
case 'zoom-in':
styles.transform += `scale(${type?1:0.8}) `
break;
case 'zoom-out':
styles.transform += `scale(${type?1:1.2}) `
break;
}
})
return styles
},
_modeClassArr(type) {
let mode = this.modeClass
if (typeof(mode) !== "string") {
let modestr = ''
mode.forEach((item) => {
modestr += (item + '-' + type + ',')
})
return modestr.substr(0, modestr.length - 1)
} else {
return mode + '-' + type
}
},
// getEl(el) {
// console.log(el || el.ref || null);
// return el || el.ref || null
// },
toLine(name) {
return name.replace(/([A-Z])/g, "-$1").toLowerCase();
}
}
}
</script>
<style>
.uni-transition {
transition-timing-function: ease;
transition-duration: 0.3s;
transition-property: transform, opacity;
}
.fade-in {
opacity: 0;
}
.fade-active {
opacity: 1;
}
.slide-top-in {
/* transition-property: transform, opacity; */
transform: translateY(-100%);
}
.slide-top-active {
transform: translateY(0);
/* opacity: 1; */
}
.slide-right-in {
transform: translateX(100%);
}
.slide-right-active {
transform: translateX(0);
}
.slide-bottom-in {
transform: translateY(100%);
}
.slide-bottom-active {
transform: translateY(0);
}
.slide-left-in {
transform: translateX(-100%);
}
.slide-left-active {
transform: translateX(0);
opacity: 1;
}
.zoom-in-in {
transform: scale(0.8);
}
.zoom-out-active {
transform: scale(1);
}
.zoom-out-in {
transform: scale(1.2);
}
</style>

290
package-lock.json generated
View File

@ -6,7 +6,9 @@
"": {
"dependencies": {
"sass": "^1.89.2",
"uview-ui": "^2.0.38"
"uview-ui": "^2.0.38",
"vanilla-text-mask": "^5.1.1",
"vuex": "^4.1.0"
},
"devDependencies": {
"sass-loader": "^10.5.2"
@ -27,16 +29,54 @@
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.27.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
"integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/types": "^7.28.4"
},
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/types": {
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@gar/promisify": {
"version": "1.1.3",
"dev": true,
@ -80,7 +120,6 @@
"version": "1.5.5",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
"peer": true
},
"node_modules/@jridgewell/trace-mapping": {
@ -487,6 +526,121 @@
"optional": true,
"peer": true
},
"node_modules/@vue/compiler-core": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz",
"integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/parser": "^7.28.3",
"@vue/shared": "3.5.21",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz",
"integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-core": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz",
"integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/parser": "^7.28.3",
"@vue/compiler-core": "3.5.21",
"@vue/compiler-dom": "3.5.21",
"@vue/compiler-ssr": "3.5.21",
"@vue/shared": "3.5.21",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.18",
"postcss": "^8.5.6",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz",
"integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"node_modules/@vue/devtools-api": {
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
"license": "MIT"
},
"node_modules/@vue/reactivity": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.21.tgz",
"integrity": "sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/shared": "3.5.21"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.21.tgz",
"integrity": "sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/reactivity": "3.5.21",
"@vue/shared": "3.5.21"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz",
"integrity": "sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/reactivity": "3.5.21",
"@vue/runtime-core": "3.5.21",
"@vue/shared": "3.5.21",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.21.tgz",
"integrity": "sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-ssr": "3.5.21",
"@vue/shared": "3.5.21"
},
"peerDependencies": {
"vue": "3.5.21"
}
},
"node_modules/@vue/shared": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz",
"integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==",
"license": "MIT",
"peer": true
},
"node_modules/@webassemblyjs/ast": {
"version": "1.14.1",
"resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz",
@ -1302,6 +1456,13 @@
"node": ">= 8"
}
},
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT",
"peer": true
},
"node_modules/debug": {
"version": "4.4.1",
"dev": true,
@ -1414,6 +1575,19 @@
"node": ">=10.13.0"
}
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/env-paths": {
"version": "2.2.1",
"dev": true,
@ -1504,6 +1678,13 @@
"node": ">=4.0"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT",
"peer": true
},
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
@ -2181,6 +2362,16 @@
"node": ">=10"
}
},
"node_modules/magic-string": {
"version": "0.30.19",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
"integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"node_modules/make-fetch-happen": {
"version": "10.2.1",
"dev": true,
@ -2475,6 +2666,25 @@
"optional": true,
"peer": true
},
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"peer": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/negotiator": {
"version": "0.6.4",
"dev": true,
@ -2893,7 +3103,6 @@
},
"node_modules/picocolors": {
"version": "1.1.1",
"dev": true,
"license": "ISC",
"peer": true
},
@ -2910,6 +3119,35 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"dev": true,
@ -3281,6 +3519,8 @@
},
"node_modules/semver": {
"version": "7.7.2",
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@ -3852,6 +4092,46 @@
"spdx-expression-parse": "^3.0.0"
}
},
"node_modules/vanilla-text-mask": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/vanilla-text-mask/-/vanilla-text-mask-5.1.1.tgz",
"integrity": "sha512-JhjoMbCx3DG4GN/M/j06n1bVLeJPsZ7XelyCx8q87M9d5k3jwuWaY+a+09XBq1uOGQAW8QaWska66hOzXNKiQg==",
"license": "Unlicense"
},
"node_modules/vue": {
"version": "3.5.21",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.21.tgz",
"integrity": "sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.21",
"@vue/compiler-sfc": "3.5.21",
"@vue/runtime-dom": "3.5.21",
"@vue/server-renderer": "3.5.21",
"@vue/shared": "3.5.21"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/vuex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
"integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
"license": "MIT",
"dependencies": {
"@vue/devtools-api": "^6.0.0-beta.11"
},
"peerDependencies": {
"vue": "^3.2.0"
}
},
"node_modules/watchpack": {
"version": "2.4.4",
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.4.tgz",

View File

@ -1,10 +1,19 @@
{
"devDependencies": {
"sass-loader": "^10.5.2"
},
"dependencies": {
"sass": "^1.89.2",
"uview-ui": "^2.0.38",
"vuex": "^4.1.0"
}
}
"id": "cu-keyboard",
"name": "支付键盘、数字键盘、付款键盘、密码键盘",
"displayName": "支付键盘、数字键盘、付款键盘、密码键盘",
"version": "1.0.1",
"description": "仿微信支付付款键盘,多端通用,简易方便",
"keywords": [
"数字键盘",
"支付键盘",
"付款键盘",
"密码键盘"
],
"dcloudext": {
"category": [
"前端组件",
"通用组件"
]
}
}

View File

@ -4,7 +4,9 @@
<view class="community-item-box" v-for="(item, index) in communityList" :key="index">
<view class="community-item">
<view class="community-image" @tap="enterCommunity(item)">
<image :src="item.pic" mode="aspectFill"></image>
<!-- 使用默认图片作为 fallback -->
<image :src="item.pic || defaultCommunityImage" mode="aspectFill"
@error="handleImageError(item)"></image>
</view>
<view class="community-info">
<view class="community-name" @tap="enterCommunity(item)">{{ item.name }}</view>
@ -15,12 +17,12 @@
<uni-icons type="paperplane-filled" size="18"></uni-icons>
<text class="btn-text">导航</text>
</view>
<view class="community-action-btn" @tap="callPhone(item)">
<view class="community-action-btn" @tap="callPhone(item)" v-if="item.property_server_phone">
<uni-icons type="phone-filled" size="18"></uni-icons>
<view class="btn-text">电话</view>
</view>
</view>
<view class="enter-btn" @tap="enterCommunity(item)">进入小区</view>
<view v-if="item.is_me" class="enter-btn" @tap="enterCommunity(item)">进入小区</view>
</view>
</view>
<view class="community-address">
@ -42,6 +44,7 @@ import {
uniqueByField,
menuButtonInfo,
NavgateTo,
calculateDistance
} from "../../../utils";
import { apiArr } from "../../../api/community";
@ -54,7 +57,9 @@ export default {
currentPage: 1,
pageSize: 16,
hasMoreData: true,
isLoading: false
isLoading: false,
tencentMapKey: '55NBZ-MUQYW-EAJRL-YIWPA-ZXCR6-4NBPP', // API Key
defaultCommunityImage: 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/community_no_image3.png' //
};
},
methods: {
@ -72,12 +77,23 @@ export default {
this.isLoading = true;
try {
//
const locationData = await this.getUserLocation();
if (!locationData) {
throw new Error('无法获取用户位置');
}
const userLat = parseFloat(locationData.lat);
const userLng = parseFloat(locationData.lng);
//
const res = await request(apiArr.getAllList, "POST", {
page_num: 1,
page_size: 9999
});
if (res && res.rows) {
// 1km
let processedList = res.rows.map(item => {
//
if (item.pic) {
@ -85,51 +101,80 @@ export default {
}
try {
let locationData = uni.getStorageSync('location');
if (locationData) {
// locationData
const location = typeof locationData === 'string' ? JSON.parse(locationData) : locationData;
const userLat = parseFloat(location.lat) || 0;
const userLng = parseFloat(location.lng) || 0;
const parkLat = parseFloat(item.lat) || 0;
const parkLng = parseFloat(item.lng) || 0;
//
if (userLat && userLng && item.lat && item.lng) {
const parkLat = parseFloat(item.lat);
const parkLng = parseFloat(item.lng);
//
if (userLat && userLng && parkLat && parkLng) {
// 使Haversine
const R = 6371; //
const dLat = (parkLat - userLat) * Math.PI / 180;
const dLng = (parkLng - userLng) * Math.PI / 180;
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(userLat * Math.PI / 180) * Math.cos(parkLat * Math.PI / 180) *
Math.sin(dLng / 2) * Math.sin(dLng / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const distance = (R * c).toFixed(2);
item.distance = distance + 'km';
}
// 使Haversine
const distance = calculateDistance(userLat, userLng, parkLat, parkLng);
item.distance = distance.toFixed(2) + 'km';
item.distanceValue = distance; //
}
} catch (error) {
console.error('计算距离失败:', error);
item.distanceValue = Infinity;
}
return item;
});
// 1km
processedList = processedList.filter(item =>
item.distanceValue && item.distanceValue <= 1
);
// API1km
const nearbyCommunities = await this.getNearbyCommunities(userLat, userLng);
// API
let mergedList = [...processedList];
if (nearbyCommunities && nearbyCommunities.length > 0) {
//
const tencentCommunities = nearbyCommunities.map(item => {
//
const distance = calculateDistance(userLat, userLng, item.lat, item.lng);
// POI
let communityImage = '';
if (item.photos && item.photos.length > 0) {
//
communityImage = item.photos[0].url;
}
return {
name: item.title,
addr: item.address,
lat: item.lat,
lng: item.lng,
distance: distance.toFixed(2) + 'km',
distanceValue: distance,
//
pic: communityImage || this.defaultCommunityImage, // 使
property: item.extension && item.extension.property_company ? item.extension.property_company : '-',
property_server_phone: item.tel || '',
community_id: `tencent_${item.id}` // ID
};
});
//
mergedList = [...processedList, ...tencentCommunities];
// community_id
mergedList = uniqueByField(mergedList, 'community_id');
}
//
processedList.sort((a, b) => {
const distanceA = parseFloat(String(a.distance).trim());
const distanceB = parseFloat(String(b.distance).trim());
mergedList.sort((a, b) => {
const distanceA = a.distanceValue || Infinity;
const distanceB = b.distanceValue || Infinity;
// NaN Infinity
const valueA = isNaN(distanceA) ? Infinity : distanceA;
const valueB = isNaN(distanceB) ? Infinity : distanceB;
return valueA - valueB;
return distanceA - distanceB;
});
// allCommunityList
this.allCommunityList = processedList;
this.allCommunityList = mergedList;
this.currentPage = 1;
this.updateDisplayList();
@ -148,6 +193,100 @@ export default {
}
},
//
getUserLocation() {
return new Promise((resolve, reject) => {
try {
let locationData = uni.getStorageSync('location');
if (locationData) {
// locationData
const location = typeof locationData === 'string' ? JSON.parse(locationData) : locationData;
if (location.lat && location.lng) {
resolve(location);
return;
}
}
} catch (error) {
console.error('从缓存获取位置失败:', error);
}
//
uni.getLocation({
type: 'gcj02',
altitude: true,
success: (res) => {
const location = {
lat: res.latitude,
lng: res.longitude
};
//
uni.setStorageSync('location', location);
resolve(location);
},
fail: (err) => {
console.error('获取位置失败:', err);
reject(err);
}
});
});
},
// API1km
async getNearbyCommunities(lat, lng) {
try {
const keyword = '小区';
const radius = 1000; // 1km
const pageSize = 20;
// 使uni.requestAPIextensions=all
return new Promise((resolve, reject) => {
uni.request({
url: 'https://apis.map.qq.com/ws/place/v1/search',
method: 'GET',
data: {
keyword: keyword,
boundary: `nearby(${lat},${lng},${radius})`,
key: this.tencentMapKey,
page_size: pageSize,
extensions: 'all' //
},
success: (res) => {
if (res.statusCode === 200 && res.data.status === 0) {
//
const results = res.data.data.map(item => ({
id: item.id,
title: item.title,
address: item.address,
lat: item.location.lat,
lng: item.location.lng,
tel: item.tel || '',
photos: item.photos || [], //
extension: item.extension || {}, //
is_me: false
}));
resolve(results);
} else {
console.error('腾讯地图API请求失败:', res.data);
resolve([]);
}
},
fail: (err) => {
console.error('腾讯地图API请求错误:', err);
resolve([]);
}
});
});
} catch (error) {
console.error('获取附近小区失败:', error);
return [];
}
},
// 使
handleImageError(item) {
item.pic = this.defaultCommunityImage;
},
//
updateDisplayList() {
const startIndex = 0;
@ -198,7 +337,6 @@ export default {
success: () => {
},
fail: (error) => {
console.error('拨打电话失败:', error);
}
});
} else {
@ -223,13 +361,6 @@ export default {
if (this.hasMoreData && !this.isLoading) {
this.currentPage += 1;
this.updateDisplayList();
// if (!this.hasMoreData) {
// uni.showToast({
// title: '',
// icon: 'none',
// duration: 1500
// });
// }
}
}
},
@ -253,4 +384,4 @@ export default {
<style>
@import url("./index.css");
</style>
</style>

View File

@ -1,6 +1,6 @@
<template>
<view class="container">
<view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<!-- <view class="searchBox" :style="{ height: localHeight + 'px', paddingTop: top + 'px' }">
<view class="searchBox_add">
<view class="searchBox_left">
<u-icon bold color="#000" size="40" name="arrow-left" @click="back"></u-icon>
@ -8,7 +8,7 @@
<view class="searchBox_mid">我的房产</view>
<view class="searchBox_right"></view>
</view>
</view>
</view> -->
<view class="empty" v-if="communityList.length == 0">
<view class="emptyTitle">绑定房源</view>
<view class="emptyMsg">请绑定房源信息 以便使用其他功能</view>

View File

@ -1,8 +1,8 @@
<template>
<div class="container">
<div class="header" :style="{ paddingTop: top + 'px', height: localHeight + 'px' }">
<view class="container">
<view class="header" :style="{ paddingTop: top + 'px', height: localHeight + 'px' }">
<u-icon bold color="#000" size="40" name="arrow-left" @click="back"></u-icon>
</div>
</view>
<swiper class="swiper" autoplay>
<swiper-item v-for="(item, pageIndex) in info.bigImg" :key="pageIndex">
@ -10,76 +10,77 @@
</swiper-item>
</swiper>
<div class="swiper_boxshadow"></div>
<view class="swiper_boxshadow"></view>
<div class="Tit">
<view class="Tit">
<span>{{ info.merchant_name }}</span> 付款
</div>
</view>
<div class="Msg">
<div class="payMony">
<input type="number" v-model="Money" placeholder="付款金额" placeholder-style="font-size: 50rpx;"
@blur="handleMoneyInput" step="0.01" min="0.01"> </div>
<div class="payRemark">
<view class="Msg">
<view class="payMony">
<input type="number" v-model="Money" placeholder="付款金额" placeholder-style="font-size: 50rpx;" @blur="handleMoneyInput" @focus="showKeyboard" step="0.01" min="0.01">
<cu-keyboard ref="cukeyboard" @change="change" @confirm="keyboardConfirm" @hide="hide"></cu-keyboard>
</view>
<view class="payRemark">
<input type="text" v-model="remarks" placeholder="付款备注">
</div>
</div>
</view>
</view>
<div class="Msg2">
<div class="Msg2_tit">
<div class="Msg2_tit_left">获得物业公积金</div>
<div class="Msg2_tit_right" @click="choseComminty">
<view class="Msg2">
<view class="Msg2_tit">
<view class="Msg2_tit_left">获得物业公积金</view>
<view class="Msg2_tit_right" @click="choseComminty">
绑定房源
<u-icon name="arrow-right" color="#999999" size="28"></u-icon>
</div>
</div>
</view>
</view>
<div class="Msg2_con">
<div class="Msg2_con_left">
<view class="Msg2_con">
<view class="Msg2_con_left">
<span>
{{ homeMoney }}
</span>
</div>
<div class="Msg2_con_right">
</view>
<view class="Msg2_con_right">
{{ room_name }}
</div>
</div>
</div>
</view>
</view>
</view>
<div class="Msg3">
<div class="Msg3_tit">获得积分</div>
<div class="Msg3_con">
<view class="Msg3">
<view class="Msg3_tit">获得积分</view>
<view class="Msg3_con">
{{ integral }}
</div>
</div>
</view>
</view>
<div class="btn" @click="pay">确认支付</div>
<view class="btn" @click="pay">确认支付</view>
<div class="btnList">
<div class="btnItem" @click="payList">付款记录</div>
<div class="line"></div>
<div class="btnItem" @click="homeMoneList">物业费公积金</div>
<div class="line"></div>
<div class="btnItem" @click="home">首页</div>
<div class="btnItem2" @click="changeBoxshadow">
<view class="btnList">
<view class="btnItem" @click="payList">付款记录</view>
<view class="line"></view>
<view class="btnItem" @click="homeMoneList">物业费公积金</view>
<view class="line"></view>
<view class="btnItem" @click="home">首页</view>
<view class="btnItem2" @click="changeBoxshadow">
<image src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/local_qrcode.png"
mode="aspectFill"></image>
本页二维码
</div>
</div>
</view>
</view>
<u-picker :show="show" :columns="[commintyList]" keyName="label" @confirm='confirm' @close='onClose'
@cancel='onClose' closeOnClickOverlay></u-picker>
<div class="boxshadow" @click="changeBoxshadow2" v-if="boxShow">
<div class="boxshadow_con">
<view class="boxshadow" @click="changeBoxshadow2" v-if="boxShow">
<view class="boxshadow_con">
<image :src="myCode" mode="aspectFill"></image>
</div>
</div>
</view>
</view>
</div>
</view>
</template>
<script>
@ -136,6 +137,48 @@ export default {
methods: {
showKeyboard() {
this.$refs.cukeyboard.open();
},
//
change(value) {
//
let formattedValue = value.toString().replace(/[^\d.]/g, '');
// 00
if (formattedValue.length >= 2 && formattedValue[0] === '0' && formattedValue[1] !== '.') {
formattedValue = formattedValue.substring(1);
}
//
formattedValue = formattedValue.replace(/\.{2,}/g, '.');
//
const parts = formattedValue.split('.');
if (parts.length > 1) {
formattedValue = parts[0] + '.' + parts[1].substring(0, 2);
}
//
if (formattedValue.startsWith('.')) {
formattedValue = '0' + formattedValue;
}
this.Money = formattedValue;
},
//
keyboardConfirm(value) {
//
if (value && value.endsWith('.')) {
value = value.slice(0, -1);
}
this.Money = value;
this.$refs.cukeyboard.close();
},
//
hide() {
//
},
handleMoneyInput() {
//
let value = this.Money.toString().replace(/[^\d.]/g, '');

View File

@ -41,6 +41,7 @@
}
.company-name {
width: 550rpx;
font-size: 32rpx;
font-weight: bold;
}

View File

@ -5,9 +5,9 @@
<!-- 头部信息 -->
<view class="header">
<view class="company-info">
<text class="company-name">{{ item.commodity_order_item[0].goods_name }}</text>
<view class="company-name">{{ item.commodity_order_item[0].goods_name }}</view>
<text class="after-sale-no">{{ item.after_sales_type === 1 ? '退款' : (item.after_sales_type === 2
? '退货款' : '换货') }}</text>
? '退货退款' : '换货') }}</text>
</view>
<text class="order-time">提交订单{{ formatDate(item.create_time) }}</text>
</view>
@ -31,7 +31,7 @@
</view>
<!-- 退款状态 -->
<view class="status-container">
<view class="status-container" v-if="showStatus">
<view class="status-item" @click="pendingPage(item)">
<text class="status-label">{{ getStatusText(item) }}</text>
<text class="status-desc">商家将在<text style="color: #e73b05;">{{
@ -41,7 +41,7 @@
</view>
<!-- 操作按钮 -->
<view class="action-buttons">
<view class="action-buttons" v-if="showStatus">
<button class="modify-btn" @click="modifyApplication(item)">修改申请</button>
<button class="cancel-btn" @click="cancelApplication(item)">撤销申请</button>
</view>
@ -66,11 +66,16 @@ export default {
afterSaleList: {
type: Array,
default: () => []
}
},
order_cate: {
type: Number,
default: 1,
},
},
data() {
return {
currentAfterSale: this.afterSaleList,
showStatus: true,
};
},
watch: {
@ -85,6 +90,7 @@ export default {
getList() {
const params = {
user_id: uni.getStorageSync('userId'),
order_cate: this.order_cate,
}
request(apiArr.afterSalesList, "POST", params).then((res) => {
res.after_sales_list.forEach(item => {
@ -100,6 +106,7 @@ export default {
return '已撤销';
}
if (item.process_status === 2) {
this.showStatus = false;
return '已完成';
} else if (item.process_status === 3) {
return '已取消';

View File

@ -0,0 +1,594 @@
page {
background-color: #f6f7fb;
padding-bottom: 50rpx;
min-height: 100vh;
}
.tabs {
display: flex;
align-items: center;
background: #ffffff;
height: 100rpx;
padding: 0 20rpx;
box-sizing: border-box;
display: flex;
overflow-x: auto;
white-space: nowrap;
}
.tabItem {
font-size: 25rpx;
color: #222222;
margin-right: 60rpx;
height: 42rpx;
}
.active2 {
font-size: 25rpx;
font-weight: 700;
position: relative;
}
.active2::after {
content: '';
background: url(https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/com_active.png) no-repeat;
background-size: 100% 100%;
width: 52rpx;
height: 22rpx;
position: absolute;
left: 50%;
bottom: -16rpx;
transform: translateX(-50%);
}
.contentList {
margin: 20rpx;
min-height: 250rpx;
background-color: #ffffff;
border-radius: 20rpx;
padding: 10rpx;
}
.order-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx;
font-size: 24rpx;
color: #a3a3a3;
border-bottom: 1rpx solid #eee;
}
.orderTitle {
width: 100%;
font-size: 24rpx;
font-weight: bold;
}
.orderTitleSupplier {
font-size: 28rpx;
color: #333;
font-weight: bold;
margin-bottom: 10rpx;
display: flex;
justify-content: space-between;
}
.status {
color: #ff5252;
font-weight: bold;
font-size: 24rpx;
}
.status2 {
color: #333;
font-weight: bold;
border: 1rpx solid #f83d19;
display: flex;
padding: 10rpx;
border-radius: 10rpx;
font-size: 24rpx;
}
.status2 img {
width: 30rpx;
height: 30rpx;
margin-right: 10rpx;
}
.status3 {
color: #949494;
font-weight: bold;
font-size: 24rpx;
}
.order_status{
color: #333;
font-weight: bold;
font-size: 24rpx;
}
.goods-list {
display: flex;
flex-wrap: wrap;
padding: 15rpx;
gap: 15rpx;
}
.goods-item {
width: 120rpx;
height: 120rpx;
}
.goods-img {
width: 100%;
height: 100%;
border-radius: 8rpx;
}
.order-footer {
padding: 15rpx;
margin-top: 20rpx;
border-top: 1rpx solid #eee;
}
.order-footer-text {
font-size: 24rpx;
display: flex;
justify-content: flex-end;
}
.order-footer-text text {
color: #ff3710;
margin-left: 10rpx;
font-weight: bold;
}
.btn-group {
display: flex;
justify-content: flex-end;
margin-top: 30rpx;
}
.cancel-btn {
width: 160rpx;
height: 60rpx;
background: #d9d9d9;
color: black;
border: 1rpx solid #ddd;
border-radius: 30rpx;
font-size: 24rpx;
margin: 0;
}
.afterSaleNum {
font-size: 26rpx;
color: #ff3710;
align-items: center;
display: flex;
position: relative;
right: 230rpx;
font-weight: bold;
}
.yfd-btn {
width: 160rpx;
height: 60rpx;
background: #ffebcb;
color: #802002;
border: none;
border-radius: 30rpx;
font-size: 24rpx;
margin: 0 20rpx;
}
.pay-btn {
width: 160rpx;
height: 60rpx;
background: #ff5252;
color: #fff;
border: none;
border-radius: 30rpx;
font-size: 24rpx;
margin: 0;
margin-left: 15rpx;
}
.required{
color: red;
}
.cancel-reason-container {
width: 100%;
background-color: #fff;
border-radius: 16rpx;
padding: 30rpx;
box-sizing: border-box;
max-height: 80vh;
overflow-y: auto;
}
.asType {
margin-bottom: 30rpx;
}
.asType text {
font-size: 28rpx;
color: #333;
display: block;
margin-bottom: 20rpx;
}
.asTabs {
display: flex;
gap: 20rpx;
}
.asTab {
padding: 15rpx 20rpx;
border-radius: 10rpx;
font-size: 28rpx;
color: #333;
}
.asTab.active {
border: 1rpx solid #ff5252;
color: #ff5252;
}
.asTabs2 {
display: flex;
justify-content: space-between;
}
.asTab2 {
width: 50%;
padding: 15rpx 20rpx;
font-size: 28rpx;
color: #333;
text-align: center;
}
.asTab2.active {
border-bottom: 1rpx solid #ff5252;
color: #ff5252;
margin-bottom: 20rpx;
}
.asGoodsInfo {
margin-bottom: 30rpx;
}
.asGoodInfo {
display: flex;
padding: 20rpx 0;
border-bottom: 1rpx solid #f0f0f0;
position: relative;
}
.asGoodRadio{
margin-top: 60rpx;
}
.asGoodImg {
width: 160rpx;
height: 160rpx;
border-radius: 20rpx;
margin-right: 20rpx;
object-fit: cover;
}
.asGoodDetail {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.asGoodTitle {
font-size: 28rpx;
color: #333;
line-height: 40rpx;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.asGoodTag {
background-color: #ff7d00;
color: white;
font-size: 22rpx;
padding: 5rpx 10rpx;
border-radius: 20rpx 0 20rpx 20rpx;
}
.asGoodTag1 {
margin-right: 15rpx;
}
.tag-img {
position: absolute;
top: 145rpx;
left: 130rpx;
z-index: 1;
}
.asGoodDesc {
font-size: 24rpx;
color: #999;
}
.asGoodPrice {
font-size: 28rpx;
color: #ff5252;
font-weight: bold;
}
.asGoodNum {
font-size: 28rpx;
color: #333;
align-self: flex-start;
margin-top: 120rpx;
}
.title {
font-size: 32rpx;
font-weight: bold;
text-align: center;
margin-bottom: 30rpx;
color: #333;
}
.reason-list {
margin-bottom: 30rpx;
}
.reason-item {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #f0f0f0;
}
.radio {
width: 28rpx;
height: 28rpx;
border-radius: 50%;
border: 2rpx solid #999;
margin-right: 20rpx;
position: relative;
}
.radio.active {
border-color: #e60012;
}
.radio.active::after {
content: '';
position: absolute;
width: 14rpx;
height: 14rpx;
background-color: #e60012;
border-radius: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.reason-item text {
font-size: 28rpx;
color: #333;
}
.confirm-btn {
width: 100%;
height: 88rpx;
background-color: #ff451b;
color: #fff;
font-size: 32rpx;
border-radius: 44rpx;
line-height: 88rpx;
text-align: center;
margin-top: 20rpx;
border: none;
}
.noSalePopup {
padding: 50rpx 50rpx 0 50rpx;
text-align: center;
}
.noSalePopup-btn {
width: 250rpx;
height: 70rpx;
background-color: #e60012;
color: #fff;
font-size: 32rpx;
border-radius: 44rpx;
line-height: 70rpx;
text-align: center;
margin-top: 40rpx;
border: none;
}
/* 确认退款信息弹窗样式 */
.refund-info-container {
background-color: #ffffff;
border-radius: 10rpx;
padding: 30rpx;
box-sizing: border-box;
}
.refund-title {
font-size: 32rpx;
color: #333333;
font-weight: bold;
text-align: center;
margin-bottom: 30rpx;
}
.refund-item {
display: flex;
margin-bottom: 26rpx;
padding-bottom: 26rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.hr{
position: relative;
left: -30rpx;
right: -30rpx;
width: 120%;
height: 20rpx;
background-color: #f0f2f5;
margin-top: 20rpx;
margin-bottom: 30rpx;
}
.refund-item2 {
margin-bottom: 26rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.refund-item:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.refund-label {
width: 200rpx;
font-size: 28rpx;
color: #333333;
display: flex;
align-items: center;
}
.refund-value {
flex: 1;
font-size: 28rpx;
color: #666666;
text-align: right;
display: flex;
justify-content: flex-end;
align-items: center;
position: relative;
}
.price {
color: #ff4d4f;
font-size: 32rpx;
font-weight: bold;
}
.modify-btn {
color: #989898;
font-size: 26rpx;
margin-left: 15rpx;
}
.refund-hint {
font-size: 24rpx;
color: #999999;
text-align: right;
position: absolute;
top: 45rpx;
}
.refund-description {
width: 100%;
height: 160rpx;
border: 1rpx solid #e8e8e8;
border-radius: 8rpx;
padding: 20rpx;
box-sizing: border-box;
font-size: 26rpx;
color: #333333;
resize: none;
margin-top: 10rpx;
}
.refund-attachment {
margin-top: 20rpx;
}
.upload-btn {
display: flex;
align-items: center;
font-size: 26rpx;
color: #1989fa;
}
.upload-icon {
width: 40rpx;
height: 40rpx;
margin-right: 10rpx;
}
.contact-info {
font-size: 26rpx;
color: #666666;
margin-top: 10rpx;
text-align: right;
}
.submit-btn {
width: 100%;
height: 90rpx;
background-color: #ff4d4f;
color: #ffffff;
font-size: 32rpx;
border-radius: 45rpx;
margin-top: 30rpx;
display: flex;
justify-content: center;
align-items: center;
border: none;
}
.arrow-right {
display: inline-block;
width: 14rpx;
height: 14rpx;
border-top: 2rpx solid #999999;
border-right: 2rpx solid #999999;
transform: rotate(45deg);
margin-left: 10rpx;
}
/* 图片上传 */
.imgCon {
font-size: 18rpx;
color: #222222;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 120rpx;
height: 120rpx;
background: #F6F7FB;
border: 1rpx solid #D1D1D1;
border-radius: 10rpx 10rpx 10rpx 10rpx;
margin: 20rpx 0;
}
.imgCon image {
width: 34rpx;
height: 34rpx;
margin-bottom: 8rpx;
}
.u-upload__wrap__preview {
width: 120rpx;
height: 120rpx;
border-radius: 10rpx 0rpx 10rpx 10rpx !important;
margin-top: 20rpx !important;
}
.u-upload__wrap__preview__image {
width: 100% !important;
height: 100% !important;
object-fit: cover;
}

View File

@ -0,0 +1,418 @@
<template>
<view class="container">
<view class="tabs">
<view v-for="(item, index) in categoryList" :key="index"
:class="['tabItem', selectedTab === index ? 'active2' : '']" @click="selectTab(index, item)">
{{ item.category_name }}
</view>
</view>
<view class="content">
<view v-if="selectedTab === 6">
<awaitRated :orderData="orderData" />
</view>
<view v-else-if="selectedTab === 7">
<rated :orderData="orderData" />
</view>
<view v-else-if="selectedTab === 8">
<afterSale :afterSaleList="afterSaleList" @revokeApply="revokeApply" />
</view>
<view v-else>
<view v-for="(item, index) in orderData" :key="index">
<view class="contentList">
<!-- 订单头部信息 -->
<view class="order-header" @click="toDetails(item)">
<view class="orderTitle">
<view class="orderTitleSupplier">{{ item.supplier_name }}
<view v-if="item.order_status == 6 || item.order_status == 5" class="status3">{{
getOrderStatus(item.order_status) }}</view>
<view v-else-if="item.order_status == 7" class="status2">
<img src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/myOrder/refund.png" />
{{ getOrderStatus(item.order_status) }}
</view>
<view v-else class="order_status">{{
getOrderStatus(item.order_status)
}}</view>
</view>
<text>提交订单{{ item.order_time }}</text>
</view>
</view>
<!-- 商品列表 -->
<view class="goods-list" @click="toDetails(item)">
<view v-for="(goods, goodsIndex) in item.commodity_order_item_list" :key="goodsIndex" class="goods-item">
<image :src="goods.commodity_pic" class="goods-img"></image>
</view>
</view>
<!-- 订单底部信息 -->
<view class="order-footer">
<view class="order-footer-text" @click="toDetails(item)">{{ item.total_count }}件商品共计
<text> {{ item.total_amount }}</text>
</view>
<view>
<view class="btn-group" v-if="item.order_status === 1">
<button class="cancel-btn" @click="cancelOrder(item)">
取消订单
</button>
<!-- <button class="yfd-btn" @click="cancelOrder">运费单</button> -->
<button class="pay-btn" @click="goToPay(item)">立即支付</button>
</view>
<view class="btn-group" v-if="item.order_status === 3">
<button class="cancel-btn" @click="applyRefund(item)">申请退款</button>
</view>
<view class="btn-group" v-if="item.order_status === 4">
<button class="cancel-btn" @click="viewLogistics(item)">查看物流</button>
<button class="pay-btn" @click="confirmReceiving(item)">确认收货</button>
</view>
<view class="btn-group" v-if="item.order_status === 5">
<text class="afterSaleNum">{{ item.commodity_order_item_list.length }}笔售后</text>
<button class="cancel-btn" @click="afterSale(item)">退换/售后</button>
<button class="pay-btn" @click="orderEvaluate(item)" :disabled="item.evauate_status === 1">评价</button>
</view>
<view class="btn-group" v-if="item.order_status === 6">
<!-- <button class="cancel-btn" @click="orderEvaluate">
服务评价
</button>
<button class="yfd-btn" @click="cancelOrder">运费单</button> -->
<!-- <button class="pay-btn" @click="goToPay(item)">再来一单</button> -->
</view>
<view class="btn-group" v-if="item.order_status === 7">
<!-- <button class="pay-btn" @click="goToPay(item)">再来一单</button> -->
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!------------------ 以下为popup ------------------>
<!-- 取消订单 -->
<cancel-order-popup :showPopup.sync="showPopup" @orderCancelled="handleOrderCancelled" />
<!-- 申请退款 -->
<refund-popup :showPopup.sync="showTkPopup" @refundConfirmed="handleRefundConfirmed" />
<!-- 退换 售后 - 选择退款原因 -->
<!-- 售后弹窗组件 -->
<after-sale-popup :afterSaleGoods.sync="afterSaleGoods" :orderItem="afterSaleOrderItem" ref="afterSalePopupRef"
@refundSubmitted="handleRefundSubmitted" :order_cate="2" />
<!-- 无售后商品 -->
<view>
<u-popup ref="popup" mode="center" :show="noSalePopup" :round="15" :mask-close-able="false">
<view class="noSalePopup">
<view>抱歉该订单已无可申请售后的商品</view>
<button class="noSalePopup-btn" @click="noSalePopup = false">我知道了</button>
</view>
</u-popup>
</view>
</view>
</template>
<script>
import {
isPhone,
picUrl,
request,
upload,
NavgateTo
} from '../../../utils';
import { apiArr as afterSaleApi } from "../../../api/afterSale";
import Rated from "../rated/rated.vue";
import AwaitRated from "../awaitRated/awaitRated.vue";
import AfterSale from "../afterSale/index.vue";
import cancelOrderPopup from '../index/popup/cancelOrder/cancelOrder.vue';
import refundPopup from '../index/popup/refund/refund.vue';
import afterSalePopup from '../index/popup/afterSale/index.vue';
export default {
components: {
Rated,
AwaitRated,
AfterSale,
cancelOrderPopup,
refundPopup,
afterSalePopup
},
data() {
return {
categoryList: [
{ category_name: "全部" },
{ category_name: "待付款" },
{ category_name: "备货中" },
{ category_name: "待自提" },
{ category_name: "已完成" },
{ category_name: "已取消" },
{ category_name: "待评价" },
{ category_name: "已评价" },
{ category_name: "售后" },
],
selectedTab: 0,
// orderData: orderMockData,
orderData: [],
showPopup: false,//
afterSaleGoods: [],//
afterSaleOrderItem: {},//
noSalePopup: false,//
showTkPopup: false,//退
afterSaleItem: '',//
afterSaleList: [],//
selectStatus: '',//status
evaluateStatus: '',//
};
},
methods: {
selectTab(index, item) {
console.log("🚀 ~ selectTab ~ index:", index)
console.log("🚀 ~ selectTab ~ item:", item)
this.selectedTab = index;
if (index == 6) {
this.evaluateStatus = 2;
this.selectStatus = ''
} else if (index == 7) {
this.evaluateStatus = 1;
this.selectStatus = ''
} else if (index == 2) {
this.selectStatus = 3;
this.evaluateStatus = ''
} else {
this.selectStatus = index > 2 ? index + 1 : index;
this.evaluateStatus = ''
}
this.getOrderList();
},
//
cancelOrder(item) {
this.afterSaleItem = item;
this.showPopup = true
},
//
handleOrderCancelled(data) {
const params = {
order_id: this.afterSaleItem.id,
method: 1,
cancel_reason: data.reason,
}
request(afterSaleApi.cancelOrConfirm, "POST", params).then((res) => {
this.getOrderList();
});
},
//
afterSale(item) {
this.afterSaleGoods = item.commodity_order_item_list;
//
this.afterSaleOrderItem = item;
this.$refs.afterSalePopupRef.openAfterSalePopup();
console.log(item.id);
//
// request(afterSaleApi.isAllow, "POST", {
// order_id: item.id,
// }).then((res) => {
// if (res.data.is_allow_after_sales) {
// this.afterSaleGoods = res.data.allow_items;
// // this.selectedAsGood = item.commodity_order_item_list[0].id;
// this.$refs.afterSalePopupRef.openAfterSalePopup();
// } else {
// this.noSalePopup = true
// }
// });
},
// 退
handleRefundSubmitted(data) {
const params = {
nick_name: uni.getStorageSync("nickName"),
order_id: this.afterSaleOrderItem.id,
goods_ids: this.afterSaleOrderItem.commodity_order_item_list.map(item => item.goods_id),
after_sales_type: data.afterSalesType,
after_sales_reason: data.refundReason,
refund_amount: this.afterSaleOrderItem.total_amount,
application_description: data.refundDescription,
// URL
application_images: data.imgList && data.imgList.length > 0 ?
data.imgList.map(img => img.url).join(',') : '',
order_status: 5,
receiving_address: data.merchantAddress,
change_goods_id: data.changeServiceId
}
request(afterSaleApi.afterSaleCreate, "POST", params).then((res) => {
this.getOrderList();
});
},
// 退
applyRefund(item) {
this.afterSaleItem = item;
this.showTkPopup = true
},
//
viewLogistics(item) {
},
// 退
handleRefundConfirmed(data) {
const params = {
order_id: this.afterSaleItem.id,
}
request(afterSaleApi.orderRefund, "POST", params).then((res) => {
uni.showToast({ title: "退款成功", icon: "none" });
this.getOrderList();
});
},
//
confirmReceiving(item) {
uni.showModal({
title: "确认收货",
content: "确认收货后订单状态将变为【已完成】,如有售后需求可正常申请退款/售后,确定要确认收货吗?",
success: (res) => {
if (res.confirm) {
const params = {
order_id: item.id,
method: 2,
}
request(afterSaleApi.cancelOrConfirm, "POST", params).then((res) => {
this.getOrderList();
});
}
},
});
},
goToPay(item) {
//
const transformedItems = item.commodity_order_item_list.map(goods => ({
isafterSale: true,
orderId: item.id,
commodity_goods_info: {
commodity_brief: "",
commodity_id: goods.commodity_id,
commodity_pic: goods.commodity_pic,
goods_alias: goods.goods_name,
goods_carousel: "",
goods_detail_pic: "",
goods_intro: goods.goods_name,
goods_name: goods.goods_name,
goods_no: "",
goods_spec: goods.goods_spec,
goods_status: 1,
goods_unit: goods.goods_unit,
goods_video: "",
group_buy_activity_info: null,
id: goods.id,
is_same_day: goods.is_same_day || false,
is_support_same_day: goods.is_support_same_day || 2,
market_price: goods.sales_price,
sales_price: goods.sales_price,
stock_quantity: goods.stock_quantity
},
commodity_id: goods.commodity_id,
count: goods.count,
create_time: item.create_time,
goods_id: goods.goods_id,
group_buy_id: 0,
id: goods.id,
supplier_id: item.supplier_id,
supplier_name: item.supplier_name,
update_time: item.update_time,
user_id: item.user_id
}));
NavgateTo(`/packages/shop/groupPurchaseSubmit/index?shopCarList=${JSON.stringify(transformedItems)}`)
},
toDetails(item) {
NavgateTo(
`/packages/myOrders/orderDetails/index?item=${JSON.stringify(item)}`
);
},
checkLogistics() {
NavgateTo(`/packages/myOrders/logistics/index`);
},
orderEvaluate(item) {
NavgateTo(`/packages/myOrders/orderEvaluate/index?item=${JSON.stringify(item)}`);
},
getOrderStatus(order_status) {
switch (order_status) {
case 1:
return "待付款";
case 2:
return "支付中";
case 3:
return "备货中";
case 4:
return "待自提";
case 5:
return "已完成";
case 6:
return "已取消";
case 7:
return "退款中";
case 8:
return "已退款";
}
},
getOrderList() {
this.orderData = []
request(afterSaleApi.orderList, "POST", {
order_status: this.selectStatus,
evaluate_status: this.evaluateStatus,
user_id: uni.getStorageSync("userId"),
}).then((res) => {
res.order_list?.forEach(item => {
item.commodity_order_item_list?.forEach(good => {
good.commodity_pic = picUrl + good.commodity_pic;
})
})
this.orderData = res.order_list.filter(item => item.order_cate === 2);
this.getAfterSaleList();
});
},
getAfterSaleList() {
const params = {
user_id: uni.getStorageSync('userId'),
order_cate: 2,
}
request(afterSaleApi.afterSalesList, "POST", params).then((res) => {
res.after_sales_list?.forEach(item => {
item.commodity_order_item?.forEach(good => {
good.commodity_pic = picUrl + good.commodity_pic;
})
})
this.afterSaleList = res.after_sales_list;
});
},
//
revokeApply() {
this.getOrderList();
}
},
onLoad(options) {
this.getOrderList();
},
onShow() {
this.getOrderList();
uni.removeStorageSync('afterSaleItem')
},
};
</script>
<style>
@import url("./index.css");
</style>

View File

@ -76,10 +76,10 @@
服务评价
</button>
<button class="yfd-btn" @click="cancelOrder">运费单</button> -->
<button class="pay-btn" @click="goToPay(item)">再来一单</button>
<!-- <button class="pay-btn" @click="goToPay(item)">再来一单</button> -->
</view>
<view class="btn-group" v-if="item.order_status === 7">
<button class="pay-btn" @click="goToPay(item)">再来一单</button>
<!-- <button class="pay-btn" @click="goToPay(item)">再来一单</button> -->
</view>
</view>
</view>
@ -98,7 +98,7 @@
<!-- 退换 售后 - 选择退款原因 -->
<!-- 售后弹窗组件 -->
<after-sale-popup :afterSaleGoods.sync="afterSaleGoods" :orderItem="afterSaleOrderItem" ref="afterSalePopupRef"
@refundSubmitted="handleRefundSubmitted" />
@refundSubmitted="handleRefundSubmitted" :order_cate="1" />
<!-- 无售后商品 -->
<view>
@ -144,10 +144,10 @@ export default {
categoryList: [
{ category_name: "全部" },
{ category_name: "待付款" },
{ category_name: "已取消" },
{ category_name: "待发货" },
{ category_name: "配送中" },
{ category_name: "已完成" },
{ category_name: "已取消" },
{ category_name: "待评价" },
{ category_name: "已评价" },
{ category_name: "售后" },
@ -177,10 +177,10 @@ export default {
this.evaluateStatus = 1;
this.selectStatus = ''
} else if (index == 2) {
this.selectStatus = 6;
this.selectStatus = 3;
this.evaluateStatus = ''
} else {
this.selectStatus = index;
this.selectStatus = index > 2 ? index + 1 : index;
this.evaluateStatus = ''
}
this.getOrderList();
@ -262,16 +262,11 @@ export default {
// 退
handleRefundConfirmed(data) {
const params = {
nick_name: uni.getStorageSync("nickName"),
const params = {
order_id: this.afterSaleItem.id,
goods_ids: this.afterSaleItem.commodity_order_item_list.map(item => item.goods_id),
after_sales_type: 1,
after_sales_reason: data.reason,
refund_amount: this.afterSaleItem.total_amount,
order_status: 3
}
request(afterSaleApi.afterSaleCreate, "POST", params).then((res) => {
request(afterSaleApi.orderRefund, "POST", params).then((res) => {
uni.showToast({ title: "退款成功", icon: "none" });
this.getOrderList();
});
},
@ -297,10 +292,11 @@ export default {
goToPay(item) {
//
const transformedItems = item.commodity_order_item_list.map(goods => ({
checked: true,
isafterSale: true,
orderId: item.id,
commodity_goods_info: {
commodity_brief: "",
commodity_id: goods.goods_id,
commodity_id: goods.commodity_id,
commodity_pic: goods.commodity_pic,
goods_alias: goods.goods_name,
goods_carousel: "",
@ -320,10 +316,10 @@ export default {
sales_price: goods.sales_price,
stock_quantity: goods.stock_quantity
},
commodity_id: goods.goods_id,
commodity_id: goods.commodity_id,
count: goods.count,
create_time: item.create_time,
goods_id: goods.id,
goods_id: goods.goods_id,
group_buy_id: 0,
id: goods.id,
supplier_id: item.supplier_id,
@ -381,13 +377,14 @@ export default {
good.commodity_pic = picUrl + good.commodity_pic;
})
})
this.orderData = res.order_list;
this.orderData = res.order_list.filter(item => item.order_cate == 1);
this.getAfterSaleList();
});
},
getAfterSaleList() {
const params = {
user_id: uni.getStorageSync('userId'),
order_cate: 1,
}
request(afterSaleApi.afterSalesList, "POST", params).then((res) => {
res.after_sales_list?.forEach(item => {

View File

@ -27,7 +27,7 @@
<view class="status-bar" v-if="status === '6'">
<view class="status">已取消</view>
<view class="countdown">订单已取消</view>
<view class="tips">您的订单已取消再来一单吧</view>
<!-- <view class="tips">您的订单已取消再来一单吧</view> -->
</view>
<!-- <view class="status-bar" v-if="status === '退款中'">
<view class="status">已完成</view>
@ -150,7 +150,7 @@
<view class="bottom-buttons" v-if="status === '6'">
<!-- <button class="yfd-btn" @click="cancelOrder">运费单</button> -->
<!-- <button class="cancel-btn" @click="cancelOrder">服务评价</button> -->
<button class="pay-btn" @click="gotoPayment">再来一单</button>
<!-- <button class="pay-btn" @click="gotoPayment">再来一单</button> -->
</view>
</view>
</view>
@ -226,16 +226,10 @@ export default {
success: (res) => {
if (res.confirm) {
const params = {
nick_name: uni.getStorageSync("nickName"),
order_id: this.orderInfo.id,
goods_ids: this.orderInfo.commodity_order_item_list.map(item => item.goods_id),
after_sales_type: 1,
after_sales_reason: '用户申请退款',
refund_amount: this.orderInfo.total_amount,
order_status: 3
}
request(afterSaleApi.afterSaleCreate, "POST", params).then((res) => {
uni.showToast({ title: "退款申请已提交", icon: "none" });
request(afterSaleApi.orderRefund, "POST", params).then((res) => {
uni.showToast({ title: "退款成功", icon: "none" });
setTimeout(() => {
uni.navigateBack();
}, 1500);
@ -269,7 +263,8 @@ export default {
gotoPayment() {
//
const transformedItems = this.orderInfo.commodity_order_item_list.map(goods => ({
checked: true,
isafterSale: true,
orderId: item.id,
commodity_goods_info: {
commodity_brief: "",
commodity_id: goods.goods_id,

View File

@ -118,8 +118,8 @@ export default {
handlePay() {
if (this.isFormValid) {
uni.showToast({
title: '缴费成功',
icon: 'success'
title: '该功能暂未实现',
icon: 'none'
});
}
},

View File

@ -43,7 +43,7 @@
<view class="group-price">
<view>{{ item.commodity_goods_info.sales_price }}/{{
item.commodity_goods_info.goods_unit
}}</view>
}}</view>
<!-- 运费 -->
<view class="goods-desc" style="margin-top: 10rpx;">运费 {{
item.commodity_goods_info.freight }}</view>
@ -233,7 +233,7 @@
已支付成功
</view>
<view class="boxshadow_img">
<view style="margin-bottom: 15rpx;">{{verifyCode}}</view>
<view style="margin-bottom: 15rpx;">{{ verifyCode }}</view>
<image
src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/shop_share_img.png">
</image>
@ -428,7 +428,7 @@ export default {
const currentTime = new Date().getTime();
const startTime = new Date(item.commodity_goods_info.group_buy_activity_info?.start_time).getTime();
const endTime = new Date(item.commodity_goods_info.group_buy_activity_info?.end_time).getTime();
if (item.count >= item.commodity_goods_info.stock_quantity) {
uni.showToast({
title: '库存不足',
@ -436,7 +436,7 @@ export default {
});
return
}
if (currentTime >= startTime && currentTime <= endTime) {
if (item.count == 0) {
item.count += item.commodity_goods_info.min_order_quantity
@ -540,7 +540,7 @@ export default {
//
const currentTime = new Date().getTime();
let isGroupBuyValid = true;
//
for (let supplierId in this.supplierGroups) {
const group = this.supplierGroups[supplierId];
@ -551,7 +551,7 @@ export default {
isGroupBuyValid = false;
break;
}
const startTime = new Date(activityInfo.start_time).getTime();
const endTime = new Date(activityInfo.end_time).getTime();
if (!(currentTime >= startTime && currentTime <= endTime)) {
@ -562,109 +562,134 @@ export default {
if (!isGroupBuyValid) break;
}
const params = {
user_id: uni.getStorageSync('userId'),
is_group_buy: isGroupBuyValid,
goods_list: Object.keys(this.supplierGroups).map(supplierId => {
const group = this.supplierGroups[supplierId];
const firstItem = group[0];
// isafterSaletrue
const hasAfterSaleItem = this.carList.some(item => item.isafterSale === true);
const orderIdFromAfterSale = hasAfterSaleItem ? this.carList.find(item => item.isafterSale === true)?.orderId : null;
// id
this.group_buy_activity_id = firstItem.commodity_goods_info.group_buy_activity_id;
// trans_type
// : 71, App: 51
const systemInfo = uni.getSystemInfoSync();
let trans_type = 51; // App
// id
const ztAddress = this.defZTAddress.find(adItem => adItem.id == supplierId) || {};
return {
supplier_id: firstItem.supplier_id,
supplier_name: firstItem.supplier_name || '',
is_same_day: firstItem.commodity_goods_info.is_same_day,
receiving_name: ztAddress.name || '',
receiving_phone: ztAddress.phone || '',
receiving_address: ztAddress.address || '',
group_buy_activity_id: firstItem.commodity_goods_info.group_buy_activity_id,
goods_and_count: group.map(item => {
const activityInfo = item.commodity_goods_info.group_buy_activity_info;
const isGroupBuy = activityInfo &&
currentTime >= new Date(activityInfo.start_time).getTime() &&
currentTime <= new Date(activityInfo.end_time).getTime();
return {
goods_id: item.goods_id,
count: item.count,
price: isGroupBuy ? item.commodity_goods_info.group_buy_price : item.commodity_goods_info.sales_price,
freight: item.commodity_goods_info.freight,
}
})
}
})
//
if (systemInfo.platform === 'devtools' || systemInfo.platform === 'unknown') {
trans_type = 71; //
}
//
// #ifdef MP
trans_type = 71; //
// #endif
request(apiArr.createOrder, "POST", params).then(resVal => {
// trans_type
// : 71, App: 51
const systemInfo = uni.getSystemInfoSync();
let trans_type = 51; // App
//
if (systemInfo.platform === 'devtools' || systemInfo.platform === 'unknown') {
trans_type = 71; //
}
//
// #ifdef MP
trans_type = 71; //
// #endif
// #ifdef APP-PLUS
trans_type = 51; // App
// #endif
// #ifdef APP-PLUS
trans_type = 51; // App
// #endif
// isafterSaletruecreateOrder
if (hasAfterSaleItem && orderIdFromAfterSale) {
const param = {
order_id: resVal.order_id,
order_id: orderIdFromAfterSale,
user_id: uni.getStorageSync('userId'),
trans_type: trans_type
}
request(apiArr.mergePreorder, "POST", param).then(res => {
this.handleMergePreorderResponse(res, orderIdFromAfterSale);
})
} else {
//
const params = {
user_id: uni.getStorageSync('userId'),
is_group_buy: isGroupBuyValid,
goods_list: Object.keys(this.supplierGroups).map(supplierId => {
const group = this.supplierGroups[supplierId];
const firstItem = group[0];
if (res && res.timeStamp && res.nonceStr && res.package && res.signType && res.paySign) {
//
uni.requestPayment({
timeStamp: res.timeStamp,
nonceStr: res.nonceStr,
package: res.package,
signType: res.signType,
paySign: res.paySign,
success: (payRes) => {
const params = {
order_id: resVal.order_id,
from: 2,
group_buy_activity_id: this.group_buy_activity_id,
// id
this.group_buy_activity_id = firstItem.commodity_goods_info.group_buy_activity_id;
// id
const ztAddress = this.defZTAddress.find(adItem => adItem.id == supplierId) || {};
return {
supplier_id: firstItem.supplier_id,
supplier_name: firstItem.supplier_name || '',
is_same_day: firstItem.commodity_goods_info.is_same_day,
receiving_name: ztAddress.name || '',
receiving_phone: ztAddress.phone || '',
receiving_address: ztAddress.address || '',
group_buy_activity_id: firstItem.commodity_goods_info.group_buy_activity_id,
goods_and_count: group.map(item => {
const activityInfo = item.commodity_goods_info.group_buy_activity_info;
const isGroupBuy = activityInfo &&
currentTime >= new Date(activityInfo.start_time).getTime() &&
currentTime <= new Date(activityInfo.end_time).getTime();
return {
goods_id: item.goods_id,
count: item.count,
price: isGroupBuy ? item.commodity_goods_info.group_buy_price : item.commodity_goods_info.sales_price,
freight: item.commodity_goods_info.freight,
}
request(apiArr.queryOrder, "POST", params).then(res => {
this.verifyCode = res.verification_code
this.boxshadow1 = true
})
},
fail: (payErr) => {
uni.showToast({
title: payErr.errMsg == 'requestPayment:fail cancel' ? '用户取消支付' : '支付失败',
icon: 'none'
})
},
complete: () => {
//
}
})
}
})
}
request(apiArr.createOrder, "POST", params).then(resVal => {
const param = {
order_id: resVal.order_id,
user_id: uni.getStorageSync('userId'),
trans_type: trans_type
}
request(apiArr.mergePreorder, "POST", param).then(res => {
this.handleMergePreorderResponse(res, resVal.order_id);
})
})
}
},
// mergePreorder
handleMergePreorderResponse(res, orderId) {
if (res && res.timeStamp && res.nonceStr && res.package && res.signType && res.paySign) {
//
uni.requestPayment({
timeStamp: res.timeStamp,
nonceStr: res.nonceStr,
package: res.package,
signType: res.signType,
paySign: res.paySign,
success: (payRes) => {
const params = {
order_id: orderId,
from: 2,
group_buy_activity_id: this.group_buy_activity_id,
}
request(apiArr.queryOrder, "POST", params).then(res => {
this.verifyCode = res.verification_code
this.boxshadow1 = true
})
} else {
console.error("获取支付参数失败,缺少必要参数")
},
fail: (payErr) => {
uni.showToast({
title: '获取支付信息失败',
title: payErr.errMsg == 'requestPayment:fail cancel' ? '已取消支付' : '支付失败',
icon: 'none'
})
const params = {
order_ids: orderId,
}
request(apiArr.cancelPay, "POST", params).then(res => {
})
},
complete: () => {
//
}
})
})
} else {
console.error("获取支付参数失败,缺少必要参数")
uni.showToast({
title: '获取支付信息失败',
icon: 'none'
})
}
},
//
copyAddress() {

View File

@ -0,0 +1,61 @@
/* 页面容器样式 */
page {
background-color: #f6f7fb;
overflow-y: hidden;
}
.container {
height: 90vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
/* 按钮包装器样式 */
.buttons-wrapper {
display: flex;
flex-direction: column;
align-items: center;
gap: 30rpx;
padding: 40rpx;
}
/* 按钮基础样式 */
.button {
width: 400rpx;
height: 90rpx;
background: #ff7252;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 45rpx;
font-size: 32rpx;
font-weight: 500;
box-shadow: 0 6rpx 20rpx rgba(102, 126, 234, 0.3);
transition: all 0.3s ease;
letter-spacing: 5rpx;
margin: 10rpx 0;
}
/* 按钮点击效果 */
.button:active {
transform: scale(0.98);
box-shadow: 0 3rpx 10rpx rgba(102, 126, 234, 0.2);
}
/* 按钮1特有样式 */
.button:nth-child(1) {
/* background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); */
}
/* 按钮2特有样式 */
.button:nth-child(2) {
/* background: linear-gradient(135deg, #ee9ca7 0%, #ffdde1 100%); */
}
/* 按钮3特有样式 */
.button:nth-child(3) {
/* background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); */
}

View File

@ -0,0 +1,45 @@
<template>
<view class="container">
<view class="buttons-wrapper">
<view class="button" @click="handleButtonClick('1')">
临停缴费
</view>
<view class="button" @click="handleButtonClick('2')">
停车订单
</view>
<view class="button" @click="handleButtonClick('3')">
车辆管理
</view>
</view>
<nav-footer :current="1" />
</view>
</template>
<script>
import {
isPhone,
picUrl,
request,
upload,
NavgateTo
} from '../../../utils';
export default {
methods: {
handleButtonClick(val) {
if(val == 1){
NavgateTo(`/packages/park/temporaryOrder/index`);
}else if(val == 2){
NavgateTo(`/packages/park/parkOrder/index`);
}else if(val == 3){
NavgateTo(`/packages/park/index/index`);
}
}
}
}
</script>
<style>
@import url("./index.css");
</style>

View File

@ -10,7 +10,7 @@
</view>
<!-- 背景图片区域 -->
<view class="bg-image-container">
<image class="bg-image" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/test.png" mode="aspectFill"></image>
<image class="bg-image" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/workOrderDashboardImg.png" mode=""></image>
</view>
<view class="work-order-section">
<view v-for="(item, index) in 9" :key="index">

View File

@ -160,8 +160,8 @@
{
"path": "myCommunity/index",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom"
"navigationBarTitleText": "我的房产",
"navigationBarBackgroundColor": "#FFF"
}
},
{
@ -781,6 +781,12 @@
"navigationBarTitleText": "我的订单"
}
},
{
"path": "groupOrders/index",
"style": {
"navigationBarTitleText": "团购订单"
}
},
{
"path": "freightBill/index",
"style": {
@ -939,6 +945,21 @@
}
}
]
},
{
"root": "packages/smartDevice",
"pages": [
{
"path": "index/index",
"style": {
"navigationBarTitleText": "智能设备",
"navigationBarBackgroundColor": "#ffffff",
"usingComponents": {
"nav-footer": "/components/nav/nav"
}
}
}
]
}
],
"globalStyle": {

View File

@ -1,4 +1,4 @@
page{
page {
overflow-y: hidden;
}
@ -41,7 +41,7 @@ page{
background-color: #f9f9f9;
}
.mainBox{
.mainBox {
height: 80.5vh;
margin-top: 10rpx;
overflow-y: auto;
@ -230,7 +230,7 @@ page {
margin-top: 40rpx;
}
.tabList text{
.tabList text {
font-size: 30rpx;
}
@ -273,14 +273,14 @@ page {
.serverList1_left {
display: block;
width: 330rpx;
height: 450rpx;
margin-right: 17rpx;
width: 350rpx;
height: 454rpx;
margin-right: 2rpx;
}
.serverList1_left image {
height: 450rpx;
width: 330rpx;
width: 350rpx;
height: 454rpx;
object-fit: cover;
border-radius: 20rpx;
}
@ -291,8 +291,8 @@ page {
}
.serverItemRight1 {
width: 365rpx;
height: 220rpx;
width: 350rpx;
height: 222rpx;
}
.serverItemRight1 image {
@ -300,8 +300,8 @@ page {
}
.serverItemRight2 {
width: 365rpx;
height: 220rpx;
width: 350rpx;
height: 222rpx;
margin-top: 10rpx;
}
@ -356,7 +356,6 @@ page {
font-size: 26rpx;
color: #222222;
position: relative;
margin-bottom: 12rpx;
}
.serverList_left {
@ -370,6 +369,10 @@ page {
height: 100%;
}
.serverList_left_img {
border-radius: 20rpx;
}
.serverList_right {
flex: 1;
display: flex;
@ -388,10 +391,12 @@ page {
.serverItem1 {
background: linear-gradient(139deg, #FEF4F4 0%, #FEDCD2 100%);
margin-right: 12rpx;
margin-bottom: 14rpx;
}
.serverItem2 {
background: #FFF4E5;
margin-bottom: 14rpx;
}
.serverItem3 {
@ -401,11 +406,13 @@ page {
.serverItem4 {
background: #F0FDFF;
margin-bottom: 14rpx;
}
.serverItem5 {
background: #EFF7FF;
margin-right: 12rpx;
margin-bottom: 14rpx;
}
.serverItem6 {
@ -414,50 +421,50 @@ page {
.serverItem1 image {
position: absolute;
right: 0rpx;
right: 13rpx;
bottom: 0rpx;
width: 120rpx;
height: 70rpx;
width: 91rpx;
height: 95rpx;
}
.serverItem2 image {
position: absolute;
right: 0rpx;
bottom: 0rpx;
width: 120rpx;
height: 70rpx;
right: 4rpx;
bottom: 1rpx;
width: 110rpx;
height: 78rpx;
}
.serverItem3 image {
position: absolute;
right: 0rpx;
bottom: 0rpx;
width: 120rpx;
height: 70rpx;
right: 18rpx;
bottom: 10rpx;
width: 97rpx;
height: 57rpx;
}
.serverItem4 image {
position: absolute;
right: 0rpx;
bottom: 0rpx;
width: 120rpx;
height: 70rpx;
right: 21rpx;
bottom: 10rpx;
width: 87rpx;
height: 89rpx;
}
.serverItem5 image {
position: absolute;
right: 0rpx;
bottom: 0rpx;
width: 120rpx;
right: 9rpx;
bottom: 4rpx;
width: 109rpx;
height: 70rpx;
}
.serverItem6 image {
position: absolute;
right: 0rpx;
bottom: 0rpx;
height: 70rpx;
width: 120rpx;
right: 25rpx;
bottom: 14rpx;
height: 68rpx;
width: 72rpx;
}
.merchant {
@ -536,7 +543,7 @@ page {
.tab-item {
padding: 0 20rpx;
margin-right: 20rpx;
font-size: 24rpx;
font-size: 28rpx;
color: #333;
background-color: #ededed;
height: 50rpx;
@ -760,10 +767,9 @@ page {
.merchantItem {
display: flex;
padding-top: 30px;
padding-bottom: 30rpx;
padding-top: 20px;
padding-bottom: 20rpx;
border-bottom: 1rpx solid #EBEBEB;
;
}
.merchantItem_left {
@ -792,6 +798,7 @@ page {
.merchantItem_right_tit_left {
font-size: 30rpx;
color: #222222;
font-weight: bold;
}
.merchantItem_right_tit_right {

View File

@ -161,8 +161,8 @@ export default {
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/page_user_Group_1567.png",
name: "我的拼团",
url: "",
name: "购订单",
url: "/packages/myOrders/groupOrders/index",
},
{
image: "https://wechat-img-file.oss-cn-beijing.aliyuncs.com/property-img-file/page_user_Group_1565.png",

View File

@ -0,0 +1,6 @@
## 1.0.32025-04-17
优化代码
## 1.0.12025-04-16
完善README.md文档
## 1.0.02025-04-15
初次发布

View File

@ -0,0 +1,77 @@
npm下载量![downloads](https://img.shields.io/npm/dt/c-number-pad)
# 欢迎使用 c-number-pad
## 安装
```javascript
// npm安装方式插件市场导入无需执行此命令。插件市场导入地址https://ext.dcloud.net.cn/plugin?id=23049
npm install c-number-pad
```
## 使用方法
```javascript
<template>
<view class="box">
当前键盘输入的值:{{ numberVal }}
<c-number-pad
v-model="numberVal"
:show="show"
@confirm="onConfirm"
/>
</view>
</template>
<script>
// 以下导入方式按照安装方式导入,二选一
// 插件市场导入方法:无需引入,可直接使用
import cNumberPad from "c-number-pad/components/c-number-pad/c-number-pad.vue"; // npm导入方法
export default {
// npm导入需要添加components插件市场导入不需要
components: {
cNumberPad
},
data() {
return {
show: true,
numberVal: ""
}
},
methods: {
onConfirm(e) {
console.log("点击键盘确认键");
console.log("当前键盘输入的值:", e);
console.log("当前键盘输入的值:", this.numberVal);
}
}
}
</script>
```
## API
### Props
|参数|说明|类型|默认值|可选值|
|--|--|--|--|--|
|v-model|输入的值|String|-|-|
|show|是否显示键盘|Boolean|false|true|
|safeAreaInsetBottom|是否开启底部安全区适配|Boolean|true|false|
|showPoint|是否显示小数点|Boolean|true|false|
|decimalPlaces|限制小数位数,-1则无限长度|Number|2|-|
|maxlength|输入的长度0则无限长度|Number|0|-|
|zIndex|键盘层级|Number|800|-|
|fontSize|整体的字体大小单位rpx|String\|Number|32|-|
|boxBgColor|整个键盘的背景色|String|#f4f4f4|-|
|boxStyle|盒子样式|Object|{}|-|
|confirmText|确认键文字|String|确认|-|
|confirmColor|确认键文字颜色|String|#fff|-|
|confirmBg|确认键背景|String|linear-gradient(to bottom, #ff7979, #ff0000)|-|
|confirmStyle|确认键样式|Object|{}|-|
|keyBg|按键背景色0-9和小数点的背景色|String|#fff|-|
|delBg|删除键的背景色|String|#fff|-|
|delColor|删除图标的颜色|String|#000|-|
|delSize|删除图标的大小单位rpx|String\|Number|60|-|
### Events
|事件名|说明|回调参数|
|--|--|--|
|key|按键点击事件|e|
|del|删除按钮事件|-|
|confirm|右下角确认按钮事件|e|

View File

@ -0,0 +1,83 @@
.c-number-pad {
.box {
position: fixed;
left: var(--window-left);
right: var(--window-right);
bottom: 0;
display: flex;
padding: 10rpx;
font-size: 32rpx;
}
.safeBottomBox {
padding-bottom: calc(10rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(10rpx + env(safe-area-inset-bottom));
}
.left {
display: flex;
flex-wrap: wrap;
width: 75%;
font-weight: bold;
line-height: 90rpx;
.key-box {
width: calc(100% / 3);
padding: 0 10rpx 10rpx 0;
box-sizing: border-box;
.key {
background-color: #fff;
border-radius: 12rpx;
text-align: center;
}
}
.bottom {
display: flex;
width: 100%;
padding-right: 10rpx;
.zero + .point {
margin-left: 10rpx;
}
.zero {
flex: 2;
background-color: #fff;
border-radius: 12rpx;
text-align: center;
}
.point {
flex: 1;
background-color: #fff;
border-radius: 12rpx;
text-align: center;
}
}
}
.right {
flex-shrink: 0;
width: 25%;
.del {
display: flex;
justify-content: center;
align-items: center;
height: 90rpx;
background-color: #fff;
border-radius: 12rpx;
}
.sure {
height: calc(100% - 100rpx);
margin-top: 10rpx;
display: flex;
justify-content: center;
align-items: center;
border-radius: 12rpx;
color: #fff;
background: linear-gradient(to bottom, #ff7979, #ff0000);
}
}
.active {
background: #ddd;
transform: translate(2rpx, 2rpx);
}
.sure-active {
background: #ddd;
color: #333;
transform: translate(2rpx, 2rpx);
}
}

View File

@ -0,0 +1,182 @@
<template>
<view class="c-number-pad">
<view
class="box"
v-if="show"
:style="[finalBoxStyle]"
:class="{'safeBottomBox' : safeAreaInsetBottom}"
>
<view class="left">
<view
class="key-box"
v-for="(item, index) in keys"
:key="index"
>
<button
class="key"
hover-class="active"
:style="{background: `${keyBg}`}"
@touchend.prevent="tapKey(item)"
@mouseup.prevent="tapKey(item)"
>
{{ item }}
</button>
</view>
<view class="bottom">
<button
class="zero"
hover-class="active"
:style="{background: `${keyBg}`}"
@touchend.prevent="tapKey('0')"
@mouseup.prevent="tapKey('0')"
>
0
</button>
<button
class="point"
hover-class="active"
v-if="showPoint"
:style="{background: `${keyBg}`}"
@touchend.prevent="tapKey('.')"
@mouseup.prevent="tapKey('.')"
>
.
</button>
</view>
</view>
<view class="right">
<button
class="del"
hover-class="active"
:style="{background: `${delBg}`}"
@touchend.prevent="del"
@mouseup.prevent="del"
>
<image
class="del-icon"
:style="{width: `${delSize}rpx`, height: `${delSize}rpx`}"
:src="delIcon"
></image>
</button>
<button
class="sure"
hover-class="sure-active"
:style="[finalConfirmStyle]"
@touchend.prevent="confirm"
@mouseup.prevent="confirm"
>
{{ confirmText }}
</button>
</view>
</view>
</view>
</template>
<script>
/**
* @author cai
* @time 2025-04-14
* @description 数字键盘密码键盘带删除小数点确认键盘
* @prop {String} value 键盘输入的值v-model双向绑定
* @prop {Boolean} show 是否显示键盘默认false
* @prop {Boolean} safeAreaInsetBottom 是否开启底部安全区适配默认true
* @prop {Boolean} showPoint 是否显示小数点默认true
* @prop {Number} decimalPlaces 限制小数位数-1则无限长度默认2
* @prop {Number} maxlength 输入的长度0则无限长度默认0
* @prop {Number} zIndex 键盘层级
* @prop {String} fontSize 整体的字体大小单位rpx默认32
* @prop {String} boxBgColor 整个键盘的背景色默认#f4f4f4
* @prop {Object} boxStyle 盒子样式
* @prop {String} confirmText 确认键文字默认确认
* @prop {String} confirmColor 确认键文字颜色默认#fff
* @prop {String} confirmBg 确认键背景默认linear-gradient(to bottom, #ff7979, #ff0000)
* @prop {Object} confirmStyle 确认键样式
* @prop {String} keyBg 按键背景色0-9和小数点的背景色默认#fff
* @prop {String} delBg 删除键的背景色默认#fff
* @prop {String} delColor 删除图标的颜色默认#000
* @prop {String|Number} delSize 删除图标的大小单位rpx默认60
* @emits key 按键点击事件携带当前点击的值
* @emits del 删除按钮事件
* @emits confirm 右下角确认按钮事件携带键盘输入的值
*/
import props from "./props";
import delSvg from "./delSvg.js";
export default {
name: "c-number-pad",
props,
data() {
return {
tapValue: "", //
keys: ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
}
},
computed: {
//
finalBoxStyle() {
return {
zIndex: this.zIndex,
background: this.boxBgColor,
fontSize: `${this.fontSize}rpx`,
...this.boxStyle
}
},
//
finalConfirmStyle() {
return {
color: this.confirmColor,
background: this.confirmBg,
...this.confirmStyle
}
},
//
delIcon() {
const newSvg = delSvg.replace(/(fill=\"#000000\")/g, `fill="${this.delColor}"`);
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(newSvg)}`;
}
},
watch: {
value(val) {
this.tapValue = val;
},
tapValue(val) {
this.$emit("input", val);
}
},
methods: {
//
tapKey(item) {
this.$emit("key", item);
//
if (this.maxlength > 0 && this.maxlength === this.tapValue.length) return;
// 0
if (this.decimalPlaces === 0 && item === ".") return;
//
if (item === "." && this.tapValue.includes(".")) return;
//
const decimal = this.tapValue.includes(".") ? this.tapValue.split(".")[1] : "";
if (this.decimalPlaces > 0 && decimal.length === this.decimalPlaces) return;
// 0
if (item === "." && this.tapValue.length === 0) {
item = "0.";
}
//
this.tapValue += item;
},
//
del() {
this.$emit("del");
if (this.tapValue.length > 0) {
this.tapValue = this.tapValue.slice(0, this.tapValue.length - 1);
}
},
//
confirm() {
this.$emit("confirm", this.tapValue);
}
}
}
</script>
<style lang="scss" scoped>
@import "./c-number-pad.scss";
</style>

View File

@ -0,0 +1 @@
export default `<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1744701596132" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18947" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M469.391 637.46c4.735 4.734 11.836 7.1 16.57 7.1s11.836-2.366 16.57-7.1l99.42-99.421 99.421 99.42c4.735 4.735 11.836 7.102 16.57 7.102s11.836-2.367 16.57-7.102c9.47-9.468 9.47-23.671 0-33.14l-99.42-99.42 99.42-99.421c9.47-9.469 9.47-23.672 0-33.14s-23.67-9.469-33.14 0l-99.42 99.42-99.42-99.42c-9.47-9.469-23.672-9.469-33.14 0s-9.47 23.671 0 33.14l99.42 99.42-99.42 99.421c-7.102 9.469-7.102 23.672 0 33.14z" p-id="18948" fill="#000000"></path><path d="M341.565 814.996h591.789c26.038 0 47.343-21.304 47.343-47.343V239.777c0-26.039-21.305-47.343-47.343-47.343h-591.79c-11.835 0-23.67 0-310.097 298.262-9.468 9.468-9.468 23.671 0 33.14 288.793 291.16 298.262 291.16 310.098 291.16z m7.101-575.219h584.688v527.876H348.666C320.26 746.348 197.168 623.256 83.545 504.899 197.168 386.54 322.628 261.08 348.666 239.777z" p-id="18949" fill="#000000"></path></svg>`

View File

@ -0,0 +1,96 @@
export default {
// 输入的值
value: {
type: String,
default: ""
},
// 是否显示键盘
show: {
type: Boolean,
default: false
},
// 是否开启底部安全区适配
safeAreaInsetBottom: {
type: Boolean,
default: true
},
// 是否显示小数点
showPoint: {
type: Boolean,
default: true
},
// 限制小数位数,-1则无限长度默认2
decimalPlaces: {
type: Number,
default: 2
},
// 输入的长度0则无限长度
maxlength: {
type: Number,
default: 0
},
// 键盘层级
zIndex: {
type: Number,
default: 800
},
// 整体的字体大小
fontSize: {
type: [Number, String],
default: 32
},
// 整个键盘的背景色
boxBgColor: {
type: String,
default: "#f4f4f4"
},
// 盒子样式
boxStyle: {
type: Object,
default: () => {
return {}
}
},
// 确认键文字
confirmText: {
type: String,
default: "确认"
},
// 确认键字体颜色
confirmColor: {
type: String,
default: "#fff"
},
// 确认键背景
confirmBg: {
type: String,
default: "linear-gradient(to bottom, #ff7979, #ff0000)"
},
// 确认键样式
confirmStyle: {
type: Object,
default: () => {
return {}
}
},
// 按键背景色0-9和小数点的背景色
keyBg: {
type: String,
default: "#fff"
},
// 删除键的背景色
delBg: {
type: String,
default: "#fff"
},
// 删除图标的颜色
delColor: {
type: String,
default: "#000"
},
// 删除图标的大小
delSize: {
type: [Number, String],
default: 60
}
}

View File

@ -0,0 +1,88 @@
{
"id": "c-number-pad",
"name": "c-number-pad",
"author": "cai",
"displayName": "uniapp项目数字键盘密码键盘带删除、小数点、确认键盘",
"description": "uniapp项目数字键盘密码键盘带删除、小数点、确认键盘",
"version": "1.0.3",
"keywords": [
"数字键盘",
"密码键盘",
"键盘",
"小数"
],
"repository": "",
"engines": {
"HBuilderX": "^3.1.0"
},
"dcloudext": {
"type": "component-vue",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": "1814963581"
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/c-number-pad"
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "u"
},
"App": {
"app-vue": "y",
"app-nvue": "u",
"app-uvue": "u"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "u",
"Edge": "y",
"Firefox": "u",
"Safari": "u"
},
"小程序": {
"微信": "y",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"钉钉": "u",
"快手": "u",
"飞书": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}

749
yarn.lock
View File

@ -2,69 +2,66 @@
# yarn lockfile v1
"@parcel/watcher-android-arm64@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
"@babel/helper-string-parser@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz"
integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
"@parcel/watcher-darwin-arm64@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
"@babel/helper-validator-identifier@^7.27.1":
version "7.27.1"
"@parcel/watcher-darwin-x64@2.5.1":
version "2.5.1"
resolved "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz"
integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
"@babel/parser@^7.28.3":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz"
integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==
dependencies:
"@babel/types" "^7.28.4"
"@parcel/watcher-freebsd-x64@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
"@babel/types@^7.28.4":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz"
integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
"@parcel/watcher-linux-arm-glibc@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
"@jridgewell/gen-mapping@^0.3.5":
version "0.3.13"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz"
integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.5.0"
"@jridgewell/trace-mapping" "^0.3.24"
"@parcel/watcher-linux-arm-musl@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
"@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
"@parcel/watcher-linux-arm64-glibc@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
"@jridgewell/source-map@^0.3.3":
version "0.3.11"
resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.11.tgz"
integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==
dependencies:
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
"@parcel/watcher-linux-arm64-musl@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
version "1.5.5"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
"@parcel/watcher-linux-x64-glibc@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e"
integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
"@parcel/watcher-linux-x64-musl@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
"@parcel/watcher-win32-arm64@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
"@parcel/watcher-win32-ia32@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
version "0.3.30"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz"
integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@parcel/watcher-win32-x64@2.5.1":
version "2.5.1"
resolved "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
resolved "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz"
integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
"@parcel/watcher@^2.4.1":
@ -91,22 +88,285 @@
"@parcel/watcher-win32-ia32" "2.5.1"
"@parcel/watcher-win32-x64" "2.5.1"
"@types/json-schema@^7.0.8":
"@types/eslint-scope@^3.7.7":
version "3.7.7"
resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz"
integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
dependencies:
"@types/eslint" "*"
"@types/estree" "*"
"@types/eslint@*":
version "9.6.1"
resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz"
integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
"@types/estree@*", "@types/estree@^1.0.8":
version "1.0.8"
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz"
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.15"
resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
"@types/node@*":
version "24.3.0"
resolved "https://registry.npmmirror.com/@types/node/-/node-24.3.0.tgz"
integrity sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==
dependencies:
undici-types "~7.10.0"
"@vue/compiler-core@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz"
integrity sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==
dependencies:
"@babel/parser" "^7.28.3"
"@vue/shared" "3.5.21"
entities "^4.5.0"
estree-walker "^2.0.2"
source-map-js "^1.2.1"
"@vue/compiler-dom@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz"
integrity sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==
dependencies:
"@vue/compiler-core" "3.5.21"
"@vue/shared" "3.5.21"
"@vue/compiler-sfc@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz"
integrity sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==
dependencies:
"@babel/parser" "^7.28.3"
"@vue/compiler-core" "3.5.21"
"@vue/compiler-dom" "3.5.21"
"@vue/compiler-ssr" "3.5.21"
"@vue/shared" "3.5.21"
estree-walker "^2.0.2"
magic-string "^0.30.18"
postcss "^8.5.6"
source-map-js "^1.2.1"
"@vue/compiler-ssr@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz"
integrity sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==
dependencies:
"@vue/compiler-dom" "3.5.21"
"@vue/shared" "3.5.21"
"@vue/devtools-api@^6.0.0-beta.11":
version "6.6.4"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343"
resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz"
integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==
"@vue/reactivity@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.21.tgz"
integrity sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==
dependencies:
"@vue/shared" "3.5.21"
"@vue/runtime-core@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.21.tgz"
integrity sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==
dependencies:
"@vue/reactivity" "3.5.21"
"@vue/shared" "3.5.21"
"@vue/runtime-dom@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz"
integrity sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==
dependencies:
"@vue/reactivity" "3.5.21"
"@vue/runtime-core" "3.5.21"
"@vue/shared" "3.5.21"
csstype "^3.1.3"
"@vue/server-renderer@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.21.tgz"
integrity sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==
dependencies:
"@vue/compiler-ssr" "3.5.21"
"@vue/shared" "3.5.21"
"@vue/shared@3.5.21":
version "3.5.21"
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz"
integrity sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==
"@webassemblyjs/ast@^1.14.1", "@webassemblyjs/ast@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz"
integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==
dependencies:
"@webassemblyjs/helper-numbers" "1.13.2"
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
"@webassemblyjs/floating-point-hex-parser@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz"
integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==
"@webassemblyjs/helper-api-error@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz"
integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==
"@webassemblyjs/helper-buffer@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz"
integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==
"@webassemblyjs/helper-numbers@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz"
integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==
dependencies:
"@webassemblyjs/floating-point-hex-parser" "1.13.2"
"@webassemblyjs/helper-api-error" "1.13.2"
"@xtuc/long" "4.2.2"
"@webassemblyjs/helper-wasm-bytecode@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz"
integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==
"@webassemblyjs/helper-wasm-section@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz"
integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==
dependencies:
"@webassemblyjs/ast" "1.14.1"
"@webassemblyjs/helper-buffer" "1.14.1"
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
"@webassemblyjs/wasm-gen" "1.14.1"
"@webassemblyjs/ieee754@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz"
integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==
dependencies:
"@xtuc/ieee754" "^1.2.0"
"@webassemblyjs/leb128@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz"
integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==
dependencies:
"@xtuc/long" "4.2.2"
"@webassemblyjs/utf8@1.13.2":
version "1.13.2"
resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz"
integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==
"@webassemblyjs/wasm-edit@^1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz"
integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==
dependencies:
"@webassemblyjs/ast" "1.14.1"
"@webassemblyjs/helper-buffer" "1.14.1"
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
"@webassemblyjs/helper-wasm-section" "1.14.1"
"@webassemblyjs/wasm-gen" "1.14.1"
"@webassemblyjs/wasm-opt" "1.14.1"
"@webassemblyjs/wasm-parser" "1.14.1"
"@webassemblyjs/wast-printer" "1.14.1"
"@webassemblyjs/wasm-gen@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz"
integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==
dependencies:
"@webassemblyjs/ast" "1.14.1"
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
"@webassemblyjs/ieee754" "1.13.2"
"@webassemblyjs/leb128" "1.13.2"
"@webassemblyjs/utf8" "1.13.2"
"@webassemblyjs/wasm-opt@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz"
integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==
dependencies:
"@webassemblyjs/ast" "1.14.1"
"@webassemblyjs/helper-buffer" "1.14.1"
"@webassemblyjs/wasm-gen" "1.14.1"
"@webassemblyjs/wasm-parser" "1.14.1"
"@webassemblyjs/wasm-parser@^1.14.1", "@webassemblyjs/wasm-parser@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz"
integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==
dependencies:
"@webassemblyjs/ast" "1.14.1"
"@webassemblyjs/helper-api-error" "1.13.2"
"@webassemblyjs/helper-wasm-bytecode" "1.13.2"
"@webassemblyjs/ieee754" "1.13.2"
"@webassemblyjs/leb128" "1.13.2"
"@webassemblyjs/utf8" "1.13.2"
"@webassemblyjs/wast-printer@1.14.1":
version "1.14.1"
resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz"
integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==
dependencies:
"@webassemblyjs/ast" "1.14.1"
"@xtuc/long" "4.2.2"
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz"
integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
"@xtuc/long@4.2.2":
version "4.2.2"
resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
acorn-import-phases@^1.0.3:
version "1.0.4"
resolved "https://registry.npmmirror.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz"
integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==
acorn@^8.14.0, acorn@^8.15.0:
version "8.15.0"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz"
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz"
integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
dependencies:
ajv "^8.0.0"
ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
ajv@^6.12.5:
ajv-keywords@^5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz"
integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
dependencies:
fast-deep-equal "^3.1.3"
ajv@^6.12.5, ajv@^6.9.1:
version "6.12.6"
resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@ -116,6 +376,26 @@ ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ajv@^8.0.0:
version "8.17.1"
resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz"
integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
dependencies:
fast-deep-equal "^3.1.3"
fast-uri "^3.0.1"
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
ajv@^8.8.2, ajv@^8.9.0:
version "8.17.1"
resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz"
integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
dependencies:
fast-deep-equal "^3.1.3"
fast-uri "^3.0.1"
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz"
@ -128,6 +408,26 @@ braces@^3.0.3:
dependencies:
fill-range "^7.1.1"
browserslist@^4.24.0, "browserslist@>= 4.21.0":
version "4.25.3"
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.3.tgz"
integrity sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==
dependencies:
caniuse-lite "^1.0.30001735"
electron-to-chromium "^1.5.204"
node-releases "^2.0.19"
update-browserslist-db "^1.1.3"
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
caniuse-lite@^1.0.30001735:
version "1.0.30001735"
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz"
integrity sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==
chokidar@^4.0.0:
version "4.0.3"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz"
@ -135,17 +435,93 @@ chokidar@^4.0.0:
dependencies:
readdirp "^4.0.1"
chrome-trace-event@^1.0.2:
version "1.0.4"
resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz"
integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==
commander@^2.20.0:
version "2.20.3"
resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
csstype@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"
integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
electron-to-chromium@^1.5.204:
version "1.5.205"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.205.tgz"
integrity sha512-gBtbT7IgOHu7CwdtIiXwbNRD1l6oG6GAyanmwMCLVqaoGy92Jfe1dSHLiSj8xUEZNxOTIVlXuaAalMMD+S4y0w==
emojis-list@^3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz"
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
fast-deep-equal@^3.1.1:
enhanced-resolve@^5.17.3:
version "5.18.3"
resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz"
integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
entities@^4.5.0:
version "4.5.0"
resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
es-module-lexer@^1.2.1:
version "1.7.0"
resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz"
integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==
escalade@^3.2.0:
version "3.2.0"
eslint-scope@5.1.1:
version "5.1.1"
resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
dependencies:
esrecurse "^4.3.0"
estraverse "^4.1.1"
esrecurse@^4.3.0:
version "4.3.0"
resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz"
integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
dependencies:
estraverse "^5.2.0"
estraverse@^4.1.1:
version "4.3.0"
resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
events@^3.2.0:
version "3.3.0"
resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@ -155,6 +531,11 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fast-uri@^3.0.1:
version "3.0.6"
resolved "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.6.tgz"
integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
@ -162,6 +543,22 @@ fill-range@^7.1.1:
dependencies:
to-regex-range "^5.0.1"
glob-to-regexp@^0.4.1:
version "0.4.1"
resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4:
version "4.2.11"
has-flag@^4.0.0:
version "4.0.0"
iconv-lite@^0.6.2:
version "0.6.3"
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
immutable@^5.0.2:
version "5.1.3"
resolved "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz"
@ -184,11 +581,28 @@ is-number@^7.0.0:
resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
jest-worker@^27.4.5:
version "27.5.1"
resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz"
integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
dependencies:
"@types/node" "*"
merge-stream "^2.0.0"
supports-color "^8.0.0"
json-parse-even-better-errors@^2.3.1:
version "2.3.1"
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
json-schema-traverse@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
json5@^2.1.2:
version "2.2.3"
resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz"
@ -199,6 +613,11 @@ klona@^2.0.4:
resolved "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz"
integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==
loader-runner@^4.2.0:
version "4.3.0"
resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz"
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
loader-utils@^2.0.0:
version "2.0.4"
resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz"
@ -208,6 +627,18 @@ loader-utils@^2.0.0:
emojis-list "^3.0.0"
json5 "^2.1.2"
magic-string@^0.30.18:
version "0.30.19"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz"
integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==
dependencies:
"@jridgewell/sourcemap-codec" "^1.5.5"
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
micromatch@^4.0.5:
version "4.0.8"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
@ -216,6 +647,23 @@ micromatch@^4.0.5:
braces "^3.0.3"
picomatch "^2.3.1"
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.27:
version "2.1.35"
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
nanoid@^3.3.11:
version "3.3.11"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
@ -226,21 +674,56 @@ node-addon-api@^7.0.0:
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz"
integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
node-releases@^2.0.19:
version "2.0.19"
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz"
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
picocolors@^1.1.1:
version "1.1.1"
picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
postcss@^8.5.6:
version "8.5.6"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz"
integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
dependencies:
nanoid "^3.3.11"
picocolors "^1.1.1"
source-map-js "^1.2.1"
punycode@^2.1.0:
version "2.3.1"
resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz"
integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
dependencies:
safe-buffer "^5.1.0"
readdirp@^4.0.1:
version "4.1.2"
resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz"
integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
safe-buffer@^5.1.0:
version "5.1.2"
"safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
sass-loader@^10.5.2:
version "10.5.2"
resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-10.5.2.tgz"
@ -252,7 +735,7 @@ sass-loader@^10.5.2:
schema-utils "^3.0.0"
semver "^7.3.2"
sass@^1.89.2:
sass@^1.3.0, sass@^1.89.2:
version "1.89.2"
resolved "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz"
integrity sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==
@ -272,16 +755,89 @@ schema-utils@^3.0.0:
ajv "^6.12.5"
ajv-keywords "^3.5.2"
schema-utils@^4.3.0:
version "4.3.2"
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz"
integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
dependencies:
"@types/json-schema" "^7.0.9"
ajv "^8.9.0"
ajv-formats "^2.1.1"
ajv-keywords "^5.1.0"
schema-utils@^4.3.2:
version "4.3.2"
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz"
integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
dependencies:
"@types/json-schema" "^7.0.9"
ajv "^8.9.0"
ajv-formats "^2.1.1"
ajv-keywords "^5.1.0"
semver@^7.3.2:
version "7.7.2"
resolved "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
resolved "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz"
integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
"source-map-js@>=0.6.2 <2.0.0":
serialize-javascript@^6.0.2:
version "6.0.2"
resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz"
integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
dependencies:
randombytes "^2.1.0"
source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0":
version "1.2.1"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map@^0.6.0:
version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
supports-color@^8.0.0:
version "8.1.1"
resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz"
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
dependencies:
has-flag "^4.0.0"
tapable@^2.1.1, tapable@^2.2.0:
version "2.2.2"
resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.2.tgz"
integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==
terser-webpack-plugin@^5.3.11:
version "5.3.14"
resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz"
integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==
dependencies:
"@jridgewell/trace-mapping" "^0.3.25"
jest-worker "^27.4.5"
schema-utils "^4.3.0"
serialize-javascript "^6.0.2"
terser "^5.31.1"
terser@^5.31.1:
version "5.43.1"
resolved "https://registry.npmmirror.com/terser/-/terser-5.43.1.tgz"
integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.14.0"
commander "^2.20.0"
source-map-support "~0.5.20"
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
@ -289,6 +845,19 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
undici-types@~7.10.0:
version "7.10.0"
resolved "https://registry.npmmirror.com/undici-types/-/undici-types-7.10.0.tgz"
integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==
update-browserslist-db@^1.1.3:
version "1.1.3"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz"
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
dependencies:
escalade "^3.2.0"
picocolors "^1.1.1"
uri-js@^4.2.2:
version "4.4.1"
resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz"
@ -301,9 +870,69 @@ uview-ui@^2.0.38:
resolved "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.38.tgz"
integrity sha512-6egHDf9lXHKpG3hEjRE0vMx4+VWwKk/ReTf5x18KrIKqdvdPRqO3+B8Unh7vYYwrIxzAWIlmhZ9RJpKI/4UqPQ==
vanilla-text-mask@^5.1.1:
version "5.1.1"
resolved "https://registry.npmjs.org/vanilla-text-mask/-/vanilla-text-mask-5.1.1.tgz"
integrity sha512-JhjoMbCx3DG4GN/M/j06n1bVLeJPsZ7XelyCx8q87M9d5k3jwuWaY+a+09XBq1uOGQAW8QaWska66hOzXNKiQg==
vue@^3.2.0, vue@3.5.21:
version "3.5.21"
resolved "https://registry.npmjs.org/vue/-/vue-3.5.21.tgz"
integrity sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==
dependencies:
"@vue/compiler-dom" "3.5.21"
"@vue/compiler-sfc" "3.5.21"
"@vue/runtime-dom" "3.5.21"
"@vue/server-renderer" "3.5.21"
"@vue/shared" "3.5.21"
vuex@^4.1.0:
version "4.1.0"
resolved "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c"
resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==
dependencies:
"@vue/devtools-api" "^6.0.0-beta.11"
watchpack@^2.4.1:
version "2.4.4"
resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.4.tgz"
integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==
dependencies:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
webpack-sources@^3.3.3:
version "3.3.3"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.3.3.tgz"
integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==
"webpack@^4.36.0 || ^5.0.0", webpack@^5.1.0:
version "5.101.3"
resolved "https://registry.npmmirror.com/webpack/-/webpack-5.101.3.tgz"
integrity sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==
dependencies:
"@types/eslint-scope" "^3.7.7"
"@types/estree" "^1.0.8"
"@types/json-schema" "^7.0.15"
"@webassemblyjs/ast" "^1.14.1"
"@webassemblyjs/wasm-edit" "^1.14.1"
"@webassemblyjs/wasm-parser" "^1.14.1"
acorn "^8.15.0"
acorn-import-phases "^1.0.3"
browserslist "^4.24.0"
chrome-trace-event "^1.0.2"
enhanced-resolve "^5.17.3"
es-module-lexer "^1.2.1"
eslint-scope "5.1.1"
events "^3.2.0"
glob-to-regexp "^0.4.1"
graceful-fs "^4.2.11"
json-parse-even-better-errors "^2.3.1"
loader-runner "^4.2.0"
mime-types "^2.1.27"
neo-async "^2.6.2"
schema-utils "^4.3.2"
tapable "^2.1.1"
terser-webpack-plugin "^5.3.11"
watchpack "^2.4.1"
webpack-sources "^3.3.3"