Compare commits
62 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d6ef74781 | ||
|
|
8df341ff9e | ||
|
|
13a4e21be5 | ||
|
|
db6b1af326 | ||
|
|
f7a9a2b567 | ||
|
|
daa0d18501 | ||
|
|
06e17a74b3 | ||
|
|
973450b37a | ||
|
|
7376e40fe3 | ||
|
|
6d8284e78f | ||
|
|
cfb461829f | ||
|
|
8c15aadf21 | ||
|
|
65745d3033 | ||
|
|
3616caac21 | ||
|
|
b4dcfe7879 | ||
|
|
38b640e82b | ||
|
|
85d5d59863 | ||
|
|
51f3953459 | ||
|
|
b1e90ff1a9 | ||
|
|
de90f1249e | ||
|
|
3a5460894b | ||
|
|
e6ccfdafd6 | ||
|
|
9df5bc0e46 | ||
|
|
4dfa7d627e | ||
|
|
ff1e6f60e0 | ||
|
|
c4f43a0626 | ||
| 74d644c46b | |||
| 3400c9422d | |||
| b88b0b548f | |||
| 005c6336c0 | |||
| 1582bb85f1 | |||
| c36717a059 | |||
| 3f2ea98977 | |||
| 0d298f8413 | |||
| f6b0db3a70 | |||
| 907ba4f9d5 | |||
| 63981c9452 | |||
| 854ea15071 | |||
| c185dcc3be | |||
| e17d36bc88 | |||
| a8d482edb1 | |||
| 735afd564c | |||
| fb2ac1f7c1 | |||
| 23546c7b27 | |||
| 0f2563af2d | |||
| 38eec83e83 | |||
|
|
c9ce807a17 | ||
|
|
3440dc9d8d | ||
|
|
8d37679bac | ||
|
|
bcb058e136 | ||
|
|
7877bdcfe1 | ||
|
|
6f38c95892 | ||
|
|
ef5f3e1fe5 | ||
|
|
9f91ea0c27 | ||
| 7e994f84f0 | |||
| d8738f4e74 | |||
| 3c5d89ab99 | |||
| 4751d695ea | |||
| 27d641e06e | |||
| 3935ec7960 | |||
| 704fee1e2d | |||
|
|
e0aa83c8d1 |
6
.vscode/settings.json
vendored
Normal file
6
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.ttml": "xml",
|
||||||
|
"*.ttss": "css"
|
||||||
|
}
|
||||||
|
}
|
||||||
143
App.vue
143
App.vue
@@ -6,8 +6,9 @@ App.vue本身不是页面,这里不能编写视图元素,也就是没有<tem
|
|||||||
import {
|
import {
|
||||||
onLaunch
|
onLaunch
|
||||||
} from '@dcloudio/uni-app';
|
} from '@dcloudio/uni-app';
|
||||||
|
import { getFindBySource } from '@/http/yskApi/version.js'
|
||||||
onLaunch(() => {
|
onLaunch(() => {
|
||||||
|
let that = this
|
||||||
uni.hideTabBar()
|
uni.hideTabBar()
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
const updateManager = wx.getUpdateManager() // 小程序版本更新管理器
|
const updateManager = wx.getUpdateManager() // 小程序版本更新管理器
|
||||||
@@ -23,6 +24,146 @@ App.vue本身不是页面,这里不能编写视图元素,也就是没有<tem
|
|||||||
// 新版本下载失败
|
// 新版本下载失败
|
||||||
})
|
})
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//#ifdef APP-PLUS
|
||||||
|
//获取当前系统版本信息
|
||||||
|
plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
|
||||||
|
//请求后台接口 解析数据 对比版本
|
||||||
|
console.log("widgetInfo==",widgetInfo)
|
||||||
|
getFindBySource({source:'APP'}).then(res => {
|
||||||
|
console.log("selectNewApp==",res)
|
||||||
|
console.log("version===",res.url && widgetInfo.version < res.version)
|
||||||
|
if (res.url && widgetInfo.version < res.version) {
|
||||||
|
console.log("version===222")
|
||||||
|
let downloadLink = res.url;
|
||||||
|
// let downloadLink = "https://short-video.hnsiyao.cn/app/sy-duanju.apk";
|
||||||
|
console.log(downloadLink)
|
||||||
|
// let androidLink = res.androidWgtUrl;
|
||||||
|
// let iosLink = res.iosWgtUrl;
|
||||||
|
let ready = false;
|
||||||
|
// 校验是否强制升级
|
||||||
|
if (res.isUp == 1) {
|
||||||
|
uni.showModal({
|
||||||
|
showCancel: false,
|
||||||
|
title: '发现新版本',
|
||||||
|
confirmText: '立即更新',
|
||||||
|
content: res.message,
|
||||||
|
success: res => {
|
||||||
|
if (res.confirm) {
|
||||||
|
uni.showLoading('下载中...');
|
||||||
|
if (uni.getSystemInfoSync().platform ==
|
||||||
|
'android') {
|
||||||
|
uni.downloadFile({
|
||||||
|
url: downloadLink,
|
||||||
|
success: downloadResult => {
|
||||||
|
if (downloadResult.statusCode === 200) {
|
||||||
|
plus.io.resolveLocalFileSystemURL(downloadResult.tempFilePath, entry => {
|
||||||
|
entry.getParent(_oldFile=>{
|
||||||
|
entry.moveTo(_oldFile,'.apk',newFilePath=>{
|
||||||
|
console.log('newFilePath',newFilePath.fullPath)
|
||||||
|
plus.runtime
|
||||||
|
.install(newFilePath.fullPath, { force: false },
|
||||||
|
d => {
|
||||||
|
console
|
||||||
|
.log(
|
||||||
|
'install success...'
|
||||||
|
);
|
||||||
|
plus.runtime
|
||||||
|
.restart();
|
||||||
|
},
|
||||||
|
e => {
|
||||||
|
console.log(e)
|
||||||
|
console
|
||||||
|
.error(
|
||||||
|
'install fail...'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (uni.getSystemInfoSync().platform ==
|
||||||
|
'ios') {
|
||||||
|
plus.runtime.openURL(downloadLink, function(
|
||||||
|
res) {});
|
||||||
|
}
|
||||||
|
} else if (res.cancel) {
|
||||||
|
console.log('取消');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.showModal({
|
||||||
|
title: '发现新版本',
|
||||||
|
confirmText: '立即更新',
|
||||||
|
cancelText: '下次更新',
|
||||||
|
content: res.message,
|
||||||
|
success: res => {
|
||||||
|
if (res.confirm) {
|
||||||
|
uni.showLoading('下载中...');
|
||||||
|
if (uni.getSystemInfoSync().platform ==
|
||||||
|
'android') {
|
||||||
|
uni.downloadFile({
|
||||||
|
url: downloadLink,
|
||||||
|
success: downloadResult => {
|
||||||
|
if (downloadResult
|
||||||
|
.statusCode ===
|
||||||
|
200) {
|
||||||
|
plus.io.resolveLocalFileSystemURL(downloadResult.tempFilePath, entry => {
|
||||||
|
entry.getParent(_oldFile=>{
|
||||||
|
entry.moveTo(_oldFile,'.apk',newFilePath=>{
|
||||||
|
console.log('newFilePath',newFilePath.fullPath)
|
||||||
|
plus.runtime
|
||||||
|
.install(newFilePath.fullPath, { force: false },
|
||||||
|
d => {
|
||||||
|
console
|
||||||
|
.log(
|
||||||
|
'install success...'
|
||||||
|
);
|
||||||
|
plus.runtime
|
||||||
|
.restart();
|
||||||
|
},
|
||||||
|
e => {
|
||||||
|
console.log(e)
|
||||||
|
console
|
||||||
|
.error(
|
||||||
|
'install fail...'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (uni.getSystemInfoSync().platform ==
|
||||||
|
'ios') {
|
||||||
|
plus.runtime.openURL(downloadLink, function(
|
||||||
|
res) {});
|
||||||
|
}
|
||||||
|
} else if (res.cancel) {
|
||||||
|
console.log('取消');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).catch((res)=>{
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// #endif
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
25
commons/utils/debounce.js
Normal file
25
commons/utils/debounce.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* @desc 函数防抖
|
||||||
|
* @param func 目标函数
|
||||||
|
* @param wait 延迟执行毫秒数
|
||||||
|
* @param immediate true - 立即执行, false - 延迟执行
|
||||||
|
*/
|
||||||
|
export const debounce = function(func, wait = 1000, immediate = true) {
|
||||||
|
let timer;
|
||||||
|
return function() {
|
||||||
|
let context = this,
|
||||||
|
args = arguments;
|
||||||
|
if (timer) clearTimeout(timer);
|
||||||
|
if (immediate) {
|
||||||
|
let callNow = !timer;
|
||||||
|
timer = setTimeout(() => {
|
||||||
|
timer = null;
|
||||||
|
}, wait);
|
||||||
|
if (callNow) func.apply(context, args);
|
||||||
|
} else {
|
||||||
|
timer = setTimeout(() => {
|
||||||
|
func.apply(context, args);
|
||||||
|
}, wait)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
commons/utils/throttle.js
Normal file
29
commons/utils/throttle.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* @desc 函数节流
|
||||||
|
* @param func 函数
|
||||||
|
* @param wait 延迟执行毫秒数
|
||||||
|
* @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发
|
||||||
|
*/
|
||||||
|
export const throttle = (func, wait = 1000, type = 1) => {
|
||||||
|
let previous = 0;
|
||||||
|
let timeout;
|
||||||
|
return function() {
|
||||||
|
let context = this;
|
||||||
|
let args = arguments;
|
||||||
|
if (type === 1) {
|
||||||
|
let now = Date.now();
|
||||||
|
|
||||||
|
if (now - previous > wait) {
|
||||||
|
func.apply(context, args);
|
||||||
|
previous = now;
|
||||||
|
}
|
||||||
|
} else if (type === 2) {
|
||||||
|
if (!timeout) {
|
||||||
|
timeout = setTimeout(() => {
|
||||||
|
timeout = null;
|
||||||
|
func.apply(context, args)
|
||||||
|
}, wait)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
268
components/my-components/my-popup-table.vue
Normal file
268
components/my-components/my-popup-table.vue
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
<template>
|
||||||
|
<view class="mask u-fixed position-all u-flex u-col-bottom u-font-28" v-if="show" @tap="close">
|
||||||
|
<view class="bg-fff w-full " @tap.stop="nullFunction">
|
||||||
|
<view class="u-p-30">
|
||||||
|
<view class="font-bold u-text-center">选择商品</view>
|
||||||
|
<view class="u-m-t-32 u-flex">
|
||||||
|
<view class=" ">
|
||||||
|
<uni-data-picker :clear-icon="false" :map="{text:'name',value:'id'}" placeholder="请选择分类"
|
||||||
|
popup-title="请选择分类" :localdata="category" v-model="goods.query.categoryId">
|
||||||
|
<view class="u-flex u-font-28" >
|
||||||
|
<text class=" u-line-1"
|
||||||
|
style="max-width: 100rpx;">{{goods.query.categoryId||'分类' }}</text>
|
||||||
|
<up-icon name="arrow-down" size="16"></up-icon>
|
||||||
|
</view>
|
||||||
|
</uni-data-picker>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1 u-p-l-16">
|
||||||
|
<up-search @custom="getGoods" v-model="goods.query.name" placeholder="请输入商品名称" @search="getGoods" @clear="getGoods"></up-search>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<scroll-view :scroll-x="false" scroll-y="true" :style="computedStyle()">
|
||||||
|
<view class="u-p-l-30 u-p-r-30 table">
|
||||||
|
<view class="u-flex u-row-between no-wrap title">
|
||||||
|
<view>
|
||||||
|
<my-radio @change="radioAllChange" v-model="goods.allChecked" shape="square"
|
||||||
|
:size="20"></my-radio>
|
||||||
|
</view>
|
||||||
|
<view>商品信息</view>
|
||||||
|
<view>规格</view>
|
||||||
|
<!-- <view>是否售尽</view> -->
|
||||||
|
<!-- <view>是否分销</view> -->
|
||||||
|
<view>售价</view>
|
||||||
|
<view>销量/库存</view>
|
||||||
|
<view>分类名称</view>
|
||||||
|
</view>
|
||||||
|
<view @click="changeChecked(item)" class="u-m-t-12 u-flex u-p-24 u-row-between row" v-for="(item,index) in goods.list" :key="index">
|
||||||
|
<view class="">
|
||||||
|
<my-radio @change="radioChange($event,item)" v-model="item.checked" shape="square" :size="20"></my-radio>
|
||||||
|
</view>
|
||||||
|
<view class="u-text-left u-flex-1 u-p-l-20">
|
||||||
|
<!-- <view class="u-flex">
|
||||||
|
<image lazy-load class="coverImg" :src="item.coverImg" mode=""></image>
|
||||||
|
</view> -->
|
||||||
|
<view class="">{{item.name}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1 u-p-l-4 u-p-r-4 box-size-border">
|
||||||
|
{{item.typeEnum}}
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1">
|
||||||
|
¥{{ item.lowPrice }}
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1">
|
||||||
|
<!-- {{ item.realSalesNumber }}/{{ item.stockNumber }} -->
|
||||||
|
{{ item.stockNumber }}
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1">
|
||||||
|
{{item.categoryName}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="u-p-30">
|
||||||
|
<my-pagination :totalElements="goods.totalElements" :size="goods.query.size"
|
||||||
|
@change="pageChange"></my-pagination>
|
||||||
|
<view class="u-m-t-20 u-flex">
|
||||||
|
<view class="u-flex-1 u-p-r-16">
|
||||||
|
<my-button type="cancel" plain @tap="close">取消</my-button>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1 u-p-l-16">
|
||||||
|
<my-button @tap="confrim">确定</my-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
$tbProductList
|
||||||
|
} from '@/http/yskApi/goods.js';
|
||||||
|
import {
|
||||||
|
reactive,
|
||||||
|
onMounted,
|
||||||
|
ref,
|
||||||
|
watch
|
||||||
|
} from 'vue';
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: '50vh'
|
||||||
|
},
|
||||||
|
category: {
|
||||||
|
type: Array,
|
||||||
|
default: () => {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
function changeChecked(item){
|
||||||
|
item.checked=!item.checked
|
||||||
|
if(!item.checked&&$selGoodsMap[item.id]){
|
||||||
|
delete $selGoodsMap[item.id]
|
||||||
|
}else{
|
||||||
|
$selGoodsMap[item.id]=item
|
||||||
|
}
|
||||||
|
goods.allChecked = goods.list.filter(v => v.checked).length != 0
|
||||||
|
}
|
||||||
|
function nullFunction() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const show = ref(props.modelValue)
|
||||||
|
|
||||||
|
let selArr=[]
|
||||||
|
|
||||||
|
let $selGoodsMap={}
|
||||||
|
async function open(arr) {
|
||||||
|
show.value = true
|
||||||
|
selArr=arr
|
||||||
|
console.log(arr);
|
||||||
|
for(let i in arr){
|
||||||
|
$selGoodsMap[arr[i].proId
|
||||||
|
]=arr[i]
|
||||||
|
}
|
||||||
|
getGoods()
|
||||||
|
}
|
||||||
|
|
||||||
|
function close() {
|
||||||
|
show.value = false
|
||||||
|
resetQuery()
|
||||||
|
$selGoodsMap={}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function resetQuery() {
|
||||||
|
Object.assign(goods.query, $quey)
|
||||||
|
}
|
||||||
|
|
||||||
|
function computedStyle() {
|
||||||
|
return `height:${typeof props.height==='string'?props.height:props.height+'rpx'};`
|
||||||
|
}
|
||||||
|
|
||||||
|
const emits = defineEmits(['update:modelValue', 'confirm'])
|
||||||
|
|
||||||
|
const $quey = {
|
||||||
|
categoryId: "",
|
||||||
|
createdAt: [],
|
||||||
|
id: "",
|
||||||
|
name: "",
|
||||||
|
sort: "createdAt,desc",
|
||||||
|
type: "",
|
||||||
|
page: 0,
|
||||||
|
size: 10,
|
||||||
|
}
|
||||||
|
const query = reactive({
|
||||||
|
...$quey
|
||||||
|
})
|
||||||
|
const goods = reactive({
|
||||||
|
list: [],
|
||||||
|
allChecked: false,
|
||||||
|
totalElements: 0,
|
||||||
|
query: {
|
||||||
|
...$quey
|
||||||
|
}
|
||||||
|
})
|
||||||
|
getGoods()
|
||||||
|
function getGoods() {
|
||||||
|
const arr=selArr
|
||||||
|
$tbProductList(goods.query).then(res => {
|
||||||
|
let selLen=0;
|
||||||
|
goods.list = res.content.map(v => {
|
||||||
|
const checked=$selGoodsMap[v.id]?true:false
|
||||||
|
selLen+=(checked?1:0)
|
||||||
|
return {
|
||||||
|
...v,
|
||||||
|
checked
|
||||||
|
}
|
||||||
|
})
|
||||||
|
goods.allChecked = selLen==res.content.length?true:false
|
||||||
|
goods.totalElements = res.totalElements
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function pageChange(page) {
|
||||||
|
goods.query.page = page - 1
|
||||||
|
getGoods()
|
||||||
|
}
|
||||||
|
|
||||||
|
function radioChange(newval,item) {
|
||||||
|
if(!newval&&$selGoodsMap[item.id]){
|
||||||
|
delete $selGoodsMap[item.id]
|
||||||
|
}else{
|
||||||
|
$selGoodsMap[item.id]=item
|
||||||
|
}
|
||||||
|
goods.allChecked = goods.list.filter(v => v.checked).length != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function radioAllChange(newval) {
|
||||||
|
goods.list.forEach(i => {
|
||||||
|
i.checked = newval
|
||||||
|
if($selGoodsMap[i.id]&&!newval){
|
||||||
|
delete $selGoodsMap[i.id]
|
||||||
|
}else{
|
||||||
|
$selGoodsMap[i.id]=i
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function confrim() {
|
||||||
|
for(let i in goods.list){
|
||||||
|
const item=goods.list[i]
|
||||||
|
if($selGoodsMap[item.id]&&!item.checked){
|
||||||
|
delete $selGoodsMap[item.id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log($selGoodsMap);
|
||||||
|
const arr = Object.values($selGoodsMap)
|
||||||
|
emits('confirm', arr)
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open,
|
||||||
|
close
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.bg-fff{
|
||||||
|
border-radius: 24rpx 24rpx 0 0 ;
|
||||||
|
}
|
||||||
|
.mask {
|
||||||
|
background: rgba(51, 51, 51, 0.5);
|
||||||
|
z-index: 900;
|
||||||
|
}
|
||||||
|
.box-size-border{
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.coverImg {
|
||||||
|
width: 60rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
padding: 12rpx 24rpx 12rpx 24rpx;
|
||||||
|
background: #AEBAD2;
|
||||||
|
border-radius: 8rpx 8rpx 0rpx 0rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row:nth-of-type(2n+1) {
|
||||||
|
background: #F0F0F0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
8
components/my-components/my-table-col.vue
Normal file
8
components/my-components/my-table-col.vue
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<template>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
76
components/my-components/my-table.vue
Normal file
76
components/my-components/my-table.vue
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
<template>
|
||||||
|
<view class=" table u-font-28">
|
||||||
|
<view class="u-flex u-row-between no-wrap title">
|
||||||
|
<slot name="title">
|
||||||
|
<view>
|
||||||
|
<my-radio @change="radioAllChange" v-model="allChecked" shape="square" :size="20"></my-radio>
|
||||||
|
</view>
|
||||||
|
<view>商品信息</view>
|
||||||
|
<view>规格</view>
|
||||||
|
<view>售价</view>
|
||||||
|
<view>销量/库存</view>
|
||||||
|
<view>分类名称</view>
|
||||||
|
</slot>
|
||||||
|
</view>
|
||||||
|
<view @click="changeChecked(item)" class="u-m-t-12 u-flex u-p-24 u-row-between row"
|
||||||
|
v-for="(item,index) in list" :key="index">
|
||||||
|
<view class="">
|
||||||
|
<my-radio @change="radioChange($event,item)" v-model="item.checked" shape="square"
|
||||||
|
:size="20"></my-radio>
|
||||||
|
</view>
|
||||||
|
<view class="u-text-left u-flex-1 u-p-l-20">
|
||||||
|
<view class="">{{item.name}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1 u-p-l-4 u-p-r-4 box-size-border">
|
||||||
|
{{item.typeEnum}}
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1">
|
||||||
|
¥{{ item.lowPrice }}
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1">
|
||||||
|
<!-- {{ item.realSalesNumber }}/{{ item.stockNumber }} -->
|
||||||
|
{{ item.stockNumber }}
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1">
|
||||||
|
{{item.categoryName}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
reactive, ref
|
||||||
|
} from 'vue';
|
||||||
|
const props=defineProps({
|
||||||
|
list:{
|
||||||
|
type:Array,
|
||||||
|
default:()=>[]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let allChecked=ref(false)
|
||||||
|
const emits=defineEmits(['selectAllChange'])
|
||||||
|
function radioAllChange(e){
|
||||||
|
emits('selectAllChange')
|
||||||
|
console.log('selectAllChange');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.table {
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
padding: 12rpx 24rpx 12rpx 24rpx;
|
||||||
|
background: #AEBAD2;
|
||||||
|
border-radius: 8rpx 8rpx 0rpx 0rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row:nth-of-type(2n+1) {
|
||||||
|
background: #F0F0F0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
33
http/php/api.ts
Normal file
33
http/php/api.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { request } from './request'
|
||||||
|
// 会员签入 登录
|
||||||
|
export const douyincheckIn = (data : object | any) => {
|
||||||
|
return request('douyin/checkIn', 'POST', data, true)
|
||||||
|
}
|
||||||
|
// 登出
|
||||||
|
export const userlogout = () => {
|
||||||
|
return request('user/logout', 'POST', '', true)
|
||||||
|
}
|
||||||
|
// 查询绑定状态
|
||||||
|
export const searchstorestatus = (data : object) => {
|
||||||
|
return request('meituan/searchstorestatus', 'POST', data, true)
|
||||||
|
}
|
||||||
|
// 团购核销准备
|
||||||
|
export const fulfilmentcertificateprepare = (data : object) => {
|
||||||
|
return request('douyin/fulfilmentcertificateprepare', 'POST', data, true)
|
||||||
|
}
|
||||||
|
// 获取uisdk 绑定 链接
|
||||||
|
export const getuisdk = (data : object) => {
|
||||||
|
return request('douyin/getuisdk', 'POST', data, true)
|
||||||
|
}
|
||||||
|
// 团购核销
|
||||||
|
export const certificateprepares = (data : object) => {
|
||||||
|
return request('douyin/certificateprepare', 'POST', data, true)
|
||||||
|
}
|
||||||
|
// 团购核销记录
|
||||||
|
export const orderlist = (data : object) => {
|
||||||
|
return request('douyin/orderlist', 'POST', data, true)
|
||||||
|
}
|
||||||
|
// 团购核销撤销
|
||||||
|
export const fulfilmentcertificatecanceles = (data : object) => {
|
||||||
|
return request('douyin/fulfilmentcertificatecancel', 'POST', data, true)
|
||||||
|
}
|
||||||
80
http/php/request.ts
Normal file
80
http/php/request.ts
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
//服务器接口地址
|
||||||
|
const baseURL : string = 'https://czgdoumei.sxczgkj.com/index.php/api/'
|
||||||
|
// 封装公共请求方法
|
||||||
|
function request(url : string, method : "GET" | "POST" | undefined, data : object | any, toast : boolean) {
|
||||||
|
let networkType = ''
|
||||||
|
uni.getNetworkType({
|
||||||
|
success: (res) => {
|
||||||
|
networkType = res.networkType
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (networkType == 'none') {
|
||||||
|
uni.showToast({
|
||||||
|
title: '网络异常,请检查网络',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (toast) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: '加载中',
|
||||||
|
mask: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
let header : any
|
||||||
|
header = {
|
||||||
|
'content-type': 'application/json',
|
||||||
|
'clinttype':uni.getStorageSync('clint_type'),
|
||||||
|
'bausertoken': uni.getStorageSync('phpuserinfo').token
|
||||||
|
};
|
||||||
|
uni.request({
|
||||||
|
url: baseURL + url,
|
||||||
|
method: method,
|
||||||
|
data: data,
|
||||||
|
header: header,
|
||||||
|
success(res : any) {
|
||||||
|
if (res.data.code != 1) {
|
||||||
|
//是否提示错误
|
||||||
|
if (toast) {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.data.msg || res.data.message,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.hideLoading()
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
|
if (res.data.code == 401) {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.message || res.msg,
|
||||||
|
icon: "none",
|
||||||
|
success: () => {
|
||||||
|
// uni.removeStorageSync('logintoken');
|
||||||
|
// uni.removeStorageSync('token');
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
uni.hideLoading()
|
||||||
|
reject(res.message | res.msg);
|
||||||
|
} else {
|
||||||
|
uni.hideLoading()
|
||||||
|
resolve(res.data.data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail(err) {
|
||||||
|
uni.hideLoading()
|
||||||
|
//请求失败
|
||||||
|
uni.showToast({
|
||||||
|
title: '无法连接到服务器',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
reject(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export { request, baseURL }
|
||||||
@@ -389,4 +389,27 @@ export function $calcDeDuctionPoints(data) {
|
|||||||
...data
|
...data
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//购物车-临时菜添加
|
||||||
|
export function $temporaryDishes(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/place/temporaryDishes',
|
||||||
|
method: "post",
|
||||||
|
data:{
|
||||||
|
shopId: uni.getStorageSync("shopId"),
|
||||||
|
...data
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//单品改价
|
||||||
|
export function $updatePrice(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/place/updatePrice',
|
||||||
|
method: "put",
|
||||||
|
data:{
|
||||||
|
shopId: uni.getStorageSync("shopId"),
|
||||||
|
...data
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
113
http/yskApi/credit.js
Normal file
113
http/yskApi/credit.js
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
import http from './http.js'
|
||||||
|
const request=http.request
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取挂账人列表
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function getCreditBuyerList(data) {
|
||||||
|
return request({
|
||||||
|
url: `/api/credit/buyer/page`,
|
||||||
|
method: 'get',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 增加挂账人
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function addCreditBuyer(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/buyer',
|
||||||
|
method: 'post',
|
||||||
|
params: {
|
||||||
|
shopId: uni.getStorageSync('shopId'),
|
||||||
|
...data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑挂账人
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function editCreditBuyer(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/buyer',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除挂账人
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function delCreditBuyer(id) {
|
||||||
|
return request({
|
||||||
|
url: `/api/credit/buyer/${id}`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 还款
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function creditRePayment(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/buyer/repayment',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取还款记录
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function creditRePaymentRecord(params) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/payment-record/page',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂账人-查看明细
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function creditBuyerOrderList(params) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/buyer-order/page',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂账人-查看明细-统计
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function creditBuyerOrderSummary(params) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/buyer-order/summary',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂账人-查看明细-付款
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function creditPayment(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/credit/buyer-order/pay',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -119,7 +119,10 @@ export const $productSpec=new $API('/api/tbProductSpec',http.req)
|
|||||||
|
|
||||||
|
|
||||||
// v2 api start
|
// v2 api start
|
||||||
|
// 商品列表 后台查询
|
||||||
|
export function $tbProductList(data) {
|
||||||
|
return http.req('/api/tbProduct/list', {...data,shopId:uni.getStorageSync('shopId')}, 'GET')
|
||||||
|
}
|
||||||
/* 商品列表 V2 */
|
/* 商品列表 V2 */
|
||||||
export function $tbProductV2(data) {
|
export function $tbProductV2(data) {
|
||||||
return http.req('/api/tbProduct/list/v2', {...data,shopId:uni.getStorageSync('shopId')}, 'post')
|
return http.req('/api/tbProduct/list/v2', {...data,shopId:uni.getStorageSync('shopId')}, 'post')
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ import infoBox from "@/commons/utils/infoBox.js"
|
|||||||
import go from '@/commons/utils/go.js';
|
import go from '@/commons/utils/go.js';
|
||||||
import { reject } from 'lodash';
|
import { reject } from 'lodash';
|
||||||
// 测试服
|
// 测试服
|
||||||
// let baseUrl = 'https://admintestpapi.sxczgkj.cn'
|
let baseUrl = 'https://admintestpapi.sxczgkj.cn'
|
||||||
|
|
||||||
//预发布
|
//预发布
|
||||||
// let baseUrl = 'https://pre-cashieradmin.sxczgkj.cn'
|
// let baseUrl = 'https://pre-cashieradmin.sxczgkj.cn'
|
||||||
|
|
||||||
//正式
|
//正式
|
||||||
let baseUrl = 'https://cashieradmin.sxczgkj.cn'
|
// let baseUrl = 'https://cashieradmin.sxczgkj.cn'
|
||||||
|
|
||||||
// 王伟本地测
|
// 王伟本地测
|
||||||
// let baseUrl = '/ww'
|
// let baseUrl = '/ww'
|
||||||
@@ -202,6 +202,7 @@ function request(args) {
|
|||||||
method: method,
|
method: method,
|
||||||
header: getHeader()
|
header: getHeader()
|
||||||
}, extParams)
|
}, extParams)
|
||||||
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ export function updateStatus(data) {
|
|||||||
// 编辑
|
// 编辑
|
||||||
export function tbPlussShopStaffDetail(id) {
|
export function tbPlussShopStaffDetail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: `/api/tbPlussShopStaff/${id}`,
|
url: `/api/tbPlussShopStaff/` + id,
|
||||||
method: "get"
|
method: "get"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,17 @@ export function $bind(data) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 转/并桌
|
||||||
|
export function tableswitch(data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/place/switch',
|
||||||
|
method: "put",
|
||||||
|
data: {
|
||||||
|
shopId: uni.getStorageSync('shopId'),
|
||||||
|
...data
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
//获取台桌详情状态
|
//获取台桌详情状态
|
||||||
export function $returnTableDetail(data) {
|
export function $returnTableDetail(data) {
|
||||||
return request({
|
return request({
|
||||||
|
|||||||
15
http/yskApi/version.js
Normal file
15
http/yskApi/version.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import http from './http.js'
|
||||||
|
const request=http.request
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询所属渠道升级版本
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function getFindBySource(params) {
|
||||||
|
return request({
|
||||||
|
url: `/api/tbVersion/findBySource`,
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -51,6 +51,9 @@
|
|||||||
} from 'vue';
|
} from 'vue';
|
||||||
import color from '@/commons/color.js';
|
import color from '@/commons/color.js';
|
||||||
import go from '@/commons/utils/go.js';
|
import go from '@/commons/utils/go.js';
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
import {
|
import {
|
||||||
tbShopPurveyorput
|
tbShopPurveyorput
|
||||||
} from '@/http/yskApi/requestAll.js';
|
} from '@/http/yskApi/requestAll.js';
|
||||||
@@ -62,17 +65,15 @@
|
|||||||
type: String
|
type: String
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
onMounted(() => {
|
onLoad((d)=>{
|
||||||
datas.form = JSON.parse(props.item)
|
datas.form = JSON.parse(d.item)
|
||||||
})
|
})
|
||||||
|
|
||||||
function sumbit() {
|
function sumbit() {
|
||||||
tbShopPurveyorput({
|
tbShopPurveyorput({
|
||||||
shopId: uni.getStorageSync("shopId"),
|
shopId: uni.getStorageSync("shopId"),
|
||||||
|
|
||||||
...datas.form
|
...datas.form
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
// go.to('PAGES_SUPPLIER')
|
|
||||||
go.back()
|
go.back()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
<view> 领券后{{ item.validDays }}天过期 </view>
|
<view> 领券后{{ item.validDays }}天过期 </view>
|
||||||
</view>
|
</view>
|
||||||
<view class="JQclass">
|
<view class="JQclass">
|
||||||
<image :src="'/static/coupon/qrcode.svg'" mode="scaleToFill" />
|
<image :src="'/static/coupon/qrcode.svg'" mode="scaleToFill" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="couponContentListcontent2">
|
<view class="couponContentListcontent2">
|
||||||
@@ -81,6 +81,7 @@
|
|||||||
<view class="bottomPop">
|
<view class="bottomPop">
|
||||||
<button @click="addCoupon">+添加{{pageData.status.tagName}}</button>
|
<button @click="addCoupon">+添加{{pageData.status.tagName}}</button>
|
||||||
</view>
|
</view>
|
||||||
|
<up-modal :show="pageData.delShow" title="确认是否删除当前优惠券" @confirm="delConfirm" @cancel="pageData.delShow=false" showCancelButton></up-modal>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -96,6 +97,8 @@
|
|||||||
onPullDownRefresh,
|
onPullDownRefresh,
|
||||||
onReachBottom, } from '@dcloudio/uni-app';
|
onReachBottom, } from '@dcloudio/uni-app';
|
||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
|
delShow: false,
|
||||||
|
delItem: null,
|
||||||
status: {
|
status: {
|
||||||
list: [
|
list: [
|
||||||
{name: '优惠券', type: 1},
|
{name: '优惠券', type: 1},
|
||||||
@@ -175,7 +178,12 @@
|
|||||||
* 删除
|
* 删除
|
||||||
*/
|
*/
|
||||||
let delCoupon = (item) => {
|
let delCoupon = (item) => {
|
||||||
delTbShopCoupon([item.id]).then((res) => {
|
pageData.delShow = true;
|
||||||
|
pageData.delItem = item;
|
||||||
|
}
|
||||||
|
let delConfirm = () => {
|
||||||
|
pageData.delShow = false;
|
||||||
|
delTbShopCoupon([pageData.delItem.id]).then((res) => {
|
||||||
getCoupon();
|
getCoupon();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
203
pageCreditBuyer/addDebtor.vue
Normal file
203
pageCreditBuyer/addDebtor.vue
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
<template>
|
||||||
|
<view class="content">
|
||||||
|
<up-form
|
||||||
|
labelPosition="top"
|
||||||
|
labelWidth="120"
|
||||||
|
required
|
||||||
|
:model="pageData.formData"
|
||||||
|
:rules="pageData.rules"
|
||||||
|
ref="uFormRef"
|
||||||
|
>
|
||||||
|
<view class="card">
|
||||||
|
|
||||||
|
<up-form-item label="挂账人" prop="debtor" borderBottom="true" >
|
||||||
|
<up-input v-model="pageData.formData.debtor" placeholder="请输入挂账人" border="none" ></up-input>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="手机号" prop="mobile" borderBottom="true" >
|
||||||
|
<up-input v-model="pageData.formData.mobile" type="number" maxlength="11" placeholder="请输入手机号" border="none" ></up-input>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="职位" prop="position" borderBottom="true" >
|
||||||
|
<up-input v-model="pageData.formData.position" placeholder="请输入职位" border="none" ></up-input>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="挂账额度" prop="creditAmount" borderBottom="true" >
|
||||||
|
<up-input v-model="pageData.formData.creditAmount" type="number" placeholder="请输入挂账额度" border="none" ></up-input>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="还款方式" borderBottom="true" >
|
||||||
|
<view class="item-column">
|
||||||
|
<up-radio-group v-model="pageData.formData.repaymentMethod" :disabled="pageData.formData.id" placement="row" >
|
||||||
|
<up-radio
|
||||||
|
:customStyle="{marginRight: '30px'}"
|
||||||
|
v-for="(item, index) in pageData.repaymentMethodList"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:name="item.value"
|
||||||
|
@change="radioChange"
|
||||||
|
></up-radio>
|
||||||
|
</up-radio-group>
|
||||||
|
<view class="tishi">一经创建无法更改还款方式</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</up-form-item>
|
||||||
|
</view>
|
||||||
|
<view class="card">
|
||||||
|
<up-form-item label="是否启用" labelPosition="left">
|
||||||
|
<view style="width: 100%;display: flex;justify-content: flex-end;">
|
||||||
|
<up-switch v-model="pageData.formData.status" @change="change" :activeValue="1" :inactiveValue="0"></up-switch>
|
||||||
|
</view>
|
||||||
|
</up-form-item>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</up-form>
|
||||||
|
|
||||||
|
<view class="bottomPop">
|
||||||
|
<button class="save" @click="save">保存</button>
|
||||||
|
<view class="cancel" @click="cancel">取消</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import go from '@/commons/utils/go.js'
|
||||||
|
import { debounce } from '@/commons/utils/debounce.js'
|
||||||
|
import { addCreditBuyer, editCreditBuyer } from '@/http/yskApi/credit.js'
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
|
const pageData = reactive({
|
||||||
|
id: null,
|
||||||
|
title: "",
|
||||||
|
repaymentMethodList: [
|
||||||
|
{ label: '按总金额还款', value: 'total' },
|
||||||
|
{ label: '按订单还款', value: 'order' }
|
||||||
|
],
|
||||||
|
formData: {
|
||||||
|
id: null,
|
||||||
|
status: 0,
|
||||||
|
debtor: '',
|
||||||
|
mobile: '',
|
||||||
|
position: '',
|
||||||
|
creditAmount: '',
|
||||||
|
repaymentMethod: 'total'
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'debtor': {
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
message: '请输入挂账人',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
'mobile': {
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
message: '请输入手机号',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
'position': {
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
message: '请输入职位',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
'creditAmount': {
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
message: '请输入挂账额度',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
// 表单引用
|
||||||
|
const uFormRef = ref(null);
|
||||||
|
|
||||||
|
onLoad((options) => {
|
||||||
|
console.log(options)
|
||||||
|
if ( options.item ) {
|
||||||
|
pageData.formData = JSON.parse(options.item);
|
||||||
|
console.log(pageData.formData)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存
|
||||||
|
*/
|
||||||
|
|
||||||
|
let save = debounce(() => {
|
||||||
|
console.log(pageData.formData)
|
||||||
|
uFormRef.value.validate().then(valid => {
|
||||||
|
if (valid) {
|
||||||
|
let params = {
|
||||||
|
...pageData.formData
|
||||||
|
}
|
||||||
|
if (!pageData.formData.id) {
|
||||||
|
addCreditBuyer(params).then((res) => {
|
||||||
|
go.back(1)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
editCreditBuyer(params).then((res) => {
|
||||||
|
go.back(1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
// 处理验证错误
|
||||||
|
});
|
||||||
|
|
||||||
|
},1000)
|
||||||
|
|
||||||
|
let cancel = ()=>{
|
||||||
|
go.back(1)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
page{
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style lang="scss">
|
||||||
|
|
||||||
|
.content {
|
||||||
|
background: #F9F9F9;
|
||||||
|
padding: 32rpx 28rpx 150rpx 28rpx;
|
||||||
|
|
||||||
|
.card{
|
||||||
|
padding: 32rpx 24rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
.item-column{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.tishi{
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999999;
|
||||||
|
margin-top: 16rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bottomPop{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
>button {
|
||||||
|
width: 530rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
line-height: 80rpx;
|
||||||
|
margin: 0 auto;
|
||||||
|
height: 80rpx;
|
||||||
|
line-height: 80rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
border-radius: 56rpx 56rpx 56rpx 56rpx;
|
||||||
|
}
|
||||||
|
.save{
|
||||||
|
color: #fff;
|
||||||
|
background: #318AFE;
|
||||||
|
}
|
||||||
|
.cancel{
|
||||||
|
font-weight: 400;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
BIN
pageCreditBuyer/bg.png
Normal file
BIN
pageCreditBuyer/bg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
108
pageCreditBuyer/components/my-action-sheet.vue
Normal file
108
pageCreditBuyer/components/my-action-sheet.vue
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
<template>
|
||||||
|
<view class="action-sheet" @tap="close" v-if="show">
|
||||||
|
<view class="box">
|
||||||
|
<slot name="title">
|
||||||
|
|
||||||
|
</slot>
|
||||||
|
<view class="item" @tap.stop="itemClick(index)" v-for="(item,index) in props.list" :key="index">
|
||||||
|
<button class="bg-fff btn" hover-class="btn-hover-class" :style="{color:index==0?'red':''}" :class="{'color-main':active==index}">{{item}}</button>
|
||||||
|
</view>
|
||||||
|
<view class="bock-gary"></view>
|
||||||
|
<view class="cancel-btn" @tap="close">
|
||||||
|
<button>取消</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue';
|
||||||
|
const props=defineProps({
|
||||||
|
//那个按钮文字高亮
|
||||||
|
active:{
|
||||||
|
type:Number,
|
||||||
|
default:-1
|
||||||
|
},
|
||||||
|
autoClose:{
|
||||||
|
type:Boolean,
|
||||||
|
default:true
|
||||||
|
},
|
||||||
|
title:{
|
||||||
|
type:String,
|
||||||
|
default:'耗材报损'
|
||||||
|
},
|
||||||
|
list:{
|
||||||
|
type:Array,
|
||||||
|
default:['编辑','删除']
|
||||||
|
},
|
||||||
|
show:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emits=defineEmits(['itemClick','close'])
|
||||||
|
let show=ref(false)
|
||||||
|
function open(){
|
||||||
|
show.value=true
|
||||||
|
}
|
||||||
|
function close(){
|
||||||
|
show.value=false
|
||||||
|
emits('close')
|
||||||
|
}
|
||||||
|
function itemClick(index){
|
||||||
|
if(props.autoClose){
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
emits('itemClick',index)
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open,close
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
$bg:rgb(240, 240, 240);
|
||||||
|
.action-sheet{
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
top: 0;
|
||||||
|
background-color: rgba(51,51,51,.5);
|
||||||
|
z-index: 999;
|
||||||
|
.box{
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
border-radius: 20rpx 20rpx 0rpx 0rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #fff;
|
||||||
|
/* #ifndef H5 */
|
||||||
|
padding-bottom: calc(24rpx + constant(safe-area-inset-bottom));
|
||||||
|
padding-bottom: calc(24rpx + env(safe-area-inset-bottom));
|
||||||
|
/* #endif */
|
||||||
|
|
||||||
|
.item{
|
||||||
|
text-align: center;
|
||||||
|
font-size: 32rpx;
|
||||||
|
border-bottom: 1px solid $bg;
|
||||||
|
.btn{
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bock-gary{
|
||||||
|
background-color: $bg;
|
||||||
|
height: 20rpx;
|
||||||
|
}
|
||||||
|
.cancel-btn{
|
||||||
|
text-align: center;
|
||||||
|
font-size: 32rpx;
|
||||||
|
}
|
||||||
|
.btn-hover-class{
|
||||||
|
background-color: rgb(222, 222, 222);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
448
pageCreditBuyer/components/my-date-pickerview.vue
Normal file
448
pageCreditBuyer/components/my-date-pickerview.vue
Normal file
@@ -0,0 +1,448 @@
|
|||||||
|
<template>
|
||||||
|
<view class="mask" v-if="show" @tap="close">
|
||||||
|
<view class="box" @tap.stop="nullFunction">
|
||||||
|
<view class="u-flex u-relative u-row-center u-p-30 top">
|
||||||
|
<view class="font-bold u-font-32">筛选日期时间</view>
|
||||||
|
<view class="close" @tap="close">
|
||||||
|
<uni-icons type="closeempty" size="24"></uni-icons>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
<!-- <view class="u-p-30 u-flex u-flex-wrap gap-20 fastTime">
|
||||||
|
<view class="item" v-for="(item,index) in fastTime" :key="index" @tap="changeTime(item.key)">
|
||||||
|
{{item.title}}
|
||||||
|
</view>
|
||||||
|
</view> -->
|
||||||
|
<picker-view :immediate-change="true" @pickend="pickend" :value="value" @change="bindChange"
|
||||||
|
class="picker-view">
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in days" :key="index">{{item}}日</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<!-- <picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in hours" :key="index">{{item}}时</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in minutes" :key="index">{{item}}分</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in seconds" :key="index">{{item}}秒</view>
|
||||||
|
</picker-view-column> -->
|
||||||
|
</picker-view>
|
||||||
|
<view class="u-text-center color-999">至</view>
|
||||||
|
<picker-view :immediate-change="true" :value="value1" @pickend="pickend1" @change="bindChange1"
|
||||||
|
class="picker-view">
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in days1" :key="index">{{item}}日</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<!-- <picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in hours" :key="index">{{item}}时</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in minutes" :key="index">{{item}}分</view>
|
||||||
|
</picker-view-column>
|
||||||
|
<picker-view-column>
|
||||||
|
<view class="item" v-for="(item,index) in seconds" :key="index">{{item}}秒</view>
|
||||||
|
</picker-view-column> -->
|
||||||
|
</picker-view>
|
||||||
|
|
||||||
|
<!-- 站位 -->
|
||||||
|
<view style="height: 80px;"></view>
|
||||||
|
<view class="fixed_b">
|
||||||
|
<my-button shape="circle" @tap="confirm">确定</my-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import myButton from "@/components/my-components/my-button.vue"
|
||||||
|
import {
|
||||||
|
reactive,
|
||||||
|
ref
|
||||||
|
} from 'vue';
|
||||||
|
const $nowDate = new Date()
|
||||||
|
const nowDate = {
|
||||||
|
year: $nowDate.getFullYear(),
|
||||||
|
month: $nowDate.getMonth() + 1,
|
||||||
|
day: $nowDate.getDate(),
|
||||||
|
hours: $nowDate.getHours(),
|
||||||
|
minutes: $nowDate.getMinutes(),
|
||||||
|
seconds: $nowDate.getSeconds()
|
||||||
|
}
|
||||||
|
const yearsLen = 30
|
||||||
|
const years = new Array(yearsLen).fill(1).map((v, index) => {
|
||||||
|
return nowDate.year - index
|
||||||
|
}).reverse()
|
||||||
|
const months = new Array(12).fill(1).map((v, index) => {
|
||||||
|
return index + 1
|
||||||
|
})
|
||||||
|
const days = ref(new Array(getMonthArea($nowDate, 'end').getDate()).fill(1).map((v, index) => {
|
||||||
|
return index + 1
|
||||||
|
}))
|
||||||
|
const days1 = ref(new Array(getMonthArea($nowDate, 'end').getDate()).fill(1).map((v, index) => {
|
||||||
|
return index + 1
|
||||||
|
}))
|
||||||
|
const hours = new Array(24).fill(1).map((v, index) => {
|
||||||
|
return index
|
||||||
|
})
|
||||||
|
const minutes = new Array(60).fill(1).map((v, index) => {
|
||||||
|
return index
|
||||||
|
})
|
||||||
|
const seconds = new Array(60).fill(1).map((v, index) => {
|
||||||
|
return index
|
||||||
|
})
|
||||||
|
const fastTime = reactive([{
|
||||||
|
title: '今日',
|
||||||
|
key: 'now'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '昨日',
|
||||||
|
key: 'prve'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '本月',
|
||||||
|
key: 'nowMonth'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '上月',
|
||||||
|
key: 'prveMonth'
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function setPrveDay() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setNowMoneth() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setprveMoneth() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function setDay(start, end) {
|
||||||
|
value.value = [
|
||||||
|
start.year,
|
||||||
|
start.month,
|
||||||
|
start.day,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
]
|
||||||
|
value1.value = [
|
||||||
|
end.year,
|
||||||
|
end.month,
|
||||||
|
end.day,
|
||||||
|
23,
|
||||||
|
59,
|
||||||
|
59,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeTime(key) {
|
||||||
|
const yearIndex = years.findIndex(v => v == nowDate.year)
|
||||||
|
const prveyearIndex = years.findIndex(v => v == nowDate.year) - 1
|
||||||
|
const nowMonthIndex = nowDate.month - 1
|
||||||
|
const nowDayIndex = nowDate.day - 1
|
||||||
|
const dataMap = {
|
||||||
|
now: function() {
|
||||||
|
return {
|
||||||
|
start: {
|
||||||
|
year: yearIndex,
|
||||||
|
month: nowMonthIndex,
|
||||||
|
day: nowDayIndex
|
||||||
|
},
|
||||||
|
end: {
|
||||||
|
year: yearIndex,
|
||||||
|
month: nowMonthIndex,
|
||||||
|
day: nowDayIndex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
prve: function() {
|
||||||
|
const oneDay=1000*60*60*24
|
||||||
|
const date=new Date(new Date(nowDate.year,nowDate.month,nowDate.day,0,0,0).getTime()-oneDay)
|
||||||
|
return {
|
||||||
|
start: {
|
||||||
|
year:years.findIndex(v=>v==date.getFullYear()),
|
||||||
|
month:date.getMonth()-1<0?11:date.getMonth()-1,
|
||||||
|
day: date.getDate()-1
|
||||||
|
},
|
||||||
|
end: {
|
||||||
|
year:years.findIndex(v=>v==date.getFullYear()),
|
||||||
|
month:date.getMonth()-1<0?11:date.getMonth()-1,
|
||||||
|
day: date.getDate()-1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nowMonth: function() {
|
||||||
|
return {
|
||||||
|
start: {
|
||||||
|
year:yearIndex,
|
||||||
|
month:nowMonthIndex,
|
||||||
|
day: 0
|
||||||
|
},
|
||||||
|
end: {
|
||||||
|
year:yearIndex,
|
||||||
|
month:nowMonthIndex,
|
||||||
|
day:new Date(nowDate.year, nowDate.month , 0).getDate() - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
prveMonth: function() {
|
||||||
|
const oneDay=1000*60*60*24
|
||||||
|
const date=new Date(new Date(nowDate.year, nowDate.month-1,0,0,0).getTime()-oneDay)
|
||||||
|
console.log(date.getMonth());
|
||||||
|
return {
|
||||||
|
start: {
|
||||||
|
year:years.findIndex(v=>v==date.getFullYear()),
|
||||||
|
month:date.getMonth(),
|
||||||
|
day: 0
|
||||||
|
},
|
||||||
|
end: {
|
||||||
|
year:years.findIndex(v=>v==date.getFullYear()),
|
||||||
|
month:date.getMonth(),
|
||||||
|
day: date.getDate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const data = dataMap[key]()
|
||||||
|
setDay(data.start, data.end)
|
||||||
|
changeDays(false,value.value)
|
||||||
|
changeDays(true,value1.value)
|
||||||
|
|
||||||
|
console.log(value1.value);
|
||||||
|
const start = returnDateString(value.value)
|
||||||
|
const end = returnDateString(value1.value)
|
||||||
|
|
||||||
|
emits('confirm', {
|
||||||
|
text: `${start}——${end}`,
|
||||||
|
start,
|
||||||
|
end
|
||||||
|
})
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
let value = ref([
|
||||||
|
years.length - 1,
|
||||||
|
nowDate.month - 1,
|
||||||
|
nowDate.day - 1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
])
|
||||||
|
let value1 = ref([
|
||||||
|
years.length - 1,
|
||||||
|
nowDate.month - 1,
|
||||||
|
nowDate.day - 1,
|
||||||
|
23,
|
||||||
|
59,
|
||||||
|
59,
|
||||||
|
])
|
||||||
|
|
||||||
|
let show = ref(false)
|
||||||
|
const emits = defineEmits('close', 'open', 'confirm')
|
||||||
|
|
||||||
|
function toggle() {
|
||||||
|
show.value = !show.value
|
||||||
|
if (show.value) {
|
||||||
|
emits('open', true)
|
||||||
|
} else {
|
||||||
|
emits('close', false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function close() {
|
||||||
|
show.value = false
|
||||||
|
emits('close', false)
|
||||||
|
}
|
||||||
|
|
||||||
|
function open() {
|
||||||
|
show.value = true
|
||||||
|
emits('open', true)
|
||||||
|
}
|
||||||
|
|
||||||
|
function returnDateString(arr) {
|
||||||
|
const year = years[arr[0]]
|
||||||
|
const month = arr[1] + 1
|
||||||
|
const day = arr[2] + 1
|
||||||
|
const hour = ('0' + arr[3]).slice(-2)
|
||||||
|
const min = ('0' + arr[4]).slice(-2)
|
||||||
|
const sen = ('0' + arr[5]).slice(-2)
|
||||||
|
return `${year}-${month}-${day} ${hour}:${min}:${sen}`
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function confirm(e) {
|
||||||
|
const start = returnDateString(value.value)
|
||||||
|
const end = returnDateString(value1.value)
|
||||||
|
console.log(start);
|
||||||
|
console.log(end);
|
||||||
|
emits('confirm', {
|
||||||
|
text: `${start}——${end}`,
|
||||||
|
start,
|
||||||
|
end
|
||||||
|
})
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
|
||||||
|
function returnMonthStart(arr) {
|
||||||
|
return new Date(years[arr[0]], months[arr[1]] - 1, 1).getDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
function returnMonthEnd(arr) {
|
||||||
|
return new Date(years[arr[0]], months[arr[1]], 0).getDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeDays(isDays1,arr){
|
||||||
|
const end = returnMonthEnd(arr)
|
||||||
|
if (end) {
|
||||||
|
if(isDays1){
|
||||||
|
days1.value= new Array(end).fill(1).map((v,
|
||||||
|
index) => {
|
||||||
|
return index + 1
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
days.value= new Array(end).fill(1).map((v,
|
||||||
|
index) => {
|
||||||
|
return index + 1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function bindChange(e) {
|
||||||
|
value.value = e.detail.value
|
||||||
|
changeDays(false, e.detail.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
function bindChange1(e) {
|
||||||
|
value1.value = e.detail.value
|
||||||
|
changeDays(true, e.detail.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDayDate(date = new Date(), type) {
|
||||||
|
const now = date
|
||||||
|
if (type === 'start') {
|
||||||
|
const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||||
|
return startOfDay
|
||||||
|
}
|
||||||
|
if (type === 'end') {
|
||||||
|
const endOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999);
|
||||||
|
return endOfDay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMonthArea(date = new Date(), type) {
|
||||||
|
let now = date
|
||||||
|
let currentMonthStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
||||||
|
let currentMonthEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59, 999);
|
||||||
|
if (type === 'start') {
|
||||||
|
return currentMonthStart
|
||||||
|
}
|
||||||
|
if (type === 'end') {
|
||||||
|
return currentMonthEnd;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
start: currentMonthStart,
|
||||||
|
end: currentMonthEnd
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function nullFunction() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function pickend(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
function pickend1(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
close,
|
||||||
|
open,
|
||||||
|
confirm,
|
||||||
|
toggle
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.fastTime {
|
||||||
|
.item {
|
||||||
|
background-color: rgb(247, 247, 247);
|
||||||
|
padding: 6rpx 40rpx;
|
||||||
|
border-radius: 6rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.top {
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
right: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mask {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
top: 0;
|
||||||
|
background-color: rgba(0, 0, 0, .7);
|
||||||
|
|
||||||
|
.box {
|
||||||
|
position: absolute;
|
||||||
|
background-color: #fff;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
border-radius: 16rpx 16rpx 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed_b {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
padding: 30rpx;
|
||||||
|
z-index: 100;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picker-view {
|
||||||
|
width: 750rpx;
|
||||||
|
height: 300rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
line-height: 34px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
275
pageCreditBuyer/components/my-repayment.vue
Normal file
275
pageCreditBuyer/components/my-repayment.vue
Normal file
@@ -0,0 +1,275 @@
|
|||||||
|
<template>
|
||||||
|
<up-popup :show="show" @close="close" round="20" mode="center" customStyle="width: 80%;">
|
||||||
|
<view class="head">
|
||||||
|
<text></text>
|
||||||
|
<text class="title">{{pageData.formData.orderId?'挂账付款':'挂账还款'}}</text>
|
||||||
|
<text></text>
|
||||||
|
</view>
|
||||||
|
<view class="content">
|
||||||
|
<up-form
|
||||||
|
labelPosition="top"
|
||||||
|
labelWidth="120"
|
||||||
|
required
|
||||||
|
:model="pageData.formData"
|
||||||
|
:rules="pageData.rules"
|
||||||
|
ref="uFormRef"
|
||||||
|
:labelStyle="{fontSize: '28rpx',color: '#333',fontWeight: 'bold'}"
|
||||||
|
>
|
||||||
|
<view class="card top" v-if="pageData.formData.repaymentMethod == 'total'">
|
||||||
|
<view>
|
||||||
|
<text class="label">挂账人</text>
|
||||||
|
<text class="value">{{pageData.debtor.debtor}}</text>
|
||||||
|
</view>
|
||||||
|
<view>
|
||||||
|
<text class="label">挂账金额</text>
|
||||||
|
<text class="value">{{pageData.debtor.owedAmount || 0}}</text>
|
||||||
|
</view>
|
||||||
|
<view>
|
||||||
|
<text class="label">账户余额</text>
|
||||||
|
<text class="value">{{pageData.debtor.accountBalance || 0}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="card">
|
||||||
|
<up-form-item label="还款方式" labelPosition="left" v-if="pageData.formData.repaymentMethod == 'total'">
|
||||||
|
<view style="width: 100%;display: flex;justify-content: flex-end;">
|
||||||
|
<up-radio-group v-model="pageData.formData.repaymentMethod" placement="row" style="justify-content: flex-end;">
|
||||||
|
<view v-for="(item, index) in pageData.repaymentMethodList" :key="index">
|
||||||
|
<up-radio
|
||||||
|
v-if="pageData.formData.repaymentMethod == item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:name="item.value"
|
||||||
|
></up-radio>
|
||||||
|
</view>
|
||||||
|
</up-radio-group>
|
||||||
|
</view>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="还款金额(¥)" prop="repaymentAmount">
|
||||||
|
<up-input v-model="pageData.formData.repaymentAmount" type="number" placeholder="请输入金额" customStyle="padding: 0!important;">
|
||||||
|
<template #prefix>
|
||||||
|
<up-button color="#e5e5e5" customStyle="font-size:32rpx;color: #999;width: 124rpx;margin-right: 10rpx;" :hairline="false">¥</up-button>
|
||||||
|
</template>
|
||||||
|
</up-input>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="支付方式" prop="paymentMethod">
|
||||||
|
<up-input v-model="pageData.formData.paymentMethod" placeholder="请输入支付方式"></up-input>
|
||||||
|
</up-form-item>
|
||||||
|
<up-form-item label="备注" prop="remark">
|
||||||
|
<up-input v-model="pageData.formData.remark" placeholder="请输入备注"></up-input>
|
||||||
|
</up-form-item>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</up-form>
|
||||||
|
<view class="bottomPop">
|
||||||
|
<view class="save" @click="affirm">保存</view>
|
||||||
|
<view class="cancel" @click="close">取消</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</up-popup>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive,ref } from 'vue';
|
||||||
|
import { debounce } from '@/commons/utils/debounce.js'
|
||||||
|
import { creditRePayment, creditPayment } from '@/http/yskApi/credit.js'
|
||||||
|
const props=defineProps({
|
||||||
|
show:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emits=defineEmits(['close', "affirm"])
|
||||||
|
const pageData = reactive({
|
||||||
|
id: null,
|
||||||
|
title: "",
|
||||||
|
debtor: {
|
||||||
|
debtor: '',
|
||||||
|
formData: 0,
|
||||||
|
accountBalance: 0,
|
||||||
|
},
|
||||||
|
repaymentMethodList: [
|
||||||
|
{ label: '按总金额还款', value: 'total' },
|
||||||
|
{ label: '按订单还款', value: 'order' }
|
||||||
|
],
|
||||||
|
formData: {
|
||||||
|
id: null,
|
||||||
|
creditBuyerId: null,
|
||||||
|
orderId: null,
|
||||||
|
repaymentMethod: '',
|
||||||
|
repaymentAmount: '',
|
||||||
|
paymentMethod: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'repaymentAmount': {
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
message: '请输入金额',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
'paymentMethod': {
|
||||||
|
type: 'string',
|
||||||
|
required: true,
|
||||||
|
message: '请输入支付方式',
|
||||||
|
trigger: ['blur'],
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
})
|
||||||
|
// 表单引用
|
||||||
|
const uFormRef = ref(null);
|
||||||
|
let show=ref(false)
|
||||||
|
|
||||||
|
function open(options){
|
||||||
|
show.value = true;
|
||||||
|
console.log(options)
|
||||||
|
if (options.creditBuyerId) {
|
||||||
|
pageData.formData.creditBuyerId = options.creditBuyerId;
|
||||||
|
pageData.formData.orderId = options.order.orderId;
|
||||||
|
pageData.formData.repaymentMethod = options.repaymentMethod;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
pageData.formData.id = options.id;
|
||||||
|
pageData.formData.repaymentMethod = options.repaymentMethod;
|
||||||
|
pageData.debtor.debtor = options.debtor;
|
||||||
|
pageData.debtor.owedAmount = options.owedAmount;
|
||||||
|
pageData.debtor.accountBalance = options.accountBalance;
|
||||||
|
}
|
||||||
|
pageData.formData.repaymentAmount = "";
|
||||||
|
pageData.formData.paymentMethod = "";
|
||||||
|
pageData.formData.remark = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function close(){
|
||||||
|
show.value = false;
|
||||||
|
emits('close')
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 确认
|
||||||
|
*/
|
||||||
|
let affirm = debounce(() => {
|
||||||
|
uFormRef.value.validate().then(valid => {
|
||||||
|
if (valid) {
|
||||||
|
console.log(pageData.formData)
|
||||||
|
let params = {
|
||||||
|
...pageData.formData
|
||||||
|
}
|
||||||
|
if ( !pageData.formData.orderId ) {
|
||||||
|
creditRePayment(params).then((res) => {
|
||||||
|
console.log(res.repaymentCount > 0)
|
||||||
|
if (res.repaymentCount > 0) {
|
||||||
|
uni.$u.toast('还款成功')
|
||||||
|
emits('affirm')
|
||||||
|
close();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.repaymentMsg)
|
||||||
|
setTimeout(()=>{
|
||||||
|
emits('affirm')
|
||||||
|
close();
|
||||||
|
},2000)
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
creditPayment(params).then((res) => {
|
||||||
|
if (!res.repaymentMsg) {
|
||||||
|
uni.$u.toast('付款成功')
|
||||||
|
emits('affirm')
|
||||||
|
close();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.repaymentMsg)
|
||||||
|
setTimeout(()=>{
|
||||||
|
emits('affirm')
|
||||||
|
close();
|
||||||
|
},2000)
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
// 处理验证错误
|
||||||
|
});
|
||||||
|
|
||||||
|
},1000)
|
||||||
|
defineExpose({
|
||||||
|
open,close,affirm
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.head{
|
||||||
|
display: flex;
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
.title{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
padding: 0 32rpx 32rpx 32rpx;
|
||||||
|
.card{
|
||||||
|
background-color: #fff;
|
||||||
|
margin-bottom: 42rpx;
|
||||||
|
}
|
||||||
|
.card.top{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
background: #F8F8FA;
|
||||||
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
margin-bottom: 48rpx;
|
||||||
|
padding: 16rpx 0 ;
|
||||||
|
>view{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
.label{
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
.value{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bottomPop{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
>view {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
height: 80rpx;
|
||||||
|
line-height: 80rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
border-radius: 56rpx 56rpx 56rpx 56rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.save{
|
||||||
|
color: #fff;
|
||||||
|
background: #318AFE;
|
||||||
|
}
|
||||||
|
.cancel{
|
||||||
|
font-weight: 400;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
474
pageCreditBuyer/creditDetail.vue
Normal file
474
pageCreditBuyer/creditDetail.vue
Normal file
@@ -0,0 +1,474 @@
|
|||||||
|
<template>
|
||||||
|
<view class="credit_search">
|
||||||
|
<view class="time-wrapper">
|
||||||
|
<view v-for="(v, i) in pageData.timeList" :key="i" class="timelistbox">
|
||||||
|
<view class="time-item" @tap="changeTime(v.value)" :class="{ 'time-selected':v.value == pageData.selected }">
|
||||||
|
{{v.label}}
|
||||||
|
</view>
|
||||||
|
<view class="xian" v-if="v.value == pageData.selected "> </view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="search_status" @tap="pageData.showStatus = !pageData.showStatus" >
|
||||||
|
<view class="title">{{pageData.statusTitle}}</view>
|
||||||
|
<view class="select">
|
||||||
|
<text style="margin-right: 12rpx;">筛选</text>
|
||||||
|
<up-icon name="arrow-down-fill" color="#666" :size="14"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view :style="{height:pageData.showStatus?statusHeight:0}" class="tranistion statusList overflow-hide">
|
||||||
|
<view @tap="changeNowStatusIndex(index,item)" class="u-flex u-p-l-30 lh30 u-p-r-30 u-row-between"
|
||||||
|
v-for="(item,index) in pageData.statusList" :key="index">
|
||||||
|
<view :class="{'color-main':pageData.statusIndex===index}">{{item.label}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="content">
|
||||||
|
<view class="statistics">
|
||||||
|
<view class="statistics_cell" v-for="(item,index) in pageData.payCountList" :key="index">
|
||||||
|
<view class="statistics_cell_value"><text style="font-size: 24rpx;">¥</text>{{item.amount}}</view>
|
||||||
|
<view class="statistics_cell_label" v-if="index == 0">{{item.label}}<text style="color: #318AFE;">{{item.count}}</text>笔</view>
|
||||||
|
<text class="statistics_cell_label" v-else>{{item.label}}</text>
|
||||||
|
<text class="statistics_cell_xian" v-if="index < 3"></text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="content_list" v-if="pageData.list.length > 0">
|
||||||
|
<view class="list_cell" v-for="(item,index) in pageData.list" :key="item.id">
|
||||||
|
<view class="amount">
|
||||||
|
<view><view class="payAmount"><text>¥</text>{{item.payAmount || '0'}}</view><text class="amount_label">应付金额</text></view>
|
||||||
|
<view><view class="paidAmount"><text>¥</text>{{item.paidAmount || '0'}}</view><text class="amount_label">已付款金额</text></view>
|
||||||
|
<view><view class="unpaidAmount"><text>¥</text>{{item.unpaidAmount || '0'}}</view><text class="amount_label">待付款金额</text></view>
|
||||||
|
</view>
|
||||||
|
<view class="cell_list">
|
||||||
|
<view><text class="cell_label">创建日期</text><text class="cell_value">{{item.createTime || '-'}}</text></view>
|
||||||
|
<view><text class="cell_label">订单号</text><text class="cell_value">{{item.orderId || '-'}}</text></view>
|
||||||
|
<view><text class="cell_label">备注</text><text class="cell_value">{{item.remark || '-'}}</text></view>
|
||||||
|
<view><text class="cell_label">付款时间</text><text class="cell_value">{{item.lastPaymentTime || '-'}}</text></view>
|
||||||
|
</view>
|
||||||
|
<view class="bottomBox">
|
||||||
|
<view class="btn record" @tap="toUrl('PAGES_CREDIT_BUYER_REPAYMENTRECORD',{id: pageData.query.creditBuyerId, orderId: item.id})">账单付款记录</view>
|
||||||
|
<view class="btn payment" @tap="repaymentOpen(item)" :style="{ backgroundColor: pageData.repaymentMethod == 'total' ? '#999' :''}">付款</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-else style="display: flex;flex-direction: column;align-items: center;justify-content: center;margin-top: 300rpx;">
|
||||||
|
<image src="./bg.png" style="width: 325rpx;height: 335rpx;" mode=""></image>
|
||||||
|
<view style="font-size: 28rpx;color: #999;margin-top: 20rpx;">暂无数据</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<datePickerview @confirm="datePickerConfirm" ref="datePicker"></datePickerview>
|
||||||
|
<my-repayment ref="repayment" @affirm="affirm"></my-repayment>
|
||||||
|
<view class="shade" v-show="pageData.showStatus" @tap="pageData.showStatus=false"></view>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import go from '@/commons/utils/go.js';
|
||||||
|
import myRepayment from './components/my-repayment';
|
||||||
|
import datePickerview from './components/my-date-pickerview.vue'
|
||||||
|
import dayjs from 'dayjs' //时间格式库
|
||||||
|
import { onLoad, onShow, onReachBottom } from '@dcloudio/uni-app';
|
||||||
|
import { creditBuyerOrderList, creditBuyerOrderSummary } from '@/http/yskApi/credit.js'
|
||||||
|
import { reactive, ref, computed, getCurrentInstance } from 'vue';
|
||||||
|
const pageData = reactive({
|
||||||
|
showStatus: false,
|
||||||
|
statusList:[
|
||||||
|
{ label: '全部状态', value: '' },
|
||||||
|
{ label: '未付款', value: 'unpaid' },
|
||||||
|
{ label: '部分支付', value: 'partial' },
|
||||||
|
{ label: '已付款', value: 'paid' }
|
||||||
|
],
|
||||||
|
payCountList: [
|
||||||
|
{ label: '总交易', amount: 0, count: 0 },
|
||||||
|
{ label: '已支付金额', amount: 0 },
|
||||||
|
{ label: '待支付金额', amount: 0 },
|
||||||
|
{ label: '待支付笔数', amount: 0 }
|
||||||
|
],
|
||||||
|
timeList: [
|
||||||
|
{ label: '今天', value: 'today' },
|
||||||
|
{ label: '昨天', value: 'yesterday' },
|
||||||
|
{ label: '本周', value: 'circumference' },
|
||||||
|
{ label: '本月', value: 'moon' },
|
||||||
|
{ label: '自定义', value: 'custom' }
|
||||||
|
],
|
||||||
|
statusIndex: 0,
|
||||||
|
statusTitle: '全部状态',
|
||||||
|
selected: '',
|
||||||
|
query: {
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
creditBuyerId: null,
|
||||||
|
orderId: null,
|
||||||
|
status: ''
|
||||||
|
},
|
||||||
|
start: "",
|
||||||
|
end: "",
|
||||||
|
repaymentMethod: 'order',
|
||||||
|
list: []
|
||||||
|
})
|
||||||
|
let statusHeight = computed(() => {
|
||||||
|
return 30 * pageData.statusList.length + 40 + 'px'
|
||||||
|
})
|
||||||
|
const currentInstance = getCurrentInstance()
|
||||||
|
let repayment = ref(null)
|
||||||
|
|
||||||
|
onLoad((options) => {
|
||||||
|
if ( options.id ) {
|
||||||
|
pageData.query.creditBuyerId = options.id;
|
||||||
|
}
|
||||||
|
if ( options.repaymentMethod ) {
|
||||||
|
pageData.repaymentMethod = options.repaymentMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
// 监听,触底事件。 查询下一页
|
||||||
|
onReachBottom(() => {
|
||||||
|
console.log(pageData.query.page)
|
||||||
|
if( pageData.query.page * pageData.query.size < pageData.totalElements) {
|
||||||
|
pageData.query.page++
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取还款记录列表
|
||||||
|
*/
|
||||||
|
async function getList() {
|
||||||
|
let beginDate, endDate;
|
||||||
|
if (pageData.selected == 'today') {
|
||||||
|
beginDate = dayjs().format('YYYY-MM-DD') + ' 00:00:00'
|
||||||
|
endDate = dayjs().format('YYYY-MM-DD') + ' 23:59:59'
|
||||||
|
} else if (pageData.selected == 'yesterday') {
|
||||||
|
beginDate = formatTime() + ' 00:00:00'
|
||||||
|
endDate = formatTime() + ' 23:59:59'
|
||||||
|
} else if (pageData.selected == 'circumference') {
|
||||||
|
var now = new Date();
|
||||||
|
var nowTime = now.getTime();
|
||||||
|
var day = now.getDay();
|
||||||
|
var oneDayTime = 24 * 60 * 60 * 1000;
|
||||||
|
//显示周一
|
||||||
|
var MondayTime = nowTime - (day - 1) * oneDayTime;
|
||||||
|
//显示周日
|
||||||
|
var SundayTime = nowTime + (7 - day) * oneDayTime;
|
||||||
|
beginDate = dayjs(MondayTime).format('YYYY-MM-DD 00:00:00')
|
||||||
|
endDate = dayjs(SundayTime).format('YYYY-MM-DD 23:59:59')
|
||||||
|
} else if (pageData.selected == 'moon') {
|
||||||
|
beginDate = dayjs().startOf('month').format('YYYY-MM-DD') + ' 00:00:00'
|
||||||
|
endDate = dayjs().endOf('month').format('YYYY-MM-DD') + ' 23:59:59'
|
||||||
|
} else if (pageData.selected == 'custom') {
|
||||||
|
let s = pageData.start.substring(0, pageData.start.indexOf(' '))
|
||||||
|
let e = pageData.end.substring(0, pageData.end.indexOf(' '))
|
||||||
|
beginDate = s + ' 00:00:00'
|
||||||
|
endDate = e + ' 23:59:59'
|
||||||
|
}
|
||||||
|
|
||||||
|
let params = {
|
||||||
|
creditBuyerId: pageData.query.creditBuyerId,
|
||||||
|
status: pageData.query.status,
|
||||||
|
size: pageData.query.size,
|
||||||
|
page: pageData.query.page
|
||||||
|
}
|
||||||
|
if ( beginDate && endDate) {
|
||||||
|
params.beginDate = beginDate.substring(0, 10);
|
||||||
|
params.endDate = endDate.substring(0, 10);
|
||||||
|
}
|
||||||
|
creditBuyerOrderList(params).then(res => {
|
||||||
|
pageData.list = [...pageData.list,...res.content]
|
||||||
|
pageData.totalElements = res.totalElements
|
||||||
|
})
|
||||||
|
creditBuyerOrderSummary(params).then(res => {
|
||||||
|
pageData.payCountList[0].amount = res.payAmountTotal
|
||||||
|
pageData.payCountList[0].count = res.count
|
||||||
|
pageData.payCountList[1].amount = res.paidAmountTotal
|
||||||
|
pageData.payCountList[2].amount = res.unpaidAmountTotal
|
||||||
|
pageData.payCountList[3].amount = res.unpaidCount
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function changeTime(e) {
|
||||||
|
pageData.selected = e
|
||||||
|
console.log(e)
|
||||||
|
if (e == 'custom') {
|
||||||
|
currentInstance.ctx.$refs.datePicker.toggle()
|
||||||
|
} else {
|
||||||
|
pageData.query.page = 1;
|
||||||
|
pageData.list = [];
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function datePickerConfirm(e) {
|
||||||
|
pageData.start = e.start
|
||||||
|
pageData.end = e.end
|
||||||
|
getList()
|
||||||
|
// gettableData() day如日期不能是1 7 30 就回报错
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态选择
|
||||||
|
*/
|
||||||
|
function changeNowStatusIndex(i,item) {
|
||||||
|
pageData.statusIndex = i
|
||||||
|
pageData.showStatus = false
|
||||||
|
pageData.statusTitle = item.label
|
||||||
|
pageData.query.status = item.value
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
let repaymentOpen = (item) => {
|
||||||
|
if ( item.repaymentMethod == 'total' ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
repayment.value.open({creditBuyerId:pageData.query.creditBuyerId,order:item});
|
||||||
|
}
|
||||||
|
let affirm = (item) => {
|
||||||
|
pageData.query.page = 1;
|
||||||
|
pageData.list = [];
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
let toUrl = (url, d) => {
|
||||||
|
go.to(url, d)
|
||||||
|
}
|
||||||
|
// 获取当前时间
|
||||||
|
function getdate() {
|
||||||
|
const dt = new Date();
|
||||||
|
const y = dt.getFullYear();
|
||||||
|
const m = (dt.getMonth() + 1 + "").padStart(2, "0");
|
||||||
|
const d = (dt.getDate() + "").padStart(2, "0");
|
||||||
|
const hh = (dt.getHours() + "").padStart(2, "0");
|
||||||
|
const mm = (dt.getMinutes() + "").padStart(2, "0");
|
||||||
|
const ss = (dt.getSeconds() + "").padStart(2, "0");
|
||||||
|
return `${y}-${m}-${d}`;
|
||||||
|
}
|
||||||
|
// 获取昨天时间
|
||||||
|
const formatTime = () => {
|
||||||
|
let strDate = getdate()
|
||||||
|
let dateFormat = new Date(strDate);
|
||||||
|
dateFormat = dateFormat.setDate(dateFormat.getDate() - 1);
|
||||||
|
dateFormat = new Date(dateFormat);
|
||||||
|
let y = dateFormat.getFullYear()
|
||||||
|
let m = (dateFormat.getMonth() + 1).toString().padStart(2, '0')
|
||||||
|
let d = dateFormat.getDate().toString().padStart(2, '0')
|
||||||
|
return `${y}-${m}-${d}`
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
page{
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.credit_search {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 32rpx 0 12rpx 0;
|
||||||
|
position: fixed;
|
||||||
|
top: 0rpx;
|
||||||
|
left: 0;
|
||||||
|
z-index: 9;
|
||||||
|
.search_status{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
padding: 0 28rpx;
|
||||||
|
.title{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.select{
|
||||||
|
width: 116rpx;
|
||||||
|
text-align: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.time-wrapper {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
padding: 16rpx 28rpx 0 28rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 2rpx solid #F0F0F0;
|
||||||
|
.timelistbox {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.time-item {
|
||||||
|
font-size: 28rpx;
|
||||||
|
text-align: center;
|
||||||
|
padding-bottom: 22rpx;
|
||||||
|
font-weight: 400;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.xian {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 4rpx;
|
||||||
|
background-color: #318AFE;
|
||||||
|
// position: absolute;
|
||||||
|
// left: 16rpx;
|
||||||
|
// bottom: 0;
|
||||||
|
}
|
||||||
|
.time-selected {
|
||||||
|
color: #318afe;
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.statusList {
|
||||||
|
position: fixed;
|
||||||
|
top: 212rpx;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: #fff;
|
||||||
|
>view{
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.shade{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
z-index: 1;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
padding: 245rpx 28rpx 32rpx 28rpx;
|
||||||
|
.statistics{
|
||||||
|
padding: 38rpx 0;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
.statistics_cell{
|
||||||
|
width: 25%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
.statistics_cell_value{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
margin-bottom: 5rpx;
|
||||||
|
}
|
||||||
|
.statistics_cell_label{
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
.statistics_cell_xian{
|
||||||
|
width: 0rpx;
|
||||||
|
height: 38rpx;
|
||||||
|
border: 1rpx solid #E5E5E5;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content_list{
|
||||||
|
.list_cell{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
padding: 32rpx 24rpx;
|
||||||
|
.amount{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 12rpx 12rpx 12rpx 12rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
padding: 32rpx 0;
|
||||||
|
>view{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
.payAmount{
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.paidAmount{
|
||||||
|
color: #318AFE;
|
||||||
|
}
|
||||||
|
.unpaidAmount{
|
||||||
|
color: #F02C45;
|
||||||
|
}
|
||||||
|
>view>text{
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
.amount_label{
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
margin-top: 5rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.cell_list{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
>view{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bottomBox{
|
||||||
|
padding-top: 24rpx;
|
||||||
|
border-top: 1rpx solid #E5E5E5;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
.btn{
|
||||||
|
padding: 8rpx 32rpx;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
.record{
|
||||||
|
border-radius: 28rpx 28rpx 28rpx 28rpx;
|
||||||
|
border: 2rpx solid #3189FD;
|
||||||
|
color: #3189FD;
|
||||||
|
margin-right: 24rpx;
|
||||||
|
}
|
||||||
|
.payment{
|
||||||
|
color: #FFFFFF;
|
||||||
|
background: #3189FD;
|
||||||
|
border-radius: 28rpx 28rpx 28rpx 28rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
362
pageCreditBuyer/index.vue
Normal file
362
pageCreditBuyer/index.vue
Normal file
@@ -0,0 +1,362 @@
|
|||||||
|
<template>
|
||||||
|
<view class="credit_search">
|
||||||
|
<view class="select" @tap="pageData.showStatus = !pageData.showStatus" style="display: flex;align-items: center;width: 140rpx;">
|
||||||
|
<text>{{pageData.title}}</text>
|
||||||
|
<up-icon name="arrow-down-fill" size="12" style="margin-left: 12rpx;"></up-icon>
|
||||||
|
</view>
|
||||||
|
<!-- <view class="input">
|
||||||
|
<input v-model="pageData.query.keywords" @input="inputEvent" type="text" placeholder="搜索挂账人或者手机号" />
|
||||||
|
</view> -->
|
||||||
|
<view class="input">
|
||||||
|
<up-input
|
||||||
|
shape='circle'
|
||||||
|
border="none"
|
||||||
|
v-model="pageData.query.keywords"
|
||||||
|
@change="inputEvent"
|
||||||
|
type="text"
|
||||||
|
placeholder="搜索挂账人或者手机号"
|
||||||
|
prefixIcon="search"
|
||||||
|
prefixIconStyle="font-size: 26px;color: #666"
|
||||||
|
style='width: 100%;padding: 24rpx;'
|
||||||
|
></up-input>
|
||||||
|
</view>
|
||||||
|
<view class="icon">
|
||||||
|
<up-icon @tap="pageData.sheetShow = true" name="list" color="#318AFE" :size="32"></up-icon>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view :style="{height:pageData.showStatus?statusHeight:0}" class="tranistion statusList overflow-hide">
|
||||||
|
<view @tap="changeNowStatusIndex(index,item)" class="u-flex u-p-l-30 lh30 u-p-r-30 u-row-between"
|
||||||
|
v-for="(item,index) in pageData.statusList" :key="index">
|
||||||
|
<view :class="{'color-main':pageData.statusIndex===index}">{{item.label}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="debtor" v-if="pageData.list.length">
|
||||||
|
<view class="debtorItem" v-for="(item,index) in pageData.list" :key="index">
|
||||||
|
<view class="head">
|
||||||
|
<text> {{item.id}} </text>
|
||||||
|
<view class="headStatus"><text style="margin-right: 16rpx;">是否启用</text> <up-switch v-model="item.status" @change="statusChange(item)" :activeValue="1" :inactiveValue="0"></up-switch> </view>
|
||||||
|
</view>
|
||||||
|
<view class="content">
|
||||||
|
<view class="cell">
|
||||||
|
<view class="cell_item"><text>挂账人:</text><text class="val">{{item.debtor}}</text></view>
|
||||||
|
<view class="cell_item"><text>已挂账金额:</text><text class="val">{{item.owedAmount}}</text></view>
|
||||||
|
</view>
|
||||||
|
<view class="cell">
|
||||||
|
<view class="cell_item"><text>挂账额度:</text><text class="val">{{item.creditAmount}}</text></view>
|
||||||
|
<view class="cell_item"><text>剩余挂账额度:</text><text class="val">{{item.remainingAmount}}</text></view>
|
||||||
|
</view>
|
||||||
|
<view class="cell">
|
||||||
|
<view class="cell_item"><text>账户余额:</text><text class="val">{{item.accountBalance}}</text></view>
|
||||||
|
<view class="cell_item"><text>通用门店:</text><text class="val">{{item.shopName}}</text></view>
|
||||||
|
</view>
|
||||||
|
<view class="cell">
|
||||||
|
<view class="cell_item"><text>手机号:</text><text class="val">{{item.mobile}}</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="handle">
|
||||||
|
<view class="handle_btn" @tap="toUrl('PAGES_CREDIT_BUYER_REPAYMENTRECORD',{id:item.id})">还款记录</view>
|
||||||
|
<view class="handle_btn" @tap="toUrl('PAGES_CREDIT_BUYER_DETAIL',{id:item.id,repaymentMethod:item.repaymentMethod})">查看明细</view>
|
||||||
|
<view class="handle_btn" :style="{ color: item.repaymentMethod == 'order' ? '#999' :'',borderColor: item.repaymentMethod == 'order' ? '#999' :''}" @tap="repaymentOpen(item)">还款</view>
|
||||||
|
<view class="handle_btn" @tap="toUrl('PAGES_CREDIT_BUYER_ADDDEBTOR',{item:JSON.stringify(item)})">编辑</view>
|
||||||
|
<view class="handle_btn" @tap="delDebtor(item)">删除</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<template v-if="pageData.list.length">
|
||||||
|
<my-pagination :page="pageData.query.page" :totalElements="pageData.totalElements" :size="pageData.query.size"
|
||||||
|
@change="pageChange"></my-pagination>
|
||||||
|
</template>
|
||||||
|
</view>
|
||||||
|
<view v-else style="display: flex;flex-direction: column;align-items: center;justify-content: center;margin-top: 500rpx;">
|
||||||
|
<image src="./bg.png" style="width: 325rpx;height: 335rpx;" mode=""></image>
|
||||||
|
<view style="font-size: 28rpx;color: #999;margin-top: 20rpx;">暂无数据</view>
|
||||||
|
</view>
|
||||||
|
<my-repayment ref="repayment" @affirm="affirm"></my-repayment>
|
||||||
|
|
||||||
|
<up-action-sheet :actions="pageData.sheetList" @select="selectClick" :show="pageData.sheetShow" round="20" cancelText="取消" @close="pageData.sheetShow=false"></up-action-sheet>
|
||||||
|
<up-modal :show="pageData.delShow" title="确认是否删除当前挂账人" @confirm="delConfirm" @cancel="pageData.delShow=false" showCancelButton></up-modal>
|
||||||
|
<view class="shade" v-show="pageData.showStatus" @tap="pageData.showStatus=false"></view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import myRepayment from './components/my-repayment';
|
||||||
|
import color from '@/commons/color.js';
|
||||||
|
import {
|
||||||
|
ref,
|
||||||
|
reactive,
|
||||||
|
computed
|
||||||
|
} from 'vue';
|
||||||
|
import {
|
||||||
|
onShow
|
||||||
|
} from '@dcloudio/uni-app'
|
||||||
|
import go from '@/commons/utils/go.js';
|
||||||
|
import {
|
||||||
|
hasPermission
|
||||||
|
} from '@/commons/utils/hasPermission.js';
|
||||||
|
import {
|
||||||
|
getCreditBuyerList,
|
||||||
|
editCreditBuyer,
|
||||||
|
delCreditBuyer
|
||||||
|
} from '@/http/yskApi/credit.js';
|
||||||
|
|
||||||
|
let pageData = reactive({
|
||||||
|
showStatus: false,
|
||||||
|
sheetShow: false,
|
||||||
|
sheetList: [
|
||||||
|
{name: '创建挂账人', value: 'add'}
|
||||||
|
],
|
||||||
|
delShow: false,
|
||||||
|
delItem: null,
|
||||||
|
list: [],
|
||||||
|
statusList: [
|
||||||
|
{ label: '全部状态', value: '' },
|
||||||
|
{ label: '未付款', value: 'unpaid' },
|
||||||
|
{ label: '部分支付', value: 'partial' },
|
||||||
|
{ label: '已付款', value: 'paid' }
|
||||||
|
],
|
||||||
|
query: {
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
repaymentStatus: '',
|
||||||
|
keywords: ''
|
||||||
|
},
|
||||||
|
statusIndex: 0,
|
||||||
|
title: '全部状态',
|
||||||
|
totalElements: 0,
|
||||||
|
})
|
||||||
|
let repayment = ref(null)
|
||||||
|
|
||||||
|
let statusHeight = computed(() => {
|
||||||
|
return 30 * pageData.statusList.length + 40 + 'px'
|
||||||
|
})
|
||||||
|
|
||||||
|
onShow(() => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取挂账人列表
|
||||||
|
*/
|
||||||
|
async function getList() {
|
||||||
|
getCreditBuyerList({
|
||||||
|
shopId: uni.getStorageSync("shopId"),
|
||||||
|
repaymentStatus: pageData.query.repaymentStatus,
|
||||||
|
keywords: pageData.query.keywords,
|
||||||
|
size: pageData.query.size,
|
||||||
|
page: pageData.query.page
|
||||||
|
}).then(res => {
|
||||||
|
pageData.list = res.content
|
||||||
|
pageData.totalElements = res.totalElements
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂账人/手机号筛选
|
||||||
|
*/
|
||||||
|
function inputEvent(d) {
|
||||||
|
pageData.query.keywords = d.replace(/\s*/g, "");
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeNowStatusIndex(i,item) {
|
||||||
|
pageData.statusIndex = i
|
||||||
|
pageData.showStatus = false
|
||||||
|
pageData.title = item.label
|
||||||
|
pageData.query.repaymentStatus = item.value
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
// 页数改变事件
|
||||||
|
function pageChange(page) {
|
||||||
|
console.log(page)
|
||||||
|
pageData.query.page = page
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态修改
|
||||||
|
*/
|
||||||
|
let statusChange = (item) => {
|
||||||
|
editCreditBuyer(item).then((res) => {})
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 操作
|
||||||
|
*/
|
||||||
|
let selectClick = (e) => {
|
||||||
|
if(e.value == 'add') {
|
||||||
|
toUrl('PAGES_CREDIT_BUYER_ADDDEBTOR')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let repaymentOpen = (item) => {
|
||||||
|
if ( item.repaymentMethod == 'order' ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
repayment.value.open(item);
|
||||||
|
}
|
||||||
|
let affirm = (item) => {
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 删除挂账人
|
||||||
|
*/
|
||||||
|
let delDebtor = (item) => {
|
||||||
|
pageData.delShow = true;
|
||||||
|
pageData.delItem = item;
|
||||||
|
|
||||||
|
}
|
||||||
|
let delConfirm = () => {
|
||||||
|
pageData.delShow = false;
|
||||||
|
delCreditBuyer(pageData.delItem.id).then(res => {
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转
|
||||||
|
*/
|
||||||
|
let toUrl = (url, d) => {
|
||||||
|
|
||||||
|
go.to(url, d)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
page {
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style scoped lang="less">
|
||||||
|
.shade{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
z-index: 1;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
.credit_search {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
z-index: 9;
|
||||||
|
>view:first-child,
|
||||||
|
>view:last-child {
|
||||||
|
font-size: 24rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
>view:last-child {
|
||||||
|
color: #318AFE;
|
||||||
|
}
|
||||||
|
.select{
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
width: 100%;
|
||||||
|
height: 60rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 32rpx 32rpx 32rpx 32rpx;
|
||||||
|
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999999;
|
||||||
|
|
||||||
|
}
|
||||||
|
.icon{
|
||||||
|
width: 90rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.statusList {
|
||||||
|
position: fixed;
|
||||||
|
top: 124rpx;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: #fff;
|
||||||
|
>view{
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.debtor{
|
||||||
|
padding: 152rpx 28rpx 32rpx 28rpx;
|
||||||
|
.debtorItem{
|
||||||
|
padding: 24rpx 16rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
.head{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #333333;
|
||||||
|
.headStatus{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
padding: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
.cell{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
.cell_item{
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666666;
|
||||||
|
.val{
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.handle{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
.handle_btn{
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #318AFE;
|
||||||
|
padding: 10rpx 18rpx;
|
||||||
|
border-radius: 28rpx 28rpx 28rpx 28rpx;
|
||||||
|
border: 2rpx solid #318AFE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
149
pageCreditBuyer/rePaymentRecord.vue
Normal file
149
pageCreditBuyer/rePaymentRecord.vue
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<template>
|
||||||
|
<view class="credit_search">
|
||||||
|
<up-input
|
||||||
|
shape='circle'
|
||||||
|
border="none"
|
||||||
|
v-model="pageData.query.paymentMethod"
|
||||||
|
type="text"
|
||||||
|
placeholder="支付方式"
|
||||||
|
prefixIcon="search"
|
||||||
|
prefixIconStyle="font-size: 26px;color: #666"
|
||||||
|
style='width: 100%;padding: 24rpx;'
|
||||||
|
></up-input>
|
||||||
|
<view class="search" @tap="inputEvent">搜索</view>
|
||||||
|
</view>
|
||||||
|
<view class="content">
|
||||||
|
<view class="content_list" v-if="pageData.list.length > 0">
|
||||||
|
<view class="list_cell" v-for="(item,index) in pageData.list" :key="item.id">
|
||||||
|
<view><text class="paymentMethod">{{item.paymentMethod}}</text><text class="repaymentAmount">¥{{item.repaymentAmount}}</text></view>
|
||||||
|
<view><text class="remark">{{item.remark||'-'}}</text><text class="createTime">{{item.createTime}}</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-else style="display: flex;flex-direction: column;align-items: center;justify-content: center;margin-top: 300rpx;">
|
||||||
|
<image src="./bg.png" style="width: 325rpx;height: 335rpx;" mode=""></image>
|
||||||
|
<view style="font-size: 28rpx;color: #999;margin-top: 20rpx;">暂无数据</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { creditRePaymentRecord } from '@/http/yskApi/credit.js'
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { onLoad, onShow } from '@dcloudio/uni-app';
|
||||||
|
const pageData = reactive({
|
||||||
|
query: {
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
creditBuyerId: null,
|
||||||
|
orderId: null,
|
||||||
|
paymentMethod: ''
|
||||||
|
},
|
||||||
|
list: []
|
||||||
|
})
|
||||||
|
|
||||||
|
onLoad((options) => {
|
||||||
|
console.log(options)
|
||||||
|
if ( options.id ) {
|
||||||
|
pageData.query.creditBuyerId = options.id;
|
||||||
|
}
|
||||||
|
if ( options.orderId ) {
|
||||||
|
pageData.query.orderId = options.orderId;
|
||||||
|
}
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取还款记录列表
|
||||||
|
*/
|
||||||
|
async function getList() {
|
||||||
|
let params = {
|
||||||
|
creditBuyerId: pageData.query.creditBuyerId,
|
||||||
|
paymentMethod: pageData.query.paymentMethod,
|
||||||
|
size: pageData.query.size,
|
||||||
|
page: pageData.query.page
|
||||||
|
}
|
||||||
|
if ( pageData.query.orderId ) {
|
||||||
|
params.orderId = pageData.query.orderId
|
||||||
|
}
|
||||||
|
creditRePaymentRecord(params).then(res => {
|
||||||
|
pageData.list = res.content
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂账人/手机号筛选
|
||||||
|
*/
|
||||||
|
function inputEvent(d) {
|
||||||
|
pageData.query.paymentMethod = pageData.query.paymentMethod.replace(/\s*/g, "");
|
||||||
|
console.log(pageData.query)
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
page{
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.credit_search {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
>view:nth-child(1) {
|
||||||
|
width: 100%;
|
||||||
|
height: 60rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 32rpx 32rpx 32rpx 32rpx;
|
||||||
|
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999999;
|
||||||
|
|
||||||
|
}
|
||||||
|
.search{
|
||||||
|
width: 116rpx;
|
||||||
|
text-align: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
padding: 32rpx 28rpx 150rpx 28rpx;
|
||||||
|
.content_list{
|
||||||
|
padding: 40rpx 24rpx 8rpx 24rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
.list_cell{
|
||||||
|
border-bottom: 1rpx solid #E5E5E5;
|
||||||
|
padding-bottom: 24rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
>view{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
.paymentMethod,.repaymentAmount{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
.remark,.createTime{
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.list_cell:last-child{
|
||||||
|
border-bottom: none;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,36 +1,33 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="mask u-fixed position-all u-flex u-col-bottom" v-if="show" @tap="close">
|
<view class="mask u-fixed position-all u-flex u-col-bottom u-font-28" v-if="show" @tap="close">
|
||||||
<view class="bg-fff w-full" @tap.stop="nullFunction">
|
<view class="bg-fff w-full " @tap.stop="nullFunction">
|
||||||
<view class="u-p-30">
|
<view class="u-p-30">
|
||||||
<view class="font-bold u-text-center">选择商品</view>
|
<view class="font-bold u-text-center">选择商品</view>
|
||||||
<view class="u-m-t-32 u-flex">
|
<view class="u-m-t-32 u-flex">
|
||||||
<view class="u-flex-1 u-p-r-16">
|
<view class=" ">
|
||||||
<view class="u-m-b-12">商品名称</view>
|
|
||||||
<uni-easyinput v-model="goods.query.name" placeholder="请输入商品名称" />
|
|
||||||
</view>
|
|
||||||
<view class="u-flex-1 u-p-l-16">
|
|
||||||
<view class="u-m-b-12">商品分类</view>
|
|
||||||
<uni-data-picker :clear-icon="false" :map="{text:'name',value:'id'}" placeholder="请选择分类"
|
<uni-data-picker :clear-icon="false" :map="{text:'name',value:'id'}" placeholder="请选择分类"
|
||||||
popup-title="请选择分类" :localdata="category" v-model="goods.query.categoryId">
|
popup-title="请选择分类" :localdata="category" v-model="goods.query.categoryId">
|
||||||
|
<view class="u-flex u-font-28" >
|
||||||
|
<text class=" u-line-1"
|
||||||
|
style="max-width: 100rpx;">{{goods.query.categoryId||'分类' }}</text>
|
||||||
|
<up-icon name="arrow-down" size="16"></up-icon>
|
||||||
|
</view>
|
||||||
</uni-data-picker>
|
</uni-data-picker>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="u-m-t-32 u-flex u-row-right">
|
|
||||||
<view class="u-flex-1 u-p-r-16">
|
|
||||||
<my-button type="cancel" plain @tap="resetQuery">重置</my-button>
|
|
||||||
</view>
|
|
||||||
<view class="u-flex-1 u-p-l-16">
|
<view class="u-flex-1 u-p-l-16">
|
||||||
<my-button @tap="getGoods">查询</my-button>
|
<up-search @custom="getGoods" v-model="goods.query.name" placeholder="请输入商品名称" @search="getGoods" @clear="getGoods"></up-search>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<scroll-view :scroll-x="false" scroll-y="true" :style="computedStyle()">
|
<scroll-view :scroll-x="false" scroll-y="true" :style="computedStyle()">
|
||||||
<view class="u-p-l-30 u-p-r-30">
|
<view class="u-p-l-30 u-p-r-30 table">
|
||||||
<view class="u-flex u-row-between no-wrap">
|
<view class="u-flex u-row-between no-wrap title">
|
||||||
<view>
|
<view>
|
||||||
<my-radio @change="radioAllChange" v-model="goods.allChecked" shape="square" :size="20"></my-radio>
|
<my-radio @change="radioAllChange" v-model="goods.allChecked" shape="square"
|
||||||
|
:size="20"></my-radio>
|
||||||
</view>
|
</view>
|
||||||
<view>商品信息</view>
|
<view>商品信息</view>
|
||||||
<view>规格</view>
|
<view>规格</view>
|
||||||
@@ -40,29 +37,35 @@
|
|||||||
<view>销量/库存</view>
|
<view>销量/库存</view>
|
||||||
<view>分类名称</view>
|
<view>分类名称</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-t-12 u-flex u-row-between" v-for="(item,index) in goods.list" :key="index">
|
<view @click="changeChecked(item)" class="u-m-t-12 u-flex u-p-24 u-row-between row" v-for="(item,index) in goods.list" :key="index">
|
||||||
<my-radio @change="radioChange" v-model="item.checked" shape="square" :size="20"></my-radio>
|
<view class="">
|
||||||
<view class="u-flex u-flex-col u-row-center u-col-center">
|
<my-radio @change="radioChange($event,item)" v-model="item.checked" shape="square" :size="20"></my-radio>
|
||||||
<image lazy-load class="coverImg" :src="item.coverImg" mode=""></image>
|
|
||||||
<view class="u-m-t-10">{{item.name}}</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view class="u-text-left u-flex-1 u-p-l-20">
|
||||||
|
<!-- <view class="u-flex">
|
||||||
|
<image lazy-load class="coverImg" :src="item.coverImg" mode=""></image>
|
||||||
|
</view> -->
|
||||||
|
<view class="">{{item.name}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1 u-p-l-4 u-p-r-4 box-size-border">
|
||||||
{{item.typeEnum}}
|
{{item.typeEnum}}
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view class="u-flex-1">
|
||||||
¥{{ item.lowPrice }}
|
¥{{ item.lowPrice }}
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view class="u-flex-1">
|
||||||
{{ item.realSalesNumber }}/{{ item.stockNumber }}
|
<!-- {{ item.realSalesNumber }}/{{ item.stockNumber }} -->
|
||||||
|
{{ item.stockNumber }}
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view class="u-flex-1">
|
||||||
{{item.categoryName}}
|
{{item.categoryName}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
<view class="u-p-30">
|
<view class="u-p-30">
|
||||||
<my-pagination :totalElements="goods.totalElements" :size="goods.query.size" @change="pageChange"></my-pagination>
|
<my-pagination :totalElements="goods.totalElements" :size="goods.query.size"
|
||||||
|
@change="pageChange"></my-pagination>
|
||||||
<view class="u-m-t-20 u-flex">
|
<view class="u-m-t-20 u-flex">
|
||||||
<view class="u-flex-1 u-p-r-16">
|
<view class="u-flex-1 u-p-r-16">
|
||||||
<my-button type="cancel" plain @tap="close">取消</my-button>
|
<my-button type="cancel" plain @tap="close">取消</my-button>
|
||||||
@@ -77,11 +80,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import myButton from '@/components/my-components/my-button';
|
|
||||||
import myRadio from '@/components/my-components/my-radio';
|
|
||||||
import myPagination from '@/components/my-components/my-pagination'
|
|
||||||
import {
|
import {
|
||||||
$tbProduct
|
$tbProductList
|
||||||
} from '@/http/yskApi/goods.js';
|
} from '@/http/yskApi/goods.js';
|
||||||
import {
|
import {
|
||||||
reactive,
|
reactive,
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: [Number, String],
|
type: [Number, String],
|
||||||
default: '40vh'
|
default: '50vh'
|
||||||
},
|
},
|
||||||
category: {
|
category: {
|
||||||
type: Array,
|
type: Array,
|
||||||
@@ -105,29 +105,42 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
function changeChecked(item){
|
||||||
|
item.checked=!item.checked
|
||||||
|
if(!item.checked&&$selGoodsMap[item.id]){
|
||||||
|
delete $selGoodsMap[item.id]
|
||||||
|
}else{
|
||||||
|
$selGoodsMap[item.id]=item
|
||||||
|
}
|
||||||
|
goods.allChecked = goods.list.filter(v => v.checked).length != 0
|
||||||
|
}
|
||||||
function nullFunction() {
|
function nullFunction() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const show = ref(props.modelValue)
|
const show = ref(props.modelValue)
|
||||||
|
|
||||||
function open(arr) {
|
let selArr=[]
|
||||||
|
|
||||||
|
let $selGoodsMap={}
|
||||||
|
async function open(arr) {
|
||||||
show.value = true
|
show.value = true
|
||||||
if(arr){
|
selArr=arr
|
||||||
for(let i in goods.list){
|
console.log(arr);
|
||||||
console.log(arr.includes(goods.list[i].id));
|
for(let i in arr){
|
||||||
goods.list[i].checked=arr.includes(goods.list[i].id)
|
$selGoodsMap[arr[i].proId
|
||||||
}
|
]=arr[i]
|
||||||
}
|
}
|
||||||
|
getGoods()
|
||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
show.value = false
|
show.value = false
|
||||||
|
resetQuery()
|
||||||
|
$selGoodsMap={}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
Object.assign(goods.query, $quey)
|
Object.assign(goods.query, $quey)
|
||||||
@@ -137,61 +150,119 @@
|
|||||||
return `height:${typeof props.height==='string'?props.height:props.height+'rpx'};`
|
return `height:${typeof props.height==='string'?props.height:props.height+'rpx'};`
|
||||||
}
|
}
|
||||||
|
|
||||||
const emits = defineEmits(['update:modelValue','confirm'])
|
const emits = defineEmits(['update:modelValue', 'confirm'])
|
||||||
|
|
||||||
const $quey = {
|
const $quey = {
|
||||||
categoryId: '',
|
categoryId: "",
|
||||||
name: '',
|
createdAt: [],
|
||||||
|
id: "",
|
||||||
|
name: "",
|
||||||
|
sort: "createdAt,desc",
|
||||||
|
type: "",
|
||||||
page: 0,
|
page: 0,
|
||||||
size: 10,
|
size: 10,
|
||||||
}
|
}
|
||||||
const query = reactive({
|
const query = reactive({
|
||||||
...$quey
|
...$quey
|
||||||
})
|
})
|
||||||
const goods=reactive({
|
const goods = reactive({
|
||||||
list:[],
|
list: [],
|
||||||
allChecked:false,
|
allChecked: false,
|
||||||
totalElements:0,
|
totalElements: 0,
|
||||||
query:{
|
query: {
|
||||||
...$quey
|
...$quey
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
getGoods()
|
||||||
function getGoods() {
|
function getGoods() {
|
||||||
$tbProduct(goods.query).then(res=>{
|
const arr=selArr
|
||||||
goods.list=res.content.map(v=>{
|
$tbProductList(goods.query).then(res => {
|
||||||
return {...v,checked:false}
|
let selLen=0;
|
||||||
|
goods.list = res.content.map(v => {
|
||||||
|
const checked=$selGoodsMap[v.id]?true:false
|
||||||
|
selLen+=(checked?1:0)
|
||||||
|
return {
|
||||||
|
...v,
|
||||||
|
checked
|
||||||
|
}
|
||||||
})
|
})
|
||||||
goods.allChecked=false
|
goods.allChecked = selLen==res.content.length?true:false
|
||||||
goods.totalElements=res.totalElements
|
goods.totalElements = res.totalElements
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
getGoods()
|
|
||||||
|
function pageChange(page) {
|
||||||
function pageChange(page){
|
goods.query.page = page - 1
|
||||||
goods.query.page=page-1
|
|
||||||
getGoods()
|
getGoods()
|
||||||
}
|
}
|
||||||
function radioChange(newval){
|
|
||||||
goods.allChecked=goods.list.filter(v=>v.checked).length!=0
|
function radioChange(newval,item) {
|
||||||
|
if(!newval&&$selGoodsMap[item.id]){
|
||||||
|
delete $selGoodsMap[item.id]
|
||||||
|
}else{
|
||||||
|
$selGoodsMap[item.id]=item
|
||||||
|
}
|
||||||
|
goods.allChecked = goods.list.filter(v => v.checked).length != 0
|
||||||
}
|
}
|
||||||
function radioAllChange(newval){
|
|
||||||
goods.list.forEach(i=>{i.checked=newval})
|
function radioAllChange(newval) {
|
||||||
|
goods.list.forEach(i => {
|
||||||
|
i.checked = newval
|
||||||
|
if($selGoodsMap[i.id]&&!newval){
|
||||||
|
delete $selGoodsMap[i.id]
|
||||||
|
}else{
|
||||||
|
$selGoodsMap[i.id]=i
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
function confrim(){
|
|
||||||
const arr= goods.list.filter(v=>v.checked)
|
function confrim() {
|
||||||
emits('confirm',arr)
|
for(let i in goods.list){
|
||||||
|
const item=goods.list[i]
|
||||||
|
if($selGoodsMap[item.id]&&!item.checked){
|
||||||
|
delete $selGoodsMap[item.id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log($selGoodsMap);
|
||||||
|
const arr = Object.values($selGoodsMap)
|
||||||
|
emits('confirm', arr)
|
||||||
}
|
}
|
||||||
defineExpose({open,close})
|
defineExpose({
|
||||||
|
open,
|
||||||
|
close
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.bg-fff{
|
||||||
|
border-radius: 24rpx 24rpx 0 0 ;
|
||||||
|
}
|
||||||
.mask {
|
.mask {
|
||||||
background: rgba(51, 51, 51, 0.5);
|
background: rgba(51, 51, 51, 0.5);
|
||||||
z-index: 900;
|
z-index: 900;
|
||||||
}
|
}
|
||||||
.coverImg{
|
.box-size-border{
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.coverImg {
|
||||||
width: 60rpx;
|
width: 60rpx;
|
||||||
height: 60rpx;
|
height: 60rpx;
|
||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
}
|
}
|
||||||
|
.table {
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
padding: 12rpx 24rpx 12rpx 24rpx;
|
||||||
|
background: #AEBAD2;
|
||||||
|
border-radius: 8rpx 8rpx 0rpx 0rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row:nth-of-type(2n+1) {
|
||||||
|
background: #F0F0F0;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
164
pageProduct/add-Product/components/choose-guige.vue
Normal file
164
pageProduct/add-Product/components/choose-guige.vue
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<template>
|
||||||
|
<view class="mask u-fixed position-all u-flex u-col-bottom u-font-28" v-if="show" @tap="close">
|
||||||
|
<view class="bg-fff w-full " @tap.stop="nullFunction">
|
||||||
|
<view class="u-p-30">
|
||||||
|
<view class="font-bold u-text-center">选择规格</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<scroll-view :scroll-x="false" scroll-y="true" :style="computedStyle()">
|
||||||
|
<view class="u-p-l-30 u-p-r-30 ">
|
||||||
|
<view class="u-flex u-flex-wrap w-full gap-10 u-col-top">
|
||||||
|
<view class="skd" v-for="(item,index) in skuList" :key="index"
|
||||||
|
:class="{active:sel.id==item.id}"
|
||||||
|
@click="guigeClick(item,index)">
|
||||||
|
<text>{{item.specSnap||item.name}}</text>
|
||||||
|
<view class="tag-primary tag" v-if="item.isGrounding">上架中</view>
|
||||||
|
<view class="tag-gray tag" v-if="item.isPauseSale">已售罄</view>
|
||||||
|
<view class="tag-gray tag" v-if="!item.isGrounding">已下架</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="u-p-30">
|
||||||
|
<view class="u-m-t-20 u-flex">
|
||||||
|
<view class="u-flex-1 u-p-r-16">
|
||||||
|
<my-button type="cancel" plain @tap="close">取消</my-button>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex-1 u-p-l-16">
|
||||||
|
<my-button @tap="confrim">确定</my-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
$tbProduct
|
||||||
|
} from '@/http/yskApi/goods.js';
|
||||||
|
import {
|
||||||
|
reactive,
|
||||||
|
onMounted,
|
||||||
|
ref,
|
||||||
|
watch
|
||||||
|
} from 'vue';
|
||||||
|
import infoBox from '@/commons/utils/infoBox.js'
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let skuList=ref([])
|
||||||
|
function nullFunction() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const show = ref(props.modelValue)
|
||||||
|
|
||||||
|
|
||||||
|
async function open(arr,sel) {
|
||||||
|
show.value = true
|
||||||
|
skuList.value=arr
|
||||||
|
}
|
||||||
|
|
||||||
|
function close() {
|
||||||
|
show.value = false
|
||||||
|
sel.value={}
|
||||||
|
}
|
||||||
|
|
||||||
|
let sel=ref({
|
||||||
|
|
||||||
|
})
|
||||||
|
function guigeClick(item,index){
|
||||||
|
if(sel.value.id==item.id){
|
||||||
|
return sel.value={}
|
||||||
|
}
|
||||||
|
sel.value=item
|
||||||
|
}
|
||||||
|
|
||||||
|
function computedStyle() {
|
||||||
|
return `height:${typeof props.height==='string'?props.height:props.height+'rpx'};`
|
||||||
|
}
|
||||||
|
|
||||||
|
const emits = defineEmits(['update:modelValue', 'confirm'])
|
||||||
|
|
||||||
|
function confrim() {
|
||||||
|
if(!sel.value.id){
|
||||||
|
return infoBox.showToast('请选择选择一个规格')
|
||||||
|
}
|
||||||
|
emits('confirm', sel.value)
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open,
|
||||||
|
close
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.bg-fff{
|
||||||
|
border-radius: 24rpx 24rpx 0 0 ;
|
||||||
|
}
|
||||||
|
.mask {
|
||||||
|
background: rgba(51, 51, 51, 0.5);
|
||||||
|
z-index: 900;
|
||||||
|
}
|
||||||
|
.skd {
|
||||||
|
padding: 10rpx 38rpx 8rpx 40rpx;
|
||||||
|
background: #F0F2F5;
|
||||||
|
border-radius: 4rpx;
|
||||||
|
position: relative;
|
||||||
|
color: #666;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
&.active{
|
||||||
|
border-color: $my-main-color;
|
||||||
|
}
|
||||||
|
.tag {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
font-size: 12rpx;
|
||||||
|
height: 18rpx;
|
||||||
|
line-height: 18rpx;
|
||||||
|
right: 0;
|
||||||
|
border-radius: 0rpx 2rpx 2rpx 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-primary {
|
||||||
|
background-color: $my-main-color;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag-gray {
|
||||||
|
background-color: rgb(144, 147, 153);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.coverImg {
|
||||||
|
width: 60rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
background: #F9F9F9;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
padding: 12rpx 24rpx 12rpx 24rpx;
|
||||||
|
background: #AEBAD2;
|
||||||
|
border-radius: 8rpx 8rpx 0rpx 0rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row:nth-of-type(2n+1) {
|
||||||
|
background: #F0F0F0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
109
pageProduct/add-Product/components/price-number-box.vue
Normal file
109
pageProduct/add-Product/components/price-number-box.vue
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<template>
|
||||||
|
<view class="u-flex number-box">
|
||||||
|
<view class="u-flex u-flex-1">
|
||||||
|
<up-input @blur="priceFormat" border="none" v-model="number" :type="inputType" :placeholder="placeholder"></up-input>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex u-flex-col right">
|
||||||
|
<view class="u-flex-1 u-p-l-8 u-p-r-8" @click="changeNumber('add')">
|
||||||
|
<up-icon name="arrow-up" color="#E5E5E5"></up-icon>
|
||||||
|
</view>
|
||||||
|
<view class="line"></view>
|
||||||
|
<view class="u-flex-1 u-p-l-8 u-p-r-8" @click="changeNumber('reduce')">
|
||||||
|
<up-icon name="arrow-down" color="#E5E5E5"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
formatPrice
|
||||||
|
} from "@/commons/utils/format.js";
|
||||||
|
import {
|
||||||
|
ref,
|
||||||
|
watch,nextTick
|
||||||
|
} from 'vue';
|
||||||
|
const props = defineProps({
|
||||||
|
inputType:{
|
||||||
|
type:String,
|
||||||
|
default:'digit'
|
||||||
|
},
|
||||||
|
modelValue: {
|
||||||
|
type: [String, Number]
|
||||||
|
},
|
||||||
|
min: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
max: {
|
||||||
|
type: Number,
|
||||||
|
default: 999999999
|
||||||
|
},
|
||||||
|
step: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: '请输入'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let number = ref(props.modelValue)
|
||||||
|
|
||||||
|
function changeNumber(type) {
|
||||||
|
const newval = number.value + props.step * (type == 'add' ? 1 : -1)
|
||||||
|
if (newval < props.min) {
|
||||||
|
number.value = props.min
|
||||||
|
}
|
||||||
|
if (newval > props.max) {
|
||||||
|
number.value = props.max
|
||||||
|
}
|
||||||
|
priceFormat(newval)
|
||||||
|
}
|
||||||
|
|
||||||
|
function priceFormat(e) {
|
||||||
|
nextTick(() => {
|
||||||
|
const min = props
|
||||||
|
.min;
|
||||||
|
const max = props.max;
|
||||||
|
if (e === '') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const newval = formatPrice(e, min, max, true)
|
||||||
|
if (typeof newval !== 'number') {
|
||||||
|
number.value = newval.value
|
||||||
|
uni.showToast({
|
||||||
|
title: `请输入${min}到${max}范围内的数字`,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
number.value = newval
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
watch(() => props.modelValue, (newval) => {
|
||||||
|
number.value = newval
|
||||||
|
})
|
||||||
|
const emits = defineEmits(['update:modelValue'])
|
||||||
|
watch(() => number.value, (newval) => {
|
||||||
|
emits('update:modelValue', newval)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.line {
|
||||||
|
width: 100%;
|
||||||
|
height: 1px;
|
||||||
|
background-color: #E5E5E5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.number-box {
|
||||||
|
border: 1px solid #E5E5E5;
|
||||||
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
||||||
|
padding-left: 24rpx;
|
||||||
|
|
||||||
|
.right {
|
||||||
|
border-left: 1px solid #E5E5E5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
224
pageProduct/add-Product/timer - 副本.vue
Normal file
224
pageProduct/add-Product/timer - 副本.vue
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
<template>
|
||||||
|
<view class="u-p-30 min-page u-font-28">
|
||||||
|
<!-- <view class="u-flex">
|
||||||
|
<view style="width: 210rpx;">
|
||||||
|
<my-button shape="circle" @click="addTimer">添加定时器</my-button>
|
||||||
|
</view>
|
||||||
|
</view> -->
|
||||||
|
<view class="list u-m-t-20" v-if="list.length">
|
||||||
|
<view class="block" v-for="(item,index) in list" :key="index">
|
||||||
|
<!-- <view class="u-flex u-row-between">
|
||||||
|
<view>定时器{{index+1}}</view>
|
||||||
|
<uni-icons @click="delTimer(index)" type="trash"></uni-icons>
|
||||||
|
</view> -->
|
||||||
|
<view class="u-flex u-row-between">
|
||||||
|
<view>周期</view>
|
||||||
|
<view class="color-main" @click="selectAllClick(index)">
|
||||||
|
{{isAllChecked?'取消全选':'全选'}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-m-t-24">
|
||||||
|
<uni-data-checkbox :selectedColor="color.ColorMain" multiple v-model="item.cycleChecked" :localdata="cycle"></uni-data-checkbox>
|
||||||
|
</view>
|
||||||
|
<view class="u-m-t-24">
|
||||||
|
<view class="u-flex">
|
||||||
|
<view>上架时间:</view>
|
||||||
|
<view class="u-flex-1 u-m-l-10">
|
||||||
|
<picker mode="multiSelector" @change="listingTimeChange($event,index)"
|
||||||
|
:value="item.listingTime.index" :range="times">
|
||||||
|
<view class="bg-gray u-p-l-20 u-p-t-6 u-p-b-6 u-p-r-20 ">
|
||||||
|
{{item.listingTime.value}}
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex u-m-t-16">
|
||||||
|
<view>下架时间:</view>
|
||||||
|
<view class="u-flex-1 u-m-l-10">
|
||||||
|
<picker mode="multiSelector" @change="offShelfChange($event,index)"
|
||||||
|
:value="item.offShelf.index" :range="times">
|
||||||
|
<view class="bg-gray u-p-l-20 u-p-t-6 u-p-b-6 u-p-r-20 ">
|
||||||
|
{{item.offShelf.value}}
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="u-flex u-row-center u-m-t-60">
|
||||||
|
<my-button width="580" shape="circle" @click="save">保存</my-button>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onReady
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
ref
|
||||||
|
} from 'vue';
|
||||||
|
import go from '@/commons/utils/go.js';
|
||||||
|
import color from '@/commons/color.js'
|
||||||
|
import {
|
||||||
|
$getProductDetail,
|
||||||
|
} from '@/http/yskApi/goods.js'
|
||||||
|
//返回一天的时间 时分格式
|
||||||
|
function returnDayTime() {
|
||||||
|
return new Array(2).fill(1).map((v, index) => {
|
||||||
|
if (index === 0) {
|
||||||
|
return new Array(24).fill(1).map((hour, index) => {
|
||||||
|
return `0${index}`.slice(-2)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (index === 1) {
|
||||||
|
return new Array(60).fill(1).map((hour, index) => {
|
||||||
|
return `0${index}`.slice(-2)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const times = ref(returnDayTime())
|
||||||
|
let defaultTimeIndex = ref(0)
|
||||||
|
|
||||||
|
function getTime(indexArr) {
|
||||||
|
const hour = times.value[0][indexArr[0]]
|
||||||
|
const month = times.value[1][indexArr[1]]
|
||||||
|
return `${hour}:${month}`
|
||||||
|
}
|
||||||
|
//获取$event.detail.value
|
||||||
|
function getEnentDetailValue(e) {
|
||||||
|
return e.detail.value
|
||||||
|
}
|
||||||
|
|
||||||
|
function setListTimeValue(index, key, time) {
|
||||||
|
list.value[index][key].value = time
|
||||||
|
}
|
||||||
|
|
||||||
|
function listingTimeChange(e, index) {
|
||||||
|
const indexArr = getEnentDetailValue(e)
|
||||||
|
const time = getTime(indexArr)
|
||||||
|
setListTimeValue(index, 'listingTime', time)
|
||||||
|
}
|
||||||
|
|
||||||
|
function offShelfChange(e, index) {
|
||||||
|
const indexArr = getEnentDetailValue(e)
|
||||||
|
const time = getTime(indexArr)
|
||||||
|
setListTimeValue(index, 'offShelf', time)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const cycle = [{
|
||||||
|
value: 0,
|
||||||
|
text: '星期一'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
text: '星期二'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 2,
|
||||||
|
text: '星期三'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 3,
|
||||||
|
text: '星期四'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 4,
|
||||||
|
text: '星期五'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 5,
|
||||||
|
text: '星期六'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 6,
|
||||||
|
text: '星期日'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const ListDataconstructor = {
|
||||||
|
cycleChecked: [0, 1, 2, 3, 4, 5, 6],
|
||||||
|
}
|
||||||
|
|
||||||
|
function returnBasicTimeConstructor() {
|
||||||
|
return {
|
||||||
|
listingTime: {
|
||||||
|
value: '00:00',
|
||||||
|
index: [0, 0]
|
||||||
|
},
|
||||||
|
offShelf: {
|
||||||
|
value: '00:00',
|
||||||
|
index: [0, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const list = ref([returnBasicDataConstructor()])
|
||||||
|
function returnBasicDataConstructor() {
|
||||||
|
return {
|
||||||
|
...ListDataconstructor,
|
||||||
|
...returnBasicTimeConstructor()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTimer() {
|
||||||
|
list.value.push(returnBasicDataConstructor())
|
||||||
|
}
|
||||||
|
function delTimer(index) {
|
||||||
|
list.value.splice(index,1)
|
||||||
|
}
|
||||||
|
const isAllChecked=computed(()=>{
|
||||||
|
return list.value[0].cycleChecked.length==cycle.length?true:false
|
||||||
|
})
|
||||||
|
function selectAllClick(index){
|
||||||
|
if(isAllChecked.value){
|
||||||
|
list.value[index].cycleChecked=[]
|
||||||
|
}else{
|
||||||
|
list.value[index].cycleChecked=ListDataconstructor.cycleChecked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 触发定时器保存事件将数据给到添加商品页面
|
||||||
|
function emitTimerSave(){
|
||||||
|
uni.$emit('timerSave',list.value)
|
||||||
|
go.back()
|
||||||
|
}
|
||||||
|
function save(){
|
||||||
|
console.log(list.value);
|
||||||
|
emitTimerSave()
|
||||||
|
}
|
||||||
|
let goodsDetail=ref({})
|
||||||
|
|
||||||
|
function returnTimer(res){
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
onLoad(async(opt)=>{
|
||||||
|
let res=null
|
||||||
|
if(opt.productId){
|
||||||
|
res=await $getProductDetail(opt.productId)
|
||||||
|
goodsDetail.value=res
|
||||||
|
}
|
||||||
|
const arr=res?returnTimer(res):[]
|
||||||
|
if(arr.length){
|
||||||
|
list.value=arr
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.min-page {
|
||||||
|
background-color: #F9F9F9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block {
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,42 +1,45 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="u-p-30 min-page">
|
<view class="u-p-30 min-page u-font-28">
|
||||||
<view class="u-flex">
|
<!-- <view class="u-flex">
|
||||||
<view style="width: 210rpx;">
|
<view style="width: 210rpx;">
|
||||||
<my-button shape="circle" @click="addTimer">添加定时器</my-button>
|
<my-button shape="circle" @click="addTimer">添加定时器</my-button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="list u-m-t-20" v-if="list.length">
|
<view class="list u-m-t-20" v-if="list.length">
|
||||||
<view class="block" v-for="(item,index) in list" :key="index">
|
<view class="block" v-for="(item,index) in list" :key="index">
|
||||||
<view class="u-flex u-row-between">
|
<!-- <view class="u-flex u-row-between">
|
||||||
<view>定时器{{index+1}}</view>
|
<view>定时器{{index+1}}</view>
|
||||||
<uni-icons @click="delTimer(index)" type="trash"></uni-icons>
|
<uni-icons @click="delTimer(index)" type="trash"></uni-icons>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="u-flex u-m-t-20 u-row-between">
|
<view class="u-flex u-row-between">
|
||||||
<view>周期</view>
|
<view>周期</view>
|
||||||
<view @click="selectAllClick(index)">全选</view>
|
<view class="color-main" @click="selectAllClick(index)">
|
||||||
|
{{isAllChecked?'取消全选':'全选'}}
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-t-20">
|
<view class="u-m-t-24">
|
||||||
<uni-data-checkbox multiple v-model="item.cycleChecked" :localdata="cycle"></uni-data-checkbox>
|
<uni-data-checkbox :selectedColor="color.ColorMain" multiple v-model="item.cycleChecked"
|
||||||
|
:localdata="cycle"></uni-data-checkbox>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-t-20">
|
<view class="u-m-t-24">
|
||||||
<view class="u-flex">
|
<view class="u-flex">
|
||||||
<view>上架时间:</view>
|
<view>上架时间:</view>
|
||||||
<view class="u-flex-1 u-m-l-10">
|
<view class="u-flex-1 u-m-l-10">
|
||||||
<picker mode="multiSelector" @change="listingTimeChange($event,index)"
|
<picker mode="multiSelector" @change="startTimeChange($event,index)"
|
||||||
:value="item.listingTime.index" :range="times">
|
:value="item.startTime.index" :range="times">
|
||||||
<view class="bg-gray u-p-l-20 u-p-t-6 u-p-b-6 u-p-r-20 ">
|
<view class="bg-gray u-p-l-20 u-p-t-6 u-p-b-6 u-p-r-20 ">
|
||||||
{{item.listingTime.value}}
|
{{item.startTime.value}}
|
||||||
</view>
|
</view>
|
||||||
</picker>
|
</picker>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-flex u-m-t-20">
|
<view class="u-flex u-m-t-16">
|
||||||
<view>下架时间:</view>
|
<view>下架时间:</view>
|
||||||
<view class="u-flex-1 u-m-l-10">
|
<view class="u-flex-1 u-m-l-10">
|
||||||
<picker mode="multiSelector" @change="offShelfChange($event,index)"
|
<picker mode="multiSelector" @change="endTimeChange($event,index)"
|
||||||
:value="item.offShelf.index" :range="times">
|
:value="item.endTime.index" :range="times">
|
||||||
<view class="bg-gray u-p-l-20 u-p-t-6 u-p-b-6 u-p-r-20 ">
|
<view class="bg-gray u-p-l-20 u-p-t-6 u-p-b-6 u-p-r-20 ">
|
||||||
{{item.offShelf.value}}
|
{{item.endTime.value}}
|
||||||
</view>
|
</view>
|
||||||
</picker>
|
</picker>
|
||||||
</view>
|
</view>
|
||||||
@@ -58,19 +61,23 @@
|
|||||||
onReady
|
onReady
|
||||||
} from '@dcloudio/uni-app';
|
} from '@dcloudio/uni-app';
|
||||||
import {
|
import {
|
||||||
|
computed,
|
||||||
ref
|
ref
|
||||||
} from 'vue';
|
} from 'vue';
|
||||||
import go from '@/commons/utils/go.js';
|
import go from '@/commons/utils/go.js';
|
||||||
import myButton from '@/components/my-components/my-button.vue'
|
import color from '@/commons/color.js'
|
||||||
|
import {
|
||||||
|
$getProductDetail,
|
||||||
|
} from '@/http/yskApi/goods.js'
|
||||||
//返回一天的时间 时分格式
|
//返回一天的时间 时分格式
|
||||||
function returnDayTime() {
|
function returnDayTime() {
|
||||||
return new Array(2).fill(1).map((v, index) => {
|
return new Array(3).fill(1).map((v, index) => {
|
||||||
if (index === 0) {
|
if (index === 0) {
|
||||||
return new Array(24).fill(1).map((hour, index) => {
|
return new Array(24).fill(1).map((hour, index) => {
|
||||||
return `0${index}`.slice(-2)
|
return `0${index}`.slice(-2)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (index === 1) {
|
if (index === 1 || index === 2) {
|
||||||
return new Array(60).fill(1).map((hour, index) => {
|
return new Array(60).fill(1).map((hour, index) => {
|
||||||
return `0${index}`.slice(-2)
|
return `0${index}`.slice(-2)
|
||||||
})
|
})
|
||||||
@@ -83,6 +90,8 @@
|
|||||||
function getTime(indexArr) {
|
function getTime(indexArr) {
|
||||||
const hour = times.value[0][indexArr[0]]
|
const hour = times.value[0][indexArr[0]]
|
||||||
const month = times.value[1][indexArr[1]]
|
const month = times.value[1][indexArr[1]]
|
||||||
|
const s = times.value[2][indexArr[2]]
|
||||||
|
// return `${hour}:${month}:${s}`
|
||||||
return `${hour}:${month}`
|
return `${hour}:${month}`
|
||||||
}
|
}
|
||||||
//获取$event.detail.value
|
//获取$event.detail.value
|
||||||
@@ -94,66 +103,67 @@
|
|||||||
list.value[index][key].value = time
|
list.value[index][key].value = time
|
||||||
}
|
}
|
||||||
|
|
||||||
function listingTimeChange(e, index) {
|
function startTimeChange(e, index) {
|
||||||
const indexArr = getEnentDetailValue(e)
|
const indexArr = getEnentDetailValue(e)
|
||||||
const time = getTime(indexArr)
|
const time = getTime(indexArr)
|
||||||
setListTimeValue(index, 'listingTime', time)
|
setListTimeValue(index, 'startTime', time)
|
||||||
}
|
}
|
||||||
|
|
||||||
function offShelfChange(e, index) {
|
function endTimeChange(e, index) {
|
||||||
const indexArr = getEnentDetailValue(e)
|
const indexArr = getEnentDetailValue(e)
|
||||||
const time = getTime(indexArr)
|
const time = getTime(indexArr)
|
||||||
setListTimeValue(index, 'offShelf', time)
|
setListTimeValue(index, 'endTime', time)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const cycle = [{
|
const cycle = [{
|
||||||
value: 0,
|
value: 'Monday',
|
||||||
text: '星期一'
|
text: '星期一'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 1,
|
value: 'Tuesday',
|
||||||
text: '星期二'
|
text: '星期二'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 2,
|
value: 'Wednesday',
|
||||||
text: '星期三'
|
text: '星期三'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 3,
|
value: 'Thursday',
|
||||||
text: '星期四'
|
text: '星期四'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 4,
|
value: 'Friday',
|
||||||
text: '星期五'
|
text: '星期五'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 5,
|
value: 'Saturday',
|
||||||
text: '星期六'
|
text: '星期六'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 6,
|
value: 'Sunday',
|
||||||
text: '星期日'
|
text: '星期日'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
const ListDataconstructor = {
|
const ListDataconstructor = {
|
||||||
cycleChecked: [0, 1, 2, 3, 4, 5, 6],
|
cycleChecked: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
|
||||||
}
|
}
|
||||||
|
|
||||||
function returnBasicTimeConstructor() {
|
function returnBasicTimeConstructor() {
|
||||||
return {
|
return {
|
||||||
listingTime: {
|
startTime: {
|
||||||
value: '09:00',
|
value: '00:00',
|
||||||
index: [9, 0]
|
index: [0, 0, 0]
|
||||||
},
|
},
|
||||||
offShelf: {
|
endTime: {
|
||||||
value: '18:00',
|
value: '23:59',
|
||||||
index: [18, 0]
|
index: [0, 0, 0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const list = ref([returnBasicDataConstructor()])
|
const list = ref([returnBasicDataConstructor()])
|
||||||
|
|
||||||
function returnBasicDataConstructor() {
|
function returnBasicDataConstructor() {
|
||||||
return {
|
return {
|
||||||
...ListDataconstructor,
|
...ListDataconstructor,
|
||||||
@@ -164,25 +174,68 @@
|
|||||||
function addTimer() {
|
function addTimer() {
|
||||||
list.value.push(returnBasicDataConstructor())
|
list.value.push(returnBasicDataConstructor())
|
||||||
}
|
}
|
||||||
|
|
||||||
function delTimer(index) {
|
function delTimer(index) {
|
||||||
list.value.splice(index,1)
|
list.value.splice(index, 1)
|
||||||
}
|
}
|
||||||
function selectAllClick(index){
|
const isAllChecked = computed(() => {
|
||||||
list.value[index].cycleChecked=ListDataconstructor.cycleChecked
|
return list.value[0].cycleChecked.length == cycle.length ? true : false
|
||||||
|
})
|
||||||
|
|
||||||
|
function selectAllClick(index) {
|
||||||
|
if (isAllChecked.value) {
|
||||||
|
list.value[index].cycleChecked = []
|
||||||
|
} else {
|
||||||
|
list.value[index].cycleChecked = ListDataconstructor.cycleChecked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 触发定时器保存事件将数据给到添加商品页面
|
// 触发定时器保存事件将数据给到添加商品页面
|
||||||
function emitTimerSave(){
|
function emitTimerSave() {
|
||||||
uni.$emit('timerSave',list.value)
|
const par = {
|
||||||
|
days: list.value[0].cycleChecked.join(','),
|
||||||
|
startTime: list.value[0].startTime.value,
|
||||||
|
endTime: list.value[0].endTime.value
|
||||||
|
}
|
||||||
|
console.log(par);
|
||||||
|
uni.$emit('timerSave', par)
|
||||||
go.back()
|
go.back()
|
||||||
}
|
}
|
||||||
function save(){
|
|
||||||
console.log(list.value);
|
function save() {
|
||||||
emitTimerSave()
|
emitTimerSave()
|
||||||
}
|
}
|
||||||
onLoad(()=>{
|
let goodsDetail = ref({})
|
||||||
const arr=uni.getStorageSync('timer')
|
|
||||||
if(arr.length){
|
function returnTimeIndex(time) {
|
||||||
list.value=arr
|
console.log(time);
|
||||||
|
return time.split(':').map(v => {
|
||||||
|
return v * 1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function returnTimer(res) {
|
||||||
|
return [{
|
||||||
|
cycleChecked: res.days ? res.days.split(',').filter(v => v) : [],
|
||||||
|
startTime: res.startTime ? {
|
||||||
|
value: res.startTime,
|
||||||
|
index: returnTimeIndex(res.startTime)
|
||||||
|
} : returnBasicTimeConstructor.startTime,
|
||||||
|
endTime: res.endTime ? {
|
||||||
|
value: res.endTime,
|
||||||
|
index: returnTimeIndex(res.endTime)
|
||||||
|
} : returnBasicTimeConstructor.endTime
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
onLoad(async (opt) => {
|
||||||
|
let res = null
|
||||||
|
if (opt.productId) {
|
||||||
|
res = await $getProductDetail(opt.productId)
|
||||||
|
goodsDetail.value = res
|
||||||
|
}
|
||||||
|
const arr = res ? returnTimer(res) : [];
|
||||||
|
console.log(arr);
|
||||||
|
if (arr.length) {
|
||||||
|
list.value = arr
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
@@ -195,7 +248,7 @@
|
|||||||
.block {
|
.block {
|
||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
padding: 30rpx;
|
padding: 32rpx 28rpx;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: 32rpx;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
<!-- 不需要label, 需要修改: label-width="0" -->
|
<!-- 不需要label, 需要修改: label-width="0" -->
|
||||||
<uni-forms ref="loginFormRef" label-width="0" :model="vdata.formData" :rules="rules">
|
<uni-forms ref="loginFormRef" label-width="0" :model="vdata.formData" :rules="rules">
|
||||||
|
|
||||||
<view >
|
<view>
|
||||||
<uni-forms-item name="username">
|
<uni-forms-item name="username">
|
||||||
<uni-easyinput class='jeepay-easyinput' placeholder="请输入登录名/手机号"
|
<uni-easyinput class='jeepay-easyinput' placeholder="请输入登录名/手机号"
|
||||||
v-model="vdata.formData.username" :clearable="false">
|
v-model="vdata.formData.username" :clearable="false">
|
||||||
@@ -29,7 +29,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #suffixIcon>
|
<template #suffixIcon>
|
||||||
<view class='show-tips' @tap="vdata.isShowPwd = !vdata.isShowPwd ">
|
<view class='show-tips' @tap="vdata.isShowPwd = !vdata.isShowPwd ">
|
||||||
{{ vdata.isShowPwd ? '隐藏' : '显示' }}</view>
|
{{ vdata.isShowPwd ? '隐藏' : '显示' }}
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
</uni-easyinput>
|
</uni-easyinput>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
@@ -55,7 +56,6 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
import {
|
import {
|
||||||
login
|
login
|
||||||
} from '@/http/businessApiManger.js';
|
} from '@/http/businessApiManger.js';
|
||||||
@@ -107,12 +107,11 @@
|
|||||||
|
|
||||||
|
|
||||||
function loginFunc() {
|
function loginFunc() {
|
||||||
|
|
||||||
// 表单验证
|
// 表单验证
|
||||||
formUtil.validate(loginFormRef.value).then(() => {
|
formUtil.validate(loginFormRef.value).then(() => {
|
||||||
|
|
||||||
login(vdata.formData).then((res) => {
|
login(vdata.formData).then((res) => {
|
||||||
console.log(res);
|
|
||||||
useStorage.set('token', res.data.token);
|
useStorage.set('token', res.data.token);
|
||||||
useStorage.set('userInfo', res.data.user);
|
useStorage.set('userInfo', res.data.user);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
|
|||||||
@@ -89,7 +89,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {
|
import {
|
||||||
getCurrentInstance,
|
getCurrentInstance,
|
||||||
|
|
||||||
reactive,
|
reactive,
|
||||||
ref
|
ref
|
||||||
} from 'vue';
|
} from 'vue';
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
formData: {
|
formData: {
|
||||||
permissions: [],
|
permissions: [],
|
||||||
maxDiscountAmount: 0,
|
maxDiscountAmount: 0,
|
||||||
discountType:0
|
discountType: 0
|
||||||
},
|
},
|
||||||
rolesList: [],
|
rolesList: [],
|
||||||
columns: [],
|
columns: [],
|
||||||
@@ -129,24 +129,17 @@
|
|||||||
onShow(() => {
|
onShow(() => {
|
||||||
// 获取角色信息
|
// 获取角色信息
|
||||||
getrolesEvent()
|
getrolesEvent()
|
||||||
if (props.type == 'add') {
|
|
||||||
getList()
|
|
||||||
} else {
|
|
||||||
// 调用id查询接口和编辑接口
|
|
||||||
gettbPlussShopStaffDetail(props.id)
|
|
||||||
uni.setNavigationBarTitle({
|
|
||||||
title: '编辑员工'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function gettbPlussShopStaffDetail(id) {
|
function gettbPlussShopStaffDetail(id) {
|
||||||
tbPlussShopStaffDetail(id).then(res => {
|
tbPlussShopStaffDetail(id).then(res => {
|
||||||
console.log(res,'编辑员工后的提示')
|
|
||||||
datas.formData = res
|
datas.formData = res
|
||||||
if (datas.rolesList) {
|
if (datas.rolesList) {
|
||||||
let rolefilter = datas.rolesList.filter(ele => ele.id == res.roleId)
|
let rolefilter = datas.rolesList.filter(ele => ele.id == res.roleId)
|
||||||
datas.rolesdata = rolefilter[0].name
|
datas.rolesdata = rolefilter[0].name
|
||||||
|
|
||||||
|
console.log(res, '编辑员工后的提示')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -192,8 +185,8 @@
|
|||||||
let num = d.detail.value * 1
|
let num = d.detail.value * 1
|
||||||
if (num >= 1) {
|
if (num >= 1) {
|
||||||
datas.formData.maxDiscountAmount = 0.99
|
datas.formData.maxDiscountAmount = 0.99
|
||||||
}else{
|
} else {
|
||||||
datas.formData.maxDiscountAmount = d.detail.value.substring(0,4)
|
datas.formData.maxDiscountAmount = d.detail.value.substring(0, 4)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,6 +196,15 @@
|
|||||||
res.content.forEach(ele => {
|
res.content.forEach(ele => {
|
||||||
columns[0].push(ele.name)
|
columns[0].push(ele.name)
|
||||||
})
|
})
|
||||||
|
if (props.type == 'add') {
|
||||||
|
getList()
|
||||||
|
} else {
|
||||||
|
uni.setNavigationBarTitle({
|
||||||
|
title: '编辑员工'
|
||||||
|
})
|
||||||
|
// 调用id查询接口和编辑接口
|
||||||
|
gettbPlussShopStaffDetail(props.id)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
87
pages.json
87
pages.json
@@ -8,8 +8,7 @@
|
|||||||
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
|
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pages": [
|
"pages": [{
|
||||||
{
|
|
||||||
"pageId": "PAGES_INDEX",
|
"pageId": "PAGES_INDEX",
|
||||||
"path": "pages/index/index",
|
"path": "pages/index/index",
|
||||||
"style": {
|
"style": {
|
||||||
@@ -631,6 +630,13 @@
|
|||||||
"navigationBarTitleText": "确认订单"
|
"navigationBarTitleText": "确认订单"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pageId": "PAGES_ROTATING_TABLES",
|
||||||
|
"path": "confirm-order/rotatingTables",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "转桌/并桌"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pageId": "PAGES_CHOOSE_TABLE",
|
"pageId": "PAGES_CHOOSE_TABLE",
|
||||||
"path": "choose-table/choose-table",
|
"path": "choose-table/choose-table",
|
||||||
@@ -639,7 +645,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pageId": "PAGES_ADD_TEMP_CUISINE",
|
"pageId": "PAGES_CHOOSE_ADD_TEMP_CUISINE",
|
||||||
"path": "add-temp-cuisine/add-temp-cuisine",
|
"path": "add-temp-cuisine/add-temp-cuisine",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "添加临时菜"
|
"navigationBarTitleText": "添加临时菜"
|
||||||
@@ -760,13 +766,28 @@
|
|||||||
{
|
{
|
||||||
"root": "pageBwc",
|
"root": "pageBwc",
|
||||||
"pages": [{
|
"pages": [{
|
||||||
"pageId": "PAGES_BWC",
|
"pageId": "PAGES_BWC",
|
||||||
"path": "index/index",
|
"path": "index/index",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "霸王餐"
|
"navigationBarTitleText": "霸王餐"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"root": "pagewriteoff",
|
||||||
|
"pages": [{
|
||||||
|
"pageId": "PAGES_WEITEOFF",
|
||||||
|
"path": "index/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "核销列表"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"pageId": "PAGES_WEITEOFF_RECORD",
|
||||||
|
"path": "index/record",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "核销记录"
|
||||||
|
}
|
||||||
|
}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"root": "pageBooking",
|
"root": "pageBooking",
|
||||||
@@ -877,11 +898,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path" : "quan/quan",
|
"path": "quan/quan",
|
||||||
"pageId": "PAGES_ORDER_QUAN",
|
"pageId": "PAGES_ORDER_QUAN",
|
||||||
"style" :
|
"style": {
|
||||||
{
|
"navigationBarTitleText": "券包"
|
||||||
"navigationBarTitleText" : "券包"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1094,15 +1114,42 @@
|
|||||||
{
|
{
|
||||||
"root": "pageNotification",
|
"root": "pageNotification",
|
||||||
"pages": [{
|
"pages": [{
|
||||||
"pageId": "PAGES_NOTIFICATION_INDEX",
|
"pageId": "PAGES_NOTIFICATION_INDEX",
|
||||||
"path": "index",
|
"path": "index",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "订阅通知"
|
"navigationBarTitleText": "订阅通知"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"root": "pageCreditBuyer",
|
||||||
|
"pages": [{
|
||||||
|
"pageId": "PAGES_CREDIT_BUYER_INDEX",
|
||||||
|
"path": "index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "挂账管理"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"pageId": "PAGES_CREDIT_BUYER_ADDDEBTOR",
|
||||||
|
"path": "addDebtor",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "挂账人"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"pageId": "PAGES_CREDIT_BUYER_REPAYMENTRECORD",
|
||||||
|
"path": "rePaymentRecord",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "账单付款记录"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"pageId": "PAGES_CREDIT_BUYER_DETAIL",
|
||||||
|
"path": "creditDetail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "查看明细"
|
||||||
|
}
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
"navigationBarTextStyle": "black",
|
"navigationBarTextStyle": "black",
|
||||||
|
|||||||
@@ -194,6 +194,11 @@
|
|||||||
icon: '/static/indexImg/icon-notification.svg',
|
icon: '/static/indexImg/icon-notification.svg',
|
||||||
pageUrl: 'PAGES_NOTIFICATION_INDEX',
|
pageUrl: 'PAGES_NOTIFICATION_INDEX',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: '挂账管理',
|
||||||
|
icon: '/static/indexImg/icon_credit.svg',
|
||||||
|
pageUrl: 'PAGES_CREDIT_BUYER_INDEX',
|
||||||
|
},
|
||||||
// // // {
|
// // // {
|
||||||
// // // title: '进销存',
|
// // // title: '进销存',
|
||||||
// // // icon: '/static/indexImg/icon-invoicing.svg',
|
// // // icon: '/static/indexImg/icon-invoicing.svg',
|
||||||
@@ -279,8 +284,11 @@
|
|||||||
// pageUrl: 'PAGES_RED_INDEX',
|
// pageUrl: 'PAGES_RED_INDEX',
|
||||||
// entId: 'ENT_MCH_MEMBER'
|
// entId: 'ENT_MCH_MEMBER'
|
||||||
// },
|
// },
|
||||||
|
{
|
||||||
|
title: '核销管理',
|
||||||
|
icon: '/static/indexImg/pagewriteoff.svg',
|
||||||
|
pageUrl: 'PAGES_WEITEOFF'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: '退出登录',
|
title: '退出登录',
|
||||||
icon: '/static/indexImg/icon-login-out.svg',
|
icon: '/static/indexImg/icon-login-out.svg',
|
||||||
@@ -368,6 +376,7 @@
|
|||||||
/* #endif */
|
/* #endif */
|
||||||
/* #ifndef H5 */
|
/* #ifndef H5 */
|
||||||
padding-top: calc(84rpx + 44px);
|
padding-top: calc(84rpx + 44px);
|
||||||
|
|
||||||
/* #endif */
|
/* #endif */
|
||||||
>view {
|
>view {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
</uni-forms>
|
</uni-forms>
|
||||||
|
|
||||||
<view class="agreement-policy">
|
<view class="agreement-policy">
|
||||||
<JeepayCheckbox v-model:checked="vdata.isSelectedAgreement" />
|
<JeepayCheckbox v-model:checked="vdata.isSelectedAgreement" />
|
||||||
同意
|
同意
|
||||||
@@ -117,8 +117,8 @@
|
|||||||
<text>与</text>
|
<text>与</text>
|
||||||
<text class="policy" @click="toPrivacy">《隐私政策》</text>
|
<text class="policy" @click="toPrivacy">《隐私政策》</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|
||||||
<!-- <view class="agreement-policy">
|
<!-- <view class="agreement-policy">
|
||||||
<JeepayCheckbox v-model:checked="vdata.isSelectedAgreement" />
|
<JeepayCheckbox v-model:checked="vdata.isSelectedAgreement" />
|
||||||
同意
|
同意
|
||||||
@@ -173,6 +173,7 @@
|
|||||||
import timer from '@/commons/utils/timer.js'
|
import timer from '@/commons/utils/timer.js'
|
||||||
import formUtil from '@/commons/utils/formUtil.js'
|
import formUtil from '@/commons/utils/formUtil.js'
|
||||||
import EnvChangeTips from './components/EnvChangeTips.vue'
|
import EnvChangeTips from './components/EnvChangeTips.vue'
|
||||||
|
import dayjs from 'dayjs' //时间格式库
|
||||||
import {
|
import {
|
||||||
getExtStoreId
|
getExtStoreId
|
||||||
} from "@/commons/utils/versionManage.js"
|
} from "@/commons/utils/versionManage.js"
|
||||||
@@ -249,7 +250,7 @@
|
|||||||
})
|
})
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
vdata.formData.username = '17792050546'
|
vdata.formData.username = '17792050546'
|
||||||
vdata.formData.pwd = 'sy666888'
|
vdata.formData.pwd = 'qwer1234'
|
||||||
// #endif
|
// #endif
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
// vdata.formData.username = '15699991111'
|
// vdata.formData.username = '15699991111'
|
||||||
@@ -258,11 +259,11 @@
|
|||||||
|
|
||||||
function accountTypeChange(e) {
|
function accountTypeChange(e) {
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
if(e==1){
|
if (e == 1) {
|
||||||
vdata.formData.merchantName = '18049104914'
|
vdata.formData.merchantName = '18049104914'
|
||||||
vdata.formData.username = '13666666666'
|
vdata.formData.username = '13666666666'
|
||||||
vdata.formData.pwd = '123456'
|
vdata.formData.pwd = '123456'
|
||||||
}else{
|
} else {
|
||||||
vdata.formData.pwd = 'qwer1234'
|
vdata.formData.pwd = 'qwer1234'
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
@@ -301,6 +302,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function loginFunc() {
|
function loginFunc() {
|
||||||
|
|
||||||
// 表单验证
|
// 表单验证
|
||||||
formUtil.validate(loginFormRef.value).then(() => {
|
formUtil.validate(loginFormRef.value).then(() => {
|
||||||
if (!vdata.isSelectedAgreement) {
|
if (!vdata.isSelectedAgreement) {
|
||||||
@@ -375,11 +377,21 @@
|
|||||||
storageManage.shopId(loginBizData.shopId)
|
storageManage.shopId(loginBizData.shopId)
|
||||||
storageManage.shopUserId(loginBizData.user.user.id)
|
storageManage.shopUserId(loginBizData.user.user.id)
|
||||||
storageManage.userInfo(loginBizData)
|
storageManage.userInfo(loginBizData)
|
||||||
|
var time1 = new Date();
|
||||||
|
var time2 = new Date(loginBizData.expireDate);
|
||||||
|
let les = (time1.getTime() - time2.getTime()) / 86400000;
|
||||||
|
uni.showToast({
|
||||||
|
title: '店铺账号有限期至' + loginBizData.expireDate + ',店铺账号到期剩余' + Math.abs(les.toFixed(0)) + '天!',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
// 跳转到首页
|
||||||
|
go.to("PAGES_INDEX", {
|
||||||
|
isGetCid: true
|
||||||
|
}, go.GO_TYPE_RELAUNCH)
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
// 跳转到首页
|
|
||||||
go.to("PAGES_INDEX", {
|
|
||||||
isGetCid: true
|
|
||||||
}, go.GO_TYPE_RELAUNCH)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 点击发送验证码的函数
|
// 点击发送验证码的函数
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
<view class="member_bg"><up-image v-if="'member_bg' == vdata.extendInfo.autokey" :src="vdata.extendInfo.value"></up-image></view>
|
<view class="member_bg"><up-image v-if="'member_bg' == vdata.extendInfo.autokey" :src="vdata.extendInfo.value"></up-image></view>
|
||||||
<view class="shopinfo_bg"><up-image v-if="'shopinfo_bg' == vdata.extendInfo.autokey" :src="vdata.extendInfo.value"></up-image></view>
|
<view class="shopinfo_bg"><up-image v-if="'shopinfo_bg' == vdata.extendInfo.autokey" :src="vdata.extendInfo.value"></up-image></view>
|
||||||
<view class="shopinfo_bg_f" v-if="'shopinfo_bg' == vdata.extendInfo.autokey"></view>
|
<view class="shopinfo_bg_f" v-if="'shopinfo_bg' == vdata.extendInfo.autokey"></view>
|
||||||
<view class="bg"><up-image :src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/cashier_admin_app_shopSet/'+vdata.extendInfo.autokey+'.png'" ></up-image></view>
|
<view class="bg"><up-image v-if="vdata.extendInfo.autokey" :src="'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/cashier_admin_app_shopSet/'+vdata.extendInfo.autokey+'.png'" ></up-image></view>
|
||||||
</view>
|
</view>
|
||||||
<view class="extend_img">
|
<view class="extend_img">
|
||||||
<view class="extend_title">{{vdata.extendInfo.title}}背景图片</view>
|
<view class="extend_title">{{vdata.extendInfo.title}}背景图片</view>
|
||||||
@@ -145,7 +145,6 @@ const vdata = reactive({
|
|||||||
})
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
shopExtend();
|
shopExtend();
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
@@ -153,7 +152,7 @@ onShow(() => {
|
|||||||
uni.$on('refreshPreviousPage', (params) => {
|
uni.$on('refreshPreviousPage', (params) => {
|
||||||
// 这里执行刷新数据的操作,例如重新调用API获取数据
|
// 这里执行刷新数据的操作,例如重新调用API获取数据
|
||||||
refreshData(params);
|
refreshData(params);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="min-page bg-gray u-p-30">
|
<view class="min-page bg-gray u-p-30 u-font-28">
|
||||||
<view class="u-font-24">
|
<view class="u-font-24">
|
||||||
<text class="color-red">*</text>
|
<text class="color-red">*</text>
|
||||||
<text class="color-999">将临时菜添加至购物车,不会影响总商品库</text>
|
<text class="color-999">将临时菜添加至购物车,不会影响总商品库</text>
|
||||||
@@ -14,20 +14,20 @@
|
|||||||
<text class="color-red">*</text>
|
<text class="color-red">*</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="border-bottom u-p-t-10 u-p-b-10">
|
<view class="border-bottom ">
|
||||||
<uni-easyinput :inputBorder="false" paddingNone v-model="form.name"
|
<uni-easyinput :inputBorder="false" paddingNone v-model="form.name"
|
||||||
placeholder="填写菜品名称"></uni-easyinput>
|
placeholder="填写菜品名称"></uni-easyinput>
|
||||||
</view>
|
</view>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
<uni-forms-item required label="" name="category">
|
<uni-forms-item required label="" name="category">
|
||||||
<template #label>
|
<template #label>
|
||||||
<view class="u-text-left u-m-t-24">
|
<view class="u-text-left ">
|
||||||
<text class="color-333">菜品分类</text>
|
<text class="color-333">菜品分类</text>
|
||||||
<text class="color-red">*</text>
|
<text class="color-red">*</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<picker @change="categoryChange" :value="categoryCurrent" range-key="name" :range="category">
|
<picker @change="categoryChange" :value="categoryCurrent" range-key="name" :range="category">
|
||||||
<view class="u-m-t-14 u-p-t-10 u-flex u-row-between border-bottom u-p-b-10 u-relative ">
|
<view class=" u-flex u-row-between border-bottom u-relative ">
|
||||||
<view class="zhezhao u-absolute position-all" style="z-index: 1;"></view>
|
<view class="zhezhao u-absolute position-all" style="z-index: 1;"></view>
|
||||||
<!-- <view>
|
<!-- <view>
|
||||||
<text class="" v-if="form.category!==''">{{category[form.category].name}}</text>
|
<text class="" v-if="form.category!==''">{{category[form.category].name}}</text>
|
||||||
@@ -46,25 +46,25 @@
|
|||||||
|
|
||||||
<uni-forms-item required label="" name="price">
|
<uni-forms-item required label="" name="price">
|
||||||
<template #label>
|
<template #label>
|
||||||
<view class="u-m-t-24 u-text-left">
|
<view class=" u-text-left">
|
||||||
<text class="color-333">价格(元)</text>
|
<text class="color-333">价格(元)</text>
|
||||||
<text class="color-red">*</text>
|
<text class="color-red">*</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="border-bottom u-p-t-10 u-p-b-10">
|
<view class="border-bottom ">
|
||||||
<uni-easyinput :inputBorder="false" paddingNone v-model="form.price" placeholder="输入价格"
|
<uni-easyinput :inputBorder="false" paddingNone v-model="form.price" placeholder="输入价格"
|
||||||
type="digit"></uni-easyinput>
|
type="digit"></uni-easyinput>
|
||||||
</view>
|
</view>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
<uni-forms-item required label="" name="unit">
|
<uni-forms-item required label="" name="unit">
|
||||||
<template #label>
|
<template #label>
|
||||||
<view class="u-text-left u-m-t-24">
|
<view class="u-text-left ">
|
||||||
<text class="color-333">单位</text>
|
<text class="color-333">单位</text>
|
||||||
<text class="color-red">*</text>
|
<text class="color-red">*</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<picker @change="unitChange" :value="units.current" range-key="name" :range="units.list">
|
<picker @change="unitChange" :value="units.current" range-key="name" :range="units.list">
|
||||||
<view class="u-m-t-14 u-p-t-10 u-flex u-row-between border-bottom u-p-b-10 u-relative ">
|
<view class=" u-flex u-row-between border-bottom u-relative ">
|
||||||
<view class="zhezhao u-absolute position-all" style="z-index: 1;"></view>
|
<view class="zhezhao u-absolute position-all" style="z-index: 1;"></view>
|
||||||
<view class="u-flex-1">
|
<view class="u-flex-1">
|
||||||
<uni-easyinput :inputBorder="false" paddingNone v-model="form.unit"
|
<uni-easyinput :inputBorder="false" paddingNone v-model="form.unit"
|
||||||
@@ -76,21 +76,33 @@
|
|||||||
</picker>
|
</picker>
|
||||||
|
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
<uni-forms-item required label="" name="price">
|
<uni-forms-item required label="" name="num">
|
||||||
<template #label>
|
<template #label>
|
||||||
<view class="u-m-t-24 u-text-left">
|
<view class=" u-text-left">
|
||||||
<text class="color-333">下单数量</text>
|
<text class="color-333">下单数量</text>
|
||||||
<text class="color-red">*</text>
|
<text class="color-red">*</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="border-bottom u-p-t-10 u-p-b-10">
|
<view class="border-bottom ">
|
||||||
<uni-easyinput :inputBorder="false" paddingNone v-model="form.number" placeholder="填写数量"
|
<uni-easyinput :inputBorder="false" paddingNone v-model="form.num" placeholder="填写数量"
|
||||||
type="digit"></uni-easyinput>
|
type="digit"></uni-easyinput>
|
||||||
</view>
|
</view>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
|
<uni-forms-item required label="" name="note">
|
||||||
|
<template #label>
|
||||||
|
<view class=" u-text-left">
|
||||||
|
<text class="color-333">备注</text>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<view class="border u-m-t-16">
|
||||||
|
<uni-easyinput :inputBorder="false" paddingNone v-model="form.note" placeholder="请输入自定义备注"
|
||||||
|
type="textarea"></uni-easyinput>
|
||||||
|
</view>
|
||||||
|
</uni-forms-item>
|
||||||
</uni-forms>
|
</uni-forms>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<view style="height: 200rpx;"></view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="fixed-b">
|
<view class="fixed-b">
|
||||||
@@ -99,40 +111,31 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import myButton from '../../components/my-components/my-button';
|
import {
|
||||||
|
returnAllCategory
|
||||||
|
} from '@/pageProduct/util.js'
|
||||||
|
import {
|
||||||
|
$tbShopCategory,
|
||||||
|
$tbShopUnit
|
||||||
|
} from '@/http/yskApi/goods.js'
|
||||||
|
import {
|
||||||
|
$temporaryDishes
|
||||||
|
} from '@/http/yskApi/Instead.js'
|
||||||
import {
|
import {
|
||||||
reactive,
|
reactive,
|
||||||
ref
|
onMounted,
|
||||||
|
ref,
|
||||||
|
onBeforeMount,
|
||||||
} from 'vue';
|
} from 'vue';
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow
|
||||||
|
} from '@dcloudio/uni-app'
|
||||||
const units = reactive({
|
const units = reactive({
|
||||||
list: [{
|
list: [],
|
||||||
name: '件',
|
current: ''
|
||||||
value: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '杯',
|
|
||||||
value: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '个',
|
|
||||||
value: 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
current:''
|
|
||||||
})
|
})
|
||||||
const category = reactive([{
|
let category = reactive([])
|
||||||
name: '分类1',
|
|
||||||
value: 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '分类2',
|
|
||||||
value: 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '分类3',
|
|
||||||
value: 3
|
|
||||||
}
|
|
||||||
])
|
|
||||||
let categoryCurrent = ref('')
|
let categoryCurrent = ref('')
|
||||||
|
|
||||||
function categoryChange(e) {
|
function categoryChange(e) {
|
||||||
@@ -140,7 +143,8 @@
|
|||||||
categoryCurrent.value = e.detail.value
|
categoryCurrent.value = e.detail.value
|
||||||
form.category = category[e.detail.value].name
|
form.category = category[e.detail.value].name
|
||||||
}
|
}
|
||||||
function unitChange(e){
|
|
||||||
|
function unitChange(e) {
|
||||||
units.current = e.detail.value
|
units.current = e.detail.value
|
||||||
form.unit = units.list[e.detail.value].name
|
form.unit = units.list[e.detail.value].name
|
||||||
}
|
}
|
||||||
@@ -149,9 +153,9 @@
|
|||||||
const form = reactive({
|
const form = reactive({
|
||||||
name: '',
|
name: '',
|
||||||
category: '',
|
category: '',
|
||||||
price: 0,
|
price: '',
|
||||||
unit:'',
|
unit: '',
|
||||||
number:0
|
num: ''
|
||||||
})
|
})
|
||||||
// 校验规则
|
// 校验规则
|
||||||
const rules = {
|
const rules = {
|
||||||
@@ -167,7 +171,7 @@
|
|||||||
errorMessage: '请选择菜品分类'
|
errorMessage: '请选择菜品分类'
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
price: {
|
num: {
|
||||||
rules: [{
|
rules: [{
|
||||||
required: true,
|
required: true,
|
||||||
errorMessage: '请输入价格'
|
errorMessage: '请输入价格'
|
||||||
@@ -186,17 +190,103 @@
|
|||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
let timer = null
|
||||||
|
|
||||||
function submit() {
|
function submit() {
|
||||||
refform.value.validate(res => {
|
refform.value.validate(res => {
|
||||||
console.log(res)
|
console.log(res)
|
||||||
|
if (!res) {
|
||||||
|
$temporaryDishes({
|
||||||
|
"useType": option.useType,
|
||||||
|
"masterId": option.masterId,
|
||||||
|
"tableId": option.tableId,
|
||||||
|
"name": form.name,
|
||||||
|
"categoryId": category[categoryCurrent.value].id,
|
||||||
|
"price": form.price,
|
||||||
|
"num": form.num,
|
||||||
|
unit: units.list[units.current].id,
|
||||||
|
"note": form.note,
|
||||||
|
"vipUserId": option.vipUserId
|
||||||
|
}).then(r => {
|
||||||
|
uni.$emit('add:cashCai')
|
||||||
|
clearInterval(timer)
|
||||||
|
timer = setTimeout(() => {
|
||||||
|
uni.navigateBack()
|
||||||
|
}, 500)
|
||||||
|
})
|
||||||
|
}
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//获取单位数据
|
||||||
|
async function getTbShopUnit() {
|
||||||
|
const res = await $tbShopUnit({
|
||||||
|
page: 0,
|
||||||
|
size: 200,
|
||||||
|
sort: "id"
|
||||||
|
})
|
||||||
|
units.list = res.content.map(v => {
|
||||||
|
return {
|
||||||
|
...v,
|
||||||
|
value: v.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
async function getCategory() {
|
||||||
|
const res = await $tbShopCategory({
|
||||||
|
page: 0,
|
||||||
|
size: 600
|
||||||
|
})
|
||||||
|
const arr = forList(res.content).map(v => {
|
||||||
|
return {
|
||||||
|
...v,
|
||||||
|
value: v.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
category.length = arr.length
|
||||||
|
for (let i in arr) {
|
||||||
|
category[i] = arr[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function forList(arr) {
|
||||||
|
let arrs = []
|
||||||
|
arr.forEach(ele => {
|
||||||
|
arrs.push(ele)
|
||||||
|
if (ele.childrenList.length) {
|
||||||
|
ele.childrenList.forEach(res => {
|
||||||
|
arrs.push(res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return arrs
|
||||||
|
}
|
||||||
|
async function init() {
|
||||||
|
getTbShopUnit()
|
||||||
|
getCategory()
|
||||||
|
}
|
||||||
|
// onMounted(() => {
|
||||||
|
// init()
|
||||||
|
// })
|
||||||
|
onLoad((opt) => {
|
||||||
|
Object.assign(option, opt)
|
||||||
|
setTimeout(() => {
|
||||||
|
init()
|
||||||
|
}, 600)
|
||||||
|
})
|
||||||
|
|
||||||
|
onBeforeMount(() => {
|
||||||
|
clearInterval(timer)
|
||||||
|
})
|
||||||
|
const option = reactive({
|
||||||
|
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.u-text-left {}
|
||||||
|
|
||||||
.form {
|
.form {
|
||||||
margin-top: 32rpx;
|
margin-top: 32rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
@@ -205,6 +295,13 @@
|
|||||||
// background-color: transparent;
|
// background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.border {
|
||||||
|
border: 1px solid #F4F4F4;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding-left: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
::v-deep.uni-forms-item {
|
::v-deep.uni-forms-item {
|
||||||
align-items: inherit;
|
align-items: inherit;
|
||||||
}
|
}
|
||||||
@@ -213,6 +310,16 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep .uni-easyinput__content-input {
|
||||||
|
height: inherit;
|
||||||
|
padding-top: 16rpx;
|
||||||
|
padding-bottom: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .uni-forms-item:not(:first-child) {
|
||||||
|
margin-top: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.fixed-b {
|
.fixed-b {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 100rpx;
|
left: 100rpx;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<my-model ref="model" :title="title" iconColor="#000" @close="resetForm">
|
<my-model ref="model" :title="title" iconColor="#000" @close="resetForm">
|
||||||
<template #desc>
|
<template #desc>
|
||||||
<view class="u-m-t-48 tab">
|
<!-- <view class="u-m-t-48 tab">
|
||||||
<my-tabs :list="tabs" @change="tabsChange"></my-tabs>
|
<my-tabs :list="tabs" @change="tabsChange"></my-tabs>
|
||||||
</view>
|
</view> -->
|
||||||
<view class="u-text-left u-p-30 ">
|
<view class="u-text-left u-p-30 ">
|
||||||
<template v-if="!current">
|
<template v-if="!current">
|
||||||
<view>
|
<view>
|
||||||
@@ -34,7 +34,6 @@
|
|||||||
<view class="u-flex-1">
|
<view class="u-flex-1">
|
||||||
<input @input="discountMoneyInput" v-model="form.discountMoney" type="digit"
|
<input @input="discountMoneyInput" v-model="form.discountMoney" type="digit"
|
||||||
placeholder-class="placeholder-class" placeholder="减8.55元请输入8.55" />
|
placeholder-class="placeholder-class" placeholder="减8.55元请输入8.55" />
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<view class="color-999 u-p-l-48 u-p-r-48 u-flex u-row-center u-col-center">
|
<view class="color-999 u-p-l-48 u-p-r-48 u-flex u-row-center u-col-center">
|
||||||
<view>元</view>
|
<view>元</view>
|
||||||
@@ -46,19 +45,22 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="u-m-t-48">
|
<view class="u-m-t-48">
|
||||||
<view class="u-font-24">
|
<view class="u-font-24">
|
||||||
<text class="color-999">打折原因</text>
|
<text class="color-999">当前单品价格:{{price}}</text>
|
||||||
<text class="color-red">*</text>
|
</view>
|
||||||
</view>
|
<view class="u-font-24">
|
||||||
|
<text class="color-999">打折原因</text>
|
||||||
|
<text class="color-red">*</text>
|
||||||
|
</view>
|
||||||
<view class="u-flex u-m-t-24">
|
<view class="u-flex u-m-t-24">
|
||||||
<view class="u-flex" v-for="(item,index) in causes" :key="index">
|
<view class="u-flex" v-for="(item,index) in causes" :key="index">
|
||||||
<button @tap="changeCauses(item)" class="tag u-m-r-20"
|
<button @tap="changeCauses(item,index)" class="tag u-m-r-20"
|
||||||
:class="{active:item.checked}">{{item.name}}</button>
|
:class="{active:item.checked}">{{item.name}}</button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-t-32 u-flex ">
|
<view class="u-m-t-32 u-flex ">
|
||||||
<uni-easyinput type="textarea" v-model="value" placeholder="自定义内容"></uni-easyinput>
|
<uni-easyinput type="textarea" v-model="form.note" placeholder="自定义内容"></uni-easyinput>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
@@ -67,7 +69,10 @@
|
|||||||
<view class="u-p-30">
|
<view class="u-p-30">
|
||||||
<view class="u-m-t-10">
|
<view class="u-m-t-10">
|
||||||
<my-button @tap="confirm" shape="circle" showShadow>确认</my-button>
|
<my-button @tap="confirm" shape="circle" showShadow>确认</my-button>
|
||||||
<my-button type="cancel" bgColor="#fff" @tap="confirm">取消</my-button>
|
<view style="height: 20rpx;">
|
||||||
|
|
||||||
|
</view>
|
||||||
|
<!-- <my-button type="cancel" bgColor="#fff" @tap="confirm">取消</my-button> -->
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -86,7 +91,7 @@
|
|||||||
import myTabs from '@/components/my-components/my-tabs.vue'
|
import myTabs from '@/components/my-components/my-tabs.vue'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
price: {
|
price: {
|
||||||
type: [Number,String],
|
type: [Number, String],
|
||||||
default: 0
|
default: 0
|
||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
@@ -98,12 +103,10 @@
|
|||||||
default: []
|
default: []
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function changeCauses(item) {
|
|
||||||
item.checked = !item.checked
|
|
||||||
}
|
|
||||||
|
|
||||||
const discounts = [95, 90, 85, 80]
|
const discounts = [95, 90, 85, 80]
|
||||||
const causes = reactive([{
|
const causes = reactive([{
|
||||||
@@ -120,6 +123,11 @@
|
|||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
function changeCauses(item, index) {
|
||||||
|
item.checked = !item.checked
|
||||||
|
form.notes = causes
|
||||||
|
}
|
||||||
|
|
||||||
function discountInput(e) {
|
function discountInput(e) {
|
||||||
if (e.detail.value >= 100) {
|
if (e.detail.value >= 100) {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
@@ -127,8 +135,9 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function discountMoneyInput(e) {
|
function discountMoneyInput(e) {
|
||||||
const max=100
|
const max = 100
|
||||||
if (e.detail.value >= max) {
|
if (e.detail.value >= max) {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
form.discountMoney = 100
|
form.discountMoney = 100
|
||||||
@@ -142,7 +151,7 @@
|
|||||||
|
|
||||||
|
|
||||||
const tabs = ['打折', '减免']
|
const tabs = ['打折', '减免']
|
||||||
let current = ref(0)
|
let current = ref(1)
|
||||||
|
|
||||||
function tabsChange(i) {
|
function tabsChange(i) {
|
||||||
console.log(i);
|
console.log(i);
|
||||||
@@ -158,11 +167,12 @@
|
|||||||
const form = reactive({
|
const form = reactive({
|
||||||
...$form
|
...$form
|
||||||
})
|
})
|
||||||
watch(()=>props.price,(newval)=>{
|
watch(() => props.price, (newval) => {
|
||||||
console.log(newval);
|
console.log(newval);
|
||||||
form.price=newval
|
form.price = newval
|
||||||
form.currentPrice=newval
|
form.currentPrice = newval
|
||||||
})
|
})
|
||||||
|
|
||||||
function resetForm() {
|
function resetForm() {
|
||||||
Object.assign(form, {
|
Object.assign(form, {
|
||||||
...$form
|
...$form
|
||||||
@@ -182,22 +192,23 @@
|
|||||||
|
|
||||||
function confirm() {
|
function confirm() {
|
||||||
const {
|
const {
|
||||||
discount,discountMoney
|
discount,
|
||||||
|
discountMoney
|
||||||
} = form
|
} = form
|
||||||
if (current.value===0&& discount==='') {
|
if (current.value === 0 && discount === '') {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
title: '请输入有效折扣!'
|
title: '请输入有效折扣!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (current.value===1&& discountMoney==='') {
|
if (current.value === 1 && discountMoney === '') {
|
||||||
return uni.showToast({
|
return uni.showToast({
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
title: '请输入有效减免价格!'
|
title: '请输入有效减免价格!'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
close()
|
|
||||||
emits('confirm', form)
|
emits('confirm', form)
|
||||||
|
close()
|
||||||
}
|
}
|
||||||
defineExpose({
|
defineExpose({
|
||||||
open,
|
open,
|
||||||
|
|||||||
@@ -112,6 +112,14 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
<!-- <template v-if="goods.list[0].tableId&&goods.list[0].orderId">
|
||||||
|
<view class="block" @tap="rotatingTables"
|
||||||
|
style="display: flex;align-items: center;justify-content: space-between;">
|
||||||
|
<view>转桌/并桌</view>
|
||||||
|
<uni-icons type="right" color="#999" size="16"></uni-icons>
|
||||||
|
</view>
|
||||||
|
</template> -->
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<view class="block">
|
<view class="block">
|
||||||
@@ -136,10 +144,15 @@
|
|||||||
:key="index">
|
:key="index">
|
||||||
<view class="u-flex u-row-between ">
|
<view class="u-flex u-row-between ">
|
||||||
<view class="u-flex">
|
<view class="u-flex">
|
||||||
<image class="img" :src="item.coverImg" mode=""></image>
|
<image class="img" v-if="item.coverImg" :src="item.coverImg" mode=""></image>
|
||||||
|
<view
|
||||||
|
style="background-color: #3f9eff; width: 84rpx;height: 84rpx;line-height: 84rpx;text-align: center;color: #fff;"
|
||||||
|
v-else>
|
||||||
|
临时菜
|
||||||
|
</view>
|
||||||
<view class="u-m-l-32">
|
<view class="u-m-l-32">
|
||||||
<view class="u-flex">
|
<view class="u-flex">
|
||||||
<view class="u-flex u-m-r-20" v-if="item.isWait">
|
<view class="u-flex u-m-r-20" v-if="item.isWaitCall">
|
||||||
<uni-tag text="等叫"
|
<uni-tag text="等叫"
|
||||||
custom-style="background-color: #FFF0DF; border-color: #FFF0DF; color: #FF9F2E;">
|
custom-style="background-color: #FFF0DF; border-color: #FFF0DF; color: #FF9F2E;">
|
||||||
</uni-tag>
|
</uni-tag>
|
||||||
@@ -154,6 +167,11 @@
|
|||||||
custom-style="background-color: #E6F0FF; border-color: #E6F0FF; color: #318AFE;"
|
custom-style="background-color: #E6F0FF; border-color: #E6F0FF; color: #318AFE;"
|
||||||
size="small" text="打包" inverted type="success" />
|
size="small" text="打包" inverted type="success" />
|
||||||
</view>
|
</view>
|
||||||
|
<view class="u-m-r-20 u-flex" v-if="item.isPrint">
|
||||||
|
<uni-tag
|
||||||
|
custom-style="background-color: #E6F0FF; border-color: #E6F0FF; color: #318AFE;"
|
||||||
|
size="small" text="打印" inverted type="success" />
|
||||||
|
</view>
|
||||||
<view>
|
<view>
|
||||||
{{item.name}}
|
{{item.name}}
|
||||||
</view>
|
</view>
|
||||||
@@ -174,7 +192,8 @@
|
|||||||
<text
|
<text
|
||||||
class="line-th color-999">¥{{formatPrice(item.salePrice*item.number) }}</text>
|
class="line-th color-999">¥{{formatPrice(item.salePrice*item.number) }}</text>
|
||||||
<view class="u-absolute" style="right: 0;bottom: 100%;">
|
<view class="u-absolute" style="right: 0;bottom: 100%;">
|
||||||
<text class="font-bold">¥{{formatPrice(item.memberPrice*item.number) }}</text>
|
<text
|
||||||
|
class="font-bold">¥{{formatPrice(item.memberPrice*item.number) }}</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
@@ -196,9 +215,10 @@
|
|||||||
</template>
|
</template>
|
||||||
<scroll-view class="u-m-t-32" scroll-x="true" v-if="index==goods.sel">
|
<scroll-view class="u-m-t-32" scroll-x="true" v-if="index==goods.sel">
|
||||||
<view class=" u-flex no-wrap ">
|
<view class=" u-flex no-wrap ">
|
||||||
<!-- <view class="u-flex u-m-r-20 u-m-b-20">
|
<view class="u-flex u-m-r-20 " v-if="!item.isGift">
|
||||||
<button class="tag" hover-class="hover-class" @tap="showModel('discount')">单品打折</button>
|
<button class="tag" hover-class="hover-class"
|
||||||
</view> -->
|
@tap="showModel('discount',index)">单品打折</button>
|
||||||
|
</view>
|
||||||
<view class="u-flex u-m-r-20 ">
|
<view class="u-flex u-m-r-20 ">
|
||||||
<!-- <button class="tag" hover-class="hover-class" @tap="showModel('giveFood')">赠菜</button> -->
|
<!-- <button class="tag" hover-class="hover-class" @tap="showModel('giveFood')">赠菜</button> -->
|
||||||
<button class="tag" hover-class="hover-class"
|
<button class="tag" hover-class="hover-class"
|
||||||
@@ -208,10 +228,14 @@
|
|||||||
<button class="tag" hover-class="hover-class"
|
<button class="tag" hover-class="hover-class"
|
||||||
@tap="toggleGoodsItemKey(item,index,'isPack')">{{item.isPack?'取消打包':'打包'}}</button>
|
@tap="toggleGoodsItemKey(item,index,'isPack')">{{item.isPack?'取消打包':'打包'}}</button>
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="u-flex u-m-r-20 u-m-b-20">
|
<view class="u-flex u-m-r-20 ">
|
||||||
<button class="tag" hover-class="hover-class"
|
<button class="tag" hover-class="hover-class"
|
||||||
@tap="toggleWait(item)">{{item.isWait?'取消等叫':'等叫'}}</button>
|
@tap="toggleWait(item)">{{item.isWaitCall?'取消等叫':'等叫'}}</button>
|
||||||
</view> -->
|
</view>
|
||||||
|
<view class="u-flex u-m-r-20 ">
|
||||||
|
<button class="tag" hover-class="hover-class"
|
||||||
|
@tap="toggisPrint(item)">{{item.isPrint?'免厨打':'打印'}}</button>
|
||||||
|
</view>
|
||||||
<view class="u-flex u-m-r-20 ">
|
<view class="u-flex u-m-r-20 ">
|
||||||
<button class="tag" hover-class="hover-class"
|
<button class="tag" hover-class="hover-class"
|
||||||
@tap="showModel('remark',index)">单品备注</button>
|
@tap="showModel('remark',index)">单品备注</button>
|
||||||
@@ -251,7 +275,7 @@
|
|||||||
<view class="font-bold u-font-32">¥{{formatPrice(youhui) }}</view>
|
<view class="font-bold u-font-32">¥{{formatPrice(youhui) }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="u-flex price u-m-l-32">
|
<view class="u-flex price u-m-l-32">
|
||||||
<view class="">实收金额</view>
|
<view class="">实收金额</view>
|
||||||
<view class="font-bold u-font-32">¥{{formatPrice(allPrice) }}</view>
|
<view class="font-bold u-font-32">¥{{formatPrice(allPrice) }}</view>
|
||||||
@@ -278,8 +302,8 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
<model-discount title="菜品减免" :ref="setModel" name="discount" :price="modelData.data.salePrice"
|
||||||
<model-discount title="菜品打折/减免" :ref="setModel" name="discount" :price="allPrice"></model-discount>
|
@confirm="discountconfirm"></model-discount>
|
||||||
<give-food title="赠菜" :ref="setModel" name="giveFood"></give-food>
|
<give-food title="赠菜" :ref="setModel" name="giveFood"></give-food>
|
||||||
<one-remark @confirm="goodsOneRemarkConfirm" title="单品备注" :ref="setModel" name="remark"></one-remark>
|
<one-remark @confirm="goodsOneRemarkConfirm" title="单品备注" :ref="setModel" name="remark"></one-remark>
|
||||||
<edit-discount title="优惠金额" :ref="setModel" name="editMoney" :price="allPrice"></edit-discount>
|
<edit-discount title="优惠金额" :ref="setModel" name="editMoney" :price="allPrice"></edit-discount>
|
||||||
@@ -351,7 +375,31 @@
|
|||||||
return Number(n).toFixed(2)
|
return Number(n).toFixed(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function rotatingTables() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pagesCreateOrder/confirm-order/rotatingTables?item='+JSON.stringify(goods.list),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 单品打折
|
||||||
|
async function discountconfirm(form) {
|
||||||
|
if (form.discountMoney != '.') {
|
||||||
|
let str = ''
|
||||||
|
if (form.notes) {
|
||||||
|
form.notes.forEach(ele => {
|
||||||
|
if (ele.checked) {
|
||||||
|
str = str + ele.name + ','
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let obj = {
|
||||||
|
saleAmount: form.discountMoney,
|
||||||
|
note: str + form.note,
|
||||||
|
cartId: modelData.data.id
|
||||||
|
}
|
||||||
|
const res = await Api.$updatePrice(obj)
|
||||||
|
getCart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//用餐人数
|
//用餐人数
|
||||||
const userNumbers = reactive({
|
const userNumbers = reactive({
|
||||||
@@ -416,18 +464,46 @@
|
|||||||
skuId
|
skuId
|
||||||
}
|
}
|
||||||
par[key] = !item[key]
|
par[key] = !item[key]
|
||||||
|
|
||||||
|
|
||||||
const res = await Api.$updateCart(par)
|
const res = await Api.$updateCart(par)
|
||||||
goods.list[index][key] = returnBoolean(res[key])
|
goods.list[index][key] = returnBoolean(res[key])
|
||||||
if (key == 'isPack') {
|
getCart()
|
||||||
getCart()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//等叫
|
//等叫
|
||||||
function toggleWait(item) {
|
async function toggleWait(item) {
|
||||||
item.isWait = !item.isWait
|
item.isWaitCall = !item.isWaitCall
|
||||||
|
let obj = {
|
||||||
|
cartId: item.id,
|
||||||
|
isGift: item.isGift,
|
||||||
|
isPack: item.isPack,
|
||||||
|
isPrint: item.isPrint,
|
||||||
|
isWaitCall: item.isWaitCall,
|
||||||
|
masterId: option.masterId,
|
||||||
|
num: item.number, // 0会删除此商品
|
||||||
|
productId: item.productId,
|
||||||
|
skuId: item.skuId,
|
||||||
|
vipUserId: '',
|
||||||
|
}
|
||||||
|
let res = await Api.$updateCart(obj)
|
||||||
|
}
|
||||||
|
// 打印
|
||||||
|
async function toggisPrint(item) {
|
||||||
|
item.isPrint = !item.isPrint
|
||||||
|
let obj = {
|
||||||
|
cartId: item.id,
|
||||||
|
isGift: item.isGift,
|
||||||
|
isPack: item.isPack,
|
||||||
|
isPrint: item.isPrint,
|
||||||
|
isWaitCall: item.isWaitCall,
|
||||||
|
masterId: option.masterId,
|
||||||
|
num: item.number, // 0会删除此商品
|
||||||
|
productId: item.productId,
|
||||||
|
skuId: item.skuId,
|
||||||
|
vipUserId: '',
|
||||||
|
}
|
||||||
|
let res = await Api.$updateCart(obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const eatTypes = reactive({
|
const eatTypes = reactive({
|
||||||
list: [{
|
list: [{
|
||||||
@@ -479,7 +555,6 @@
|
|||||||
function watchChooseuser() {
|
function watchChooseuser() {
|
||||||
uni.$off('choose-user')
|
uni.$off('choose-user')
|
||||||
uni.$on('choose-user', (data) => {
|
uni.$on('choose-user', (data) => {
|
||||||
console.log(data);
|
|
||||||
user.value = data
|
user.value = data
|
||||||
setUser()
|
setUser()
|
||||||
})
|
})
|
||||||
@@ -520,20 +595,25 @@
|
|||||||
totalNumber: 0,
|
totalNumber: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
})
|
})
|
||||||
const isVip=computed(()=>{
|
const isVip = computed(() => {
|
||||||
return $shop.value.isMemberPrice&& user.value&&user.value.id&&user.value.isVip
|
return $shop.value.isMemberPrice && user.value && user.value.id && user.value.isVip
|
||||||
|
})
|
||||||
|
const discountSaleAmount = computed(() => {
|
||||||
|
return goods.list.filter((v) => v.discountSaleAmount && v.discountSaleAmount > 0)
|
||||||
|
.reduce((a, b) => {
|
||||||
|
return a + b.number * b.discountSaleAmount;
|
||||||
|
}, 0);
|
||||||
})
|
})
|
||||||
const goodsPrice = computed(() => {
|
const goodsPrice = computed(() => {
|
||||||
const goodsTotalPrice = goods.list.reduce((prve, cur) => {
|
const goodsTotalPrice = goods.list.reduce((prve, cur) => {
|
||||||
const memberPrice=cur.memberPrice?cur.memberPrice:cur.salePrice
|
const memberPrice = cur.memberPrice ? cur.memberPrice : cur.salePrice
|
||||||
const tPrice = (isVip.value? memberPrice:cur.salePrice) * cur.number
|
const tPrice = (isVip.value ? memberPrice : cur.salePrice) * cur.number
|
||||||
const tpackFee = cur.isPack ? cur.packFee * 1 : 0
|
const tpackFee = cur.isPack ? cur.packFee * 1 : 0
|
||||||
return prve + (cur.isGift ? 0 : tPrice) + tpackFee
|
return prve + (cur.isGift ? 0 : tPrice) + tpackFee
|
||||||
}, 0)
|
}, 0)
|
||||||
return (goodsTotalPrice || 0).toFixed(2)
|
return ((goodsTotalPrice - discountSaleAmount.value) || 0).toFixed(2)
|
||||||
})
|
})
|
||||||
const allPrice = computed(() => {
|
const allPrice = computed(() => {
|
||||||
console.log(goodsPrice.value);
|
|
||||||
const n = goodsPrice.value * 1 + $seatFee.totalAmount
|
const n = goodsPrice.value * 1 + $seatFee.totalAmount
|
||||||
return n.toFixed(2)
|
return n.toFixed(2)
|
||||||
// const goodsTotalPrice = goods.list.reduce((prve, cur) => {
|
// const goodsTotalPrice = goods.list.reduce((prve, cur) => {
|
||||||
@@ -541,18 +621,21 @@
|
|||||||
// }, 0)
|
// }, 0)
|
||||||
// return (goodsTotalPrice + ($seatFee.totalAmount || 0)).toFixed(2)
|
// return (goodsTotalPrice + ($seatFee.totalAmount || 0)).toFixed(2)
|
||||||
})
|
})
|
||||||
const youhui=computed(()=>{
|
const youhui = computed(() => {
|
||||||
if(user.value&&user.value.id&&user.value.isVip){
|
let goodsTotalPrice = 0
|
||||||
const goodsTotalPrice = goods.list.reduce((prve, cur) => {
|
if (user.value && user.value.id && user.value.isVip) {
|
||||||
|
goodsTotalPrice = goods.list.reduce((prve, cur) => {
|
||||||
const tPrice = cur.salePrice * cur.number
|
const tPrice = cur.salePrice * cur.number
|
||||||
const tpackFee = cur.isPack ? cur.packFee * 1 : 0
|
const tpackFee = cur.isPack ? cur.packFee * 1 : 0
|
||||||
return prve + tPrice + tpackFee
|
return prve + tPrice + tpackFee
|
||||||
}, 0)
|
}, 0)
|
||||||
return goodsTotalPrice-allPrice.value
|
return goodsTotalPrice - allPrice.value
|
||||||
}else{
|
} else {
|
||||||
return 0
|
console.log(discountSaleAmount.value, '优惠金额')
|
||||||
|
return (discountSaleAmount.value)
|
||||||
}
|
}
|
||||||
return goodsTotalPrice
|
console.log(discountSaleAmount.value, '优惠金额1')
|
||||||
|
return (goodsTotalPrice + discountSaleAmount.value * 1).toFixed(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
function setGoodsItem(key, val) {
|
function setGoodsItem(key, val) {
|
||||||
@@ -573,16 +656,16 @@
|
|||||||
records,
|
records,
|
||||||
seatFee
|
seatFee
|
||||||
} = await Api.getCart(par)
|
} = await Api.getCart(par)
|
||||||
let useType=''
|
let useType = ''
|
||||||
if (seatFee && seatFee.useType) {
|
if (seatFee && seatFee.useType) {
|
||||||
useType=seatFee.useType
|
useType = seatFee.useType
|
||||||
$storageManage.useType(useType)
|
$storageManage.useType(useType)
|
||||||
}else{
|
} else {
|
||||||
useType=records[0].info[0].useType
|
useType = records[0].info[0].useType
|
||||||
$storageManage.useType(useType)
|
$storageManage.useType(useType)
|
||||||
}
|
}
|
||||||
console.log(useType);
|
console.log(useType);
|
||||||
eatTypes.active =useType == 'takeout' ? useType : useType.replace(
|
eatTypes.active = useType == 'takeout' ? useType : useType.replace(
|
||||||
/-after|-before/g, '');
|
/-after|-before/g, '');
|
||||||
goods.list = getNowCart(records)
|
goods.list = getNowCart(records)
|
||||||
if (seatFee && seatFee.totalNumber) {
|
if (seatFee && seatFee.totalNumber) {
|
||||||
|
|||||||
207
pagesCreateOrder/confirm-order/rotatingTables.vue
Normal file
207
pagesCreateOrder/confirm-order/rotatingTables.vue
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
<template>
|
||||||
|
<view style="padding: 20rpx;">
|
||||||
|
<view class="uni-padding-wrap uni-common-mt">
|
||||||
|
<uni-segmented-control :current="datas.current" :values=" ['转桌', '并桌']" style-type="button"
|
||||||
|
active-color="#007aff" @clickItem="onClickItem" />
|
||||||
|
</view>
|
||||||
|
<view class="u-m-t-48">
|
||||||
|
请选择其他桌:
|
||||||
|
</view>
|
||||||
|
<view class="uni-list">
|
||||||
|
<radio-group @change="radioChange" v-if="datas.tableList.length">
|
||||||
|
<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in datas.tableList" :key="index">
|
||||||
|
<view class="u-m-t-48 u-m-b-48">
|
||||||
|
<radio :value="item.tableId" /> {{item.name}}
|
||||||
|
</view>
|
||||||
|
</label>
|
||||||
|
</radio-group>
|
||||||
|
<view v-else>
|
||||||
|
暂无数据
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="uni-list" v-if="datas.current==0">
|
||||||
|
<view class="u-m-t-48">
|
||||||
|
请选择需要转桌的菜品:
|
||||||
|
</view>
|
||||||
|
<checkbox-group @change="checkboxChange">
|
||||||
|
<label class="uni-list-cell uni-list-cell-pd" v-for="(item,index) in datas.item" :key="index">
|
||||||
|
<template v-if="item.status=='unpaid'">
|
||||||
|
<view class="u-flex u-m-t-48 u-m-b-48"
|
||||||
|
style="justify-content: space-between;align-items: center;">
|
||||||
|
<view class="u-flex">
|
||||||
|
<checkbox :value="item.cartId" />
|
||||||
|
<image class="img" v-if="item.coverImg" :src="item.coverImg" mode=""></image>
|
||||||
|
|
||||||
|
{{item.name}}
|
||||||
|
</view>
|
||||||
|
<view class="">
|
||||||
|
<view class=" u-relative">
|
||||||
|
<template v-if="item.isGift">
|
||||||
|
<text
|
||||||
|
class="line-th color-999">¥{{formatPrice(item.salePrice*item.number) }}</text>
|
||||||
|
<view class="u-absolute" style="right: 0;bottom: 100%;">
|
||||||
|
<text class="font-bold">¥0</text>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<template v-if="isVip&&item.memberPrice&&item.memberPrice*1!=item.salePrice*1">
|
||||||
|
<text
|
||||||
|
class="line-th color-999">¥{{formatPrice(item.salePrice*item.number) }}</text>
|
||||||
|
<view class="u-absolute" style="right: 0;bottom: 100%;">
|
||||||
|
<text
|
||||||
|
class="font-bold">¥{{formatPrice(item.memberPrice*item.number) }}</text>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<view class="font-bold">
|
||||||
|
<text>¥</text>
|
||||||
|
<text class="">{{formatPrice(item.salePrice*item.number) }}</text>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
</view>
|
||||||
|
<view class="color-999 u-text-right u-font-24 u-m-t-12">×{{item.number}}</view>
|
||||||
|
</view>
|
||||||
|
<!-- <text class=" color-999">¥{{formatPrice(item.salePrice*item.number) }}</text> -->
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
</label>
|
||||||
|
</checkbox-group>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<my-button shape="circle" @tap="confirm">确定</my-button>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
reactive,
|
||||||
|
defineProps
|
||||||
|
} from 'vue';
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import go from '@/commons/utils/go.js';
|
||||||
|
import {
|
||||||
|
$table,
|
||||||
|
tableswitch
|
||||||
|
} from '@/http/yskApi/table.js'
|
||||||
|
let datas = reactive({
|
||||||
|
current: 0,
|
||||||
|
item: "",
|
||||||
|
// 桌台列表
|
||||||
|
tableList: [],
|
||||||
|
// 并桌选中
|
||||||
|
selecttableList: '',
|
||||||
|
// 转桌数据
|
||||||
|
changeTable: []
|
||||||
|
})
|
||||||
|
const props = defineProps({
|
||||||
|
item: {
|
||||||
|
type: Array
|
||||||
|
},
|
||||||
|
tableId: {
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
})
|
||||||
|
onLoad((opt) => {
|
||||||
|
datas.item = JSON.parse(opt.item)
|
||||||
|
})
|
||||||
|
onShow(() => {
|
||||||
|
gettableList()
|
||||||
|
})
|
||||||
|
async function confirm() {
|
||||||
|
// 是否选择其他桌
|
||||||
|
if (datas.selecttableList) {
|
||||||
|
if (datas.current == 0) {
|
||||||
|
// 转桌是否选择菜品
|
||||||
|
if (datas.changeTable.length) {
|
||||||
|
let res = await tableswitch({
|
||||||
|
masterId: datas.item[0].masterId,
|
||||||
|
useType: datas.item[0].useType,
|
||||||
|
cartIds: datas.changeTable,
|
||||||
|
currentTableId: datas.item[0].tableId,
|
||||||
|
targetTableId: datas.selecttableList
|
||||||
|
})
|
||||||
|
if (res) {
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: 2
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请选择菜品或桌号!',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let res = await tableswitch({
|
||||||
|
masterId: datas.item[0].masterId,
|
||||||
|
useType: datas.item[0].useType,
|
||||||
|
isFull: true,
|
||||||
|
currentTableId: datas.item[0].tableId,
|
||||||
|
targetTableId: datas.selecttableList
|
||||||
|
})
|
||||||
|
if (res) {
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: 2
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请选择菜品或桌号!',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function radioChange(d) {
|
||||||
|
datas.selecttableList = d.detail.value
|
||||||
|
}
|
||||||
|
// 切换转/并桌
|
||||||
|
function onClickItem(e) {
|
||||||
|
if (datas.current !== e.currentIndex) {
|
||||||
|
datas.current = e.currentIndex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 获取桌台
|
||||||
|
async function gettableList() {
|
||||||
|
const res = await $table.get({
|
||||||
|
page: 1,
|
||||||
|
size: 999
|
||||||
|
})
|
||||||
|
let arr = []
|
||||||
|
res.content.forEach((ele) => {
|
||||||
|
if (ele.status == 'using' && props.tableId != ele.tableId) {
|
||||||
|
arr.push(ele)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
datas.tableList = arr
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatPrice(n) {
|
||||||
|
return Number(n).toFixed(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkboxChange(e) {
|
||||||
|
datas.changeTable = e.detail.value
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.goods {
|
||||||
|
// padding-bottom: 30rpx;
|
||||||
|
border-bottom: 1px dashed #E5E5E5;
|
||||||
|
|
||||||
|
.item {}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 84rpx;
|
||||||
|
height: 84rpx;
|
||||||
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<view class="u-absolute goods bg-fff">
|
<view class="u-absolute goods bg-fff">
|
||||||
<view
|
<view
|
||||||
class="u-p-t-32 color-666 border-bottom bg-fff u-absolute total u-p-r-28 u-p-b-32 u-p-l-28 u-flex u-row-between">
|
class="u-p-t-32 color-666 border-bottom bg-fff u-absolute total u-p-r-28 u-p-b-32 u-p-l-28 u-flex u-row-between">
|
||||||
<view>已添加{{goodsNumber}}件商品</view>
|
<view>已添加{{goodsNumber.toFixed(0)}}件商品</view>
|
||||||
<view class="color-666">
|
<view class="color-666">
|
||||||
<uni-icons color="#666" type="trash"></uni-icons>
|
<uni-icons color="#666" type="trash"></uni-icons>
|
||||||
<text class="u-m-l-10" @tap="setModalShow('clear',true)">清空</text>
|
<text class="u-m-l-10" @tap="setModalShow('clear',true)">清空</text>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
</image>
|
</image>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-m-l-30 u-m-r-30 color-333">
|
<view class="u-m-l-30 u-m-r-30 color-333">
|
||||||
{{item.number}}
|
{{(item.number).toFixed(2)}}
|
||||||
</view>
|
</view>
|
||||||
<view class="u-flex" @tap="updateNumber(true,index,item)">
|
<view class="u-flex" @tap="updateNumber(true,index,item)">
|
||||||
<image src="/pagesCreateOrder/static/images/icon-add-black.svg" class="icon" mode="">
|
<image src="/pagesCreateOrder/static/images/icon-add-black.svg" class="icon" mode="">
|
||||||
|
|||||||
@@ -1,30 +1,34 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="u-relative u-flex item">
|
<view class="u-relative u-flex item">
|
||||||
|
|
||||||
<up-image :src="data.coverImg" mode="aspectFill" :width="img.width" :height="img.height"></up-image>
|
<up-image :src="data.coverImg" mode="aspectFill" :width="img.width" :height="img.height"></up-image>
|
||||||
<!-- <image lazy-load class="img" :src="data.coverImg" mode="aspectFill" :style="computedImgStyle()"></image> -->
|
<!-- <image lazy-load class="img" :src="data.coverImg" mode="aspectFill" :style="computedImgStyle()"></image> -->
|
||||||
<view class="info u-flex u-row-between u-col-top u-flex-col" @tap="emitEvent('add')">
|
<view class="info u-flex u-row-between u-col-top u-flex-col">
|
||||||
<view>
|
<view>
|
||||||
<view>
|
<view>
|
||||||
<text class="u-line-2">{{data.name}}</text>
|
<text class="u-line-2">{{data.name}}
|
||||||
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-font-32 font-bold u-m-t-16">
|
<view class="u-font-32 font-bold u-m-t-16">
|
||||||
¥{{data.price}}
|
¥{{data.price}}
|
||||||
</view>
|
</view>
|
||||||
|
<template v-if="data.type=='weigh'">
|
||||||
|
<view class="btnweigh">称重</view>
|
||||||
|
</template>
|
||||||
</view>
|
</view>
|
||||||
<view class="u-flex">
|
<view class="u-flex">
|
||||||
<template v-if="!isSellout">
|
<template v-if="!isSellout">
|
||||||
<template v-if="!data.isDan">
|
<template v-if="!data.isDan||data.groupType==1">
|
||||||
<button class="btn" hover-class="btn-hover-class" @tap="emitEvent('chooseGuige')">选规格</button>
|
<button class="btn" hover-class="btn-hover-class" @tap="emitEvent('chooseGuige')">选规格</button>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<view class="u-flex icon-btn">
|
<view class="u-flex icon-btn">
|
||||||
<view class="u-flex" @tap.stop="emitEvent('add')">
|
<view class="u-flex" @tap.stop="emitEvent(data.type=='weigh'?'tapweigh':'add')">
|
||||||
<image src="/pagesCreateOrder/static/images/icon-add.svg" class="icon" mode=""></image>
|
<image src="/pagesCreateOrder/static/images/icon-add.svg" class="icon" mode=""></image>
|
||||||
</view>
|
</view>
|
||||||
<template v-if="data.chooseNumber">
|
<template v-if="data.chooseNumber">
|
||||||
<view class="u-font-32">
|
<view class="u-font-32">
|
||||||
{{data.chooseNumber}}
|
{{(data.chooseNumber).toFixed(2)}}
|
||||||
</view>
|
</view>
|
||||||
<view class="u-flex" @tap.stop="emitEvent('reduce')">
|
<view class="u-flex" @tap.stop="emitEvent('reduce')">
|
||||||
<image src="/pagesCreateOrder/static/images/icon-reduce.svg" class="icon" mode="">
|
<image src="/pagesCreateOrder/static/images/icon-reduce.svg" class="icon" mode="">
|
||||||
@@ -55,20 +59,20 @@
|
|||||||
} from 'vue';
|
} from 'vue';
|
||||||
import util from '../util.js';
|
import util from '../util.js';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
img:{
|
img: {
|
||||||
type:Object,
|
type: Object,
|
||||||
default:{
|
default: {
|
||||||
width:'250rpx',
|
width: '250rpx',
|
||||||
height:'272rpx'
|
height: '272rpx'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
index: {
|
index: {
|
||||||
type: [Number,String],
|
type: [Number, String],
|
||||||
},
|
},
|
||||||
isSeatFee:{
|
isSeatFee: {
|
||||||
//是否为餐位费
|
//是否为餐位费
|
||||||
type:Boolean,
|
type: Boolean,
|
||||||
default:false
|
default: false
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@@ -79,36 +83,36 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
function computedImgStyle(){
|
function computedImgStyle() {
|
||||||
return {
|
return {
|
||||||
width:props.img.width,
|
width: props.img.width,
|
||||||
height:props.img.height
|
height: props.img.height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//判断是否是菜品
|
//判断是否是菜品
|
||||||
function isGoods(){
|
function isGoods() {
|
||||||
return props.data.hasOwnProperty('id')
|
return props.data.hasOwnProperty('id')
|
||||||
}
|
}
|
||||||
|
|
||||||
//判断商品是否售尽
|
//判断商品是否售尽
|
||||||
const isSellout = computed(() => {
|
const isSellout = computed(() => {
|
||||||
const item = props.data
|
const item = props.data
|
||||||
if(!isGoods()){
|
if (!isGoods()) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
item.isPauseSale ||
|
item.isPauseSale ||
|
||||||
(item.typeEnum !== "sku" && item.isStock==1&& item.stockNumber <= 0)
|
(item.typeEnum !== "sku" && item.isStock == 1 && item.stockNumber <= 0)
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const emits = defineEmits(['add', 'reduce', 'chooseGuige'])
|
const emits = defineEmits(['add', 'reduce', 'chooseGuige','tapweigh'])
|
||||||
|
|
||||||
function emitEvent(emitName){
|
function emitEvent(emitName) {
|
||||||
if(isGoods()){
|
if (isGoods()) {
|
||||||
emits(emitName, props.index)
|
emits(emitName, props.index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -133,10 +137,24 @@
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btnweigh {
|
||||||
|
margin: 5rpx 0;
|
||||||
|
width: 100rpx;
|
||||||
|
background: linear-gradient(124deg, #73c969 6%, #27921b 93%);
|
||||||
|
border-radius: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 6rpx 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.btn-hover-class {
|
.btn-hover-class {
|
||||||
opacity: .6;
|
opacity: .6;
|
||||||
}
|
}
|
||||||
image{will-change: transform}
|
|
||||||
|
image {
|
||||||
|
will-change: transform
|
||||||
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
// width: 250rpx;
|
// width: 250rpx;
|
||||||
// height: 272rpx;
|
// height: 272rpx;
|
||||||
|
|||||||
181
pagesCreateOrder/index/components/taocanModel.vue
Normal file
181
pagesCreateOrder/index/components/taocanModel.vue
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
<template>
|
||||||
|
<my-model ref="model" borderRadius="12" :title="datas.title">
|
||||||
|
<template #desc>
|
||||||
|
<scroll-view scroll-y="true" style="height: 50vh;" class="u-p-30 guigeModel">
|
||||||
|
<view class="u-m-b-40" v-for="(item,index) in datas.skus" :key="index">
|
||||||
|
<view class="u-text-left">
|
||||||
|
<view class="color-333">{{item.title}} <text
|
||||||
|
style="color:#999">({{item.count}}选{{item.number}})</text> </view>
|
||||||
|
</view>
|
||||||
|
<view class="u-flex u-m-t-20 u-flex-wrap">
|
||||||
|
<view class="item" @tap="chooseSkd(skd,item)" :class="{active:skd.select==true}"
|
||||||
|
v-for="(skd,skdIndex) in item.goods" :key="skdIndex">
|
||||||
|
{{skd.proName}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</template>
|
||||||
|
<template #btn>
|
||||||
|
<view class="u-p-30 border-top ">
|
||||||
|
<view class="u-flex u-p-b-30 u-row-between">
|
||||||
|
<view class="price">
|
||||||
|
<text>¥</text>
|
||||||
|
<text>{{datas.price}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="u-m-t-10">
|
||||||
|
<my-button @tap="confirm">添加</my-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
</my-model>
|
||||||
|
<uni-popup ref="popup" type="message">
|
||||||
|
<uni-popup-message type="info" message="请选择套餐" :duration="2000"></uni-popup-message>
|
||||||
|
</uni-popup>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
getCurrentInstance,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
watch
|
||||||
|
} from 'vue';
|
||||||
|
import util from '../util.js';
|
||||||
|
import infobox from '@/commons/utils/infoBox.js'
|
||||||
|
import myModel from '@/components/my-components/my-model.vue'
|
||||||
|
import myButton from '@/components/my-components/my-button.vue'
|
||||||
|
import {
|
||||||
|
onShow,
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
const props = defineProps({
|
||||||
|
goodsData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
let datas = reactive({
|
||||||
|
item: "",
|
||||||
|
title: "",
|
||||||
|
price: "",
|
||||||
|
skus: [],
|
||||||
|
// 几选几,的和
|
||||||
|
selectNumber: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// const selSku = computed(() => {
|
||||||
|
// return props.skus.reduce((prve, cur) => {
|
||||||
|
// prve.push(cur.sel)
|
||||||
|
// return prve
|
||||||
|
// }, []).join()
|
||||||
|
// })
|
||||||
|
|
||||||
|
|
||||||
|
// const goods = computed(() => {
|
||||||
|
// return props.skuMap[selSku.value]
|
||||||
|
// })
|
||||||
|
watch(() => props.goodsData, (newval) => {
|
||||||
|
newval.proGroupVo.forEach(ele => {
|
||||||
|
ele.selectData = []
|
||||||
|
})
|
||||||
|
datas.item = newval
|
||||||
|
datas.title = newval.name
|
||||||
|
datas.price = newval.price
|
||||||
|
datas.skus = newval.proGroupVo
|
||||||
|
datas.skus.forEach(ele => {
|
||||||
|
datas.selectNumber += ele.number
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const emits = defineEmits(['confirm', 'updateSku'])
|
||||||
|
|
||||||
|
function chooseSkd(skd, item) {
|
||||||
|
if (item.selectData.includes(skd.proId)) {
|
||||||
|
skd.select = false
|
||||||
|
let indexs = item.selectData.indexOf(skd.proId)
|
||||||
|
item.selectData.splice(indexs, 1)
|
||||||
|
} else {
|
||||||
|
if (item.selectData.length < item.number) {
|
||||||
|
skd.select = true
|
||||||
|
item.selectData.push(skd.proId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const model = ref(null)
|
||||||
|
|
||||||
|
function open() {
|
||||||
|
model.value.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
function close() {
|
||||||
|
datas.selectNumber = 0
|
||||||
|
model.value.close()
|
||||||
|
}
|
||||||
|
const instance = getCurrentInstance();
|
||||||
|
|
||||||
|
function confirm() {
|
||||||
|
// 将数据保存进对应的值
|
||||||
|
let arr = []
|
||||||
|
datas.item.proGroupVo.forEach(ele => {
|
||||||
|
arr.push(...ele.selectData)
|
||||||
|
})
|
||||||
|
if (arr.length == datas.selectNumber) {
|
||||||
|
emits('confirm', arr, datas.item)
|
||||||
|
close()
|
||||||
|
} else {
|
||||||
|
instance.ctx.$refs.popup.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open,
|
||||||
|
close
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.border-top {}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guigeModel {
|
||||||
|
.item {
|
||||||
|
color: #666;
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 4rpx 28rpx;
|
||||||
|
border: 1px solid #E5E5E5;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
transition: all .2s ease-in-out;
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
border-color: $my-main-color;
|
||||||
|
color: $my-main-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
color: #ccc;
|
||||||
|
border-color: #eee;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
color: #EB4F4F;
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-top {
|
||||||
|
border-top: 1px solid #E5E5E5;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
290
pagesCreateOrder/index/components/weigh.vue
Normal file
290
pagesCreateOrder/index/components/weigh.vue
Normal file
@@ -0,0 +1,290 @@
|
|||||||
|
<template>
|
||||||
|
<view class="">
|
||||||
|
<up-overlay :show="overlayshow" @click="overlayshow = false">
|
||||||
|
<view class="boxoverlay">
|
||||||
|
<view class="rect" @tap.stop>
|
||||||
|
<view class="title">
|
||||||
|
<view>
|
||||||
|
标题
|
||||||
|
</view>
|
||||||
|
<view class="" @click="overlayshow = false">
|
||||||
|
<up-icon name="close" color="#93969b" size="20"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="inputtop">
|
||||||
|
<view class="dj">
|
||||||
|
<view class="text">单价</view>
|
||||||
|
<view class="jg">¥{{form.goods.lowPrice}}/{{form.goods.unitName}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="inputdj">
|
||||||
|
<view>重量</view>
|
||||||
|
<view class="inputdjbox">
|
||||||
|
<view class="inputdisplay">{{ currentInput }}</view>
|
||||||
|
<text>{{ form.goods.unitName }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="keyboard">
|
||||||
|
<button v-for="(num, index) in numberButtons" :key="index" @click="handleClick(num)">
|
||||||
|
{{ num }}
|
||||||
|
</button>
|
||||||
|
<button @click="deleteLast">←</button>
|
||||||
|
</view>
|
||||||
|
<view class="classmoney">
|
||||||
|
¥ {{ (form.goods.lowPrice * currentInput).toFixed(2) }}
|
||||||
|
</view>
|
||||||
|
<view class="classconfirm" @click="clickconfirm">
|
||||||
|
确认
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</up-overlay>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow,
|
||||||
|
onReachBottom
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
watch,
|
||||||
|
defineExpose,
|
||||||
|
defineEmits
|
||||||
|
} from 'vue';
|
||||||
|
const emit = defineEmits(['refresh'])
|
||||||
|
const currentInput = ref('');
|
||||||
|
|
||||||
|
const numberButtons = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'];
|
||||||
|
|
||||||
|
const handleClick = (value) => {
|
||||||
|
// 首位不能输入0
|
||||||
|
if (currentInput.value === '') {
|
||||||
|
if (value === '0') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (value === '.' && currentInput.value.indexOf('.') !== -1) {
|
||||||
|
return; // 如果已经存在小数点,不再添加
|
||||||
|
}
|
||||||
|
if (value === '.' && currentInput.value === '') {
|
||||||
|
currentInput.value = '0.';
|
||||||
|
} else {
|
||||||
|
currentInput.value += value;
|
||||||
|
}
|
||||||
|
// 限制小数点后两位
|
||||||
|
const parts = currentInput.value.split('.');
|
||||||
|
if (parts.length > 1 && parts[1].length > 2) {
|
||||||
|
currentInput.value = currentInput.value.slice(0, -1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const deleteLast = () => {
|
||||||
|
currentInput.value = currentInput.value.slice(0, -1);
|
||||||
|
};
|
||||||
|
|
||||||
|
const clickconfirm = () => {
|
||||||
|
// 首位不能输入0
|
||||||
|
if (currentInput.value === '') {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请输入',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
emit('weighgoodsUpdate', form.foodsindex, form.index, true, undefined, currentInput.value)
|
||||||
|
overlayshow.value = false
|
||||||
|
}
|
||||||
|
//显示
|
||||||
|
const overlayshow = ref(false);
|
||||||
|
const form = reactive({})
|
||||||
|
const open = (foodsindex, index, goods) => {
|
||||||
|
currentInput.value = ''
|
||||||
|
Object.assign(form, {
|
||||||
|
foodsindex,
|
||||||
|
index,
|
||||||
|
goods
|
||||||
|
})
|
||||||
|
overlayshow.value = true
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boxoverlay {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.rect {
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
width: 80%;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding-bottom: 20rpx;
|
||||||
|
font-size: 40rpx;
|
||||||
|
border-bottom: 1rpx solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inputtop {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
.dj {
|
||||||
|
width: 32%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
|
.text {
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jg {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
background-color: #e8f4ff;
|
||||||
|
color: #1890ff;
|
||||||
|
height: 60rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #1890ff;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.inputdj {
|
||||||
|
width: 66%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 24rpx;
|
||||||
|
|
||||||
|
.inputdjbox {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
border: 1rpx solid #ccc;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
padding-left: 20rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
line-height: 60rpx;
|
||||||
|
background: #fff;
|
||||||
|
|
||||||
|
.inputdisplay {
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
text {
|
||||||
|
border: 1rpx solid #ccc;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
background: #f5f7fa;
|
||||||
|
color: #a7aaaf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.keyboard {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
button {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 28%;
|
||||||
|
margin: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.keyboard-button {
|
||||||
|
width: 28%;
|
||||||
|
margin: 10rpx;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5rpx;
|
||||||
|
box-shadow: 0 0 5rpx rgba(0, 0, 0, 0.3), 0 0 10rpx rgba(0, 0, 0, 0.2);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
// .keyboard-button:hover {
|
||||||
|
// box-shadow: 0 0 10rpx rgba(255, 0, 0, 0.5), 0 0 20px rgba(255, 0, 0, 0.3);
|
||||||
|
// transform: translateY(-2rpx);
|
||||||
|
// }
|
||||||
|
|
||||||
|
.dot-button {
|
||||||
|
// background-color: #FFC107;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear-button {
|
||||||
|
// background-color: #FF5733;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear-button:hover {
|
||||||
|
box-shadow: 0 0 10px rgba(255, 87, 51, 0.5), 0 0 20px rgba(255, 87, 51, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-button {
|
||||||
|
// background-color: #33FF57;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-button:hover {
|
||||||
|
// box-shadow: 0 0 10px rgba(51, 255, 87, 0.5), 0 0 20px rgba(51, 255, 87, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.classmoney {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: left;
|
||||||
|
color: #ff5152;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.classconfirm {
|
||||||
|
width: 100%;
|
||||||
|
margin: 30rpx auto 0 auto;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
text-align: center;
|
||||||
|
background: #1890ff;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10rpx 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
<view class="page-view u-p-l-24">
|
<view class="page-view u-p-l-24">
|
||||||
<view class="list-tight-top">
|
<view class="list-tight-top">
|
||||||
<template v-if="lingshi.show">
|
<template v-if="lingshi.show">
|
||||||
<view id="lingshi" class="lingshi" @tap="toLinshi">
|
<view id="lingshi" class="lingshi u-m-b-32" @tap="toLinshi">
|
||||||
<uni-icons type="plus-filled" size="24" :color="color.ColorMain"></uni-icons>
|
<uni-icons type="plus-filled" size="24" :color="color.ColorMain"></uni-icons>
|
||||||
<view class="u-m-t-24 color-main">临时菜</view>
|
<view class="u-m-t-24 color-main">临时菜</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -78,7 +78,8 @@
|
|||||||
<view class="thumb-box" v-for="(goodsItem, goodsIndex) in item.foods" :key="goodsIndex">
|
<view class="thumb-box" v-for="(goodsItem, goodsIndex) in item.foods" :key="goodsIndex">
|
||||||
<list-goods-item @chooseGuige="chooseGuige($event,index)"
|
<list-goods-item @chooseGuige="chooseGuige($event,index)"
|
||||||
@add="goodsUpdate($event,index,true)" @reduce="goodsUpdate($event,index,false)"
|
@add="goodsUpdate($event,index,true)" @reduce="goodsUpdate($event,index,false)"
|
||||||
:index="goodsIndex" :data="goodsItem"></list-goods-item>
|
@tapweigh="tapweigh($event,index)" :index="goodsIndex"
|
||||||
|
:data="goodsItem"></list-goods-item>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<!-- <template v-if="item.name==='附加费'">
|
<!-- <template v-if="item.name==='附加费'">
|
||||||
@@ -104,8 +105,8 @@
|
|||||||
@chooseGuige="chooseGuige(goodsItem.goodsIndex,goodsItem.index)"
|
@chooseGuige="chooseGuige(goodsItem.goodsIndex,goodsItem.index)"
|
||||||
@add="searchGoodsUpdate(goodsItem,goodsIndex,true)"
|
@add="searchGoodsUpdate(goodsItem,goodsIndex,true)"
|
||||||
@reduce="searchGoodsUpdate(goodsItem,goodsIndex,false)"
|
@reduce="searchGoodsUpdate(goodsItem,goodsIndex,false)"
|
||||||
|
@tapweigh="tapweigh(goodsItem.goodsIndex,goodsItem.index)"
|
||||||
:index="goodsItem.goodsIndex" :data="goodsItem"></list-goods-item>
|
:index="goodsItem.goodsIndex" :data="goodsItem"></list-goods-item>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<my-img-empty v-if="!searchResult.length" tips="未搜索到相关商品"></my-img-empty>
|
<my-img-empty v-if="!searchResult.length" tips="未搜索到相关商品"></my-img-empty>
|
||||||
@@ -120,15 +121,16 @@
|
|||||||
<my-car :isCreateOrderToDetail="isCreateOrderToDetail" @updateNumber="carsNumberChange" :user="data.vipUser"
|
<my-car :isCreateOrderToDetail="isCreateOrderToDetail" @updateNumber="carsNumberChange" :user="data.vipUser"
|
||||||
:masterId="data.masterId" :table="data.table" :data="cars" @clear="onClearCart"></my-car>
|
:masterId="data.masterId" :table="data.table" :data="cars" @clear="onClearCart"></my-car>
|
||||||
</view>
|
</view>
|
||||||
|
<!-- 套餐选择规格 -->
|
||||||
|
<taocanModel ref="taocanModelRef" @confirm="taocanConfirm" :goodsData="selGoods"></taocanModel>
|
||||||
<!-- 选择规格 -->
|
<!-- 选择规格 -->
|
||||||
<guige-model @update-sku="updateSkuSel" @confirm="guigeConfirm" ref="chooseGuigeModel" :goodsData="selGoods"
|
<guige-model @update-sku="updateSkuSel" @confirm="guigeConfirm" ref="chooseGuigeModel" :goodsData="selGoods"
|
||||||
:title="guigeModelData.title" :sku-map="guigeModelData.chooseGoods.skuMap"
|
:title="guigeModelData.title" :sku-map="guigeModelData.chooseGoods.skuMap"
|
||||||
:skus="guigeModelData.chooseGoods.skus"></guige-model>
|
:skus="guigeModelData.chooseGoods.skus"></guige-model>
|
||||||
<!-- 添加附加费 -->
|
<!-- 添加附加费 -->
|
||||||
<my-surcharge @confirm="surchargeConfirm" ref="surcharge" title="添加附加费"></my-surcharge>
|
<my-surcharge @confirm="surchargeConfirm" ref="surcharge" title="添加附加费"></my-surcharge>
|
||||||
|
<!-- 称重 -->
|
||||||
|
<weigh-item ref="refweighitem" @weighgoodsUpdate='goodsUpdate'></weigh-item>
|
||||||
</view>
|
</view>
|
||||||
<up-modal title="提示" content="该台桌购物车里有商品,是否清除该台桌里的商品?" :show="modal.clear" showCancelButton closeOnClickOverlay
|
<up-modal title="提示" content="该台桌购物车里有商品,是否清除该台桌里的商品?" :show="modal.clear" showCancelButton closeOnClickOverlay
|
||||||
@confirm="confirmModelConfirm" @cancel="confirmModelConfirm('cancel')" @close="setModalShow('clear',false)"
|
@confirm="confirmModelConfirm" @cancel="confirmModelConfirm('cancel')" @close="setModalShow('clear',false)"
|
||||||
@@ -150,6 +152,8 @@
|
|||||||
import util from './util.js';
|
import util from './util.js';
|
||||||
import color from '@/commons/color.js';
|
import color from '@/commons/color.js';
|
||||||
import guigeModel from './components/guige'
|
import guigeModel from './components/guige'
|
||||||
|
import taocanModel from './components/taocanModel.vue'
|
||||||
|
import weighItem from './components/weigh.vue'
|
||||||
import listGoodsItem from './components/list-goods-item.vue'
|
import listGoodsItem from './components/list-goods-item.vue'
|
||||||
import mySurcharge from './components/surcharge'
|
import mySurcharge from './components/surcharge'
|
||||||
import {
|
import {
|
||||||
@@ -224,7 +228,7 @@
|
|||||||
xiadanClick()
|
xiadanClick()
|
||||||
//临时菜
|
//临时菜
|
||||||
const lingshi = reactive({
|
const lingshi = reactive({
|
||||||
show: false
|
show: true
|
||||||
})
|
})
|
||||||
//附加费
|
//附加费
|
||||||
const extraFee = reactive({
|
const extraFee = reactive({
|
||||||
@@ -277,6 +281,26 @@
|
|||||||
}
|
}
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
// 添加套餐
|
||||||
|
async function taocanConfirm(d, item) {
|
||||||
|
const cartGoods = await addCart({
|
||||||
|
num: 1,
|
||||||
|
groupProductIdList: d,
|
||||||
|
productId: item.id,
|
||||||
|
skuId: item.specList[0].id
|
||||||
|
})
|
||||||
|
infoBox.showToast('添加成功')
|
||||||
|
// guigeConfirm(item, 1)
|
||||||
|
// updateCartGoods({
|
||||||
|
// productId: item.id,
|
||||||
|
// skuId: item.specList[0].id,
|
||||||
|
// cartId: cartGoods.id
|
||||||
|
// })
|
||||||
|
cars.push({
|
||||||
|
...cartGoods,
|
||||||
|
specSnap: item.specSnap
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function scanCode() {
|
function scanCode() {
|
||||||
// 只允许通过相机扫码
|
// 只允许通过相机扫码
|
||||||
@@ -671,7 +695,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function toLinshi() {
|
function toLinshi() {
|
||||||
go.to('PAGES_ADD_TEMP_CUISINE')
|
go.to('PAGES_CHOOSE_ADD_TEMP_CUISINE', {
|
||||||
|
masterId: data.masterId,
|
||||||
|
tableId: data.table.tableId,
|
||||||
|
vipUserId: option.vipUserId ? option.vipUserId : '',
|
||||||
|
useType: uni.getStorageSync('useType')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const chooseGuigeModel = ref(null)
|
const chooseGuigeModel = ref(null)
|
||||||
@@ -828,7 +857,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let selGoods = ref({})
|
let selGoods = ref({});
|
||||||
|
|
||||||
|
// 称重
|
||||||
|
const refweighitem = ref(null)
|
||||||
|
const tapweigh = (foodsindex, index) => {
|
||||||
|
const goods = data.tabbar[index].foods[foodsindex]
|
||||||
|
refweighitem.value.open(foodsindex, index, goods)
|
||||||
|
}
|
||||||
|
|
||||||
function chooseGuige(foodsindex, index) {
|
function chooseGuige(foodsindex, index) {
|
||||||
if (!canAddGoods()) {
|
if (!canAddGoods()) {
|
||||||
@@ -838,13 +874,19 @@
|
|||||||
}
|
}
|
||||||
const $goods = data.tabbar[index].foods[foodsindex]
|
const $goods = data.tabbar[index].foods[foodsindex]
|
||||||
selGoods.value = $goods
|
selGoods.value = $goods
|
||||||
guigeModelData.title = $goods.name
|
if ($goods.groupType == 1) {
|
||||||
const specList = $goods.specList;
|
instance.ctx.$refs.taocanModelRef.open()
|
||||||
const tagSnap = JSON.parse($goods.skuResult.tagSnap)
|
} else {
|
||||||
const skuMap = returnSelGoodsSkuMap(specList)
|
guigeModelData.title = $goods.name
|
||||||
const skuList = returnSelGoodsSkuList(tagSnap)
|
const specList = $goods.specList;
|
||||||
setSkugoodsDefaultInit($goods, skuList, skuMap, specList)
|
const skuMap = returnSelGoodsSkuMap(specList)
|
||||||
chooseGuigeModel.value.open()
|
// 多规格,和套餐规格区分.groupType=1 套餐多规格
|
||||||
|
let tagSnap = JSON.parse($goods.skuResult.tagSnap)
|
||||||
|
const skuList = returnSelGoodsSkuList(tagSnap)
|
||||||
|
setSkugoodsDefaultInit($goods, skuList, skuMap, specList)
|
||||||
|
chooseGuigeModel.value.open()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function guigeConfirm(sku, num) {
|
async function guigeConfirm(sku, num) {
|
||||||
@@ -897,10 +939,15 @@
|
|||||||
categoryId,
|
categoryId,
|
||||||
skuId
|
skuId
|
||||||
} = goods
|
} = goods
|
||||||
|
|
||||||
const cartId = goods.id
|
const cartId = goods.id
|
||||||
const tabbarIndex = data.tabbar.findIndex(v => v.id == categoryId)
|
const tabbarIndex = data.tabbar.findIndex(v => v.id == categoryId)
|
||||||
const $goods = data.tabbar[tabbarIndex].foods.find(v => v.id == productId)
|
//临时菜没有对应商品数据
|
||||||
const $sku = $goods.specList.find(v => v.id == skuId)
|
const $goods = !productId ? undefined : data.tabbar[tabbarIndex].foods.find(v => v.id == productId)
|
||||||
|
//临时菜没有skuList
|
||||||
|
const $sku = !productId ? {
|
||||||
|
suit: 1
|
||||||
|
} : $goods.specList.find(v => v.id == skuId)
|
||||||
|
|
||||||
if (num === 0 || num < $sku.suit) {
|
if (num === 0 || num < $sku.suit) {
|
||||||
//移除
|
//移除
|
||||||
@@ -950,7 +997,8 @@
|
|||||||
searchResult.value[index].chooseNumber = chooseNumber
|
searchResult.value[index].chooseNumber = chooseNumber
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function goodsUpdate(foodsindex, index, isAdd, searchGoodsIndex) {
|
|
||||||
|
async function goodsUpdate(foodsindex, index, isAdd, searchGoodsIndex, showCurrentInput) { // showCurrentInput 称重才会传的参数
|
||||||
// if (!canAddGoods()) {
|
// if (!canAddGoods()) {
|
||||||
// return infoBox.showToast('请先选择桌台', 0.5).then(res => {
|
// return infoBox.showToast('请先选择桌台', 0.5).then(res => {
|
||||||
// chooseTable()
|
// chooseTable()
|
||||||
@@ -964,13 +1012,13 @@
|
|||||||
});
|
});
|
||||||
const productId = $goods.id
|
const productId = $goods.id
|
||||||
const skuId = $goods.specList[0].id
|
const skuId = $goods.specList[0].id
|
||||||
const suit = $goods.specList[0].suit || 1
|
let suit = $goods.specList[0].suit || 1
|
||||||
if (goodsInCarIndex !== -1) {
|
if (goodsInCarIndex !== -1) {
|
||||||
//更新
|
//更新
|
||||||
const carGoods = cars[goodsInCarIndex]
|
const carGoods = cars[goodsInCarIndex]
|
||||||
const cartId = carGoods.id
|
const cartId = carGoods.id
|
||||||
const step = isAdd ? 1 : -1
|
const step = isAdd ? 1 : -1
|
||||||
const num = carGoods.number * 1 + step
|
let num = carGoods.number * 1 + step
|
||||||
if (num === 0 || num < suit) {
|
if (num === 0 || num < suit) {
|
||||||
//移除
|
//移除
|
||||||
cars.splice(goodsInCarIndex, 1)
|
cars.splice(goodsInCarIndex, 1)
|
||||||
@@ -980,6 +1028,10 @@
|
|||||||
cartId
|
cartId
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 不影响之前的代码 称重num单独处理
|
||||||
|
if ($goods.type == 'weigh' && showCurrentInput) {
|
||||||
|
num = carGoods.number * 1 + Number(showCurrentInput)
|
||||||
|
}
|
||||||
const {
|
const {
|
||||||
number
|
number
|
||||||
} = await updateCartGoods({
|
} = await updateCartGoods({
|
||||||
@@ -992,16 +1044,23 @@
|
|||||||
$goods.chooseNumber = number
|
$goods.chooseNumber = number
|
||||||
setSearchGoods(searchGoodsIndex, number)
|
setSearchGoods(searchGoodsIndex, number)
|
||||||
} else {
|
} else {
|
||||||
//增加
|
// 不影响之前的代码 称重suit单独处理
|
||||||
const num = suit
|
if ($goods.type == 'weigh' && showCurrentInput) {
|
||||||
const cartGoods = await addCart({
|
suit = showCurrentInput
|
||||||
num,
|
}
|
||||||
productId,
|
// 套餐和单规格
|
||||||
skuId
|
if ($goods.groupType != 1) {
|
||||||
})
|
//增加
|
||||||
infoBox.showToast('添加成功')
|
const num = suit
|
||||||
$goods.chooseNumber = num
|
const cartGoods = await addCart({
|
||||||
cars.push(cartGoods)
|
num,
|
||||||
|
productId,
|
||||||
|
skuId
|
||||||
|
})
|
||||||
|
infoBox.showToast('添加成功')
|
||||||
|
$goods.chooseNumber = Number(num)
|
||||||
|
cars.push(cartGoods)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1129,7 +1188,7 @@
|
|||||||
}
|
}
|
||||||
if (e.detail.scrollTop == 0) {
|
if (e.detail.scrollTop == 0) {
|
||||||
isTabClickOver = true
|
isTabClickOver = true
|
||||||
return swichMenu(0)
|
// return swichMenu(0)
|
||||||
}
|
}
|
||||||
setTimeout(() => { // 节流
|
setTimeout(() => { // 节流
|
||||||
data.timer = null;
|
data.timer = null;
|
||||||
@@ -1184,6 +1243,7 @@
|
|||||||
function watchUpdate() {
|
function watchUpdate() {
|
||||||
uni.$off('update:createOrderIndex')
|
uni.$off('update:createOrderIndex')
|
||||||
uni.$off('get:table')
|
uni.$off('get:table')
|
||||||
|
uni.$off('add:cashCai')
|
||||||
uni.$on('update:createOrderIndex', () => {
|
uni.$on('update:createOrderIndex', () => {
|
||||||
// data.table = {
|
// data.table = {
|
||||||
// tableId: ""
|
// tableId: ""
|
||||||
@@ -1192,6 +1252,15 @@
|
|||||||
console.log('update:createOrderIndex');
|
console.log('update:createOrderIndex');
|
||||||
init()
|
init()
|
||||||
})
|
})
|
||||||
|
uni.$on('add:cashCai', async () => {
|
||||||
|
console.log('add:cashCai');
|
||||||
|
const cartRes = await getCart()
|
||||||
|
cars.length = 0
|
||||||
|
const cartArr = getNowCart(cartRes.records)
|
||||||
|
for (let i in cartArr) {
|
||||||
|
cars.push(cartArr[i])
|
||||||
|
}
|
||||||
|
})
|
||||||
uni.$on('get:table', () => {
|
uni.$on('get:table', () => {
|
||||||
console.log('get:table');
|
console.log('get:table');
|
||||||
if (data.table.tableId) {
|
if (data.table.tableId) {
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ export function getNowCart(records) {
|
|||||||
const arr = []
|
const arr = []
|
||||||
for (let i in Cart) {
|
for (let i in Cart) {
|
||||||
const item=Cart[i]
|
const item=Cart[i]
|
||||||
const key = item.productId + '_' + item.skuId
|
const productId=item.productId
|
||||||
|
const skuId=item.skuId
|
||||||
|
const isLinShiCai=!productId&&!skuId?true:false
|
||||||
|
const key =isLinShiCai?item.name: (item.productId + '_' + item.skuId)
|
||||||
if (goodsMap.hasOwnProperty(key)) {
|
if (goodsMap.hasOwnProperty(key)) {
|
||||||
const index = goodsMap[key]
|
const index = goodsMap[key]
|
||||||
arr[index].number = arr[index].number * 1 + item.number
|
arr[index].number = arr[index].number * 1 + item.number
|
||||||
|
|||||||
@@ -4,6 +4,13 @@
|
|||||||
<text class="">桌号:</text>
|
<text class="">桌号:</text>
|
||||||
<text class="">{{orderInfo.tableName||""}}</text>
|
<text class="">{{orderInfo.tableName||""}}</text>
|
||||||
</view>
|
</view>
|
||||||
|
<view class=" font-bold u-p-b-32 border-bottom u-m-b-24" v-if="orderInfo.tableName&&orderInfo.status=='unpaid'">
|
||||||
|
<view class="block" @tap="rotatingTables"
|
||||||
|
style="display: flex;align-items: center;justify-content: space-between;">
|
||||||
|
<view>转桌/并桌</view>
|
||||||
|
<uni-icons type="right" color="#999" size="16"></uni-icons>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
<view class=" color-999 border-bottom u-p-b-24">
|
<view class=" color-999 border-bottom u-p-b-24">
|
||||||
<text>共</text>
|
<text>共</text>
|
||||||
<text class="color-333 "> {{goodsNumber}}</text>
|
<text class="color-333 "> {{goodsNumber}}</text>
|
||||||
@@ -180,7 +187,7 @@
|
|||||||
<text class="font-bold u-font-32">{{orderInfo.amount}}</text>
|
<text class="font-bold u-font-32">{{orderInfo.amount}}</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="u-flex u-row-between u-m-t-20" v-if="orderInfo.status=='closed'">
|
<!-- <view class="u-flex u-row-between u-m-t-20" v-if="orderInfo.status=='closed'">
|
||||||
<view></view>
|
<view></view>
|
||||||
@@ -347,57 +354,58 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const canTuiKuanPrice = computed(() => {
|
const canTuiKuanPrice = computed(() => {
|
||||||
const goodsTotal= props.data.reduce((prve, cur) => {
|
const goodsTotal = props.data.reduce((prve, cur) => {
|
||||||
// const curTotal=cur.info.filter(v=>!v.userCouponId).reduce((a,b)=>{
|
// const curTotal=cur.info.filter(v=>!v.userCouponId).reduce((a,b)=>{
|
||||||
// return a+b.priceAmount*1
|
// return a+b.priceAmount*1
|
||||||
// },0)
|
// },0)
|
||||||
const curTotal = cur.info.filter(v => !isTui(v)&& !v.userCouponId)
|
const curTotal = cur.info.filter(v => !isTui(v) && !v.userCouponId)
|
||||||
.reduce((a, b) => {
|
.reduce((a, b) => {
|
||||||
return a + b.priceAmount * 1
|
return a + b.priceAmount * 1
|
||||||
}, 0)
|
}, 0)
|
||||||
return prve + curTotal
|
return prve + curTotal
|
||||||
}, 0)
|
}, 0)
|
||||||
console.log(goodsTotal);
|
console.log(goodsTotal);
|
||||||
console.log(seatFeePrice.value);
|
console.log(seatFeePrice.value);
|
||||||
return (goodsTotal+seatFeePrice.value*1).toFixed(2)
|
return (goodsTotal + seatFeePrice.value * 1).toFixed(2)
|
||||||
})
|
})
|
||||||
const TuiKuanPrice = computed(() => {
|
const TuiKuanPrice = computed(() => {
|
||||||
return props.data.reduce((prve, cur) => {
|
|
||||||
// const curTotal=cur.info.filter(v=>!v.userCouponId).reduce((a,b)=>{
|
|
||||||
// return a+b.priceAmount*1
|
|
||||||
// },0)
|
|
||||||
const curTotal = cur.info.filter(v => isTui(v)&&!v.userCouponId)
|
|
||||||
.reduce((a, b) => {
|
|
||||||
return a + b.priceAmount * 1
|
|
||||||
}, 0)
|
|
||||||
return prve + curTotal
|
|
||||||
}, 0)
|
|
||||||
})
|
|
||||||
const noTuiKuanPrice=computed(()=>{
|
|
||||||
return props.data.reduce((prve, cur) => {
|
return props.data.reduce((prve, cur) => {
|
||||||
const curTotal = cur.info.filter(v => !isTui(v)&&!v.userCouponId)
|
// const curTotal=cur.info.filter(v=>!v.userCouponId).reduce((a,b)=>{
|
||||||
|
// return a+b.priceAmount*1
|
||||||
|
// },0)
|
||||||
|
const curTotal = cur.info.filter(v => isTui(v) && !v.userCouponId)
|
||||||
.reduce((a, b) => {
|
.reduce((a, b) => {
|
||||||
return a + b.priceAmount * 1
|
return a + b.priceAmount * 1
|
||||||
}, 0)
|
}, 0)
|
||||||
return prve + curTotal
|
return prve + curTotal
|
||||||
}, 0)
|
}, 0)
|
||||||
})
|
})
|
||||||
const cantuiSeatFee=computed(()=>{
|
const noTuiKuanPrice = computed(() => {
|
||||||
let seatFee=props.orderInfo.seatInfo?(props.orderInfo.seatInfo.priceAmount):0
|
return props.data.reduce((prve, cur) => {
|
||||||
|
const curTotal = cur.info.filter(v => !isTui(v) && !v.userCouponId)
|
||||||
|
.reduce((a, b) => {
|
||||||
|
return a + b.priceAmount * 1
|
||||||
|
}, 0)
|
||||||
|
return prve + curTotal
|
||||||
|
}, 0)
|
||||||
|
})
|
||||||
|
const cantuiSeatFee = computed(() => {
|
||||||
|
let seatFee = props.orderInfo.seatInfo ? (props.orderInfo.seatInfo.priceAmount) : 0
|
||||||
const bili = Math.floor((seatFee / canTuiKuanPrice.value) * 100) / 100
|
const bili = Math.floor((seatFee / canTuiKuanPrice.value) * 100) / 100
|
||||||
seatFee= Math.floor((props.orderInfo.amount-props.orderInfo.refundAmount) * bili * 100) / 100
|
seatFee = Math.floor((props.orderInfo.amount - props.orderInfo.refundAmount) * bili * 100) / 100
|
||||||
return seatFee
|
return seatFee
|
||||||
})
|
})
|
||||||
|
|
||||||
function returnCanTuiMoney(item) {
|
function returnCanTuiMoney(item) {
|
||||||
return props.orderInfo.status == 'unpaid'? item.priceAmount: item.canReturnAmount
|
return props.orderInfo.status == 'unpaid' ? item.priceAmount : item.priceAmount
|
||||||
if (props.orderInfo.status == 'unpaid') {
|
if (props.orderInfo.status == 'unpaid') {
|
||||||
return returnTotalMoney(item)
|
return returnTotalMoney(item)
|
||||||
} else {
|
} else {
|
||||||
if(props.orderInfo.pointsDiscountAmount>0||props.orderInfo.fullCouponDiscountAmount>0){
|
if (props.orderInfo.pointsDiscountAmount > 0 || props.orderInfo.fullCouponDiscountAmount > 0) {
|
||||||
return item.canReturnAmount
|
return item.canReturnAmount
|
||||||
// const bili=Math.floor((item.priceAmount/canTuiKuanPrice.value )*100)/100
|
// const bili=Math.floor((item.priceAmount/canTuiKuanPrice.value )*100)/100
|
||||||
// return Math.floor((allPrice.value)*bili*100)/100
|
// return Math.floor((allPrice.value)*bili*100)/100
|
||||||
}else{
|
} else {
|
||||||
return item.priceAmount
|
return item.priceAmount
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -419,7 +427,7 @@
|
|||||||
if (res) {
|
if (res) {
|
||||||
emits('tuikuan', {
|
emits('tuikuan', {
|
||||||
...item,
|
...item,
|
||||||
priceAmount: item.canReturnAmount
|
priceAmount: item.priceAmount
|
||||||
}, index)
|
}, index)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -503,8 +511,8 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
const youhuiAllPrice = computed(() => {
|
const youhuiAllPrice = computed(() => {
|
||||||
const n= props.orderInfo.originAmount-props.orderInfo.amount+vipDiscountPrice.value*1
|
const n = props.orderInfo.originAmount - props.orderInfo.amount + vipDiscountPrice.value * 1
|
||||||
return (n<0?0:n).toFixed(2)
|
return (n < 0 ? 0 : n).toFixed(2)
|
||||||
// if(props.orderInfo.status!='unpaid'){
|
// if(props.orderInfo.status!='unpaid'){
|
||||||
// const seatfee=(props.orderInfo.amount==0&&allPrice.value==0)?seatFeePrice.value:0
|
// const seatfee=(props.orderInfo.amount==0&&allPrice.value==0)?seatFeePrice.value:0
|
||||||
// return (goodsOriginAllPrice.value-allPrice.value+seatfee*1).toFixed(2)
|
// return (goodsOriginAllPrice.value-allPrice.value+seatfee*1).toFixed(2)
|
||||||
@@ -528,26 +536,53 @@
|
|||||||
|
|
||||||
})
|
})
|
||||||
const allPrice = computed(() => {
|
const allPrice = computed(() => {
|
||||||
|
|
||||||
|
|
||||||
const goodsPrice = props.data.reduce((prve, cur) => {
|
const goodsPrice = props.data.reduce((prve, cur) => {
|
||||||
const curTotal = cur.info.reduce((a,
|
const curTotal = cur.info.reduce((a,
|
||||||
b) => {
|
b) => {
|
||||||
return a +(props.orderInfo.status == 'unpaid'?b.priceAmount:b.canReturnAmount*1)
|
return a + (b.status == 'unpaid' ? b.priceAmount : b.status == 'return' ? 0 : b
|
||||||
|
.priceAmount * 1)
|
||||||
}, 0)
|
}, 0)
|
||||||
return prve + curTotal
|
return prve + curTotal
|
||||||
}, 0)
|
}, 0)
|
||||||
return goodsPrice.toFixed(2)
|
return goodsPrice.toFixed(2)
|
||||||
|
|
||||||
if (props.orderInfo.status == 'unpaid') {
|
if (props.orderInfo.status == 'unpaid') {
|
||||||
const n = goodsOriginAllPrice.value - youhuiAllPrice.value
|
const n = goodsOriginAllPrice.value - youhuiAllPrice.value
|
||||||
return (n < 0 ? 0 : n).toFixed(2)
|
return (n < 0 ? 0 : n).toFixed(2)
|
||||||
}
|
}
|
||||||
const returnAmount=props.orderInfo.seatInfo&&props.orderInfo.seatInfo.returnAmount?props.orderInfo.seatInfo.returnAmount:0
|
const returnAmount = props.orderInfo.seatInfo && props.orderInfo.seatInfo.returnAmount ? props.orderInfo
|
||||||
const canReturnAmount=props.orderInfo.seatInfo&&props.orderInfo.seatInfo.canReturnAmount?props.orderInfo.seatInfo.canReturnAmount:0
|
.seatInfo.returnAmount : 0
|
||||||
const total=props.orderInfo.amount-(returnAmount?returnAmount:canReturnAmount)
|
const canReturnAmount = props.orderInfo.seatInfo && props.orderInfo.seatInfo.canReturnAmount ? props
|
||||||
return (total<=0?0:total).toFixed(2)
|
.orderInfo.seatInfo.canReturnAmount : 0
|
||||||
|
const total = props.orderInfo.amount - (returnAmount ? returnAmount : canReturnAmount)
|
||||||
|
return (total <= 0 ? 0 : total).toFixed(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function rotatingTables() {
|
||||||
|
let arr = []
|
||||||
|
props.data.forEach(ele => {
|
||||||
|
ele.info.forEach(res => {
|
||||||
|
// 头像 coverImg
|
||||||
|
res.coverImg = res.productImg
|
||||||
|
// 名字 name
|
||||||
|
res.name = res.productName
|
||||||
|
// 金额 salePrice
|
||||||
|
res.salePrice = res.price
|
||||||
|
// 数量 number
|
||||||
|
res.number = res.num
|
||||||
|
res.masterId = props.orderInfo.masterId
|
||||||
|
res.useType = props.orderInfo.useType
|
||||||
|
res.tableId = props.orderInfo.tableId
|
||||||
|
arr.push(res)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pagesCreateOrder/confirm-order/rotatingTables?item=' + JSON.stringify(arr) + '&tableId=' + props
|
||||||
|
.orderInfo.tableId
|
||||||
|
})
|
||||||
|
}
|
||||||
const goodsNumber = computed(() => {
|
const goodsNumber = computed(() => {
|
||||||
let result = 0
|
let result = 0
|
||||||
result = props.data.reduce((a, b) => {
|
result = props.data.reduce((a, b) => {
|
||||||
|
|||||||
@@ -6,22 +6,23 @@
|
|||||||
{{data.productName}}
|
{{data.productName}}
|
||||||
</view>
|
</view>
|
||||||
<view class="u-flex u-m-t-32" :class="{'gray':data.productId=='-999'}">
|
<view class="u-flex u-m-t-32" :class="{'gray':data.productId=='-999'}">
|
||||||
<up-number-box :min="1" :max="data.num" :buttonSize="44" v-model="number" integer :disabled="data.productId=='-999'">
|
<up-number-box :min="0" :max="data.num" :buttonSize="44" v-model="number" integer
|
||||||
|
:disabled="data.productId=='-999'">
|
||||||
<template #minus>
|
<template #minus>
|
||||||
<view class="minus number-box-btn">
|
<view class="minus number-box-btn">
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<template #input>
|
<template #input>
|
||||||
<view class="u-flex-1 u-row-center u-text-center input">
|
<view class="u-flex-1 u-row-center u-text-center input">
|
||||||
<up-input
|
<up-input :disabled="data.productId=='-999'" @change="parseIntNumber($event,false)"
|
||||||
:disabled="data.productId=='-999'"
|
@blur="parseIntNumber($event,true)" v-model="number" border="none"
|
||||||
@change="parseIntNumber($event,false)" @blur="parseIntNumber($event,true)"
|
type="number"></up-input>
|
||||||
v-model="number" border="none" type="number"></up-input>
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<template #plus>
|
<template #plus>
|
||||||
<view class="plus number-box-btn">
|
<view class="plus number-box-btn">
|
||||||
<up-icon v-if="data.productId=='-999'" name="plus" color="#ccc" size="16" bold></up-icon>
|
<up-icon v-if="data.productId=='-999'" name="plus" color="#ccc" size="16"
|
||||||
|
bold></up-icon>
|
||||||
<up-icon v-else name="plus" color="#999" size="16" bold></up-icon>
|
<up-icon v-else name="plus" color="#999" size="16" bold></up-icon>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -50,8 +51,7 @@
|
|||||||
<view class="u-p-t-18 u-p-l-30 u-p-r-30 u-p-b-10">
|
<view class="u-p-t-18 u-p-l-30 u-p-r-30 u-p-b-10">
|
||||||
<my-button box-shadow shape="circle" @tap="confirm">确认退菜</my-button>
|
<my-button box-shadow shape="circle" @tap="confirm">确认退菜</my-button>
|
||||||
<view class="u-m-t-10">
|
<view class="u-m-t-10">
|
||||||
<my-button @tap="onModelClose" shape="circle" bgColor="#fff" type="cancel"
|
<my-button @tap="onModelClose" shape="circle" bgColor="#fff" type="cancel" box-shadow>取消</my-button>
|
||||||
box-shadow>取消</my-button>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: () => {
|
default: () => {
|
||||||
return {
|
return {
|
||||||
productId:'-999'
|
productId: '-999'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
const emits = defineEmits(['update:show', 'confirm'])
|
const emits = defineEmits(['update:show', 'confirm'])
|
||||||
let model = ref(null)
|
let model = ref(null)
|
||||||
let modelShow = ref(props.show)
|
let modelShow = ref(props.show)
|
||||||
let number = ref(1)
|
let number = ref(0)
|
||||||
const tags = ref([{
|
const tags = ref([{
|
||||||
label: "点错",
|
label: "点错",
|
||||||
checked: false
|
checked: false
|
||||||
@@ -103,16 +103,18 @@
|
|||||||
let timer = null
|
let timer = null
|
||||||
|
|
||||||
function parseIntNumber(val, isNow) {
|
function parseIntNumber(val, isNow) {
|
||||||
console.log(val);
|
let newval = val * 1
|
||||||
let newval = parseInt(val)
|
|
||||||
if (newval > props.data.num) {
|
if (newval > props.data.num) {
|
||||||
newval = props.data.num
|
newval = props.data.num
|
||||||
}
|
}
|
||||||
if (newval < 1) {
|
// 判断是否是称重商品。如果是可以输入小数
|
||||||
newval = 1
|
if (props.data.isWeight != 1) {
|
||||||
|
if (newval < 1) {
|
||||||
|
newval = 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (isNow) {
|
if (isNow) {
|
||||||
number.value = parseInt(newval)
|
number.value = newval * 1
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
timer = setTimeout(() => {
|
timer = setTimeout(() => {
|
||||||
@@ -138,10 +140,10 @@
|
|||||||
function toggleModelShow(show) {
|
function toggleModelShow(show) {
|
||||||
modelShow.value = show ? true : false
|
modelShow.value = show ? true : false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function onModelClose() {
|
function onModelClose() {
|
||||||
number.value=1
|
number.value = 1
|
||||||
modelShow.value = false
|
modelShow.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,17 +153,17 @@
|
|||||||
|
|
||||||
function open() {
|
function open() {
|
||||||
model.value.open()
|
model.value.open()
|
||||||
if(props.data.productId=='-999'){
|
if (props.data.productId == '-999') {
|
||||||
number.value=props.data.num
|
number.value = props.data.num
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
model.value.close()
|
model.value.close()
|
||||||
tags.value.map(v=>{
|
tags.value.map(v => {
|
||||||
v.checked=false
|
v.checked = false
|
||||||
})
|
})
|
||||||
form.note=''
|
form.note = ''
|
||||||
}
|
}
|
||||||
|
|
||||||
function confirm() {
|
function confirm() {
|
||||||
@@ -206,12 +208,14 @@
|
|||||||
::v-deep .uni-input-input {
|
::v-deep .uni-input-input {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
.gray{
|
|
||||||
.minus::after{
|
.gray {
|
||||||
|
.minus::after {
|
||||||
border-color: #ccc;
|
border-color: #ccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.minus {
|
.minus {
|
||||||
&::after {
|
&::after {
|
||||||
content: '';
|
content: '';
|
||||||
|
|||||||
@@ -94,7 +94,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function onSeatFeeTuiKuan(seatFee) {
|
async function onSeatFeeTuiKuan(seatFee) {
|
||||||
console.log(seatFee);
|
console.log(seatFee,'调试1');
|
||||||
const canTuikuan=await hasTuiKuan()
|
const canTuikuan=await hasTuiKuan()
|
||||||
if(!canTuikuan){
|
if(!canTuikuan){
|
||||||
return
|
return
|
||||||
@@ -124,19 +124,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onTuiCai(goods, index) {
|
function onTuiCai(goods, index) {
|
||||||
console.log(goods);
|
|
||||||
tuicai.show = true
|
tuicai.show = true
|
||||||
tuicai.selGoods = goods
|
tuicai.selGoods = goods
|
||||||
}
|
}
|
||||||
async function tuicaiConfirm(e) {
|
async function tuicaiConfirm(e) {
|
||||||
console.log(tuicai.selGoods);
|
|
||||||
const res = await Api.$returnCart({
|
const res = await Api.$returnCart({
|
||||||
...e,
|
...e,
|
||||||
cartId: tuicai.selGoods.hasOwnProperty('cartId') ? tuicai.selGoods.cartId : tuicai.selGoods.id,
|
cartId: tuicai.selGoods.hasOwnProperty('cartId') ? tuicai.selGoods.cartId : tuicai.selGoods.id,
|
||||||
tableId: orderDetail.info.tableId,
|
tableId: orderDetail.info.tableId,
|
||||||
})
|
})
|
||||||
tuicai.show = false
|
tuicai.show = false
|
||||||
|
if(res){
|
||||||
|
go.back()
|
||||||
|
}else{
|
||||||
|
|
||||||
init()
|
init()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -171,7 +174,7 @@
|
|||||||
if(!canTuikuan){
|
if(!canTuikuan){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
console.log(goods);
|
console.log(goods,'debug');
|
||||||
const {
|
const {
|
||||||
id,
|
id,
|
||||||
productId,
|
productId,
|
||||||
@@ -219,7 +222,8 @@
|
|||||||
tableId: options.tableId || orderDetail.info.tableId,
|
tableId: options.tableId || orderDetail.info.tableId,
|
||||||
name: options.name || orderDetail.info.tableName,
|
name: options.name || orderDetail.info.tableName,
|
||||||
masterId:orderDetail.info.masterId,
|
masterId:orderDetail.info.masterId,
|
||||||
type: 'add'
|
type: 'add',
|
||||||
|
vipUserId:orderDetail.memberId?orderDetail.memberId:''
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,6 +310,7 @@
|
|||||||
}))
|
}))
|
||||||
console.log(orderDetail.goodsList);
|
console.log(orderDetail.goodsList);
|
||||||
}
|
}
|
||||||
|
console.log(res,'debug121')
|
||||||
orderDetail.info = res
|
orderDetail.info = res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
255
pagewriteoff/components/commodity.vue
Normal file
255
pagewriteoff/components/commodity.vue
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
<template>
|
||||||
|
<view class="">
|
||||||
|
<up-overlay :show="overlayshow" @click="overlayshow = false">
|
||||||
|
<view class="boxoverlay">
|
||||||
|
<view class="rect" @tap.stop>
|
||||||
|
<!-- 抖音 -->
|
||||||
|
<view class="bottomconstant">
|
||||||
|
<view class="itemlist">
|
||||||
|
<!-- <view class="ordernumber">
|
||||||
|
订单号:111
|
||||||
|
</view> -->
|
||||||
|
<view class="title">
|
||||||
|
请选择商品
|
||||||
|
</view>
|
||||||
|
<view class="itemlists" v-for="(item,index) in form.goods" :key="index">
|
||||||
|
<view class="top">
|
||||||
|
<view class="tag">
|
||||||
|
{{item.title}}
|
||||||
|
</view>
|
||||||
|
<view class="date">
|
||||||
|
¥{{item.amount}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- <view class="bottom">
|
||||||
|
核销
|
||||||
|
</view> -->
|
||||||
|
<view v-if="item.type" @click="item.type =!item.type">
|
||||||
|
<up-icon name="checkmark-circle" color="#2979ff" size="22"></up-icon>
|
||||||
|
</view>
|
||||||
|
<view class="icon" v-else @click="item.type =!item.type"></view>
|
||||||
|
</view>
|
||||||
|
<view class="bouttonbox">
|
||||||
|
<view class="keep" @click="confirms">
|
||||||
|
确定核销
|
||||||
|
</view>
|
||||||
|
<view class="cancel" @click="overlayshow = false">
|
||||||
|
取消
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</up-overlay>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow,
|
||||||
|
onReachBottom
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
watch,
|
||||||
|
defineExpose
|
||||||
|
} from 'vue';
|
||||||
|
const form = reactive({
|
||||||
|
id: "",
|
||||||
|
number: '',
|
||||||
|
sum_pay_amount: '',
|
||||||
|
goods: [],
|
||||||
|
verify_token: '',
|
||||||
|
});
|
||||||
|
import {
|
||||||
|
certificateprepares
|
||||||
|
} from '@/http/php/api.ts';
|
||||||
|
|
||||||
|
//显示
|
||||||
|
const overlayshow = ref(false);
|
||||||
|
const open = (val) => {
|
||||||
|
Object.assign(form, val)
|
||||||
|
form.goods.map((item) => {
|
||||||
|
item.type = true
|
||||||
|
})
|
||||||
|
overlayshow.value = true
|
||||||
|
}
|
||||||
|
let confirms = async () => {
|
||||||
|
// 判断是否选择商品
|
||||||
|
if (form.goods.filter(i => i.type).length == 0) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请选择商品',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
let data = null
|
||||||
|
if (uni.getStorageSync('clint_type') == 1) {
|
||||||
|
data = {
|
||||||
|
couponCode: form.couponCode,
|
||||||
|
num: form.goods.length
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let encrypted_codes = form.goods.filter(i => i.type).map((obj, index) => {
|
||||||
|
return obj.encrypted_code;
|
||||||
|
})
|
||||||
|
data = {
|
||||||
|
verify_token: form.verify_token,
|
||||||
|
encrypted_codes: encrypted_codes.toString(),
|
||||||
|
id: form.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await certificateprepares(data)
|
||||||
|
uni.showToast({
|
||||||
|
title: '验证成功',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
overlayshow.value = false
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boxoverlay {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.rect {
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
width: 80%;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
|
||||||
|
.bottomconstant {
|
||||||
|
padding: 0 28rpx;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
|
||||||
|
.itemlist:nth-child(1) {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemlist {
|
||||||
|
// margin-top: 16rpx;
|
||||||
|
width: 100%;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
|
||||||
|
.ordernumber {
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
border-bottom: 1rpx solid #E5E5E5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemlists {
|
||||||
|
padding-top: 16rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
|
.date {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
width: 350rpx;
|
||||||
|
overflow: hidden; //超出的文本隐藏
|
||||||
|
text-overflow: ellipsis; //溢出用省略号显示
|
||||||
|
white-space: nowrap; //溢出不换行
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
border: 1px solid #909399;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
background: #EAF4FD;
|
||||||
|
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||||||
|
padding: 6rpx 12rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 20rpx;
|
||||||
|
color: #318AFE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bouttonbox {
|
||||||
|
margin-top: 80rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.keep {
|
||||||
|
width: 490rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
background: #318AFE;
|
||||||
|
border-radius: 40rpx 40rpx 40rpx 40rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #FFFFFF;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 80rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel {
|
||||||
|
text-align: center;
|
||||||
|
width: 490rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 40rpx 40rpx 40rpx 40rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 80rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
155
pagewriteoff/components/dialogs.vue
Normal file
155
pagewriteoff/components/dialogs.vue
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
<template>
|
||||||
|
<view class="">
|
||||||
|
<up-overlay :show="overlayshow" @click="overlayshow = false">
|
||||||
|
<view class="boxoverlay">
|
||||||
|
<view class="rect" @tap.stop>
|
||||||
|
<!-- 抖音 -->
|
||||||
|
<view class="bottomconstant">
|
||||||
|
<view class="itemlist">
|
||||||
|
<!-- <view class="ordernumber">
|
||||||
|
订单号:111
|
||||||
|
</view> -->
|
||||||
|
<view class="title">
|
||||||
|
绑定门店
|
||||||
|
</view>
|
||||||
|
<view class="itemlists" v-for="(item,index) in 4" :key="index">
|
||||||
|
<view class="top">
|
||||||
|
<view class="tag">
|
||||||
|
名称qqqqqqqqq
|
||||||
|
</view>
|
||||||
|
<view class="date">
|
||||||
|
地址:qqqqqqq
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="bottom">
|
||||||
|
操作
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</up-overlay>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow,
|
||||||
|
onReachBottom
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
watch,
|
||||||
|
defineExpose
|
||||||
|
} from 'vue';
|
||||||
|
//显示
|
||||||
|
const overlayshow = ref(false);
|
||||||
|
const open = () => {
|
||||||
|
overlayshow.value = true
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boxoverlay {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.rect {
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
width: 80%;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
|
||||||
|
.bottomconstant {
|
||||||
|
padding: 0 28rpx;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
|
||||||
|
.itemlist:nth-child(1) {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemlist {
|
||||||
|
// margin-top: 16rpx;
|
||||||
|
width: 100%;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
|
||||||
|
.ordernumber {
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
border-bottom: 1rpx solid #E5E5E5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemlists {
|
||||||
|
padding-top: 16rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: flex-start;
|
||||||
|
|
||||||
|
.date {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
width: 350rpx;
|
||||||
|
overflow: hidden; //超出的文本隐藏
|
||||||
|
text-overflow: ellipsis; //溢出用省略号显示
|
||||||
|
white-space: nowrap; //溢出不换行
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
background: #EAF4FD;
|
||||||
|
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||||||
|
padding: 6rpx 12rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 20rpx;
|
||||||
|
color: #318AFE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
267
pagewriteoff/index/index.vue
Normal file
267
pagewriteoff/index/index.vue
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
<template>
|
||||||
|
<view class="constant">
|
||||||
|
<view class="constantitem" @click="object_id =null,overlayshow = true">
|
||||||
|
<view>扫码核销</view>
|
||||||
|
<view>
|
||||||
|
<up-icon name="arrow-right" color="#909399" size="20"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="constantitem" @click="clickpath('PAGES_WEITEOFF_RECORD',1)">
|
||||||
|
<view>美团记录</view>
|
||||||
|
<view>
|
||||||
|
<up-icon name="arrow-right" color="#909399" size="20"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="constantitem" @click="clickpath('PAGES_WEITEOFF_RECORD',2)">
|
||||||
|
<view>抖音记录</view>
|
||||||
|
<view>
|
||||||
|
<up-icon name="arrow-right" color="#909399" size="20"></up-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 核销准备 -->
|
||||||
|
<up-overlay :show="overlayshow">
|
||||||
|
<view class="boxoverlay">
|
||||||
|
<view class="rect" @tap.stop>
|
||||||
|
<view class="top">
|
||||||
|
团购卷核销
|
||||||
|
</view>
|
||||||
|
<view class="subsection">
|
||||||
|
<up-subsection :list="subsectionlist" :current="subsectioncurrent" @change="sectionChange">
|
||||||
|
</up-subsection>
|
||||||
|
</view>
|
||||||
|
<view class="search">
|
||||||
|
<up-search :show-action="false" searchIcon="scan" :clearabled="true" @clickIcon='clickIcon'
|
||||||
|
placeholder="请扫码或者输入卷码" v-model="object_id"></up-search>
|
||||||
|
</view>
|
||||||
|
<view class="search">
|
||||||
|
<up-alert fontSize='10' :show-icon="true" title="请使用相机识别扫码" type="warning"
|
||||||
|
:closable="true"></up-alert>
|
||||||
|
</view>
|
||||||
|
<view class="bouttonbox">
|
||||||
|
<view class="keep" @click="confirms">
|
||||||
|
确认
|
||||||
|
</view>
|
||||||
|
<view class="cancel" @click="overlayshow = false">
|
||||||
|
取消
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</up-overlay>
|
||||||
|
<!-- 绑定门店 -->
|
||||||
|
<dialogs ref="dialogsref"></dialogs>
|
||||||
|
<!-- 选择商品 -->
|
||||||
|
<commodity ref="refcommodity"></commodity>
|
||||||
|
<!-- 二维码 -->
|
||||||
|
<up-overlay :show="qrcodes.show" @click="qrcodes.show = false">
|
||||||
|
<view class="boxoverlay">
|
||||||
|
<view class="rect" @tap.stop
|
||||||
|
style="display: flex; flex-direction: column; align-items: center; justify-content: center;">
|
||||||
|
<!-- <view>{{subsectioncurrent==0?'请用美团':'抖音'}}</view> -->
|
||||||
|
<view style="padding-bottom:40rpx;font-weight: 600;">请进行手机扫码</view>
|
||||||
|
<!-- <up-qrcode :size="200" :val="qrcodes.val" :icon='qrcodes.icon'></up-qrcode> -->
|
||||||
|
<up-qrcode :size="200" :val="qrcodes.val"></up-qrcode>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</up-overlay>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow,
|
||||||
|
onUnload,
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
watch
|
||||||
|
} from 'vue';
|
||||||
|
import {
|
||||||
|
userlogout,
|
||||||
|
douyincheckIn,
|
||||||
|
fulfilmentcertificateprepare, //准备核销
|
||||||
|
searchstorestatus, //状态查询
|
||||||
|
getuisdk //获取uisdk 绑定 链接
|
||||||
|
} from '@/http/php/api.ts';
|
||||||
|
import go from '@/commons/utils/go.js'
|
||||||
|
import dialogs from '../components/dialogs.vue'
|
||||||
|
import commodity from '../components/commodity.vue'
|
||||||
|
onLoad(async () => {
|
||||||
|
// 登录 会员入签
|
||||||
|
let res = await douyincheckIn({
|
||||||
|
token: uni.getStorageSync("iToken"),
|
||||||
|
loginName: uni.getStorageSync("shopId"),
|
||||||
|
clientType: 'ADMIN'
|
||||||
|
})
|
||||||
|
uni.setStorageSync('phpuserinfo', res.userInfo)
|
||||||
|
uni.setStorageSync('clint_type', 1)
|
||||||
|
})
|
||||||
|
//显示
|
||||||
|
const overlayshow = ref(false);
|
||||||
|
|
||||||
|
// 切换
|
||||||
|
const subsectioncurrent = ref(0);
|
||||||
|
const subsectionlist = ref(['美团', '抖音']);
|
||||||
|
const sectionChange = (index) => {
|
||||||
|
subsectioncurrent.value = index;
|
||||||
|
uni.setStorageSync('clint_type', index + 1)
|
||||||
|
|
||||||
|
}
|
||||||
|
// 二维码或者条形码
|
||||||
|
const object_id = ref(null)
|
||||||
|
// 扫码
|
||||||
|
const clickIcon = () => {
|
||||||
|
uni.scanCode({ // 允许从相机和相册扫码
|
||||||
|
success: (res) => {
|
||||||
|
console.log('条码类型:' + res.scanType);
|
||||||
|
console.log('条码内容:' + res.result);
|
||||||
|
object_id.value = res.result
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 二维码
|
||||||
|
const qrcodes = reactive({
|
||||||
|
val: 'www.baidu.com',
|
||||||
|
icon: '@/static/logo.png',
|
||||||
|
show: false
|
||||||
|
})
|
||||||
|
|
||||||
|
// 首先获取状态
|
||||||
|
let confirms = async () => {
|
||||||
|
if (object_id.value == null) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请扫码或者输入卷码',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let res = await searchstorestatus()
|
||||||
|
// status == 0 则需要显示二维码 ==1 去核销
|
||||||
|
if (res.status == 0) {
|
||||||
|
qrcodes.val = await getuisdk()
|
||||||
|
overlayshow.value = false
|
||||||
|
qrcodes.show = true
|
||||||
|
} else {
|
||||||
|
clickkeep()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 点击确定
|
||||||
|
const clickkeep = async () => {
|
||||||
|
let data = null
|
||||||
|
if (uni.getStorageSync('clint_type') == 1) {
|
||||||
|
data = {
|
||||||
|
code: object_id.value
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data = {
|
||||||
|
object_id: object_id.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let res = await fulfilmentcertificateprepare(data)
|
||||||
|
overlayshow.value = false
|
||||||
|
refcommodity.value.open(res)
|
||||||
|
}
|
||||||
|
// 这是选择门店
|
||||||
|
// const dialogsref = ref(null)
|
||||||
|
// const dialogconfirm = () => {
|
||||||
|
// dialogsref.value.open()
|
||||||
|
// }
|
||||||
|
// 选择商品
|
||||||
|
const refcommodity = ref(null)
|
||||||
|
// 跳转
|
||||||
|
const clickpath = (URL, title) => {
|
||||||
|
uni.setStorageSync('clint_type', title)
|
||||||
|
go.to(URL)
|
||||||
|
}
|
||||||
|
|
||||||
|
onShow(async () => {})
|
||||||
|
|
||||||
|
// 销毁组件
|
||||||
|
onUnload(async () => {
|
||||||
|
// 退出
|
||||||
|
await userlogout()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.constant {
|
||||||
|
.constantitem {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
background: #fff;
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boxoverlay {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.rect {
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
width: 80%;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 18rpx;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subsection {
|
||||||
|
margin-top: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search {
|
||||||
|
margin-top: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bouttonbox {
|
||||||
|
margin-top: 80rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.keep {
|
||||||
|
width: 490rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
background: #318AFE;
|
||||||
|
border-radius: 40rpx 40rpx 40rpx 40rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #FFFFFF;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 80rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel {
|
||||||
|
text-align: center;
|
||||||
|
width: 490rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 40rpx 40rpx 40rpx 40rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
line-height: 80rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
360
pagewriteoff/index/record.vue
Normal file
360
pagewriteoff/index/record.vue
Normal file
@@ -0,0 +1,360 @@
|
|||||||
|
<template>
|
||||||
|
<view class="constant">
|
||||||
|
<!-- <view class="topbox">
|
||||||
|
<view class="left">
|
||||||
|
<view class="">
|
||||||
|
筛选
|
||||||
|
</view>
|
||||||
|
<view class=""></view>
|
||||||
|
</view>
|
||||||
|
<view class="right">
|
||||||
|
<up-input class="input" placeholder="搜索订单号" v-model="value"
|
||||||
|
@change="change"></up-input>
|
||||||
|
</view>
|
||||||
|
</view> -->
|
||||||
|
<!-- 抖音 -->
|
||||||
|
<view v-if="form.type == 2">
|
||||||
|
<view class="bottomconstant" v-for="(item,index) in form.list" :key="index">
|
||||||
|
<view class="itemlist">
|
||||||
|
<view class="ordernumber">
|
||||||
|
{{item.d_order_id}}
|
||||||
|
</view>
|
||||||
|
<view class="title">
|
||||||
|
{{item.title}}
|
||||||
|
</view>
|
||||||
|
<view class="itemlists" v-for="(item1,index1) in item.douyinCodeGoods" :key="item1.id">
|
||||||
|
<view class="top">
|
||||||
|
<view class="date">
|
||||||
|
{{item1.create_time}}
|
||||||
|
</view>
|
||||||
|
<view class="tag" v-if="item1.status == 1" @click="clickcancel(item1)"
|
||||||
|
style="background: #318AFE;color: #fff; border-radius: 10rpx;">
|
||||||
|
撤销核销
|
||||||
|
</view>
|
||||||
|
<view class="tag" v-if="item1.status == 0">
|
||||||
|
等待验券
|
||||||
|
</view>
|
||||||
|
<view class="tag" v-if="item1.status == 2">
|
||||||
|
失败
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="bottom">
|
||||||
|
<view class="bottomtitle">
|
||||||
|
{{item1.title}}
|
||||||
|
</view>
|
||||||
|
<view class="price">
|
||||||
|
<view class="prices">
|
||||||
|
{{item1.pay_amount}}
|
||||||
|
</view>
|
||||||
|
<!-- <view class="pricees">
|
||||||
|
{{item1.market_price}}
|
||||||
|
</view> -->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 美团 -->
|
||||||
|
<view class="bottomconstant" v-else>
|
||||||
|
<view class="itemlist" v-for="(item,index) in form.list" :key="index">
|
||||||
|
<view class="itemlists" style="padding: 0;">
|
||||||
|
<view class="top">
|
||||||
|
<view class="date">
|
||||||
|
{{item.couponUseTime}}
|
||||||
|
</view>
|
||||||
|
<view class="tag" :style="!item.type?'background: #318AFE;color: #fff; border-radius: 10rpx;':''"
|
||||||
|
@click="clickcancel(item)">
|
||||||
|
{{item.type ? item.couponStatusDesc:'撤销核销'}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="bottom">
|
||||||
|
<view class="bottomtitle">
|
||||||
|
{{item.dealTitle}}
|
||||||
|
</view>
|
||||||
|
<view class="price">
|
||||||
|
<view class="prices">
|
||||||
|
¥{{item.couponBuyPrice}}
|
||||||
|
</view>
|
||||||
|
<!-- <view class="pricees">
|
||||||
|
156
|
||||||
|
</view> -->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<up-loadmore :status="form.status" />
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
onLoad,
|
||||||
|
onShow,
|
||||||
|
onReachBottom
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
watch
|
||||||
|
} from 'vue';
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import {
|
||||||
|
orderlist,
|
||||||
|
fulfilmentcertificatecanceles
|
||||||
|
} from '@/http/php/api.ts';
|
||||||
|
// 下拉加载
|
||||||
|
onReachBottom(() => {
|
||||||
|
if (form.status != 'nomore') {
|
||||||
|
form.page = ++form.page;
|
||||||
|
getlist()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
onLoad(async (e) => {
|
||||||
|
form.type = uni.getStorageSync('clint_type')
|
||||||
|
initial()
|
||||||
|
})
|
||||||
|
const dropdownvalue = ref(1)
|
||||||
|
const optionsdropdown = [{
|
||||||
|
label: '等待验证',
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '成功',
|
||||||
|
value: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '失败',
|
||||||
|
value: 3,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
// 初始化
|
||||||
|
const initial = () => {
|
||||||
|
form.page = 1
|
||||||
|
form.status = 'loadmore'
|
||||||
|
form.d_order_id = ''
|
||||||
|
form.querystatus = ''
|
||||||
|
getlist()
|
||||||
|
}
|
||||||
|
//
|
||||||
|
const form = reactive({
|
||||||
|
type: '',
|
||||||
|
d_order_id: '',
|
||||||
|
querystatus: '',
|
||||||
|
page: 1,
|
||||||
|
status: '',
|
||||||
|
list: [],
|
||||||
|
count: '',
|
||||||
|
date: ''
|
||||||
|
});
|
||||||
|
const getlist = async () => {
|
||||||
|
let data = null
|
||||||
|
if (uni.getStorageSync('clint_type') == 1) {
|
||||||
|
data = {
|
||||||
|
page: form.page,
|
||||||
|
date: form.date
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data = {
|
||||||
|
page: form.page,
|
||||||
|
status: form.querystatus,
|
||||||
|
d_order_id: form.d_order_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let res = await orderlist(data)
|
||||||
|
|
||||||
|
form.count = res.count
|
||||||
|
form.status = 'loading';
|
||||||
|
if (form.page == 1 && res.list.length == 0) {
|
||||||
|
form.status = 'nomore'
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
setTimeout(() => {
|
||||||
|
if (form.page == 1) {
|
||||||
|
form.list = res.list
|
||||||
|
} else {
|
||||||
|
form.list = [...form.list, ...res.list];
|
||||||
|
}
|
||||||
|
if (form.list.length >= form.count && res.list.length < 10) {
|
||||||
|
form.status = 'nomore';
|
||||||
|
} else {
|
||||||
|
form.status = 'loadmore';
|
||||||
|
}
|
||||||
|
// 这是美团处理的数据
|
||||||
|
if (uni.getStorageSync('clint_type') == 1) {
|
||||||
|
form.list = form.list.map(item => {
|
||||||
|
// 计算60天后
|
||||||
|
item.couponUseTimes = dayjs(item.couponUseTime).add(60, 'day').format(
|
||||||
|
'YYYY-MM-DD HH:mm:ss')
|
||||||
|
item.type = dayjs().isAfter(dayjs(item.couponUseTime).add(60, 'day'),
|
||||||
|
'year')
|
||||||
|
return item
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 500)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const clickcancel = async (item) => {
|
||||||
|
uni.showModal({
|
||||||
|
title: '确认撤销吗?',
|
||||||
|
success: async (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
let data = null
|
||||||
|
if (uni.getStorageSync('clint_type') == 1) {
|
||||||
|
data = {
|
||||||
|
couponCode: item.couponCode
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data = {
|
||||||
|
verify_id: item.verify_id,
|
||||||
|
certificate_id: item.certificate_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await fulfilmentcertificatecanceles(data)
|
||||||
|
uni.showToast({
|
||||||
|
title: '撤销核销成功',
|
||||||
|
icon: 'success'
|
||||||
|
})
|
||||||
|
setTimeout(() => {
|
||||||
|
initial()
|
||||||
|
}, 1000)
|
||||||
|
} else if (res.cancel) {
|
||||||
|
console.log('用户点击取消');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
page {
|
||||||
|
background: #F9F9F9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.constant {
|
||||||
|
padding-bottom: 32rpx;
|
||||||
|
|
||||||
|
.topbox {
|
||||||
|
width: 100%;
|
||||||
|
padding: 32rpx 28rpx;
|
||||||
|
background: #fff;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
.left {}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
width: 80%;
|
||||||
|
|
||||||
|
.input {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottomconstant {
|
||||||
|
padding: 0 28rpx;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
|
||||||
|
.itemlist {
|
||||||
|
margin-top: 32rpx;
|
||||||
|
padding: 32rpx 24rpx;
|
||||||
|
width: 100%;
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
||||||
|
|
||||||
|
.ordernumber {
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
padding-bottom: 24rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
border-bottom: 1rpx solid #E5E5E5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemlists {
|
||||||
|
padding-top: 24rpx;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
.date {
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
background: #EAF4FD;
|
||||||
|
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||||||
|
padding: 6rpx 12rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 20rpx;
|
||||||
|
color: #318AFE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.bottomtitle {
|
||||||
|
width: 350rpx;
|
||||||
|
overflow: hidden; //超出的文本隐藏
|
||||||
|
text-overflow: ellipsis; //溢出用省略号显示
|
||||||
|
white-space: nowrap; //溢出不换行
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
margin-top: 16rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.prices {
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pricees {
|
||||||
|
margin-left: 12rpx;
|
||||||
|
font-family: Source Han Sans CN, Source Han Sans CN;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999999;
|
||||||
|
text-decoration-line: line-through;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
1
static/indexImg/icon_credit.svg
Normal file
1
static/indexImg/icon_credit.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32"><defs><style>.a{fill:#80bcff;}.b{clip-path:url(#a);}.c{fill:#4c99fe;}</style><clipPath id="a"><rect class="a" width="32" height="32" transform="translate(65 1066)"/></clipPath></defs><g class="b" transform="translate(-65 -1066)"><g transform="translate(-53.919 1004.659)"><path class="c" d="M320.239,62H303.619a1.917,1.917,0,0,0-1.919,1.919v1.916h14.7a1.917,1.917,0,0,1,1.919,1.919V87.568h1.916a1.917,1.917,0,0,0,1.919-1.919V63.919A1.917,1.917,0,0,0,320.239,62Z" transform="translate(-173.381)"/><path class="c" d="M141.966,212H124.119a1.917,1.917,0,0,0-1.919,1.919v21.733a1.914,1.914,0,0,0,1.919,1.916h17.846a1.916,1.916,0,0,0,1.919-1.916V213.919A1.919,1.919,0,0,0,141.966,212Zm-3.944,14.945a1.065,1.065,0,0,1,1.06,1.077A1.08,1.08,0,0,1,138,229.1h-3.77v2.189a1.166,1.166,0,1,1-2.332,0V229.1h-3.839a1.077,1.077,0,1,1,0-2.155H131.9V225.7h-3.839a1.077,1.077,0,0,1,0-2.155h2.908l-3.3-4.739a1.078,1.078,0,1,1,1.769-1.231l3.607,5.168,3.6-5.165a1.078,1.078,0,1,1,1.769,1.231l-3.3,4.739h2.908a1.077,1.077,0,1,1,0,2.155h-3.767v1.248h3.767Z" transform="translate(0 -144.886)"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
20
static/indexImg/pagewriteoff.svg
Normal file
20
static/indexImg/pagewriteoff.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="96px" height="96px" viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve"> <image id="image0" width="96" height="96" x="0" y="0"
|
||||||
|
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo
|
||||||
|
AAB1MAAA6mAAADqYAAAXcJy6UTwAAABRUExURQAAAFCf/0uZ/0yZ/kyY/kuY/UyZ/0yZ/kuY/k2Z
|
||||||
|
/0yZ/UqX/0uZ/0uY/kuZ/kyZ/kyY/UuZ/UiX/0uZ/kuZ/UyX/0yY/kqa/0uZ/kyZ/v///7LMcjEA
|
||||||
|
AAAZdFJOUwAQX6+/n3/v31CAYHCwz8CQoCDwj0DQMODQpj2tAAAAAWJLR0QadWfkMgAAAAd0SU1F
|
||||||
|
B+gMBQIoEmmNJfAAAAHtSURBVGje7ZnZloMgDEChm63RKlK3///RsXVciTUBOmdmDnkF7wVTSU4R
|
||||||
|
IgQr5OF4ap3idD684V8iN3of19vW8o8+8M844wJv/A1D7I/ftoC8IC/vf4hIGoLEJx/bQupXkBqC
|
||||||
|
u19BZgj88ts2CH5KkEoh8w8K1OtR1OBF0PNF8SmBevesB8HI/9AORr5Ai6CzYOKf0XFXwR7fVbDL
|
||||||
|
pwp0ZsknChKBllICnyaIXyNgw6cJvgsrWPBpgmEM+HyaoEAMRD5NcBSGgcon/opgbSDzqd/BykDn
|
||||||
|
k7/khYHBpx8VMwOHzziLkD6WwOccdmDDZ52mYMHnHdfA5zPrAbD53IIDXD67ogGTzy+Zl26OpPMt
|
||||||
|
avL18bjS+X+muw6CIAiC3y5QJTmUjQAp9tsBfEHF4QtRsQUxT5CzBSlPkLIFUcHh1xFb0N5rBt+s
|
||||||
|
dfuCrkieiIGVUorAKYIgCIIgCILgnwneXk9VjaNAq0LU2RZEJ11H1DgIdNz/75holJH1fUGZWQqa
|
||||||
|
qbcrEIaehmub1jFb3grDehPp4rayyPWeYLlGVa7H5SLZjXEpLeNFMsybwNnzz8wicZsIucQmzPNt
|
||||||
|
NoZjfzxk1ozhQqspNybM8p2Yg9U6sxjgucbNBczyXSFzZFytM4tO2usou3w3SooQIfzFFziLPvqM
|
||||||
|
MV6wAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI0LTEyLTA1VDAyOjQwOjE4KzAwOjAwFHedYwAAACV0
|
||||||
|
RVh0ZGF0ZTptb2RpZnkAMjAyNC0xMi0wNVQwMjo0MDoxOCswMDowMGUqJd8AAAAodEVYdGRhdGU6
|
||||||
|
dGltZXN0YW1wADIwMjQtMTItMDVUMDI6NDA6MTgrMDA6MDAyPwQAAAAAAElFTkSuQmCC" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
Reference in New Issue
Block a user