Merge branch '20260511-long'
This commit is contained in:
@@ -32,3 +32,4 @@ bin-release/
|
|||||||
/.kbctx
|
/.kbctx
|
||||||
/server/.spool
|
/server/.spool
|
||||||
/server/.claude
|
/server/.claude
|
||||||
|
/.spool
|
||||||
|
|||||||
@@ -104,3 +104,8 @@ export function orderActionLogStats(params?: { start_time?: string; end_time?: s
|
|||||||
export function orderBatchAssignAssistant(params: { order_ids: number[]; assistant_id: number }) {
|
export function orderBatchAssignAssistant(params: { order_ids: number[]; assistant_id: number }) {
|
||||||
return request.post({ url: '/order.order/assignAssistant', params })
|
return request.post({ url: '/order.order/assignAssistant', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 设置/取消支付单豁免权 */
|
||||||
|
export function orderSetExempt(params: { id: number; is_exempt: 0 | 1 }) {
|
||||||
|
return request.post({ url: '/order.order/setExempt', params })
|
||||||
|
}
|
||||||
|
|||||||
@@ -911,11 +911,12 @@
|
|||||||
<span class="text-red-500">¥{{ row.amount }}</span>
|
<span class="text-red-500">¥{{ row.amount }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="状态" width="82" align="center">
|
<el-table-column label="状态" width="100" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
||||||
{{ row.status_desc || orderStatusText(row.status) }}
|
{{ row.status_desc || orderStatusText(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
|
<el-tag v-if="row.is_exempt === 1" type="warning" size="small" class="ml-1">豁免</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
||||||
@@ -968,11 +969,12 @@
|
|||||||
<span class="text-red-500">¥{{ row.amount }}</span>
|
<span class="text-red-500">¥{{ row.amount }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="状态" width="82" align="center">
|
<el-table-column label="状态" width="100" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
||||||
{{ row.status_desc || orderStatusText(row.status) }}
|
{{ row.status_desc || orderStatusText(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
|
<el-tag v-if="row.is_exempt === 1" type="warning" size="small" class="ml-1">豁免</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
||||||
|
|||||||
@@ -925,11 +925,12 @@
|
|||||||
<span class="text-red-500">¥{{ row.amount }}</span>
|
<span class="text-red-500">¥{{ row.amount }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="状态" width="82" align="center">
|
<el-table-column label="状态" width="100" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
||||||
{{ row.status_desc || orderStatusText(row.status) }}
|
{{ row.status_desc || orderStatusText(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
|
<el-tag v-if="row.is_exempt === 1" type="warning" size="small" class="ml-1">豁免</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
||||||
@@ -982,11 +983,12 @@
|
|||||||
<span class="text-red-500">¥{{ row.amount }}</span>
|
<span class="text-red-500">¥{{ row.amount }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="状态" width="82" align="center">
|
<el-table-column label="状态" width="100" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
<el-tag :type="payOrderStatusTag(row.status)" size="small">
|
||||||
{{ row.status_desc || orderStatusText(row.status) }}
|
{{ row.status_desc || orderStatusText(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
|
<el-tag v-if="row.is_exempt === 1" type="warning" size="small" class="ml-1">豁免</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
<el-table-column prop="creator_name" label="创建人" width="80" show-overflow-tooltip />
|
||||||
|
|||||||
@@ -180,11 +180,12 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="订单状态" width="100">
|
<el-table-column label="订单状态" width="120">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag :type="getStatusTag(row.status)">
|
<el-tag :type="getStatusTag(row.status)">
|
||||||
{{ getStatusText(row.status) }}
|
{{ getStatusText(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
|
<el-tag v-if="row.is_exempt === 1" type="warning" size="small" class="ml-1">豁免</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
@@ -270,6 +271,14 @@
|
|||||||
>
|
>
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-perms="['order.order/setExempt']"
|
||||||
|
:type="row.is_exempt === 1 ? 'warning' : 'default'"
|
||||||
|
link
|
||||||
|
@click="handleToggleExempt(row)"
|
||||||
|
>
|
||||||
|
{{ row.is_exempt === 1 ? '取消豁免' : '设为豁免' }}
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -779,7 +788,8 @@ import {
|
|||||||
orderActionLogs,
|
orderActionLogs,
|
||||||
orderActionLogStats,
|
orderActionLogStats,
|
||||||
orderBatchAssignAssistant,
|
orderBatchAssignAssistant,
|
||||||
orderSplit
|
orderSplit,
|
||||||
|
orderSetExempt
|
||||||
} from '@/api/order'
|
} from '@/api/order'
|
||||||
import { getAssistants } from '@/api/tcm'
|
import { getAssistants } from '@/api/tcm'
|
||||||
import { generateOrderQrcode } from '@/api/tcm'
|
import { generateOrderQrcode } from '@/api/tcm'
|
||||||
@@ -1494,6 +1504,19 @@ const handleDelete = async (row: any) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleToggleExempt = async (row: any) => {
|
||||||
|
const newVal: 0 | 1 = row.is_exempt === 1 ? 0 : 1
|
||||||
|
const actionText = newVal === 1 ? '设为豁免' : '取消豁免'
|
||||||
|
try {
|
||||||
|
await feedback.confirm(`确定要${actionText}该支付单吗?豁免后关联此单的业务订单将跳过定金门槛校验。`)
|
||||||
|
await orderSetExempt({ id: row.id, is_exempt: newVal })
|
||||||
|
feedback.msgSuccess(`${actionText}成功`)
|
||||||
|
getLists()
|
||||||
|
} catch (error) {
|
||||||
|
// 用户取消操作
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 小程序码相关
|
// 小程序码相关
|
||||||
const qrcodeDialogVisible = ref(false)
|
const qrcodeDialogVisible = ref(false)
|
||||||
const qrcodeLoading = ref(false)
|
const qrcodeLoading = ref(false)
|
||||||
|
|||||||
@@ -151,12 +151,14 @@
|
|||||||
stripe
|
stripe
|
||||||
>
|
>
|
||||||
<el-table-column type="selection" width="48" align="center" />
|
<el-table-column type="selection" width="48" align="center" />
|
||||||
<el-table-column label="ID" min-width="50">
|
<el-table-column label="ID" min-width="70">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<div class="patient-cell">
|
<div class="patient-cell">
|
||||||
<!-- <div class="patient-avatar">{{ (row.patient_name || '患').charAt(0) }}</div> -->
|
|
||||||
<div class="patient-info">
|
<div class="patient-info">
|
||||||
<div class="patient-name">{{ row.id }}</div>
|
<div class="patient-name">
|
||||||
|
{{ row.id }}
|
||||||
|
<el-tag v-if="row.assign_read_at === null && row.assistant_id > 0" type="danger" size="small" effect="dark" class="ml-1">NEW</el-tag>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -1352,7 +1354,7 @@ const handleSingleAssign = (row: any) => {
|
|||||||
currentRow.value = row
|
currentRow.value = row
|
||||||
batchAssignIds.value = []
|
batchAssignIds.value = []
|
||||||
// 确保类型一致,转换为数字
|
// 确保类型一致,转换为数字
|
||||||
assignForm.value.assistant_id = row.assistant_id ? Number(row.assistant_id) : null
|
assignForm.value.assistant_id = Number(row.assistant_id) > 0 ? Number(row.assistant_id) : null
|
||||||
assignDialogVisible.value = true
|
assignDialogVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="dh5-card-sub">
|
<div class="dh5-card-sub">
|
||||||
#{{ row.id }} · {{ row.diagnosis_date_text || formatDateTime(row.create_time) }}
|
#{{ row.id }} · {{ row.diagnosis_date_text || formatDateTime(row.create_time) }}
|
||||||
|
<span v-if="row.assign_read_at === null && row.assistant_id > 0" class="dh5-tag-new">NEW</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="dh5-card-tags">
|
<div class="dh5-card-tags">
|
||||||
@@ -1672,6 +1673,18 @@ $dh5-card-bg: #ffffff;
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dh5-tag-new {
|
||||||
|
display: inline-block;
|
||||||
|
background: #ef4444;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 1px 4px;
|
||||||
|
border-radius: 3px;
|
||||||
|
margin-left: 4px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
.dh5-meta-gender,
|
.dh5-meta-gender,
|
||||||
.dh5-meta-age {
|
.dh5-meta-age {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
|||||||
@@ -97,12 +97,14 @@
|
|||||||
stripe
|
stripe
|
||||||
>
|
>
|
||||||
<el-table-column type="selection" width="48" align="center" />
|
<el-table-column type="selection" width="48" align="center" />
|
||||||
<el-table-column label="ID" min-width="50">
|
<el-table-column label="ID" min-width="70">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<div class="patient-cell">
|
<div class="patient-cell">
|
||||||
<!-- <div class="patient-avatar">{{ (row.patient_name || '患').charAt(0) }}</div> -->
|
|
||||||
<div class="patient-info">
|
<div class="patient-info">
|
||||||
<div class="patient-name">{{ row.id }}</div>
|
<div class="patient-name">
|
||||||
|
{{ row.id }}
|
||||||
|
<el-tag v-if="row.assign_read_at === null && row.assistant_id > 0" type="danger" size="small" effect="dark" class="ml-1">NEW</el-tag>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -1088,7 +1090,7 @@ const handleSingleAssign = (row: any) => {
|
|||||||
assignMode.value = 'single'
|
assignMode.value = 'single'
|
||||||
currentRow.value = row
|
currentRow.value = row
|
||||||
// 确保类型一致,转换为数字
|
// 确保类型一致,转换为数字
|
||||||
assignForm.value.assistant_id = row.assistant_id ? Number(row.assistant_id) : null
|
assignForm.value.assistant_id = Number(row.assistant_id) > 0 ? Number(row.assistant_id) : null
|
||||||
assignDialogVisible.value = true
|
assignDialogVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -557,6 +557,24 @@ class OrderController extends BaseAdminController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setExempt()
|
||||||
|
{
|
||||||
|
$id = (int) $this->request->post('id', 0);
|
||||||
|
$isExempt = (int) $this->request->post('is_exempt', 0);
|
||||||
|
if ($id <= 0) {
|
||||||
|
return $this->fail('参数错误');
|
||||||
|
}
|
||||||
|
if (!in_array($isExempt, [0, 1], true)) {
|
||||||
|
return $this->fail('is_exempt 值无效');
|
||||||
|
}
|
||||||
|
$result = OrderLogic::setExempt($id, $isExempt);
|
||||||
|
if (!$result) {
|
||||||
|
return $this->fail(OrderLogic::getError());
|
||||||
|
}
|
||||||
|
$this->logOrderAction($id, 'set_exempt', $isExempt === 1 ? '设置豁免权' : '取消豁免权');
|
||||||
|
return $this->success($isExempt === 1 ? '已设置豁免权' : '已取消豁免权');
|
||||||
|
}
|
||||||
|
|
||||||
private function logOrderAction(int $orderId, string $action, string $summary = ''): void
|
private function logOrderAction(int $orderId, string $action, string $summary = ''): void
|
||||||
{
|
{
|
||||||
OrderActionLogLogic::record($orderId, (int) $this->adminId, $this->adminInfo, $action, $summary);
|
OrderActionLogLogic::record($orderId, (int) $this->adminId, $this->adminInfo, $action, $summary);
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ class DiagnosisController extends BaseAdminController
|
|||||||
|
|
||||||
$params = (new DiagnosisValidate())->goCheck('id');
|
$params = (new DiagnosisValidate())->goCheck('id');
|
||||||
$result = DiagnosisLogic::detail($params);
|
$result = DiagnosisLogic::detail($params);
|
||||||
|
DiagnosisLogic::markAssignRead((int) ($params['id'] ?? 0), $this->adminId);
|
||||||
return $this->data($result);
|
return $this->data($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +136,7 @@ class DiagnosisController extends BaseAdminController
|
|||||||
if (empty($result)) {
|
if (empty($result)) {
|
||||||
return $this->fail(DiagnosisLogic::getError() ?: '诊单不存在或无权访问');
|
return $this->fail(DiagnosisLogic::getError() ?: '诊单不存在或无权访问');
|
||||||
}
|
}
|
||||||
|
DiagnosisLogic::markAssignRead((int) ($params['id'] ?? 0), $this->adminId);
|
||||||
return $this->data($result);
|
return $this->data($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -177,14 +177,14 @@ class DiagnosisLists extends BaseAdminDataLists implements ListsSearchInterface
|
|||||||
$isCompletedTab = !$pendingWideSearch && isset($this->params['completed_appointment']) && (string) $this->params['completed_appointment'] === '1';
|
$isCompletedTab = !$pendingWideSearch && isset($this->params['completed_appointment']) && (string) $this->params['completed_appointment'] === '1';
|
||||||
if ($isCompletedTab) {
|
if ($isCompletedTab) {
|
||||||
$maxCompletedAptExpr = '(SELECT MAX(CONCAT(apt.appointment_date, \' \', IFNULL(NULLIF(TRIM(apt.appointment_time), \'\'), \'00:00:00\'))) FROM ' . $aptTbl . ' apt WHERE apt.patient_id = ' . $diagTbl . '.id AND apt.status = 3' . $minAptDateCond . ')';
|
$maxCompletedAptExpr = '(SELECT MAX(CONCAT(apt.appointment_date, \' \', IFNULL(NULLIF(TRIM(apt.appointment_time), \'\'), \'00:00:00\'))) FROM ' . $aptTbl . ' apt WHERE apt.patient_id = ' . $diagTbl . '.id AND apt.status = 3' . $minAptDateCond . ')';
|
||||||
$orderRaw = 'IFNULL(' . $maxCompletedAptExpr . ", '1970-01-01 00:00:00') DESC, {$diagTbl}.id DESC";
|
$orderRaw = $diagTbl . '.assign_read_at IS NULL DESC, IFNULL(' . $maxCompletedAptExpr . ", '1970-01-01 00:00:00') DESC, {$diagTbl}.id DESC";
|
||||||
} else {
|
} else {
|
||||||
$orderRaw = 'CASE IFNULL(' . $minAptStatusExpr . ', 999) WHEN 4 THEN 1 WHEN 1 THEN 2 WHEN 3 THEN 3 ELSE 4 END ASC, IFNULL(' . $minAptExpr . ", '9999-12-31 23:59:59') ASC, {$diagTbl}.id DESC";
|
$orderRaw = $diagTbl . '.assign_read_at IS NULL DESC, CASE IFNULL(' . $minAptStatusExpr . ', 999) WHEN 4 THEN 1 WHEN 1 THEN 2 WHEN 3 THEN 3 ELSE 4 END ASC, IFNULL(' . $minAptExpr . ", '9999-12-31 23:59:59') ASC, {$diagTbl}.id DESC";
|
||||||
}
|
}
|
||||||
|
|
||||||
$lists = $query
|
$lists = $query
|
||||||
->with(['DiagnosisViewRecord'])
|
->with(['DiagnosisViewRecord'])
|
||||||
->field(['id', 'patient_id', 'patient_name', 'id_card', 'phone', 'gender', 'age', 'diagnosis_date', 'diagnosis_type', 'syndrome_type', 'assistant_id', 'status', 'create_time', 'update_time'])
|
->field(['id', 'patient_id', 'patient_name', 'id_card', 'phone', 'gender', 'age', 'diagnosis_date', 'diagnosis_type', 'syndrome_type', 'assistant_id', 'assign_read_at', 'status', 'create_time', 'update_time'])
|
||||||
->append(['gender_desc', 'status_desc', 'diagnosis_date_text'])
|
->append(['gender_desc', 'status_desc', 'diagnosis_date_text'])
|
||||||
->orderRaw($orderRaw)
|
->orderRaw($orderRaw)
|
||||||
->limit($this->limitOffset, $this->limitLength)
|
->limit($this->limitOffset, $this->limitLength)
|
||||||
|
|||||||
@@ -1213,7 +1213,7 @@ class OrderLogic
|
|||||||
}
|
}
|
||||||
|
|
||||||
$rows = $q
|
$rows = $q
|
||||||
->field(['id', 'order_no', 'order_type', 'amount', 'status', 'create_time', 'creator_id', 'remark'])
|
->field(['id', 'order_no', 'order_type', 'amount', 'status', 'create_time', 'creator_id', 'remark', 'is_exempt'])
|
||||||
->order('id', 'desc')
|
->order('id', 'desc')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
@@ -1400,4 +1400,16 @@ class OrderLogic
|
|||||||
'errors' => $errors,
|
'errors' => $errors,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function setExempt(int $id, int $isExempt): bool
|
||||||
|
{
|
||||||
|
$order = Order::find($id);
|
||||||
|
if (!$order) {
|
||||||
|
self::setError('订单不存在');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$order->is_exempt = $isExempt;
|
||||||
|
$order->save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -535,6 +535,19 @@ class DiagnosisLogic extends BaseLogic
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function markAssignRead(int $diagnosisId, int $adminId): void
|
||||||
|
{
|
||||||
|
if ($diagnosisId <= 0 || $adminId <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Db::name('tcm_diagnosis')
|
||||||
|
->where('id', $diagnosisId)
|
||||||
|
->where('assistant_id', $adminId)
|
||||||
|
->whereNull('assign_read_at')
|
||||||
|
->whereNull('delete_time')
|
||||||
|
->update(['assign_read_at' => time()]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @notes 指派医助(每次成功更新写入一条操作记录,批量指派为多次接口调用各记一条)。
|
* @notes 指派医助(每次成功更新写入一条操作记录,批量指派为多次接口调用各记一条)。
|
||||||
* **原医助**:优先诊单 `assistant_id`;若为 0 且本次为指派到某人,则从**最近一条**指派日志推断(覆盖发货释放后库为 0、业务上仍有「前任」医助的情况)。
|
* **原医助**:优先诊单 `assistant_id`;若为 0 且本次为指派到某人,则从**最近一条**指派日志推断(覆盖发货释放后库为 0、业务上仍有「前任」医助的情况)。
|
||||||
@@ -588,7 +601,10 @@ class DiagnosisLogic extends BaseLogic
|
|||||||
Db::name('tcm_diagnosis')
|
Db::name('tcm_diagnosis')
|
||||||
->where('id', $id)
|
->where('id', $id)
|
||||||
->whereNull('delete_time')
|
->whereNull('delete_time')
|
||||||
->update(['assistant_id' => $toAssistantId]);
|
->update([
|
||||||
|
'assistant_id' => $toAssistantId,
|
||||||
|
'assign_read_at' => $toAssistantId > 0 ? null : 0,
|
||||||
|
]);
|
||||||
|
|
||||||
$req = request();
|
$req = request();
|
||||||
$admin = $req->adminInfo ?? [];
|
$admin = $req->adminInfo ?? [];
|
||||||
|
|||||||
@@ -324,7 +324,16 @@ class PrescriptionOrderLogic
|
|||||||
if ($payOrderIds === []) {
|
if ($payOrderIds === []) {
|
||||||
return '未关联支付单,关联支付单总金额须大于等于定金门槛 ¥' . $min;
|
return '未关联支付单,关联支付单总金额须大于等于定金门槛 ¥' . $min;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 豁免权:关联的支付单中有豁免单则跳过金额校验
|
||||||
|
$hasExempt = Order::whereIn('id', $payOrderIds)
|
||||||
|
->whereNull('delete_time')
|
||||||
|
->where('is_exempt', 1)
|
||||||
|
->count();
|
||||||
|
if ($hasExempt > 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// 检查关联支付单的总金额
|
// 检查关联支付单的总金额
|
||||||
$rows = Order::whereIn('id', $payOrderIds)->whereNull('delete_time')->column('amount', 'id');
|
$rows = Order::whereIn('id', $payOrderIds)->whereNull('delete_time')->column('amount', 'id');
|
||||||
$totalAmount = 0.0;
|
$totalAmount = 0.0;
|
||||||
@@ -504,7 +513,7 @@ class PrescriptionOrderLogic
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$rows = Order::whereIn('id', $ids)->whereNull('delete_time')
|
$rows = Order::whereIn('id', $ids)->whereNull('delete_time')
|
||||||
->field(['id', 'order_no', 'order_type', 'amount', 'status', 'create_time', 'creator_id', 'remark'])
|
->field(['id', 'order_no', 'order_type', 'amount', 'status', 'create_time', 'creator_id', 'remark', 'is_exempt'])
|
||||||
->order('id', 'asc')
|
->order('id', 'asc')
|
||||||
->select()
|
->select()
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- 二诊医助:新指派患者已读标记
|
||||||
|
ALTER TABLE `zyt_tcm_diagnosis`
|
||||||
|
ADD COLUMN `assign_read_at` int(10) unsigned DEFAULT NULL
|
||||||
|
COMMENT '医助查看指派时间戳,NULL=未读(新指派红旗)' AFTER `assistant_id`;
|
||||||
|
|
||||||
|
-- 已有数据标记为已读,避免全部显示红旗
|
||||||
|
UPDATE `zyt_tcm_diagnosis` SET `assign_read_at` = UNIX_TIMESTAMP() WHERE `assistant_id` > 0;
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
-- 支付单:设置/取消豁免权(权限节点)
|
||||||
|
SET @order_menu_id := (SELECT id FROM zyt_system_menu WHERE perms = 'order.order/lists' LIMIT 1);
|
||||||
|
|
||||||
|
INSERT INTO zyt_system_menu (
|
||||||
|
pid, type, name, icon, sort, perms, paths, component,
|
||||||
|
selected, params, is_cache, is_show, is_disable, create_time, update_time
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
@order_menu_id, 'A', '设置豁免权', '', 0, 'order.order/setExempt', '', '',
|
||||||
|
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||||
|
FROM DUAL
|
||||||
|
WHERE @order_menu_id IS NOT NULL
|
||||||
|
AND NOT EXISTS (SELECT 1 FROM zyt_system_menu WHERE perms = 'order.order/setExempt');
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
ALTER TABLE `zyt_order`
|
||||||
|
ADD COLUMN `is_exempt` tinyint(1) unsigned NOT NULL DEFAULT 0
|
||||||
|
COMMENT '豁免权:1=关联此单时跳过定金门槛校验' AFTER `status`;
|
||||||
Reference in New Issue
Block a user