dev
This commit is contained in:
parent
04eb4378ab
commit
38243fda48
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
|
|
@ -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>
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) }} {{ 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 {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue