You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

358 lines
11 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script setup>
/**
* name
* usersa0ChunLuyu
* date2023年3月24日 11:52:52
*/
import {
ProfitsharingCreateAction,
ProfitsharingUpdateAction,
ProfitsharingDeleteAction,
ProfitsharingListAction,
HospitalProfitsharingStatusAction,
ProfitsharingTestAction,
$response
} from '~/api'
import {h} from "vue";
import {NTag} from "naive-ui";
const $props = defineProps({
hospital: {
type: Number,
default: 0
}
})
const profitsharing_status = ref(false)
const profitsharing_type = ref(0)
const HospitalProfitsharingStatus = async () => {
const response = await HospitalProfitsharingStatusAction({
hospital: $props.hospital
})
$response(response, () => {
profitsharing_status.value = response.data.info.open === 1 || response.data.info.open === 3
profitsharing_type.value = response.data.info.open
})
}
const profitsharing_list = ref([])
const ProfitsharingList = async () => {
const response = await ProfitsharingListAction({
hospital: $props.hospital
})
$response(response, () => {
profitsharing_list.value = response.data.list
})
}
const profitsharing_active = ref([])
const profitsharing_columns = [{
type: 'selection'
}, {
title: '名称',
key: 'name'
}, {
title: '类型',
key: 'status',
render(row) {
return h(
NTag,
{
type: row.type === 1 ? 'success' : 'error'
},
{
default: () => {
return row.type === 1 ? '商户' : '个人'
}
}
)
}
}, {
title: '账号',
key: 'account'
}, {
title: '计算公式',
key: 'formula'
}, {
title: '描述',
key: 'desc'
}, {
title: '状态',
key: 'status',
render(row) {
return h(
NTag,
{
type: row.status === 1 ? 'success' : 'error'
},
{
default: () => {
return row.status === 1 ? '可用' : '停用'
}
}
)
}
}]
const create_show = ref(false)
const create_data_default = {
type: 1,
name: '',
account: '',
formula: '',
desc: '',
status: 1,
}
const create_data = ref(JSON.parse(JSON.stringify(create_data_default)))
const test_data = ref({
in_value: 0,
out_value: 0
})
const ProfitsharingTest = async () => {
let data = {
in_value: test_data.value.in_value
}
if (create_show.value) {
data.php = create_data.value.formula
} else {
data.php = update_data.value.formula
}
const response = await ProfitsharingTestAction(data)
$response(response, () => {
test_data.value.out_value = response.data.out_value
})
}
const ProfitsharingCreate = async () => {
let data = {
...create_data.value,
hospital: $props.hospital
}
const response = await ProfitsharingCreateAction(data)
$response(response, () => {
window.$message().success(response.message)
create_show.value = false
create_data.value = JSON.parse(JSON.stringify(create_data_default))
ProfitsharingList()
})
}
const createShowClick = () => {
create_data.value = JSON.parse(JSON.stringify(create_data_default))
create_show.value = true
}
const update_show = ref(false)
const update_data_default = {
id: 0,
type: 1,
name: '',
account: '',
formula: '',
desc: '',
status: 1,
}
const update_data = ref(JSON.parse(JSON.stringify(update_data_default)))
const updateShowClick = () => {
if (profitsharing_active.value.length !== 1) return window.$message().error('请选择一个分账设置')
update_data.value = JSON.parse(JSON.stringify(update_data_default))
for (let i = 0; i < profitsharing_list.value.length; i++) {
if (profitsharing_active.value[0] === profitsharing_list.value[i].id) {
update_data.value = JSON.parse(JSON.stringify(profitsharing_list.value[i]))
update_show.value = true
return
}
}
}
const ProfitsharingUpdate = async () => {
let data = {
...update_data.value,
hospital: $props.hospital
}
const response = await ProfitsharingUpdateAction(data)
$response(response, () => {
window.$message().success(response.message)
update_show.value = false
update_data.value = JSON.parse(JSON.stringify(update_data_default))
ProfitsharingList()
})
}
const delete_show = ref(false)
const deleteShowClick = () => {
if (profitsharing_active.value.length <= 0) return window.$message().error('请选择一个分账设置')
delete_show.value = true
}
const ProfitsharingDelete = async () => {
const response = await ProfitsharingDeleteAction(profitsharing_active.value)
$response(response, () => {
window.$message().success(response.message)
delete_show.value = false
profitsharing_active.value = []
ProfitsharingList()
})
}
onMounted(() => {
HospitalProfitsharingStatus()
ProfitsharingList()
})
</script>
<template>
<div>
<n-modal v-model:show="delete_show" preset="card" :style="{width: '400px'}" title="删除确认" :auto-focus="false"
:bordered="false">
<div>
<n-space justify="center">
<n-button @click="ProfitsharingDelete()" type="info">确定</n-button>
<n-button @click="delete_show = false">取消</n-button>
</n-space>
</div>
</n-modal>
<n-modal v-model:show="update_show" preset="card" :style="{width: '700px'}" title="修改信息" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.name"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">类型</div>
</n-tag>
<n-radio-group v-model:value="update_data.type" name="update_type_radio">
<n-space>
<n-radio :value="1">商户</n-radio>
<n-radio :value="2">个人</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">账号</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.account"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分账公式</div>
</n-tag>
<n-input :autosize="{
minRows: 10,
maxRows: 10
}" type="textarea" class="form_textarea_wrapper"
v-model:value="update_data.formula"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分账测试</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="test_data.in_value" placeholder="入参"></n-input>
<n-button @click="ProfitsharingTest()" type="info">计算</n-button>
<n-input class="form_input_wrapper" v-model:value="test_data.out_value" placeholder="测试结果"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分账描述</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="update_data.desc"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">状态</div>
</n-tag>
<n-radio-group v-model:value="update_data.status" name="update_status_radio">
<n-space>
<n-radio :value="1">可用</n-radio>
<n-radio :value="2">停用</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-button @click="ProfitsharingUpdate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-modal v-model:show="create_show" preset="card" :style="{width: '700px'}" title="新建" :auto-focus="false"
:bordered="false">
<div>
<n-space align="center">
<n-tag>
<div class="form_tag_wrapper">名称</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.name"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">类型</div>
</n-tag>
<n-radio-group v-model:value="create_data.type" name="update_type_radio">
<n-space>
<n-radio :value="1">商户</n-radio>
<n-radio :value="2">个人</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">账号</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.account"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分账公式</div>
</n-tag>
<n-input :autosize="{
minRows: 10,
maxRows: 10
}" type="textarea" class="form_textarea_wrapper"
v-model:value="create_data.formula"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分账测试</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="test_data.in_value" placeholder="入参"></n-input>
<n-button @click="ProfitsharingTest()" type="info">计算</n-button>
<n-input class="form_input_wrapper" v-model:value="test_data.out_value" placeholder="测试结果"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">分账备注</div>
</n-tag>
<n-input class="form_input_wrapper" v-model:value="create_data.desc"></n-input>
</n-space>
<n-space mt-2 align="center">
<n-tag>
<div class="form_tag_wrapper">状态</div>
</n-tag>
<n-radio-group v-model:value="create_data.status" name="update_status_radio">
<n-space>
<n-radio :value="1">可用</n-radio>
<n-radio :value="2">停用</n-radio>
</n-space>
</n-radio-group>
</n-space>
<n-button @click="ProfitsharingCreate()" type="info" mt-2>确定</n-button>
</div>
</n-modal>
<n-card mt-2 title="分账管理">
<div>
<n-alert v-if="profitsharing_type !== 3" title="如果使用微信分账,使用前请务必前往微信支付后台开通分账功能,且配置管理分账接收方。接收方商家 - 分账接收设置 - 分账回退设置
需保持开启状态。" type="warning"></n-alert>
<n-alert v-else title="当前模式为站内分账,下列数据只做展示,后续金额需要手动进行分账。" type="warning"></n-alert>
<n-alert mt-2 v-if="!profitsharing_status" title="请先前往「额外配置」标签开启分账功能" type="error"></n-alert>
<div v-else mt-2>
<n-space>
<n-button @click="createShowClick()" type="success">新建</n-button>
<n-button @click="deleteShowClick()" type="error">删除</n-button>
<n-button @click="updateShowClick()" type="info"></n-button>
</n-space>
</div>
<n-data-table mt-2 v-model:checked-row-keys="profitsharing_active" :columns="profitsharing_columns"
:row-key="row=>row.id" :data="profitsharing_list"/>
</div>
</n-card>
</div>
</template>
<style scoped>
.form_textarea_wrapper {
width: 300px;
}
</style>