This commit is contained in:
aihe 2024-07-18 00:02:14 +08:00
parent e6c278b04b
commit a0d5b86f2c
8 changed files with 264 additions and 302 deletions

View File

@ -191,6 +191,37 @@ const getQueryObject = (url)=> {
return obj;
}
export function isPlainObject(obj){
return typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]'
}
export function isPlainArray(obj){
return typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Array]'
}
export function deepAssign() {
let len = arguments.length, target = arguments[0]
if (!isPlainObject(target)) {
target = {}
}
for (let i = 1; i < len; i++) {
let source = arguments[i]
if (isPlainObject(source)) {
for (let s in source) {
if (s === '__proto__' || target === source[s]) {
continue
}
if (isPlainObject(source[s])) {
target[s] = deepAssign(target[s], source[s])
} else {
target[s] = source[s]
}
}
}
}
return target
}
export {
getAddressDetail,
setAddresModalParam,

View File

@ -15,6 +15,7 @@
<tpx-dialog :show="show" :title="placeholder" @onClose="handleSelectSwitch">
<view style="height: calc(60vh);">
<tpx-scroll-view :resObject="filResObject" :searchParam="filDataSearchParam" :getListFun="getListFun" size="sm" :showLoadedAll="false" @onListChange="onListChange">
<slot name="listTop"></slot>
<view v-if="showKeyWord" class="mb-10">
<tpx-input v-model:value="keyword" placeholder="请输入关键字" @change="handleKeyWordChange"></tpx-input>
</view>
@ -30,6 +31,7 @@
<view v-if="mode == modeEnum.drop && show" class="md-drop-cont">
<tpx-scroll-view :maxHeight="dropMaxHeight" :resObject="filResObject" :searchParam="filDataSearchParam" :getListFun="getListFun" size="sm" :showLoadedAll="false" @onListChange="onListChange">
<slot name="listTop"></slot>
<view v-if="showKeyWord" class="mb-10">
<tpx-input v-model:value="keyword" placeholder="请输入关键字" @change="handleKeyWordChange"></tpx-input>
</view>

View File

@ -112,9 +112,7 @@
tab: tabList[0].val, // 当前tab
type: '', // 'choose' 选择操作
},
resData: {
list: []
}
resData: { list: [] }
}
},
onShareAppMessage() {
@ -197,7 +195,7 @@
position: relative;
}
.pgb-cont{
padding: 30rpx;
padding: 30rpx 30rpx 0 30rpx;
}
.data-list-item{

View File

@ -81,6 +81,14 @@
@onChange="handleYueJieSelect" placeholder="请选择月结账户"
>
<tpx-text-item label="月结账户" :value="submitParam.customerName"></tpx-text-item>
<template #listTop>
<view class="mb-20" @click="goto(`user/monthCardList`)">
<u-row>
<u-icon name="order" color="#B12D29" size="36"></u-icon>
<view class="pl-10 clr-prm font-28">管理月结卡</view>
</u-row>
</view>
</template>
</tpx-select>
</view>
<template v-if="submitParam.custNo">

View File

@ -1,50 +1,46 @@
<template>
<tpx-layout>
<template v-slot:header>
<view class="pgb-header">
<view class="com-jianju">
<!-- 关键字搜索框 -->
<tpx-search placeholder="选择省市区" v-model:value="searchParam.keyword" @change="handleSearchParamChange()" ></tpx-search>
<tpx-page>
<tpx-layout>
<template v-slot:header>
<view class="pgb-header">
<view class="com-jianju">
<!-- 关键字搜索框 -->
<tpx-search placeholder="选择地址" v-model:value="addressText" @click="showAddress"></tpx-search>
</view>
</view>
</view>
</template>
<template v-slot:body>
<scroll-view :scroll-y="true" @scrolltolower="onScrollBottom()" class="pos-abt-all"
>
<view class="pgb-cont">
<!-- 列表数据 -->
<!-- -->
<view>
<view v-for="(item) in dataList" class="blcok-white radius-20 mb-20" style="margin-top: 0;"
@click="handleTODetail(item)"
>
<u-text :text="'各国邮政新规'" size="30" :bold="true" lines="1"></u-text>
<u-text margin="10rpx 0 0 0" :text="'根据萨尔瓦多邮政通知,为了使萨尔瓦多邮政能在邮件抵达时,致电或'" size="28" color="#999" lines="2"></u-text>
</template>
<template v-slot:body>
<view class="pos-abt-all">
<tpx-scroll-view v-model:resObject="resData" :searchParam="searchParam" :getListFun="getListFun"
ref="listRef"
>
<view class="pgb-cont">
<view>
<view v-for="(item) in resData.list" class="blcok-white radius-20 mb-20" style="margin-top: 0;"
@click="handleTODetail(item)"
>
<u-text :text="item.siteName" size="30" :bold="true" lines="1"></u-text>
<u-text margin="10rpx 0 0 0" :text="`地址:${item.address}`" size="28" color="#999" lines="2"></u-text>
<u-row custom-style="margin-top: 20rpx;" justify="between">
<view>联系人:{{item.principal || '-'}}</view>
<view>电话:{{item.phone || '-'}}</view>
</u-row>
</view>
</view>
</view>
</view>
<!-- 加载更多 -->
<u-loadmore icon-size="28" font-size="28" margin-top="30" v-if="showLoadMore || loadedAll"
:status="loadedAll ? 'nomore' : 'loading'" />
<!-- 空数据页 -->
<view v-if="dataList.length == 0" style="padding-top: 100rpx;">
<u-empty text="无数据" :icon="getCdnUrl('kong.png')" textSize="28" width="86" height="97">
</u-empty>
</view>
</tpx-scroll-view>
</view>
</scroll-view>
</template>
</template>
</tpx-layout>
</tpx-layout>
<buns-address-sheet v-model:show="addressModal.show" v-model:value="addressModal.values" @onSure="handleAddressChoose"></buns-address-sheet>
</tpx-page>
</template>
<script>
import getCdnUrl from "@/common/getCdnUrl"
import { goto, goBack, setClipboardData, confirmModal, showLoading } from "@/common/untool"
import * as apiService from "@/common/api"
import { addressNameCodeMap } from "@/common/enum"
import { getAddressDetail, setAddresModalParam } from "@/common/util"
export default {
props: {
@ -58,59 +54,43 @@
data() {
return {
searchParam: {
keyword: '',
},
resData: { list: [] },
queryOption: {},
dataList: [
{},{},{},{},{},{},{},{}
],
showLoadMore: false,
loadedAll: false
}
},
onShareAppMessage() {
return {
// title: '',
// path: 'TODO'
addressModal: {
show: false,
values: {
regIds: [],
regNames: []
}
},
}
},
onLoad(queryOption) {
this.queryOption = queryOption
this.searchParam.tabType = queryOption.tab || tabList[0].val
this.initData();
},
onUnload() {
},
methods: {
getCdnUrl,
getListFun: apiService.getSendSiteList,
initData(){
// showLoading()
setTimeout(() => {
uni.stopPullDownRefresh();
}, 300);
},
setListData() {
},
onScrollBottom() {
console.log("onScrollBottom");
if (this.loadedAll) {
return;
}
this.showLoadMore = true;
setTimeout(() => {
this.setListData();
}, 300);
handleEditItem(item={}) {
},
handleSearchMoreBtn(){
if(!this.showLoadMore) {
// 回显更多条件
Object.keys(this.tmpSearchParam).map(t=> {
this.tmpSearchParam[t] = this.searchParam[t] || ''
})
}
this.showSearchMore = !this.showSearchMore
showAddress(){
this.addressModal.values = setAddresModalParam(this.searchParam);
this.addressModal.show = true
},
handleAddressChoose(data) {
data.regIds.map((regId, index)=> {
let nameCodeMap = addressNameCodeMap[index]
this.searchParam[nameCodeMap.codeKey] = regId
this.searchParam[nameCodeMap.nameKey] = data.regNames[index]
this.addressText = getAddressDetail(this.searchParam)
})
},
}
}
@ -133,6 +113,6 @@
position: relative;
}
.pgb-cont{
padding: 30rpx;
padding: 30rpx 30rpx 0 30rpx;
}
</style>

View File

@ -116,7 +116,7 @@
<script>
import * as apiService from "@/common/api"
import BpdSendRecieverTmp from "@/components/buns-post-detail-templates/bpd-send-reciever-tmp"
import { deepAssign } from "@/common/util"
export default {
props: {
@ -127,6 +127,13 @@
},
hasExtSchParam() {
let hasExt = false
if(
this.searchParam._date.length > 0
|| this.searchParam.params.paymentType
|| this.searchParam.params.orderStatType
) {
hasExt = true
}
return hasExt
},
},
@ -227,10 +234,13 @@
this.moreSearchModel.show = !this.moreSearchModel.show
},
handleResetTempSearch(){
this.moreSearchModel.data = JSON.parse(JSON.stringify(this.searchParam))
let data = this.moreSearchModel.data
data._date = []
data.params.orderStatType = ''
data.params.paymentType = ''
},
handleConfirmTempSearch(){
Object.assign(this.searchParam, this.moreSearchModel.data)
deepAssign(this.searchParam, this.moreSearchModel.data)
this.moreSearchModel.show = false
}
}

View File

@ -1,97 +1,96 @@
<template>
<tpx-layout>
<template v-slot:body>
<view class="com-jianju pos-rlt pb-30" style="padding-top: 2rpx;">
<tpx-page>
<tpx-layout>
<template v-slot:body>
<view class="com-jianju pos-rlt pb-30" style="padding-top: 2rpx;">
<view class="blcok-white radius-20">
<u-textarea v-model="submitParam.otherDes" border="none" height="110" placeholder="粘贴或输入地址,点击“智能识别”自动拆分姓名、电话和地址" custom-style="border:0;padding: 0;"></u-textarea>
<u-row justify="end">
<view class="mt-10">
<u-button @click="handleAnsText()" type="primary" size="mini" shape="circle" custom-style="width: 130rpx;font-size: 24rpx;padding:0;">智能识别</u-button>
</view>
</u-row>
</view>
<view class="mt-40">
<tpx-select placeholder="国家" v-model:value="country" :list="[]" :isWhite="true"
></tpx-select>
</view>
<view class="blcok-white radius-20">
<u-textarea v-model="submitParam.otherDes" border="none" height="110" placeholder="粘贴或输入地址,点击“智能识别”自动拆分姓名、电话和地址" custom-style="border:0;padding: 0;"></u-textarea>
<u-row justify="end">
<view class="mt-10">
<u-button @click="handleAnsText()" type="primary" size="mini" shape="circle" custom-style="width: 130rpx;font-size: 24rpx;padding:0;">智能识别</u-button>
</view>
</u-row>
</view>
<view class="mt-40">
<tpx-select placeholder="国家" v-model:value="country" :list="[]" :isWhite="true"
></tpx-select>
</view>
<view class="blcok-white radius-20">
<view class="">
<view style="margin-top: 10rpx;">
<u-row>
<u-col span="4">
<tpx-input v-model:value="submitParam.name" placeholder="真实姓名"></tpx-input>
</u-col>
<u-col offset="1" span="7">
<tpx-input v-model:value="submitParam.tel" placeholder="电话"></tpx-input>
</u-col>
</u-row>
</view>
<view class="mt-40">
<tpx-select placeholder="省市区" v-model:value="country" :list="[]"
></tpx-select>
</view>
<view class="mt-30">
<tpx-textarea v-model:value="submitParam.detail" placeholder="详细地址(例如**街道**号**)"></tpx-textarea>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="电话"></tpx-input>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="邮编"></tpx-input>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="邮箱(选填"></tpx-input>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="公司名称(选填)"></tpx-input>
<view class="blcok-white radius-20">
<view class="">
<view style="margin-top: 10rpx;">
<u-row>
<u-col span="4">
<tpx-input v-model:value="submitParam.name" placeholder="真实姓名"></tpx-input>
</u-col>
<u-col offset="1" span="7">
<tpx-input v-model:value="submitParam.tel" placeholder="电话"></tpx-input>
</u-col>
</u-row>
</view>
<view class="mt-40">
<tpx-select placeholder="省市区" v-model:value="country" :list="[]"
></tpx-select>
</view>
<view class="mt-30">
<tpx-textarea v-model:value="submitParam.detail" placeholder="详细地址(例如**街道**号**)"></tpx-textarea>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="电话"></tpx-input>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="邮编"></tpx-input>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="邮箱(选填"></tpx-input>
</view>
<view class="mt-30">
<tpx-input v-model:value="submitParam.tel" placeholder="公司名称(选填)"></tpx-input>
</view>
</view>
</view>
<view class="mt-30 pl-30 pr-30">
<u-row justify="between">
<view>
<u-checkbox-group v-model="radiovalue1" placement="column" @change="handleFormChange()">
<u-checkbox
shape="circle"
size="30" label="默认地址" active-color="#B12D29" la
label-size="28" hange="handleFormChange()"
>
</u-checkbox>
</u-checkbox-group>
</view>
<view>
<u-text text="清空" size="28" color="#0E0708"></u-text>
</view>
</u-row>
</view>
</view>
<view class="mt-30 pl-30 pr-30">
<u-row justify="between">
<view>
<u-checkbox-group v-model="radiovalue1" placement="column" @change="handleFormChange()">
<u-checkbox
shape="circle"
size="30" label="默认地址" active-color="#B12D29" la
label-size="28" hange="handleFormChange()"
>
</u-checkbox>
</u-checkbox-group>
</view>
<view>
<u-text text="清空" size="28" color="#0E0708"></u-text>
</view>
</u-row>
</template>
<template v-slot:footer>
<view class="blcok-white-noradius">
<u-button @click="handleSubmit()" type="primary" size="large" shape="circle"
custom-style="height:80rpx;font-size: 30rpx;"
>确定</u-button>
</view>
</view>
</template>
<template v-slot:footer>
<view class="blcok-white-noradius">
<u-button @click="handleSubmit()" type="primary" size="large" shape="circle"
custom-style="height:80rpx;font-size: 30rpx;"
>确定</u-button>
</view>
</template>
</tpx-layout>
</template>
</tpx-layout>
</tpx-page>
</template>
<script>
import getCdnUrl from "@/common/getCdnUrl"
import {
goto
} from "@/common/untool"
export default {
props: {
// hasLeftWin: {
@ -104,17 +103,9 @@
data() {
return {
submitParam: {
type: 1,
otherDes: ''
}
}
},
onShareAppMessage() {
return {
// title: '',
// path: 'TODO'
}
},
onLoad() {
this.initData();
},
@ -122,12 +113,7 @@
},
methods: {
getCdnUrl,
initData() {
// uni.showLoading({
// title: '加载中'
// });
},
handleAnsText(){

View File

@ -1,79 +1,73 @@
<template>
<tpx-layout>
<template v-slot:header>
</template>
<template v-slot:body>
<scroll-view :scroll-y="true" @scrolltolower="onScrollBottom()" class="pos-abt-all"
>
<view class="pgb-header">
<view class="com-jianju">
<!-- 关键字搜索框 -->
<tpx-search placeholder="请输入" v-model:value="searchParam.keyword" @change="handleSearchParamChange()" ></tpx-search>
</view>
</view>
<tpx-page>
<tpx-layout>
<template v-slot:header>
<view class="pgb-cont">
<!-- 列表数据 -->
<!-- -->
<view>
<view v-for="(item) in dataList" class="blcok-white radius-20 mb-20" style="margin-top: 0;"
@click="handleTODetail(item)"
>
<view>
<u-row justify="between">
<u-row @click="handleItemClick(item)">
<u-avatar size="100" shape="square"></u-avatar>
<view class="pl-10">
<u-text :text="'月结账号 TANO2500123'" size="30" :bold="true" lines="1"></u-text>
<u-text margin="10rpx 0 0 0" :text="'平湖华盛进出口有限公司'" size="28" color="#999"></u-text>
</view>
</u-row>
<u-row justify="end" align="top" custom-style="width: 100rpx;height:100rpx;"
@click="setClipboardData('xxxxxxx' + item.id)"
>
<u-icon name="file-text" size="38"></u-icon>
</u-row>
</u-row>
</template>
<template v-slot:body>
<view class="pos-abt-all">
<tpx-scroll-view v-model:resObject="resData" :searchParam="searchParam" :getListFun="getListFun"
ref="listRef"
>
<view class="pgb-header">
<view class="com-jianju">
<!-- 关键字搜索框 -->
<tpx-search placeholder="请输入" v-model:value="searchParam.searchValue" @change="handleSearchParamChange()" ></tpx-search>
</view>
</view>
</view>
<!-- 加载更多 -->
<u-loadmore icon-size="28" font-size="28" margin-top="30" v-if="showLoadMore || loadedAll"
:status="loadedAll ? 'nomore' : 'loading'" />
<!-- 空数据页 -->
<view v-if="dataList.length == 0" style="padding-top: 100rpx;">
<u-empty text="无数据" :icon="getCdnUrl('kong.png')" textSize="28" width="86" height="97">
</u-empty>
</view>
<view class="pgb-cont">
<!-- 列表数据 -->
<!-- -->
<view>
<view v-for="(item) in dataList" class="blcok-white radius-20 mb-20" style="margin-top: 0;"
@click="handleTODetail(item)"
>
<view>
<u-row justify="between">
<u-row @click="handleItemClick(item)">
<u-avatar size="100" shape="square"></u-avatar>
<view class="pl-10">
<u-text :text="'月结账号 TANO2500123'" size="30" :bold="true" lines="1"></u-text>
<u-text margin="10rpx 0 0 0" :text="'平湖华盛进出口有限公司'" size="28" color="#999"></u-text>
</view>
</u-row>
<u-row justify="end" align="top" custom-style="width: 100rpx;height:100rpx;"
@click="setClipboardData('xxxxxxx' + item.id)"
>
<u-icon name="file-text" size="38"></u-icon>
</u-row>
</u-row>
</view>
</view>
</view>
</view>
</tpx-scroll-view>
</view>
</scroll-view>
</template>
<template v-slot:footer>
<view class="blcok-white-noradius">
<u-button @click="handleEditItem()" type="primary" size="large" shape="circle"
custom-style="height:80rpx;font-size: 30rpx;"
>
<u-row>
<u-icon size="34" color="#fff" name="plus"></u-icon>
<text class="pl-10">添加月结卡</text>
<u-icon size="34" color="#fff" ></u-icon>
</u-row>
</u-button>
</view>
</template>
</tpx-layout>
</template>
<template v-slot:footer>
<view class="blcok-white-noradius">
<u-button @click="handleEditItem()" type="primary" size="large" shape="circle"
custom-style="height:80rpx;font-size: 30rpx;"
>
<u-row>
<u-icon size="34" color="#fff" name="plus"></u-icon>
<text class="pl-10">添加月结卡</text>
<u-icon size="34" color="#fff" ></u-icon>
</u-row>
</u-button>
</view>
</template>
</tpx-layout>
</tpx-page>
</template>
<script>
import getCdnUrl from "@/common/getCdnUrl"
import { goto, goBack, setClipboardData, confirmModal, showLoading } from "@/common/untool"
import * as apiService from "@/common/api"
export default {
props: {
@ -87,71 +81,24 @@
data() {
return {
searchParam: {
keyword: '',
searchValue: '',
},
resData: { list: [] },
queryOption: {},
dataList: [
{},{},{},{},{},{},{},{}
],
showLoadMore: false,
loadedAll: false
}
},
onShareAppMessage() {
return {
// title: '',
// path: 'TODO'
}
},
onLoad(queryOption) {
this.queryOption = queryOption
this.searchParam.tabType = queryOption.tab || tabList[0].val
this.initData();
},
onUnload() {
},
methods: {
goto,
setClipboardData,
getCdnUrl,
getListFun: apiService.getMonthpayAccountList,
initData(){
// showLoading()
setTimeout(() => {
uni.stopPullDownRefresh();
}, 300);
},
setListData() {
},
onScrollBottom() {
console.log("onScrollBottom");
if (this.loadedAll) {
return;
}
this.showLoadMore = true;
setTimeout(() => {
this.setListData();
}, 300);
},
handleSearchMoreBtn(){
if(!this.showLoadMore) {
// 回显更多条件
Object.keys(this.tmpSearchParam).map(t=> {
this.tmpSearchParam[t] = this.searchParam[t] || ''
})
}
this.showSearchMore = !this.showSearchMore
},
handleItemClick(item){
if(this.queryOption.type == "choose") {
goBack()
} else {
this.handleEditItem(item)
}
},
handleEditItem(item={}) {
goto(`user/monthCardEdit?id=${item.id}`)
this.goto(`user/monthCardEdit?id=${item.id}`)
},
}
}
@ -174,6 +121,6 @@
position: relative;
}
.pgb-cont{
padding: 30rpx;
padding: 30rpx 30rpx 0 30rpx;
}
</style>