This commit is contained in:
ChenQiuYu 2025-05-16 14:14:34 +08:00
parent 04eb4378ab
commit 38243fda48
10 changed files with 424 additions and 302 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -16,32 +16,34 @@
</template>
</el-input>
<div class="list">
<table class="table" style="border-spacing: 0">
<thead style="background:#F1F5FB">
<tr class="table-title" style="background: #f1f5fb">
<th>发药项目</th>
<th>产品标识码</th>
<th>发药数量</th>
<th>已采/应采</th>
<th>追溯码</th>
</tr>
</thead>
<tbody class="table-body">
<tr v-for="(item,index) in list" :key="index">
<td>{{ item.name }}</td>
<td>
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode&&item.idCode.length>0"
@addTraceabilityCode="addTraceAbilityCodeHandler"/>
<div v-else>未关联</div>
</td>
<td>{{ item.selectedNum }}{{ item.selectedUnit }}</td>
<td>{{ item.traceAbilityCodeList ? item.traceAbilityCodeList.length : 0 }}/{{ item.shouldNumber }}</td>
<td>
<TraceabilityCodeAdd :item="item" @addTraceabilityCode="addTraceAbilityCodeHandler"/>
</td>
</tr>
</tbody>
</table>
<el-scrollbar>
<table class="table" style="border-spacing: 0">
<thead style="background:#F1F5FB">
<tr class="table-title" style="background: #f1f5fb">
<th>发药项目</th>
<th>产品标识码</th>
<th>发药数量</th>
<th>已采/应采</th>
<th>追溯码</th>
</tr>
</thead>
<tbody class="table-body">
<tr v-for="(item,index) in list" :key="index">
<td>{{ item.name }}</td>
<td>
<IdCodeListShow :idCodeList="item.idCode" v-if="item.idCode&&item.idCode.length>0"
@addTraceabilityCode="addTraceAbilityCodeHandler"/>
<div v-else>未关联</div>
</td>
<td>{{ item.selectedNum }}{{ item.selectedUnit }}</td>
<td>{{ item.traceAbilityCodeList ? item.traceAbilityCodeList.length : 0 }}/{{ item.shouldNumber }}</td>
<td>
<TraceabilityCodeAdd :item="item" @addTraceabilityCode="addTraceAbilityCodeHandler"/>
</td>
</tr>
</tbody>
</table>
</el-scrollbar>
</div>
</div>
</template>
@ -280,10 +282,12 @@ const addTraceAbilityCodeHandler = (item: any, code: any) => {
align-items: center;
padding: 24px;
}
table, tbody, td {
border-bottom: 1px solid #EAEAEC; /* 明确设置边框 */
}
table{
table {
border: none;
}
</style>

View File

@ -16,27 +16,26 @@
></el-input>
</template>
<template #default>
<table class="table" style="border-spacing: 0">
<thead>
<tr class="table-title">
<th>追溯码</th>
<th>操作</th>
</tr>
</thead>
<tbody class="table-body">
<tr v-for="(item,index) in item.traceAbilityCodeList" :key="index">
<td>{{ item }}</td>
<td>
<div @click="removeTraceAbility(item)">
<div style="width: 100%;max-height: 20px">
<el-table :data="item.traceAbilityCodeList" :max-height="300" style="width: 100%"
:header-cell-style="{background: '#F1F5FB'}">
<el-table-column prop="value" label="追溯码" show-overflow-tooltip>
<template #default="scope">
{{ scope.row }}
</template>
</el-table-column>
<el-table-column label="操作" width="80">
<template #default="scope">
<span style="color: #ff0000" @click="removeTraceAbility(scope.row)">
<el-icon>
<Delete/>
</el-icon>
删除
</div>
</td>
</tr>
</tbody>
</table>
</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
</el-popover>
</template>
@ -96,9 +95,11 @@ const removeTraceAbility = (code: any) => {
<style scoped lang="scss">
.table {
width: 100%;
th {
background: none !important;
}
.table-title {
width: 100%;
height: 36px;
@ -108,19 +109,23 @@ const removeTraceAbility = (code: any) => {
font-style: normal;
padding: 0 25px;
background: #F5FAFF;
th {
text-align: left;
&:first-child {
width: 270px;
padding-left: 24px;
overflow: hidden;
}
&:last-child {
text-align: center;
line-height: 36px;
}
}
}
.table-body {
height: 52px;
font-weight: 500;
@ -128,12 +133,14 @@ const removeTraceAbility = (code: any) => {
color: #666666;
font-style: normal;
padding: 0 25px;
tr {
height: 36px;
font-size: 14px;
color: #333333;
font-weight: 500;
font-style: normal;
td {
height: 36px;
@ -160,6 +167,7 @@ const removeTraceAbility = (code: any) => {
table, tbody, td {
border-bottom: 1px solid #EAEAEC; /* 明确设置边框 */
overflow: hidden;
}
table {

View File

@ -46,7 +46,7 @@ const handleSelect = (item: any) => {
<div class="search_box">
<el-select-v2
v-model="state"
style="width: 100%"
style="width: 500px;height: 100%"
filterable
remote
ref="selectRef"
@ -54,6 +54,9 @@ const handleSelect = (item: any) => {
:options="options"
placeholder="输入关键字搜索药品"
>
<template #prefix>
<span class="iconfont icon-RectangleCopy"></span>
</template>
<template #header>
<div class="header">
<div class="text">药品</div>
@ -91,8 +94,6 @@ const handleSelect = (item: any) => {
box-sizing: border-box;
margin-top: 10px;
margin-bottom: 10px;
}
.header {
display: flex;
@ -116,4 +117,7 @@ const handleSelect = (item: any) => {
white-space: nowrap; /* 防止换行 */
}
}
:deep(.el-select__wrapper.is-filterable){
height: 42px;
}
</style>

View File

@ -693,7 +693,6 @@ const contrastCodeConfirm = (data: any) => {
}
let save = async (isClose:Boolean) => {
try {
await formRef.value.validate()
if (!edit_data.value.purchaseUnitPrice || edit_data.value.purchaseUnitPrice<1){
ElMessage.error('参考进价不能为空或小于1');

View File

@ -3,7 +3,8 @@
title="新增" :height="760" :show-footer="true">
<div class="add-panel" v-loading="isLoading" element-loading-text="正在保存......">
<div class="top">
<el-form :model="inventory_order_data" label-position="top" :rules="formRules" ref="orderForm">
<el-form :model="inventory_order_data" label-position="top" style="height: 100%" :rules="formRules"
ref="orderForm">
<el-row>
<el-col :span="6">
<el-form-item label="订单编号">
@ -48,12 +49,12 @@
</el-row>
<el-row>
<el-col :span="6">
<el-form-item prop="invoiceCode" label="发票号">
<el-form-item prop="invoiceCode" label="发票号" style="margin-bottom: 0">
<el-input style="width: 234px;" v-model="inventory_order_data.invoiceCode"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="supplierId" label="供应商" :rules="formRules.supplierId">
<el-form-item prop="supplierId" label="供应商" :rules="formRules.supplierId" style="margin-bottom: 0">
<el-select style="width: 196px;margin-right: 10px" v-model="inventory_order_data.supplierId"
placeholder="请选择供应商">
<el-option
@ -67,16 +68,18 @@
style="
height: 32px;
width: 32px;
line-height: 32px;"
line-height: 32px;
border: 1px solid rgb(192, 196, 204);
background-color: #fff;"
@click="addSupplier">
<el-icon style="color: #fff">
<el-icon style="color: rgb(192, 196, 204)">
<Plus/>
</el-icon>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" :rules="formRules.purchaseDate">
<el-form-item label="备注" :rules="formRules.purchaseDate" style="margin-bottom: 0">
<el-input v-model="inventory_order_data.remark"/>
</el-form-item>
</el-col>
@ -87,91 +90,103 @@
<div class="add_goods">
<span>添加商品</span>
<div class="search">
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
<GoodsSearch @selectCallBack="goodsSelectCallBack" style="height: 42px"></GoodsSearch>
<div class="default-btn" @click="goodsSelectCallBack" style="margin-left: 24px">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
</div>
</div>
<el-table :data="table_list" style="width: 100%;flex: 1">
<el-table-column prop="name" label="药品名称" width="180" show-overflow-tooltip/>
<el-table-column label="售价" prop="unitPrice" width="80">
</el-table-column>
<el-table-column label="单位" prop="packagingUnit" width="80">
</el-table-column>
<el-table-column label="数量" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.wholeNumber"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
<div class="table" style="padding: 0 24px;">
<el-table :data="table_list"
style="width: 100%;height: 100%;background: #F9FAFC;border: 1px solid #EAEAEC;border-bottom: none"
:header-cell-style="{ backgroundColor:'#F1F5FB'}">
<el-table-column prop="name" label="药品名称" width="180" show-overflow-tooltip/>
<el-table-column label="售价" prop="unitPrice" width="80">
</el-table-column>
<el-table-column label="单位" prop="packagingUnit" width="80">
</el-table-column>
<el-table-column label="数量" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.wholeNumber"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="进价" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.purchaseUnitPrice"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="生产批号" width="150">
<template #default="scope">
<el-input
v-model="scope.row.productionBatchCode"
placeholder="生产批号"
style="width: 100px"
size="small"/>
</template>
</el-table-column>
<el-table-column label="进价" width="110">
<template #default="scope">
<el-input-number
v-model="scope.row.purchaseUnitPrice"
:min="1"
size="small"
controls-position="right"
style="width: 80px"
@change="getTotalPrice"
/>
</template>
</el-table-column>
<el-table-column label="生产批号" width="150">
<template #default="scope">
<el-input
v-model="scope.row.productionBatchCode"
placeholder="生产批号"
style="width: 100px"
size="small"/>
</template>
</el-table-column>
<el-table-column label="生产日期" width="140">
<template #default="scope">
<el-date-picker
v-model="scope.row.productionDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="生产日期"
size="small"
@change="checkProductionDate(scope.row)"
style="width: 100px;"
/>
</template>
</el-table-column>
<el-table-column label="有效日期" width="140">
<template #default="scope">
<el-date-picker
v-model="scope.row.expiryDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="有效日期"
size="small" style="width: 100px;"/>
</template>
</el-table-column>
<el-table-column label="商品追溯码" width="150">
<template #default="scope">
<!-- <el-input-->
<!-- v-model="scope.row.traceabilityCode"-->
<!-- placeholder="商品追溯码"-->
<!-- style="width: 100px"-->
<!-- size="small"/>-->
<TraceabilityCodeInput v-model="scope.row.traceabilityCodeList"></TraceabilityCodeInput>
</template>
</el-table-column>
<el-table-column label="生产日期" width="140">
<template #default="scope">
<el-date-picker
v-model="scope.row.productionDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="生产日期"
size="small"
@change="checkProductionDate(scope.row)"
style="width: 100px;"
/>
</template>
</el-table-column>
<el-table-column label="有效日期" width="140">
<template #default="scope">
<el-date-picker
v-model="scope.row.expiryDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="有效日期"
size="small" style="width: 100px;"/>
</template>
</el-table-column>
<el-table-column label="商品追溯码" width="150">
<template #default="scope">
<!-- <el-input-->
<!-- v-model="scope.row.traceabilityCode"-->
<!-- placeholder="商品追溯码"-->
<!-- style="width: 100px"-->
<!-- size="small"/>-->
<TraceabilityCodeInput v-model="scope.row.traceabilityCodeList"></TraceabilityCodeInput>
</template>
</el-table-column>
<el-table-column label="操作" width="150">
<template #default="scope">
<!-- <el-button size="small" @click="openCheckoutDetail(scope.row)" type="danger" plain>溯源码</el-button>-->
<el-button size="small" @click="removeTableRow(scope.row)" type="danger" plain>移除</el-button>
</template>
</el-table-column>
</el-table>
</el-table-column>
<el-table-column label="操作" width="200">
<template #default="scope">
<!-- <el-button size="small" @click="openCheckoutDetail(scope.row)" type="danger" plain>溯源码</el-button>-->
<span style="color: #ff0000" @click="removeTableRow(scope.row)">
<el-icon>
<Delete/>
</el-icon>
移除
</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<template #footer>
@ -204,7 +219,7 @@ import AddSupplier from "@/components/inventory/supplier/AddSupplier.vue";
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
import CheckoutDetail from "@/components/inventory/CheckoutDetail.vue";
import TraceabilityCodeInput from "@/components/inventory/purchase/TraceabilityCodeInput.vue";
import {Plus} from "@element-plus/icons-vue";
import {Plus, Delete} from "@element-plus/icons-vue";
const orderForm = ref()
const checkoutDetailRef = ref<any>(false);
@ -482,19 +497,20 @@ defineExpose({init})
.add-panel {
height: 602px;
padding: 24px 24px 0;
display: flex;
flex-direction: column;
.top {
height: 180px;
height: 204px;
padding: 24px;
}
.table_content {
flex: 1;
margin-top: 24px;
display: flex;
flex-direction: column;
background: #F9FAFC;
min-height: 0;
.add_goods {
height: 90px;
@ -505,11 +521,21 @@ defineExpose({init})
font-size: 18px;
color: #333333;
font-style: normal;
padding: 0 24px;
.search {
width: 50%;
display: flex;
align-items: center;
height: 42px;
}
}
.table {
flex: 1;
min-height: 0;
background: #F9FAFC;
}
}
}
@ -523,7 +549,8 @@ defineExpose({init})
font-size: 22px;
color: #333333;
font-style: normal;
.btn{
.btn {
display: flex;
}
}

View File

@ -5,8 +5,8 @@
@blur="handlerBlur" @keydown.enter="addCode"></el-input>
</template>
<div class="code-popo">
<el-table :data="list">
<el-table-column label="追溯码" prop="code">
<el-table :data="list" :max-height="260" :header-cell-style="{background: '#F1F5FB'}">
<el-table-column label="追溯码" prop="code" show-overflow-tooltip>
<template #default="{row}">
{{ row.code.slice(0, 7) }}&nbsp;{{ row.code.slice(7) }}
</template>
@ -18,12 +18,13 @@
</span>
</template>
</el-table-column>
<el-table-column label="操作" width="70">
<el-table-column label="操作" width="90">
<template #default="{row}">
<span class="remove" @click="removeRow(row)">
<span class="remove" style="color: #ff0000" @click="removeRow(row)">
<el-icon>
<Close/>
<Delete/>
</el-icon>
删除
</span>
</template>
</el-table-column>
@ -34,7 +35,7 @@
</template>
<script setup lang="ts">
import {ref, watch, onMounted, onUnmounted, nextTick} from "vue";
import {Close} from "@element-plus/icons-vue";
import {Delete} from "@element-plus/icons-vue";
import CodeNumEditDialog from "@/components/inventory/purchase/CodeNumEditDialog.vue";
interface listType {

View File

@ -1,47 +1,67 @@
<template>
<div class="container_grant">
<Mask :width="540" :height="363" :is-show="isExchange" @close="close" :title="'兑换积分'"
:show-footer="true">
<div class="content_grant">
<div class="head">
<div class="name">
{{props.info.realName}}
</div>
<div class="sex">
{{props.info.sex}}
</div>
<div class="phone">
{{props.info.phone}}
</div>
<div class="point">
积分<span class="num">{{ props.info.integralBalance }}</span>
<img style="width: 60px;height: 60px"
:src="'/static/images/member/' + (props.info.sex === 1 ? 'man' : 'women') + '.png'"
alt="">
<div class="right">
<div class="name">
{{ props.info.name }}
</div>
<div class="text">
<div class="phone">
{{ props.info.phone }}
</div>
<div class="grant-name">
积分
<img style="width: 16px;height: 16px" src="/static/images/member/1.png" alt="">
<span class="num">{{ props.info.integralBalance }}</span>
</div>
</div>
</div>
</div>
<div>
<el-form label-position="top" :rules="rules" ref="formDataRef" :model="data">
<el-form-item label="兑换积分" prop="integral" >
<el-input placeholder="请输入兑换积分" v-model="data.integral"></el-input>
</el-form-item>
<el-form-item label="兑换备注" prop="remark">
<el-input placeholder="请输入兑换备注" v-model="data.remark"></el-input>
</el-form-item>
<div style="width: 100%">
<el-form
label-position="top" :rules="rules" ref="formDataRef" :model="data"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="兑换积分" prop="integral">
<el-input placeholder="请输入兑换积分" v-model="data.integral"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="兑换备注" prop="remark">
<el-input placeholder="请输入兑换备注" v-model="data.remark"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<div class="footer">
<div>
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
<template #footer>
<div class="footer">
<div>
<el-checkbox v-model="printReceipt">同时打印凭证</el-checkbox>
</div>
<div style="display:flex;">
<div class="default-btn" @click="reduceIntegral">兑换</div>
<div class="default-btn" style="margin-left: 24px" @click="close">取消</div>
</div>
</div>
<div>
<el-button type="primary" @click="reduceIntegral">发放</el-button>
<el-button @click="close">取消</el-button>
</div>
</div>
</div>
</template>
</Mask>
</template>
<script setup lang="ts">
import {ref,defineEmits, defineProps} from 'vue'
import {ref, defineEmits, defineProps} from 'vue'
import {ElFormItem} from "element-plus";
import {post} from "@/utils/request.ts";
import Mask from "@/components/common/Mask.vue";
const isExchange = defineModel()
const emit = defineEmits(['close'])
const props = defineProps({
info: {
@ -54,29 +74,28 @@ const close = () => {
data.value = {}
emit('close')
}
const rules ={
const rules = {
integral: [
{required: true, message: '请输入发放积分', trigger: 'blur'},
{required: true, message: '请输入兑换积分', trigger: 'blur'},
{min: 1, message: '积分不能小于1', trigger: 'blur'}
],
remark:[
{required: true, message: '请输入兑换备注', trigger: 'blur'},
remark: [
{required: true, message: '请输入兑换备注', trigger: 'blur'},
]
}
const data = ref<any>({
integral: 0,
});
const formDataRef = ref();
const reduceIntegral = () => {
const reduceIntegral = () => {
formDataRef.value?.validate((valid: boolean) => {
if (!valid) {
console.log("表单验证失败",data.value);
return;
}
//
data.value.integral =data.value.integral * -1
data.value.integral = data.value.integral * -1
data.value.vipId = props.info.id
post("vip/integral/add",data.value).then((res: any) => {
post("vip/integral/add", data.value).then((res: any) => {
formDataRef.value?.resetFields();
close()
})
@ -86,42 +105,62 @@ const reduceIntegral = () => {
</script>
<style scoped lang="scss">
.container_grant {
background-color: #fff;
.title_grant {
padding-bottom: 20px;
font-size: 18px;
}
.content_grant {
height: 100%;
padding: 24px;
.content_grant {
.head {
height: 50px;
.head {
height: 60px;
display: flex;
align-items: center;
margin-bottom: 16px;
.name {
font-weight: bold;
font-size: 24px;
color: #333333;
line-height: 33px;
text-align: left;
font-style: normal;
}
.right {
display: flex;
align-items: center;
background-color: rgba(220, 222, 223, 0.5);
border-radius: 10px;
padding-left: 20px;
margin-bottom: 20px;
border: 1px solid rgba(0, 0, 0, 0.05);
.sex{
margin:0 10px;
}
.phone{
height: 21px;
line-height: 25px;
}
.point{
margin:0 30px 0 50px;
.num{
color: rgba(237, 120, 23, 0.67);
flex-direction: column;
justify-content: center;
margin-left: 16px;
.text {
margin-top: 4px;
display: flex;
.phone {
margin-right: 20px;
}
.grant-name {
display: flex;
.num {
font-weight: bold;
font-size: 24px;
color: #4D6DE4;
font-style: normal;
line-height: 16px;
margin-left: 6px;
}
}
}
}
}
.footer {
display: flex;
justify-content: space-between;
padding-top: 20px;
}
}
.footer {
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 24px;
}
</style>

View File

@ -1,48 +1,63 @@
<template>
<div class="container_grant">
<div class="content_grant">
<div class="head">
<div class="name">
{{props.info.realName}}
<Mask :width="540" :height="363" :is-show="isGrant" @close="isGrant=false" :title="'发放积分'" :show-footer="true">
<template #default>
<div class="content_grant">
<div class="head">
<img style="width: 60px;height: 60px"
:src="'/static/images/member/' + (props.info.sex === 1 ? 'man' : 'women') + '.png'"
alt="">
<div class="right">
<div class="name">
{{ props.info.name }}
</div>
<div class="text">
<div class="phone">
{{ props.info.phone }}
</div>
<div class="grant-name">
积分
<img style="width: 16px;height: 16px" src="/static/images/member/1.png" alt="">
<span class="num">{{ props.info.integralBalance }}</span>
</div>
</div>
</div>
</div>
<div class="sex">
{{props.info.sex}}
</div>
<div class="phone">
{{props.info.phone}}
</div>
<div class="point">
积分<span class="num">{{props.info.integralBalance}}</span>
<div style="width: 100%">
<el-form
label-position="top" :rules="rules" ref="ruleFormRef" :model="data"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="发放积分" prop="integral">
<el-input v-model="data.integral" placeholder="请输入发放积分"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发放备注" prop="remark">
<el-input v-model="data.remark" placeholder="请输入发放备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<div>
<el-form
:rules="rules"
v-model="data"
label-position="top"
ref="ruleFormRef"
require-asterisk-position="right"
>
<el-form-item label="发放积分" prop="integral">
<el-input v-model="data.integral" placeholder="请输入发放积分"></el-input>
</el-form-item>
<el-form-item label="发放备注" prop="remark">
<el-input v-model="data.remark" placeholder="请输入发放备注"></el-input>
</el-form-item>
</el-form>
</template>
<template #footer>
<div class="footer">
<div class="default-btn" @click="grant()">发放</div>
<div class="default-btn" style="margin-left: 24px" @click="close">取消</div>
</div>
</div>
<div class="footer">
<el-button type="primary" @click="grant()">发放</el-button>
<el-button @click="close">取消</el-button>
</div>
</div>
</template>
</Mask>
</template>
<script setup lang="ts">
import {ref,defineEmits,defineProps} from 'vue'
import {ref, defineEmits, defineProps, onMounted} from 'vue'
import {post} from "@/utils/request.ts";
import {ElFormItem} from "element-plus";
import {ElFormItem, ElMessage} from "element-plus";
import Mask from "@/components/common/Mask.vue";
const isGrant = defineModel()
const emit = defineEmits(['close'])
const props = defineProps({
info: {
@ -50,64 +65,92 @@ const props = defineProps({
default: () => ({})
}
})
const rules ={
integral: [
{required: true, message: '请输入发放积分', trigger: 'blur'},
],
remark:[
{required: true, message: '请输入备注', trigger: 'blur'},
const rules = {
integral: [
{required: true, message: '请输入兑换积分', trigger: 'blur'},
{min: 0, message: '积分不能小于0', trigger: 'blur'}
],
remark: [
{required: true, message: '请输入兑换备注', trigger: 'blur'},
]
}
const close = () => {
data.value = {}
emit('close')
}
const data=ref<any>({})
const data = ref<any>({})
const ruleFormRef = ref()
const grant = async () => {
data.value.vipId = props.info.id
post('vip/integral/add', data.value).then((res: any) => {
close()
ruleFormRef.value?.validate((valid: any) => {
if (!valid) return
data.value.vipId = props.info.id
post('vip/integral/add', data.value).then((res: any) => {
ElMessage.success('已发放')
close()
})
})
}
</script>
<style scoped lang="scss">
.container_grant {
background-color: #fff;
.title_grant {
padding-bottom: 20px;
font-size: 18px;
}
.content_grant {
height: 100%;
padding: 24px;
.content_grant {
.head {
height: 50px;
.head {
height: 60px;
display: flex;
align-items: center;
margin-bottom: 16px;
.name {
font-weight: bold;
font-size: 24px;
color: #333333;
line-height: 33px;
text-align: left;
font-style: normal;
}
.right {
display: flex;
align-items: center;
background-color: rgba(220, 222, 223, 0.5);
border-radius: 10px;
padding-left: 20px;
margin-bottom: 20px;
border: 1px solid rgba(0, 0, 0, 0.05);
.sex{
margin:0 10px;
}
.phone{
height: 21px;
line-height: 25px;
}
.point{
margin:0 30px 0 50px;
.num{
color: rgba(237, 120, 23, 0.67);
flex-direction: column;
justify-content: center;
margin-left: 16px;
.text {
margin-top: 4px;
display: flex;
.phone {
margin-right: 20px;
}
.grant-name {
display: flex;
.num {
font-weight: bold;
font-size: 24px;
color: #4D6DE4;
font-style: normal;
line-height: 16px;
margin-left: 6px;
}
}
}
}
}
}
.footer {
display: flex;
justify-content: flex-end;
padding-top: 20px;
}
.footer {
height: 100%;
display: flex;
justify-content: flex-end;
align-items: center;
padding: 24px;
}
</style>

View File

@ -74,7 +74,7 @@
}}
</el-descriptions-item>
<el-descriptions-item label="证件类型">
{{ certTypeList.find((item: any) => item.id == listItem.certType)?.name }}
{{ certTypeList.find((item: any) => item.id == Number(listItem.certType))?.name }}
</el-descriptions-item>
>
<el-descriptions-item label="证件号码">{{ listItem.certNo || "-" }}</el-descriptions-item>
@ -152,12 +152,8 @@
</div>
<VipEdit ref="refEdit" @close="init"></VipEdit>
<VipLevelEdit ref="levelEditRef" @close="init"></VipLevelEdit>
<Mask :width="600" :height="400" :is-show="isGrant" @close="isGrant=false" :title="'发放积分'">
<Grant :info="listItem" @close="closeGrant()"></Grant>
</Mask>
<Mask :width="600" :height="400" :is-show="isExchange" @close="isExchange=false" title="兑换积分">
<Exchange :info="listItem" @close="closeExchange()"></Exchange>
</Mask>
<Grant v-model="isGrant" :info="listItem" @close="closeGrant()"></Grant>
<Exchange v-model="isExchange" :info="listItem" @close="closeExchange()"></Exchange>
<Mask :is-show="isFlowingWater" @close="isFlowingWater = false" title="流水记录">
<FlowingWater :info="listItem"></FlowingWater>
</Mask>
@ -235,8 +231,6 @@ const init = () => {
});
});
getChargeList(listItem.value.id);
});
};
const getVipIntegral = (id: any) => {
@ -307,6 +301,7 @@ const btn = (item: any, i: number) => {
//
const openGrant = () => {
isGrant.value = true
console.log(listItem.value)
}
//
const tableData = ref([])
@ -604,10 +599,12 @@ const certTypeList = ref<any>(Object.entries(psnCertTypes).map(([id, name]) => (
display: flex;
flex-direction: column;
min-height: 0;
.list {
flex: 1;
min-height: 0;
}
.bottom {
width: 100%;
height: 60px;