供应商列表

This commit is contained in:
duan 2024-10-10 15:22:36 +08:00
parent 37ceb6ef53
commit 16508515c4
12 changed files with 1540 additions and 11 deletions

View File

@ -10,6 +10,62 @@ export function summaryTrade(data) {
}
})
}
// 供应商列表
export function tbShopPurveyorTransact(params) {
return request({
url: '/api/tbShopPurveyorTransact',
method: 'get',
params
})
}
// 添加供应商
export function tbShopPurveyorpost(data) {
return request({
url: `/api/tbShopPurveyor`,
method: "post",
data
});
}
// 编辑供应商
export function tbShopPurveyorput(data) {
return request({
url: `/api/tbShopPurveyor`,
method: "put",
data
});
}
// 结款记录列表
export function tbShopPurveyorTransactinfo(data) {
return request({
url: '/api/tbShopPurveyorTransact/info',
method: "post",
data
})
}
// 付款
export function tbShopPurveyorpayTransact(data) {
return request({
url: '/api/tbShopPurveyorTransact/payTransact',
method: "post",
data
})
}
// 账单付款记录
export function tbShopPurveyorTransacttransactPayInfos(params) {
return request({
url: '/api/tbShopPurveyorTransact/transactPayInfos',
method: 'get',
params
})
}
// 删除供应商列表
export function tbShopPurveyordelete(data) {
return request({
url: `/api/tbShopPurveyor`,
method: "delete",
data
});
}
// 耗材报损
export function tbConsInfoFlowfrmLoss(data) {
return request({

View File

@ -0,0 +1,139 @@
<template>
<view class="warehouseEntry">
<ul>
<li>
<view>
供应商
</view>
<view>
<input type="text" placeholder="请输入供应商名称" v-model="datas.form.purveyorName" name="" id="">
</view>
</li>
<li>
<view>
联系电话
</view>
<view>
<input type="text" placeholder="请输入联系电话" v-model="datas.form.purveyorTelephone" name="" id="">
</view>
</li>
<li>
<view>
地址
</view>
<view>
<input type="text" placeholder="请输入地址" v-model="datas.form.address" name="" id="">
</view>
</li>
<li>
<view>
备注
</view>
<view>
<input type="text" placeholder="请输入备注" v-model="datas.form.remark" name="" id="">
</view>
</li>
</ul>
</view>
<view class="bottombutton">
<up-button type="primary" style="background-color: #318AFE;color: #fff;" @tap="sumbit" :plain="true"
text="保存"></up-button>
</view>
</template>
<script setup>
import {
ref,
computed,
reactive,
onMounted
} from 'vue';
import color from '@/commons/color.js';
import go from '@/commons/utils/go.js';
import {
tbShopPurveyorpost
} from '@/http/yskApi/requestAll.js';
let datas = reactive({
form: {
shopId: uni.getStorageSync("shopId"),
},
})
function sumbit() {
tbShopPurveyorpost(datas.form).then(res => {
go.to('PAGES_SUPPLIER')
})
}
</script>
<style scoped lang="less">
page {
background-color: #f9f9f9;
}
.df() {
display: flex;
align-items: center;
}
ul,
li {
list-style: none;
padding: 0;
}
.status {
margin: 0 32rpx;
position: absolute;
// top: 100%;
left: 0;
right: 0;
z-index: 10;
background-color: #fff;
}
.warehouseEntry {
height: 540rpx;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
margin: 28rpx;
padding: 1rpx 24rpx;
box-sizing: border-box;
>ul {
>li {
height: 84rpx;
background: #fcfcfc;
border: 2rpx solid #F9F9F9;
margin-top: 32rpx;
.df;
>view:first-child {
width: 190rpx;
height: 84rpx;
line-height: 84rpx;
// text-align: left;
padding-left: 24rpx;
background: #F9F9F9;
border-radius: 8rpx 0rpx 0rpx 8rpx;
border: 2rpx solid #F9F9F9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #333333;
}
}
}
}
.bottombutton {
margin-top: 84rpx;
>button {
width: 530rpx;
height: 80rpx;
border-radius: 56rpx 56rpx 56rpx 56rpx;
}
}
</style>

View File

@ -0,0 +1,81 @@
<template>
<ul>
<li v-for="item in datas.list" :key="item.id">
<view class="">
<span>{{item.payType}}</span>
<span>{{item.paidAmount}}</span>
</view>
<view class="">
<span>{{item.remark}}</span>
<span>{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
</view>
</li>
</ul>
</template>
<script setup>
import {
onMounted,
reactive
} from 'vue';
import dayjs from 'dayjs';
import {
tbShopPurveyorTransacttransactPayInfos
} from '@/http/yskApi/requestAll.js';
const props = defineProps({
id: {
type: Number
}
})
let datas = reactive({
list: []
})
onMounted(() => {
getlist()
})
let getlist = () => {
tbShopPurveyorTransacttransactPayInfos({
type: "",
id: props.id
}).then(res => {
datas.list = res
})
}
</script>
<style scoped lang="less">
page {
background-color: #f9f9f9;
padding: 0 28rpx;
}
ul,
li {
list-style: none;
padding: 0;
}
ul {
margin-top: 32rpx;
background-color: #fff;
}
li {
height: 138rpx;
background-color: #fff;
padding: 24rpx 32rpx;
box-sizing: border-box;
>view {
display: flex;
justify-content: space-between;
align-items: center;
}
>view:last-child {
margin: 12rpx 0;
padding-bottom: 12rpx;
border-bottom: 2rpx solid #E5E5E5;
}
}
</style>

View 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>

View File

@ -0,0 +1,149 @@
<template>
<view class="warehouseEntry">
<ul>
<li>
<view>
供应商
</view>
<view>
<input type="text" placeholder="请输入供应商名称" v-model="datas.form.purveyorName" name="" id="">
</view>
</li>
<li>
<view>
联系电话
</view>
<view>
<input type="text" placeholder="请输入联系电话" v-model="datas.form.purveyorTelephone" name="" id="">
</view>
</li>
<li>
<view>
地址
</view>
<view>
<input type="text" placeholder="请输入地址" v-model="datas.form.address" name="" id="">
</view>
</li>
<li>
<view>
备注
</view>
<view>
<input type="text" placeholder="请输入备注" v-model="datas.form.remark" name="" id="">
</view>
</li>
</ul>
</view>
<view class="bottombutton">
<up-button type="primary" style="background-color: #318AFE;color: #fff;" @tap="sumbit" :plain="true"
text="保存"></up-button>
</view>
</template>
<script setup>
import {
ref,
computed,
reactive,
onMounted
} from 'vue';
import color from '@/commons/color.js';
import go from '@/commons/utils/go.js';
import {
tbShopPurveyorput
} from '@/http/yskApi/requestAll.js';
let datas = reactive({
form: {},
})
const props = defineProps({
item: {
type: String
}
})
onMounted(() => {
datas.form = JSON.parse(props.item)
})
function sumbit() {
tbShopPurveyorput({
shopId: uni.getStorageSync("shopId"),
...datas.form
}).then(res => {
go.to('PAGES_SUPPLIER')
})
}
</script>
<style scoped lang="less">
page {
background-color: #f9f9f9;
}
.df() {
display: flex;
align-items: center;
}
ul,
li {
list-style: none;
padding: 0;
}
.status {
margin: 0 32rpx;
position: absolute;
// top: 100%;
left: 0;
right: 0;
z-index: 10;
background-color: #fff;
}
.warehouseEntry {
height: 540rpx;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
margin: 28rpx;
padding: 1rpx 24rpx;
box-sizing: border-box;
>ul {
>li {
height: 84rpx;
background: #fcfcfc;
border: 2rpx solid #F9F9F9;
margin-top: 32rpx;
.df;
>view:first-child {
width: 190rpx;
height: 84rpx;
line-height: 84rpx;
// text-align: left;
padding-left: 24rpx;
background: #F9F9F9;
border-radius: 8rpx 0rpx 0rpx 8rpx;
border: 2rpx solid #F9F9F9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #333333;
}
}
}
}
.bottombutton {
margin-top: 84rpx;
>button {
width: 530rpx;
height: 80rpx;
border-radius: 56rpx 56rpx 56rpx 56rpx;
}
}
</style>

View File

@ -4,7 +4,7 @@
{{datas.title}}
</view>
<view>
<input v-model="datas.conName" @input="inputEvent" type="text" placeholder="搜索货品ID/货品编码" />
<input v-model="datas.conName" @input="inputEvent" type="text" placeholder="请输入耗材名称" />
</view>
<view @tap="toUrl('PAGES_ADD_TYPE') ">
新增类别
@ -59,7 +59,7 @@
<view @tap="toUrl('PAGES_ADD_CONSUMABLES')">
新增耗材
</view>
<view @tap="toUrl">
<view @tap="toUrl('PAGES_SUPPLIER')">
供应商管理
</view>
</view>
@ -365,6 +365,7 @@
>view:first-child {
border-radius: 56rpx 0rpx 0rpx 56rpx;
color: #318AFE;
background-color: #fff;
}
>view:last-child {

View File

@ -0,0 +1,423 @@
<template>
<view class="time-wrapper">
<view v-for="(v, i) in timeList" :key="i" class="timelistbox">
<view class="time-item" @tap="changeTime(v.value)" :class="{ 'time-selected':v.value==selected }">
{{v.label}}
</view>
<view class="xian" v-if="v.value==selected "> </view>
</view>
</view>
<ul class="paymentSettlement">
<li :style="{color:datas.activeType==0?'#318AFE':''}" @tap="switchType(0)">全部</li>
<li :style="{color:datas.activeType==1?'#318AFE':''}" @tap="switchType(1)">进货</li>
<li :style="{color:datas.activeType==2?'#318AFE':''}" @tap="switchType(2)">退货</li>
<li :style="{color:datas.activeType==3?'#318AFE':''}" @tap="switchType(3)">未支付</li>
<li :style="{color:datas.activeType==4?'#318AFE':''}" @tap="switchType(4)">已付款</li>
</ul>
<ul class="supplier">
<li v-for="item in datas.list" :key="item.id">
<view style="position: relative;">
<view>
<view style="font-weight: 500;font-size: 28rpx;color: #333333;">
{{item.totalAmount}}
</view>
<view style="font-weight: 400;font-size: 24rpx;color: #666666;">
应付金额()
</view>
</view>
<view>
<view style="font-weight: 500;font-size: 28rpx;color: #333333;">
{{item.paidAmount}}
</view>
<view style="font-weight: 400;font-size: 24rpx;color: #666666;">
已付金额()
</view>
</view>
<view>
<view style="font-weight: 500;font-size: 28rpx;color: #F02C45;">
{{item.waitAmount}}
</view>
<view style="font-weight: 400;font-size: 24rpx;color: #666666;">
待支付金额()
</view>
</view>
<view v-if="item.status==0"
style="position: absolute;left: 0;top: 0;width: 88rpx;line-height: 36rpx;background: #FF895C;border-radius: 8rpx 0rpx 8rpx 0rpx;font-weight: 400;font-size: 20rpx; color: #FFFFFF; ">
待付款
</view>
</view>
<view class="df">
<span>创建日期</span>
<span>{{dayjs(item.createdAt).format('YYYY-MM-DD HH:mm:ss')}}</span>
</view>
<view class="df">
<span>类型</span>
<span>{{typeFilter(item.type)}}</span>
</view>
<view class="df">
<span>付款时间</span>
<span>{{dayjs(item.updatedAt).format('YYYY-MM-DD HH:mm:ss')}}</span>
</view>
<view>
<up-button type="primary" style="background-color: #318AFE;color: #fff;" @tap="datas.PopUp=true;datas.form.id=item.id"
:plain="true" text="付款"></up-button>
<up-button type="primary" style="width: 200rpx;" @tap="toUrl(item.id)" :plain="true" text="账单付款记录">
</up-button>
</view>
</li>
</ul>
<!-- 取号遮罩层 -->
<up-popup :show="datas.PopUp" :round="18" mode="center" @close="close">
<view class="zhezhaopops">
<view class="">
<span></span>
<span>付款</span>
<up-icon @tap="datas.PopUp=false" name="close-circle-fill"></up-icon>
</view>
<view class="">
付款金额<input type="text" placeholder="请输入付款金额" v-model="datas.form.paidAmount" />
</view>
<view class="">
付款方式<input type="text" placeholder="请输入付款方式" v-model="datas.form.payType" />
</view>
<view class="">
备注<input type="text" v-model="datas.form.remark" />
</view>
<up-button text="确认" @tap="confirmtow()" type="primary" class="buttomStyle"
shape="circle"></up-button>
</view>
</up-popup>
<datePickerview @confirm="datePickerConfirm" ref="datePicker"></datePickerview>
</template>
<script setup>
import {
onMounted,
getCurrentInstance,
ref,
reactive
} from 'vue';
import dayjs from 'dayjs';
import {
tbShopPurveyorTransactinfo,
tbShopPurveyorpayTransact
} from '@/http/yskApi/requestAll.js';
import go from '@/commons/utils/go.js'
import datePickerview from './components/my-date-pickerview.vue'
const timeList = [{
label: '今天',
value: 'today'
},
{
label: '昨天',
value: 'yesterday'
},
{
label: '本周',
value: 'circumference'
}, {
label: '本月',
value: 'moon'
},
{
label: '自定义',
value: 'custom'
}
]
let selected = ref('today')
let datas = reactive({
activeType: 0,
list: [],
startTime: "",
endTime: "",
type: "",
status: "",
PopUp: false,
form: {}
})
const currentInstance = getCurrentInstance()
const props = defineProps({
id: {
type: Number
}
})
onMounted(() => {
getlist()
})
let confirmtow = (id) => {
tbShopPurveyorpayTransact({
id,
...datas.form
}).then(() => {
datas.PopUp = false
getlist()
})
}
let close = () => {
datas.form = {}
}
let typeFilter = (t) => {
const m = {
purveyor: '进货单',
reject: '退货单',
cons_in: '耗材入库',
cons_out: '耗材出库'
}
return m[t]
}
function toUrl(id) {
go.to('PAGES_BILL_PAYMENT', {
id
})
}
let switchType = (a) => {
datas.activeType = a
if (a == 0) {
datas.type = ''
datas.status = ''
} else if (a == 1) {
datas.type = 'purveyor'
datas.status = ''
} else if (a == 2) {
datas.type = 'reject'
datas.status = ''
} else if (a == 3) {
datas.type = ''
datas.status = '0'
} else if (a == 4) {
datas.type = ''
datas.status = '1'
}
getlist()
}
function datePickerConfirm(e) {
getlist(e.start, e.end)
}
function getlist(start, end) {
if (selected.value == 'today') {
datas.startTime = dayjs().format('YYYY-MM-DD') + ' 00:00:00'
datas.endTime = dayjs().format('YYYY-MM-DD') + ' 23:59:59'
} else if (selected.value == 'yesterday') {
datas.startTime = formatTime() + ' 00:00:00'
datas.endTime = formatTime() + ' 23:59:59'
} else if (selected.value == 'circumference') {
datas.startTime = dayjs().add(-7, 'day').format('YYYY-MM-DD 00:00:00')
datas.endTime = dayjs().format('YYYY-MM-DD 23:59:59')
} else if (selected.value == 'moon') {
datas.startTime = dayjs().add(-30, 'day').format('YYYY-MM-DD 00:00:00')
datas.endTime = dayjs().format('YYYY-MM-DD 23:59:59')
} else if (selected.value == 'custom') {
datas.startTime = start
datas.endTime = end
}
tbShopPurveyorTransactinfo({
// shopId: uni.getStorageSync('shopId'),
size: 20,
createAt: [datas.startTime, datas.endTime],
page: 0,
sort: "id",
type: datas.type,
status: datas.status,
purveyorId: props.id
}).then((res) => {
datas.list = res.content
})
}
//
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}`
}
function changeTime(e) {
selected.value = e
if (e == 'custom') {
currentInstance.ctx.$refs.datePicker.toggle()
} else {
getlist()
}
}
</script>
<style scoped lang="less">
page {
background-color: #f9f9f9;
}
ul,
li {
list-style: none;
padding: 0;
}
.time-wrapper {
display: flex;
justify-content: space-around;
background-color: #fff;
padding-bottom: 20rpx;
.timelistbox {
position: relative;
.time-item {
width: 90rpx;
text-align: center;
padding-bottom: 10rpx;
}
.xian {
width: 40rpx;
height: 3rpx;
background-color: #459DFF;
position: absolute;
left: 26rpx;
bottom: 0;
}
}
.time-selected {
color: #459DFF;
}
}
.supplier {
>li {
width: 694rpx;
height: 550rpx;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
padding: 32rpx 24rpx;
box-sizing: border-box;
margin: 32rpx;
>view:nth-child(1) {
width: 646rpx;
height: 160rpx;
background: #F9F9F9;
border-radius: 12rpx 12rpx 12rpx 12rpx;
align-items: center;
display: flex;
justify-content: space-around;
text-align: center;
}
>view:nth-child(2),
>view:nth-child(3),
>view:nth-child(4) {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 32rpx;
}
>view:nth-child(5) {
border-top: 2rpx solid #E5E5E5;
display: flex;
align-items: center;
flex-direction: row-reverse;
margin-top: 32rpx;
padding-top: 22rpx;
>button {
width: 112rpx;
height: 48rpx;
background: #FFFFFF;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #3189FD;
margin: 16rpx;
}
}
}
}
.df() {
display: flex;
align-items: center;
}
.zhezhaopops {
padding: 34rpx 32rpx;
width: 594rpx;
height: 900rpx;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
>view:first-child {
.df;
justify-content: space-between;
>span:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
}
>view:nth-child(2),
>view:nth-child(3),
>view:nth-child(4) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 14px;
color: #333333;
margin-top: 64rpx;
>input {
margin-top: 24rpx;
width: 492rpx;
height: 84rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #E5E5E5;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.buttomStyle {
margin-top: 48rpx;
width: 506rpx;
height: 80rpx;
}
}
.paymentSettlement {
padding: 32rpx;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #fff;
}
</style>

View File

@ -0,0 +1,180 @@
<template>
<ul class="supplier">
<li v-for="item in datas.list" :key="item.id">
<view class="">
<text style="font-weight: 400;font-size: 28rpx;color: #333333;">
{{item.purveyorName}} <text style="color: #999;">({{item.purveyorTelephone}})</text>
</text>
<text style="font-size: 28rpx;font-weight: 400;" :style="{color:item.type==0?'#FD7B49':''}">
{{ item.type == 0 ? '待支付' : '已完结' }}
</text>
</view>
<view class="">
<view class="">
<view class="">
{{item.waitAmount}}
</view>
<view class="">
剩余支付金额
</view>
</view>
<view class="">
<view class="">
{{item.waitCount}}未付
</view>
<view class="">
待付款笔数
</view>
</view>
</view>
<view class="df">
<span>上次进货日期</span>
<span>{{dayjs(item.lastTransactAt).format('YYYY-MM-DD HH:mm:ss')}}</span>
</view>
<view class="df">
<span>地址</span>
<span>{{item.address}}</span>
</view>
<view class="df">
<span>备注</span>
<span>{{item.remark}}</span>
</view>
<view class="">
<up-button type="primary" @tap="toUrl('PAGES_EDIT_SUPPLIER',{item:JSON.stringify(item)})" :plain="true"
text="编辑">
</up-button><up-button type="primary" @tap="deleteEvent(item.id)" :plain="true" text="">
</up-button><up-button type="primary" style="background-color: #318AFE;color: #fff;" @tap="toUrl('PAGES_PAYMENT_SETTLEMENT',{id:item.id})"
:plain="true" text="结款记录"></up-button>
</view>
</li>
</ul>
<view class="bottombutton">
<up-button type="primary" style="background-color: #318AFE;color: #fff;" @tap="toUrl('PAGES_ADD_SUPPLIER')"
:plain="true" text="添加供应商"></up-button>
</view>
</template>
<script setup>
import {
onMounted,
reactive
} from 'vue';
import dayjs from 'dayjs' //
import go from '@/commons/utils/go.js';
import {
tbShopPurveyorTransact,
tbShopPurveyordelete
} from '@/http/yskApi/requestAll.js';
let datas = reactive({
list: []
})
onMounted(() => {
getList()
})
let deleteEvent = (id) => {
tbShopPurveyordelete([id]).then(() => {
getList()
})
}
let toUrl = (url, d) => {
go.to(url, d)
}
let getList = () => {
tbShopPurveyorTransact({
page: 0,
size: 20,
sort: 'id',
shopId: uni.getStorageSync("shopId"),
}).then(res => {
datas.list = res.content
})
}
</script>
<style scoped lang="less">
page {
background-color: #f9f9f9;
padding: 28rpx;
}
ul,
li {
list-style: none;
padding: 0;
}
.bottombutton {
// margin-top: 84rpx;
position: fixed;
bottom: 20rpx;
left: 50%;
transform: translateX(-50%);
>button {
width: 530rpx;
height: 80rpx;
border-radius: 56rpx 56rpx 56rpx 56rpx;
}
}
.supplier {
>li {
width: 694rpx;
height: 604rpx;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
padding: 32rpx 24rpx;
box-sizing: border-box;
margin-top: 32rpx;
>view:first-child {
.df;
justify-content: space-between;
}
>view:nth-child(2) {
width: 646rpx;
height: 142rpx;
background: #F9F9F9;
border-radius: 12rpx 12rpx 12rpx 12rpx;
align-items: center;
display: flex;
justify-content: space-around;
text-align: center;
margin-top: 24rpx;
}
>view:nth-child(3),
>view:nth-child(4),
>view:nth-child(5) {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 32rpx;
}
>view:nth-child(6) {
border-top: 2rpx solid #E5E5E5;
display: flex;
align-items: center;
flex-direction: row-reverse;
margin-top: 32rpx;
padding-top: 32rpx;
>button {
width: 112rpx;
height: 48rpx;
background: #FFFFFF;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #3189FD;
margin: 16rpx;
}
}
}
}
.df() {
display: flex;
align-items: center;
}
</style>

View File

@ -82,22 +82,24 @@
// text-decoration: none;
// outline: none;
// }
page {
background: #f9f9f9;
}
ul,
li {
list-style: none;
padding: 12rpx;
}
page {
background: #f9f9f9;
}
.callRecord {
>li {
width: 694rpx;
height: 166rpx;
margin: 32rpx auto;
margin: 32rpx 0;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
display: flex;
@ -106,6 +108,7 @@
>view:first-child {
padding: 0 58rpx;
box-sizing: border-box;
>view:first-child {
font-family: Source Han Sans CN, Source Han Sans CN;

View File

@ -1365,7 +1365,38 @@
"style": {
"navigationBarTitleText": "查看详情"
}
}]
}, {
"pageId": "PAGES_SUPPLIER",
"path": "supplier",
"style": {
"navigationBarTitleText": "供应商列表"
}
}, {
"pageId": "PAGES_ADD_SUPPLIER",
"path": "addsupplier",
"style": {
"navigationBarTitleText": "添加供应商"
}
}, {
"pageId": "PAGES_EDIT_SUPPLIER",
"path": "editsupplier",
"style": {
"navigationBarTitleText": "编辑供应商"
}
}, {
"pageId": "PAGES_PAYMENT_SETTLEMENT",
"path": "paymentSettlement",
"style": {
"navigationBarTitleText": "结款记录"
}
}, {
"pageId": "PAGES_BILL_PAYMENT",
"path": "billPayment",
"style": {
"navigationBarTitleText": "账单付款记录"
}
}
]
},
{

View File

@ -213,10 +213,10 @@
})
// #ifdef H5
vdata.formData.username = '18049104914'
vdata.formData.pwd = '123456'
// vdata.formData.username = '19502966242'
// vdata.formData.pwd = '11280923'
// vdata.formData.username = '18049104914'
// vdata.formData.pwd = '123456'
vdata.formData.username = '15699991111'
vdata.formData.pwd = 'qwer1234'
// #endif
// #ifdef MP-WEIXIN
vdata.formData.username = '15699991111'

View File

@ -32,3 +32,21 @@ H5, 不影响。
* 证书私钥密码
* 小程序AppID
* 高德Key
### 代码
```javascript
export function tbShopPurveyorTransact(params) {
return request({
url: '/api/tbShopPurveyorTransact',
method: 'get',
params
})
}
// 删除\编辑、添加
export function tbShopPurveyordelete(data) {
return request({
url: `/api/tbShopPurveyor`,
method: "delete-post-put",
data
});
}
```