【前端】云工厂的纸掌柜app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

349 lines
8.9 KiB

<template>
<view class="page">
<qn-header>
<view>
<qn-data-picker
v-model="params.cooperationState"
:border="false"
class="qn-picker"
placeholder="客户类型"
popup-title="请选择客户类型"
:map="{ text: 'name', value: 'id' }"
@change="onStatusChange"
:clear-icon="false"
:localdata="cooperationStateList"
></qn-data-picker>
</view>
</qn-header>
<view class="content">
<scroll-list ref="list" :option="option" @load="upCallback" @refresh="downCallback">
<packingStationItem style="margin-bottom: 20rpx" v-for="item in list" :key="item.enterpriseId" :info="item">
<view class="tax-area flex-row-center-center">
<view class="tax-button flex-row-center-center" @click="showModal(item)">
<text class="text">设置税点</text>
</view>
</view>
</packingStationItem>
</scroll-list>
</view>
<uni-popup ref="popup" type="bottom" @maskClick="closeModal">
<view class="flex-col section_7">
<view class="flex-col">
<view class="flex-col group_16">
<view class="justify-between group_17">
<text class="text_23">供应企业</text>
<image src="/static/imgs/general/close-icon.png" class="image_15" />
</view>
<qn-select :options="mallSupplierList" v-model="popupInfo.mallSupplierId" placeholder="请选择当前账号下的供应商"></qn-select>
</view>
<view class="flex-col group_18">
<view class="flex-row group_19">
<text class="text_25">税点(%)</text>
<text class="text_26">(例如:12=12%)</text>
</view>
<view class="bottom-section">
<qn-easyinput type="number" :maxlength="4" v-model="popupInfo.taxPoint" :inputBorder="false" text="left" placeholder="请输入税点"></qn-easyinput>
</view>
</view>
</view>
<view class="flex-col items-center button" @click="savaTax">
<text>保存税点</text>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import qnHeader from '@/components/qn-header/qn-header.vue'
import { getCompanyList, getClientTaxPoint, editClientTaxPoint } from '@/apis/clientListApi'
import { getBaseInfo } from '@/apis/commonApi'
import scrollList from '@/components/scroll-list/scroll-list.vue'
import packingStationItem from '@/components/business-components/packingStationItem.vue'
export default {
components: {
qnHeader,
scrollList,
packingStationItem
},
data() {
return {
// items: [],
// area: null,
params: {
cooperationState: 0,
latitude: 23.12616,
longitude: 113.38466,
km: 5
},
pagination: {
pageNum: 0, // 初始会执行一次下拉加载
pageSize: 10
},
cooperationStateList: Object.freeze([
{
id: 0,
name: '全部客户'
},
{
id: 1,
name: '未合作'
},
{
id: 2,
name: '已合作'
}
]),
list: [],
option: {
size: 10,
auto: true,
emptyText: '暂无数据~',
background: '#F7F8FA'
},
popupInfo: {
enterpriseId: '',
mallSupplierId: '',
mallSupplierName: '',
taxPoint: '',
id: null
},
mallSupplierList: []
}
},
methods: {
onStatusChange(e) {
this.pagination.pageNum = 1
this.$refs.list.refresh()
},
getList() {
return new Promise((resolve, reject) => {
getCompanyList({ ...this.params, ...this.pagination })
.then((res) => {
if (res) {
if (res.current <= 1) {
this.list = res.records
} else {
this.list = this.list.concat(res.records)
}
resolve({ list: this.list, total: res.total })
} else {
reject()
}
})
.catch((err) => {
reject(err)
})
})
},
downCallback() {
this.pagination.pageNum = 1
this.getList()
.then(({ list, total }) => {
this.$refs.list.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.list.refreshFail()
})
},
upCallback(page) {
this.pagination.pageNum++
this.getList()
.then(({ list, total }) => {
this.$refs.list.loadSuccess({ list, total })
})
.catch(() => {
this.$refs.list.loadFail()
})
},
showModal(company) {
this.popupInfo.enterpriseId = company.enterpriseId
if (this.mallSupplierList.length == 0) {
getBaseInfo({}, true).then((res) => {
if (res) {
this.mallSupplierList = res.enterpriseList.map((item) => ({
value: item.supplier.id,
label: item.name
}))
this.$refs.popup.open('bottom')
}
})
} else {
this.$refs.popup.open('bottom')
}
},
closeModal() {
this.popupInfo = {
enterpriseId: null,
mallSupplierId: null,
mallSupplierName: '',
taxPoint: null,
id: null
}
this.$refs.popup.close()
},
addCustomer() {
console.log('addCustomer', this.popupInfo)
this.closeModal()
},
savaTax() {
if (!this.popupInfo.mallSupplierId) {
uni.showToast({
title: '请先选择纸盘商',
icon: 'none'
})
return
}
if (this.popupInfo.taxPoint === '') {
uni.showToast({
title: '请输入税点',
icon: 'none'
})
return
}
editClientTaxPoint({
supplierId: this.popupInfo.mallSupplierId,
customerEnterpriseId: this.popupInfo.enterpriseId,
taxPoint: this.popupInfo.taxPoint / 100,
id: this.popupInfo.id
}).then((res) => {
if (res) {
uni.showToast({
title: '保存成功',
icon: 'none'
})
this.closeModal()
}
})
}
},
watch: {
params: {
handler(val) {
this.getList()
},
deep: true
},
['popupInfo.mallSupplierId'](val) {
if (val) {
getClientTaxPoint({ supplierId: val, customerEnterpriseId: this.popupInfo.enterpriseId }).then((res) => {
if (res && res.taxPoint) {
this.popupInfo.taxPoint = res.taxPoint * 100
this.popupInfo.id = res.id
}
})
}
}
},
computed: {
hasLogin() {
return this.$store.state.qnToken != ''
}
},
onLoad(option) {
if (option) {
option.latitude && (this.params.latitude = option.latitude)
option.longitude && (this.params.longitude = option.longitude)
option.km && (this.params.km = option.km)
}
}
}
</script>
<style lang="scss" scoped>
.page {
display: flex;
flex-direction: column;
flex: 1;
height: 100vh;
.content {
// flex: 1;
flex-grow: 1;
overflow: hidden;
}
}
.qn-picker {
border: none;
}
.section_7 {
width: 750rpx;
padding: 3rpx 32rpx 12rpx;
background-color: rgb(255, 255, 255);
border-radius: 20rpx 20rpx 0px 0px;
.button {
margin-top: 455rpx;
padding: 23rpx 0;
color: rgb(255, 255, 255);
font-size: 36rpx;
font-weight: 500;
line-height: 50rpx;
white-space: nowrap;
background-color: rgb(0, 122, 255);
border-radius: 10rpx;
}
.group_16 {
padding-bottom: 28rpx;
border-bottom: solid 6rpx rgb(216, 216, 216);
.group_17 {
padding: 31rpx 0 24rpx;
color: rgb(51, 51, 51);
font-size: 30rpx;
line-height: 42rpx;
white-space: nowrap;
.text_23 {
margin-top: 6rpx;
}
.image_15 {
margin-right: 4rpx;
width: 40rpx;
height: 40rpx;
}
}
}
.group_18 {
padding-bottom: 32rpx;
.group_19 {
padding: 31rpx 0 24rpx;
.text_25 {
color: rgb(51, 51, 51);
font-size: 30rpx;
line-height: 42rpx;
white-space: nowrap;
}
.text_26 {
margin: 5rpx 0 5rpx 16rpx;
color: rgb(136, 136, 136);
font-size: 24rpx;
line-height: 33rpx;
white-space: nowrap;
}
}
}
.bottom-section {
line-height: 40rpx;
// padding: 12rpx 24rpx;
border-radius: 8rpx;
background-color: rgb(245, 245, 245);
width: 100%;
height: 64rpx;
}
}
.tax-area {
width: 750rpx;
height: 100rpx;
padding: 18rpx 32rpx;
border-top: 1px solid rgba(221, 221, 221, 0.5);
.tax-button {
width: 268rpx;
height: 64rpx;
background: #007aff;
border-radius: 4rpx;
.text {
font-size: 28rpx;
color: #ffffff;
letter-spacing: 0;
font-weight: 400;
}
}
}
</style>