cashier_app/components/JeepayBizsPopupView/JeepayBizsPopupView.vue

145 lines
3.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
通用的选择某项业务 一般用作修改页
目前支持 门店 应用
@author terrfly
@site https://www.jeepay.vip
@date 2022/12/08 14:18
-->
<template>
<view class="details-wrapper" style="align-items: flex-start; padding-top: 40rpx">
<view v-if="props.hasTitle" class="details-title">
<slot name="title">{{ bizTypeMap[props.bizType].title }}</slot>
</view>
<view @tap="show">
<view class="sub-title">
<view class="details-info single-text-beyond">
<text :class="{ 'text-gray': vdata.selectedRow[bizTypeMap[props.bizType].nameKey] ? false : true }">
{{ vdata.selectedRow[bizTypeMap[props.bizType].nameKey] || bizTypeMap[props.bizType].nameDef }}
</text>
</view>
<image src="/static/iconImg/icon-arrow-small.svg" mode="scaleToFill" v-if="isIcon" />
</view>
<view class="sub-info details-info single-text-beyond">{{ vdata.selectedRow[bizTypeMap[props.bizType].id] }}</view>
</view>
</view>
<view>
<JeepayBizinfoSelect ref="jeepayBizinfoSelectRef" :bizType="props.bizType" :isCheckbox="false" :range="props.range" :ifCode="props.ifCode" :addUse="props.addUse" />
<JeepayIncomingBizinfoSelect ref="jeepayIncomingBizinfoSelectRef" :bizType="props.bizType" :range="props.range" :ifCode="props.ifCode" />
</view>
</template>
<script setup>
import { ref, reactive, nextTick, watch, onMounted } from 'vue';
const jeepayBizinfoSelectRef = ref();
const jeepayIncomingBizinfoSelectRef = ref();
const bizTypeMap = {
store: { title: '选择门店', nameKey: 'storeName', nameDef: '请选择门店', id: 'storeId' },
mchApp: { title: '选择应用', nameKey: 'appName', nameDef: '请选择应用', id: 'appId' },
isvApp: { title: '选择渠道', nameKey: 'isvName', nameDef: '请选择渠道', id: 'isvNo' },
incomingApp: { title: '发起进件', nameKey: 'name', nameDef: '请选择场景', id: 'range' }
};
// emit 父组件使用: v-model:value="val" 进行双向绑定。
const emits = defineEmits(['update:value', 'update:showName', 'change']);
const props = defineProps({
// 是否包含 标题部分
hasTitle: { type: Boolean, default: true },
//绑定的值, 双向绑定
value: { type: [String, Number] },
// 仅仅用作修改的回显
showName: { type: [String, Number] },
// 业务类型: 默认门店
bizType: { type: String, default: 'store' },
range: { type: String, default: 0 },
ifCode: { type: String, default: '' },
isIcon: { type: Boolean, default: true },
addUse: { type: Boolean, default: false }
});
onMounted(() => {
if (props.value) {
vdata.selectedRow[bizTypeMap[props.bizType].id] = props.value;
}
if (props.showName) {
vdata.selectedRow[bizTypeMap[props.bizType].nameKey] = props.showName;
}
});
// 切换时
watch(
() => props.value,
(newVal, oldVal) => {
vdata.selectedRow[bizTypeMap[props.bizType].id] = newVal;
}
);
// 切换时
watch(
() => props.showName,
(newVal, oldVal) => {
vdata.selectedRow[bizTypeMap[props.bizType].nameKey] = newVal;
}
);
const vdata = reactive({
// 当前选择行
selectedRow: {}
});
function show() {
jeepayBizinfoSelectRef.value.open().then((selectedRow) => {
vdata.selectedRow = selectedRow || {};
emits('update:value', vdata.selectedRow[bizTypeMap[props.bizType].id]);
emits('update:showName', vdata.selectedRow[bizTypeMap[props.bizType].nameKey]);
emits('change', vdata.selectedRow[bizTypeMap[props.bizType].id]);
});
}
</script>
<style lang="scss" scoped>
.details-wrapper {
display: flex;
align-items: center;
font-size: 32rpx;
background-color: #fff;
.details-title {
width: 180rpx;
color: #4c4c4c;
}
.details-info {
flex-grow: 1;
width: 405rpx;
}
image {
width: 108rpx;
height: 100rpx;
}
.sub-title {
flex: 1;
display: flex;
image {
width: 108rpx;
height: 40rpx;
}
}
.sub-info {
margin-top: 20rpx;
font-size: 30rpx;
color: #a1a1a1;
padding-bottom: 20rpx;
}
.text-gray {
color: #b3b3b3;
}
}
</style>