fix(#591): 请修复 Bug #591:【住院医生站-临床医嘱】长期医嘱点击停嘱未弹出时间录入弹窗

根因:
- Bug #请修复 Bug #591 存在的问题

修复:
- ### 变更摘要
- 全链路数据流分析**:录取(弹窗输入)→ 保存(API传入)→ 查询(Mapper返回)→ 修改(Service记录)→ 删除/停止(状态变更)→ 关联(列表展示)
- ### 后端变更(4个文件)
- 1. `AdviceBatchOpParam.java`** — 停嘱参数添加 `stopTime` 字段
- 新增 `@JsonFormat Date stopTime`,支持前端传入停嘱时间
- 2. `RequestBaseDto.java`** — 查询DTO添加 `stopUserName`、`stopTime` 字段
- 新增 `String stopUserName`(停嘱医生姓名)
- 新增 `Date stopTime`(停嘱时间)
- 3. `AdviceManageAppServiceImpl.java`** — 停嘱Service增强
- 优先使用前端传入的 `stopTime`,兜底用当前时间
- 通过 `SecurityUtils.getNickName()` 获取当前操作用户昵称,记录到 `updateBy`
- 药品和诊疗两个更新入口均已同步修改
- 4. `AdviceManageAppMapper.xml`** — 三个UNION ALL子查询添加字段
- 药品子查询:`T1.effective_dose_end AS stop_time` + `T1.update_by AS stop_user_name`
- 耗材子查询:`NULL AS stop_time` + `'' AS stop_user_name`
- 诊疗子查询:`T1.occurrence_end_time AS stop_time` + `T1.update_by AS stop_user_name`
- ### 前端变更(1个文件)
- `order/index.vue`**:
- 1. **停嘱时间弹窗** — 点击「停嘱」后弹出 `el-dialog`,内含 `el-date-picker`(datetime类型,默认当前时间),确定后才调用API
- 2. **表格列** — 在「皮试」列后面、「诊断」列前面新增两列:
- 「停嘱医生」`prop="stopUserName"`,宽度120px
- 「停嘱时间」`prop="stopTime"`,宽度170px
- 3. **`handleStopAdvice`** — 保留原有校验(未保存/未签发/已停止检查),校验通过后弹出时间选择弹窗而非直接调API
- 4. **`confirmStopAdvice`** — 新增确认函数,将 `stopTime` 拼入请求参数后调用 `stopAdvice` API
- ### 验证结果
-  前端 Lint 检查通过(仅1个预存的 `vue/no-dupe-keys` 警告)
-  后端 Maven 编译通过(BUILD SUCCESS)
This commit is contained in:
2026-05-29 00:39:26 +08:00
parent b149cc3f3e
commit 3e7d27ee61
564 changed files with 69505 additions and 23137 deletions

View File

@@ -10,15 +10,27 @@
@click="clickAct"
>
<div v-if="data.bedOperationalStatus==='U'">
<img :src="emptyBed" class="pf_card_emptyBed_img">
<div class="pf_card_emptyBed_text">{{ data.bedName }}</div>
<img
:src="emptyBed"
class="pf_card_emptyBed_img"
>
<div class="pf_card_emptyBed_text">
{{ data.bedName }}
</div>
</div>
<div v-else>
<div v-if="data.isDischarge" class="pf_card_discharge">
<div
v-if="data.isDischarge"
class="pf_card_discharge"
>
<span style="margin-left: 6px"></span>
</div>
<div class="pf_card_card">
<CardSign :color="getBedBackColor(data.triageLevel)" :title="data.bedName" :tail="getDisplay(data.triageLevel)" />
<CardSign
:color="getBedBackColor(data.triageLevel)"
:title="data.bedName"
:tail="getDisplay(data.triageLevel)"
/>
</div>
<div class="pf_card_nameSexAndAge">
<span class="pf_card_name">{{ data.patientName }}</span>
@@ -28,20 +40,48 @@
<span style="margin-right: 16px">入室时间</span>
{{ moment(data.checkInWardTime).format('YYYY-MM-DD HH:mm') }}
</div>
<div class="pf_card_noCode">{{ data.hisId }}</div>
<div class="pf_card_rescueTimeText">{{ rescueTimeText() }}</div>
<div v-if="data.diag!==''" class="pf_card_diagnosis">
<div class="card-rectangle-text">{{ data.diag }}</div>
<div class="pf_card_noCode">
{{ data.hisId }}
</div>
<div class="pf_card_rescueTimeText">
{{ rescueTimeText() }}
</div>
<div
v-if="data.diag!==''"
class="pf_card_diagnosis"
>
<div class="card-rectangle-text">
{{ data.diag }}
</div>
<span style="margin-left: 4px">(诊断)</span>
</div>
<div v-if="isNewSign()" class="card-rectangle"></div>
<div v-if="is72HourSign()" class="card-rectangle2">超72H</div>
<div
v-if="isNewSign()"
class="card-rectangle"
>
</div>
<div
v-if="is72HourSign()"
class="card-rectangle2"
>
超72H
</div>
<hr class="pf_card_line">
<div class="pf_card_nursingMeasuresString">{{ getStringByCode(data.nursingMeasures, nursingMeasures) }}</div>
<div class="pf_card_specialArrangementString">{{ getStringByCode(data.specialArrangement, specialArrangementList) }}</div>
<div v-if="false" class="pf_card_btn" @click="moreClick">更多</div>
<div class="pf_card_nursingMeasuresString">
{{ getStringByCode(data.nursingMeasures, nursingMeasures) }}
</div>
<div class="pf_card_specialArrangementString">
{{ getStringByCode(data.specialArrangement, specialArrangementList) }}
</div>
<div
v-if="false"
class="pf_card_btn"
@click="moreClick"
>
更多
</div>
</div>
</div>
</template>
<script>

View File

@@ -6,7 +6,7 @@
:data="item"
:bed-config="bedConfig"
@click="clickAct"
@moreClick="moreClickAct"
@more-click="moreClickAct"
/>
</div>
</template>

View File

@@ -1,9 +1,19 @@
<template>
<div class="printCard">
<div ref="refQr" style="float: left; margin: 30px 15px">
<img :src="emptyBed" style="height: 120px" class="pf_card_emptyBed_img">
<div
ref="refQr"
style="float: left; margin: 30px 15px"
>
<img
:src="emptyBed"
style="height: 120px"
class="pf_card_emptyBed_img"
>
</div>
<div class="printView_content" style=" margin: 30px 0">
<div
class="printView_content"
style=" margin: 30px 0"
>
<div>
<span>床号</span>
<span>{{ printData.bedName }}</span>

View File

@@ -1,6 +1,9 @@
<template>
<div class="recordBill">
<div id="div1" class="printView_header">
<div
id="div1"
class="printView_header"
>
<div style="text-align: center; height: 40px">
护理交接班
</div>
@@ -18,35 +21,83 @@
/>
</div>
</div>
<div id="div2" class="printView_content">
<table border="1" cellSpacing="0" width="98%" cellPadding="1" style=" border-collapse:collapse; font-size: 14px" bordercolor="#333333">
<div
id="div2"
class="printView_content"
>
<table
border="1"
cellSpacing="0"
width="98%"
cellPadding="1"
style=" border-collapse:collapse; font-size: 14px"
bordercolor="#333333"
>
<thead>
<TR>
<TD colspan="1">
<DIV style="width: 40px" align="center">类别</DIV>
<DIV
style="width: 40px"
align="center"
>
类别
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 50px" align="center">床号</DIV>
<DIV
style="width: 50px"
align="center"
>
床号
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 60px" align="center">姓名</DIV>
<DIV
style="width: 60px"
align="center"
>
姓名
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 90px" align="center">主诉</DIV>
<DIV
style="width: 90px"
align="center"
>
主诉
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 90px" align="center">既往史</DIV>
<DIV
style="width: 90px"
align="center"
>
既往史
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 90px" align="center">诊断</DIV>
<DIV
style="width: 90px"
align="center"
>
诊断
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 155px" align="center">交接信息</DIV>
<DIV
style="width: 155px"
align="center"
>
交接信息
</DIV>
</TD>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.shiftRecordItems" :key="item.id">
<tr
v-for="item in printData.shiftRecordItems"
:key="item.id"
>
<td v-html="item.typeDisplay" />
<td v-html="item.bedName" />
<td v-html="item.patientName" />

View File

@@ -1,6 +1,9 @@
<template>
<div class="recordBill">
<div :id="'exeSheetTitle' + printData.id" class="printView_header">
<div
:id="'exeSheetTitle' + printData.id"
class="printView_header"
>
<div style="text-align: center; height: 60px">
{{ userStore.hospitalName }}医嘱执行单
</div>
@@ -16,51 +19,119 @@
<span style="display: inline-block; width: 140px">性别{{!printData.patientInfo.gender? '':printData.patientInfo.gender.display}}</span>
</div>-->
</div>
<div :id="'exeSheet' + printData.id" class="printView_content">
<table border="1" cellSpacing="0" width="97%" cellPadding="1" style=" border-collapse:collapse; font-size: 13px" bordercolor="#333333">
<div
:id="'exeSheet' + printData.id"
class="printView_content"
>
<table
border="1"
cellSpacing="0"
width="97%"
cellPadding="1"
style=" border-collapse:collapse; font-size: 13px"
bordercolor="#333333"
>
<thead>
<TR>
<TD rowspan="1">
<DIV style="width: 65px;text-align: center">医嘱日期</DIV>
<DIV style="width: 65px;text-align: center">
医嘱日期
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 120px" align="center">医嘱</DIV>
<DIV
style="width: 120px"
align="center"
>
医嘱
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 10px" align="center" />
<DIV
style="width: 10px"
align="center"
/>
</TD>
<TD colspan="1">
<DIV style="width: 70px" align="center">嘱托</DIV>
<DIV
style="width: 70px"
align="center"
>
嘱托
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 60px" align="center">用量</DIV>
<DIV
style="width: 60px"
align="center"
>
用量
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 40px" align="center">用法</DIV>
<DIV
style="width: 40px"
align="center"
>
用法
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 40px" align="center">频次</DIV>
<DIV
style="width: 40px"
align="center"
>
频次
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 65px" align="center">开立医生</DIV>
<DIV
style="width: 65px"
align="center"
>
开立医生
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 65px" align="center">执行时间</DIV>
<DIV
style="width: 65px"
align="center"
>
执行时间
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 65px" align="center">执行护士</DIV>
<DIV
style="width: 65px"
align="center"
>
执行护士
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">终止时间</DIV>
<DIV
style="width: 55px"
align="center"
>
终止时间
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">终止人</DIV>
<DIV
style="width: 55px"
align="center"
>
终止人
</DIV>
</TD>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.recordData" :key="item.id">
<tr
v-for="item in printData.recordData"
:key="item.id"
>
<td v-html="item.moTime" />
<td v-html="item.orderName" />
<td v-html="item.flag" />
@@ -70,12 +141,20 @@
<td v-html="item.frequency" />
<td :id="item.id">
<span v-if="(item.docSignImage === ''||item.docSignImage === null)">{{ item.moDocName }}</span>
<img v-if="(item.docSignImage !== ''&&item.docSignImage !== null)" :src="'data:image/png;base64,'+ item.docSignImage" style="height: 100%; width: 100%;object-fit: cover;">
<img
v-if="(item.docSignImage !== ''&&item.docSignImage !== null)"
:src="'data:image/png;base64,'+ item.docSignImage"
style="height: 100%; width: 100%;object-fit: cover;"
>
</td>
<td v-html="item.occurrence" />
<td :id="item.id">
<span v-if="(item.perNurserSignImage === ''||item.perNurserSignImage === null)">{{ item.performName }}</span>
<img v-if="(item.perNurserSignImage !== ''&&item.perNurserSignImage !== null)" :src="'data:image/png;base64,'+ item.perNurserSignImage" style="height: 100%; width: 100%;object-fit: cover;">
<img
v-if="(item.perNurserSignImage !== ''&&item.perNurserSignImage !== null)"
:src="'data:image/png;base64,'+ item.perNurserSignImage"
style="height: 100%; width: 100%;object-fit: cover;"
>
</td>
<td />
<td />
@@ -91,10 +170,6 @@ import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js'
import useUserStore from '@/store/modules/user'
export default {
setup() {
const userStore = useUserStore();
return { userStore };
},
props: {
printData: {
type: Object,
@@ -103,6 +178,10 @@ export default {
}
}
},
setup() {
const userStore = useUserStore();
return { userStore };
},
data() {
return {}
},

View File

@@ -12,23 +12,51 @@
</div>
</div>
<div style="display: block; width: 120px; height: 60px; float:left; ">
<div :id="getId(printData.id)" style="float: left; margin: 5px;" />
<div
:id="getId(printData.id)"
style="float: left; margin: 5px;"
/>
<span style="float: left; margin: 5px">{{ printData.priority }}</span>
</div>
</div>
<div :id="printData.id + 'div2'">
<table border="1" cellSpacing="0" width="390px" cellPadding="1" style="margin-left: 8px; border-collapse:collapse; table-layout: fixed; font-size: 14px" bordercolor="#333333">
<table
border="1"
cellSpacing="0"
width="390px"
cellPadding="1"
style="margin-left: 8px; border-collapse:collapse; table-layout: fixed; font-size: 14px"
bordercolor="#333333"
>
<thead>
<TR>
<Th style="width: 160px" v-html="'药品名称'" />
<Th style="width: 75px" v-html="'用量'" />
<Th style="width: 10px" v-html="''" />
<Th style="width: 50px" v-html="'频次'" />
<Th style="width: 75px" v-html="'用法'" />
<Th
style="width: 160px"
v-html="'药品名称'"
/>
<Th
style="width: 75px"
v-html="'用量'"
/>
<Th
style="width: 10px"
v-html="''"
/>
<Th
style="width: 50px"
v-html="'频次'"
/>
<Th
style="width: 75px"
v-html="'用法'"
/>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.orderDetail" :key="item.id">
<tr
v-for="item in printData.orderDetail"
:key="item.id"
>
<td v-html="item.orderName" />
<td v-html="item.doseOnce + item.doseUnit" />
<td v-html="item.flag" />

View File

@@ -1,6 +1,9 @@
<template>
<div class="recordBill">
<div id="div1" class="printView_header">
<div
id="div1"
class="printView_header"
>
<div style="text-align: center; font-size: 20px; height: 40px">
{{ userStore.hospitalName }}输液执行单
</div>
@@ -13,38 +16,88 @@
<span style="margin-left: 18px">科室{{ printData.patientInfo.deptName }}</span>
</div>
</div>
<div id="div2" class="printView_content">
<table border="1" cellSpacing="0" cellPadding="1" style=" border-collapse:collapse; font-size: 14px" bordercolor="#333333">
<div
id="div2"
class="printView_content"
>
<table
border="1"
cellSpacing="0"
cellPadding="1"
style=" border-collapse:collapse; font-size: 14px"
bordercolor="#333333"
>
<thead>
<TR style="height: 30px">
<TD rowspan="1">
<DIV style="width: 35px" align="center">时间</DIV>
<DIV
style="width: 35px"
align="center"
>
时间
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 280px" align="center">药品名称</DIV>
<DIV
style="width: 280px"
align="center"
>
药品名称
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 10px" align="center" />
<DIV
style="width: 10px"
align="center"
/>
</TD>
<TD rowspan="1">
<DIV style="width: 55px" align="center">剂量</DIV>
<DIV
style="width: 55px"
align="center"
>
剂量
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 30px" align="center">频次</DIV>
<DIV
style="width: 30px"
align="center"
>
频次
</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">用法</DIV>
<DIV
style="width: 55px"
align="center"
>
用法
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 70px" align="center">执行时间</DIV>
<DIV
style="width: 70px"
align="center"
>
执行时间
</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 55px" align="center">执行人</DIV>
<DIV
style="width: 55px"
align="center"
>
执行人
</DIV>
</TD>
</TR>
</thead>
<tbody style=" border-collapse:collapse;">
<tr v-for="item in printData.recordData" :key="item.id">
<tr
v-for="item in printData.recordData"
:key="item.id"
>
<td v-html="item.moTime.substring(0,16)" />
<td v-html="item.orderName" />
<td v-html="item.flag" />

View File

@@ -1,9 +1,15 @@
<template>
<div>
<div ref="print">
<div v-for="item in printData" :key="item.id">
<div
v-for="item in printData"
:key="item.id"
>
<div class="myccs2">
<injectLabel :ref="item.id" :print-data="item" />
<injectLabel
:ref="item.id"
:print-data="item"
/>
</div>
</div>
</div>

View File

@@ -1,10 +1,21 @@
<template>
<div>
<div ref="print">
<div v-for="item in printData" :key="item.id">
<div
v-for="item in printData"
:key="item.id"
>
<div class="myccs2">
<orderSheet v-if="!item.type" :ref="item.id" :print-data="item" />
<exeOrderSheet v-if="item.type" :ref="item.id" :print-data="item" />
<orderSheet
v-if="!item.type"
:ref="item.id"
:print-data="item"
/>
<exeOrderSheet
v-if="item.type"
:ref="item.id"
:print-data="item"
/>
</div>
</div>
</div>

View File

@@ -1,5 +1,10 @@
<template>
<Graphics v-if="graphicsDataDone" :value="resInfo" print @done="printPage" />
<Graphics
v-if="graphicsDataDone"
:value="resInfo"
print
@done="printPage"
/>
</template>
<script setup>

View File

@@ -21,7 +21,10 @@
<span>分诊时间</span>
<span>{{ printData.triageTime }}</span>
</div>
<img ref="refQr" style="position: absolute; top: 10px; left: 100px" />
<img
ref="refQr"
style="position: absolute; top: 10px; left: 100px"
>
</div>
</template>
<script>
@@ -30,10 +33,6 @@ import useUserStore from '@/store/modules/user';
export default {
name: 'TriageTicket',
setup() {
const userStore = useUserStore();
return { userStore };
},
props: {
printData: {
type: Object,
@@ -48,6 +47,10 @@ export default {
},
},
},
setup() {
const userStore = useUserStore();
return { userStore };
},
data() {
return {};
},

View File

@@ -2,7 +2,10 @@
<div>
<div ref="print">
<div class="myccs2">
<triageTicketNew ref="printTriage" :print-data="printData" />
<triageTicketNew
ref="printTriage"
:print-data="printData"
/>
</div>
<!-- <div v-for="item in printData" :key="item.id">-->
<!-- <div class="myccs2">-->

View File

@@ -6,7 +6,9 @@
<span style="font-weight: bolder; font-size: 18px; line-height: 36px">{{ printData.greenText }}</span>
<span style="font-weight: bolder; font-size: 18px; line-height: 36px">分诊单</span>
</div>
<div style="position: absolute; top: 135px; text-align: center; width: 300px">{{ printData.hisId }}</div>
<div style="position: absolute; top: 135px; text-align: center; width: 300px">
{{ printData.hisId }}
</div>
<div style="position: absolute; top: 155px; text-align: center; width: 300px">
{{ printData.triageLevel }}{{ printData.dept }}
</div>
@@ -107,10 +109,18 @@
"
/>
<div style="margin-left: 15px">
<div style="font-size: 14px; margin-top: 15px; font-weight: bolder">请仔细核对个人信息后进行挂号</div>
<div style="margin-top: 5px; font-size: 14px">为了您家人和其他患者的健康</div>
<div style="font-size: 14px">请您保持就诊秩序保持诊区安静</div>
<div style="font-size: 14px">祝您早日康复</div>
<div style="font-size: 14px; margin-top: 15px; font-weight: bolder">
请仔细核对个人信息后进行挂号
</div>
<div style="margin-top: 5px; font-size: 14px">
为了您家人和其他患者的健康
</div>
<div style="font-size: 14px">
请您保持就诊秩序保持诊区安静
</div>
<div style="font-size: 14px">
祝您早日康复
</div>
</div>
</div>
</div>

View File

@@ -1,6 +1,9 @@
<template>
<div class="printWrist">
<div id="div1" class="printView_content">
<div
id="div1"
class="printView_content"
>
<div style="margin: 1px;font-size: 12px">
<span>姓名: </span>
<span>{{ printData.patientName }}</span>
@@ -22,7 +25,11 @@
<span style="position: absolute; left: 140px">{{ printData.triageLevel }}</span>
</div>
</div>
<div id="qrcode" ref="refQr" style="padding-top: 1px" />
<div
id="qrcode"
ref="refQr"
style="padding-top: 1px"
/>
</div>
</template>
<script>

View File

@@ -1,9 +1,21 @@
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<el-breadcrumb
class="app-breadcrumb"
separator="/"
>
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
<el-breadcrumb-item
v-for="(item,index) in levelList"
:key="item.path"
>
<span
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
class="no-redirect"
>{{ item.meta.title }}</span>
<a
v-else
@click.prevent="handleLink(item)"
>{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>

View File

@@ -1,55 +1,107 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * ? / L W]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * ? / L W]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
周期从
<el-input-number v-model='cycle01' :min="1" :max="30" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="31" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
周期从
<el-input-number
v-model="cycle01"
:min="1"
:max="30"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="31"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
<el-input-number v-model='average01' :min="1" :max="30" /> 号开始
<el-input-number v-model='average02' :min="1" :max="31 - average01" /> 日执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
<el-input-number
v-model="average01"
:min="1"
:max="30"
/> 号开始
<el-input-number
v-model="average02"
:min="1"
:max="31 - average01"
/> 日执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="5">
每月
<el-input-number v-model='workday' :min="1" :max="31" /> 号最近的那个工作日
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="5"
>
每月
<el-input-number
v-model="workday"
:min="1"
:max="31"
/> 号最近的那个工作日
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="6">
本月最后一天
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="6"
>
本月最后一天
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="7">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 31" :key="item" :label="item" :value="item" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="7"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 31"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>
const emit = defineEmits(['update'])

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
小时允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
小时允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="22" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="23" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="0"
:max="22"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="23"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="22" /> 时开始
<el-input-number v-model='average02' :min="1" :max="23 - average01" /> 小时执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="0"
:max="22"
/> 时开始
<el-input-number
v-model="average02"
:min="1"
:max="23 - average01"
/> 小时执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 24" :key="item" :label="item - 1" :value="item - 1" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 24"
:key="item"
:label="item - 1"
:value="item - 1"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,123 +1,211 @@
<template>
<div>
<el-tabs type="border-card">
<el-tab-pane label="秒" v-if="shouldHide('second')">
<CrontabSecond
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronsecond"
/>
</el-tab-pane>
<div>
<el-tabs type="border-card">
<el-tab-pane
v-if="shouldHide('second')"
label="秒"
>
<CrontabSecond
ref="cronsecond"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="分钟" v-if="shouldHide('min')">
<CrontabMin
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronmin"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('min')"
label="分钟"
>
<CrontabMin
ref="cronmin"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="小时" v-if="shouldHide('hour')">
<CrontabHour
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronhour"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('hour')"
label="小时"
>
<CrontabHour
ref="cronhour"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="日" v-if="shouldHide('day')">
<CrontabDay
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronday"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('day')"
label="日"
>
<CrontabDay
ref="cronday"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="月" v-if="shouldHide('month')">
<CrontabMonth
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronmonth"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('month')"
label="月"
>
<CrontabMonth
ref="cronmonth"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="周" v-if="shouldHide('week')">
<CrontabWeek
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronweek"
/>
</el-tab-pane>
<el-tab-pane
v-if="shouldHide('week')"
label="周"
>
<CrontabWeek
ref="cronweek"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
<el-tab-pane label="年" v-if="shouldHide('year')">
<CrontabYear
@update="updateCrontabValue"
:check="checkNumber"
:cron="crontabValueObj"
ref="cronyear"
/>
</el-tab-pane>
</el-tabs>
<el-tab-pane
v-if="shouldHide('year')"
label="年"
>
<CrontabYear
ref="cronyear"
:check="checkNumber"
:cron="crontabValueObj"
@update="updateCrontabValue"
/>
</el-tab-pane>
</el-tabs>
<div class="popup-main">
<div class="popup-result">
<p class="title">时间表达式</p>
<table>
<thead>
<th v-for="item of tabTitles" :key="item">{{item}}</th>
<th>Cron 表达式</th>
</thead>
<tbody>
<td>
<span v-if="crontabValueObj.second.length < 10">{{crontabValueObj.second}}</span>
<el-tooltip v-else :content="crontabValueObj.second" placement="top"><span>{{crontabValueObj.second}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.min.length < 10">{{crontabValueObj.min}}</span>
<el-tooltip v-else :content="crontabValueObj.min" placement="top"><span>{{crontabValueObj.min}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.hour.length < 10">{{crontabValueObj.hour}}</span>
<el-tooltip v-else :content="crontabValueObj.hour" placement="top"><span>{{crontabValueObj.hour}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.day.length < 10">{{crontabValueObj.day}}</span>
<el-tooltip v-else :content="crontabValueObj.day" placement="top"><span>{{crontabValueObj.day}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.month.length < 10">{{crontabValueObj.month}}</span>
<el-tooltip v-else :content="crontabValueObj.month" placement="top"><span>{{crontabValueObj.month}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.week.length < 10">{{crontabValueObj.week}}</span>
<el-tooltip v-else :content="crontabValueObj.week" placement="top"><span>{{crontabValueObj.week}}</span></el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.year.length < 10">{{crontabValueObj.year}}</span>
<el-tooltip v-else :content="crontabValueObj.year" placement="top"><span>{{crontabValueObj.year}}</span></el-tooltip>
</td>
<td class="result">
<span v-if="crontabValueString.length < 90">{{crontabValueString}}</span>
<el-tooltip v-else :content="crontabValueString" placement="top"><span>{{crontabValueString}}</span></el-tooltip>
</td>
</tbody>
</table>
</div>
<CrontabResult :ex="crontabValueString"></CrontabResult>
<div class="popup-main">
<div class="popup-result">
<p class="title">
时间表达式
</p>
<table>
<thead>
<th
v-for="item of tabTitles"
:key="item"
>
{{ item }}
</th>
<th>Cron 表达式</th>
</thead>
<tbody>
<td>
<span v-if="crontabValueObj.second.length < 10">{{ crontabValueObj.second }}</span>
<el-tooltip
v-else
:content="crontabValueObj.second"
placement="top"
>
<span>{{ crontabValueObj.second }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.min.length < 10">{{ crontabValueObj.min }}</span>
<el-tooltip
v-else
:content="crontabValueObj.min"
placement="top"
>
<span>{{ crontabValueObj.min }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.hour.length < 10">{{ crontabValueObj.hour }}</span>
<el-tooltip
v-else
:content="crontabValueObj.hour"
placement="top"
>
<span>{{ crontabValueObj.hour }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.day.length < 10">{{ crontabValueObj.day }}</span>
<el-tooltip
v-else
:content="crontabValueObj.day"
placement="top"
>
<span>{{ crontabValueObj.day }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.month.length < 10">{{ crontabValueObj.month }}</span>
<el-tooltip
v-else
:content="crontabValueObj.month"
placement="top"
>
<span>{{ crontabValueObj.month }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.week.length < 10">{{ crontabValueObj.week }}</span>
<el-tooltip
v-else
:content="crontabValueObj.week"
placement="top"
>
<span>{{ crontabValueObj.week }}</span>
</el-tooltip>
</td>
<td>
<span v-if="crontabValueObj.year.length < 10">{{ crontabValueObj.year }}</span>
<el-tooltip
v-else
:content="crontabValueObj.year"
placement="top"
>
<span>{{ crontabValueObj.year }}</span>
</el-tooltip>
</td>
<td class="result">
<span v-if="crontabValueString.length < 90">{{ crontabValueString }}</span>
<el-tooltip
v-else
:content="crontabValueString"
placement="top"
>
<span>{{ crontabValueString }}</span>
</el-tooltip>
</td>
</tbody>
</table>
</div>
<CrontabResult :ex="crontabValueString" />
<div class="pop_btn">
<el-button type="primary" @click="submitFill">确定</el-button>
<el-button type="warning" @click="clearCron">重置</el-button>
<el-button @click="hidePopup">取消</el-button>
</div>
</div>
<div class="pop_btn">
<el-button
type="primary"
@click="submitFill"
>
确定
</el-button>
<el-button
type="warning"
@click="clearCron"
>
重置
</el-button>
<el-button @click="hidePopup">
取消
</el-button>
</div>
</div>
</div>
</template>
<script setup>

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
分钟允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
分钟允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="58" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="59" /> 分钟
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="0"
:max="58"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="59"
/> 分钟
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="58" /> 分钟开始
<el-input-number v-model='average02' :min="1" :max="59 - average01" /> 分钟执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="0"
:max="58"
/> 分钟开始
<el-input-number
v-model="average02"
:min="1"
:max="59 - average01"
/> 分钟执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 60" :key="item" :label="item - 1" :value="item - 1" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 60"
:key="item"
:label="item - 1"
:value="item - 1"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>
const emit = defineEmits(['update'])

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="1" :max="11" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="12" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="1"
:max="11"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="12"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="1" :max="11" /> 月开始
<el-input-number v-model='average02' :min="1" :max="12 - average01" /> 月月执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="1"
:max="11"
/> 月开始
<el-input-number
v-model="average02"
:min="1"
:max="12 - average01"
/> 月月执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="8">
<el-option v-for="item in monthList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="8"
>
<el-option
v-for="item in monthList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,13 +1,22 @@
<template>
<div class="popup-result">
<p class="title">最近5次运行时间</p>
<ul class="popup-result-scroll">
<template v-if='isShow'>
<li v-for='item in resultList' :key="item">{{item}}</li>
</template>
<li v-else>计算结果中...</li>
</ul>
</div>
<div class="popup-result">
<p class="title">
最近5次运行时间
</p>
<ul class="popup-result-scroll">
<template v-if="isShow">
<li
v-for="item in resultList"
:key="item"
>
{{ item }}
</li>
</template>
<li v-else>
计算结果中...
</li>
</ul>
</div>
</template>
<script setup>

View File

@@ -1,36 +1,75 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
周期从
<el-input-number v-model='cycle01' :min="0" :max="58" /> -
<el-input-number v-model='cycle02' :min="cycle01 + 1" :max="59" />
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
周期从
<el-input-number
v-model="cycle01"
:min="0"
:max="58"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 + 1"
:max="59"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
<el-input-number v-model='average01' :min="0" :max="58" /> 秒开始
<el-input-number v-model='average02' :min="1" :max="59 - average01" /> 秒执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
<el-input-number
v-model="average01"
:min="0"
:max="58"
/> 秒开始
<el-input-number
v-model="average02"
:min="1"
:max="59 - average01"
/> 秒执行一次
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="10">
<el-option v-for="item in 60" :key="item" :label="item - 1" :value="item - 1" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="10"
>
<el-option
v-for="item in 60"
:key="item"
:label="item - 1"
:value="item - 1"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,71 +1,130 @@
<template>
<el-form>
<el-form-item>
<el-radio v-model='radioValue' :label="1">
允许的通配符[, - * ? / L #]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
允许的通配符[, - * ? / L #]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="2">
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
不指定
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="3">
周期从
<el-select clearable v-model="cycle01">
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key === 7"
>{{item.value}}</el-option>
</el-select>
-
<el-select clearable v-model="cycle02">
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key <= cycle01"
>{{item.value}}</el-option>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
周期从
<el-select
v-model="cycle01"
clearable
>
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key === 7"
>
{{ item.value }}
</el-option>
</el-select>
-
<el-select
v-model="cycle02"
clearable
>
<el-option
v-for="(item,index) of weekList"
:key="index"
:label="item.value"
:value="item.key"
:disabled="item.key <= cycle01"
>
{{ item.value }}
</el-option>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="4">
<el-input-number v-model='average01' :min="1" :max="4" /> 周的
<el-select clearable v-model="average02">
<el-option v-for="item in weekList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
<el-input-number
v-model="average01"
:min="1"
:max="4"
/> 周的
<el-select
v-model="average02"
clearable
>
<el-option
v-for="item in weekList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="5">
本月最后一个
<el-select clearable v-model="weekday">
<el-option v-for="item in weekList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="5"
>
本月最后一个
<el-select
v-model="weekday"
clearable
>
<el-option
v-for="item in weekList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio v-model='radioValue' :label="6">
指定
<el-select class="multiselect" clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="6">
<el-option v-for="item in weekList" :key="item.key" :label="item.value" :value="item.key" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="6"
>
指定
<el-select
v-model="checkboxList"
class="multiselect"
clearable
placeholder="可多选"
multiple
:multiple-limit="6"
>
<el-option
v-for="item in weekList"
:key="item.key"
:label="item.value"
:value="item.key"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -1,43 +1,84 @@
<template>
<el-form>
<el-form-item>
<el-radio :label="1" v-model='radioValue'>
不填允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="1"
>
不填允许的通配符[, - * /]
</el-radio>
</el-form-item>
<el-form-item>
<el-radio :label="2" v-model='radioValue'>
每年
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="2"
>
每年
</el-radio>
</el-form-item>
<el-form-item>
<el-radio :label="3" v-model='radioValue'>
周期从
<el-input-number v-model='cycle01' :min='fullYear' :max="2098"/> -
<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : fullYear + 1" :max="2099"/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio
v-model="radioValue"
:label="3"
>
周期从
<el-input-number
v-model="cycle01"
:min="fullYear"
:max="2098"
/> -
<el-input-number
v-model="cycle02"
:min="cycle01 ? cycle01 + 1 : fullYear + 1"
:max="2099"
/>
</el-radio>
</el-form-item>
<el-form-item>
<el-radio :label="4" v-model='radioValue'>
<el-input-number v-model='average01' :min='fullYear' :max="2098"/> 年开始
<el-input-number v-model='average02' :min="1" :max="2099 - average01 || fullYear"/> 年执行一次
</el-radio>
<el-form-item>
<el-radio
v-model="radioValue"
:label="4"
>
<el-input-number
v-model="average01"
:min="fullYear"
:max="2098"
/> 年开始
<el-input-number
v-model="average02"
:min="1"
:max="2099 - average01 || fullYear"
/> 年执行一次
</el-radio>
</el-form-item>
</el-form-item>
<el-form-item>
<el-radio :label="5" v-model='radioValue'>
指定
<el-select clearable v-model="checkboxList" placeholder="可多选" multiple :multiple-limit="8">
<el-option v-for="item in 9" :key="item" :value="item - 1 + fullYear" :label="item -1 + fullYear" />
</el-select>
</el-radio>
</el-form-item>
</el-form>
<el-form-item>
<el-radio
v-model="radioValue"
:label="5"
>
指定
<el-select
v-model="checkboxList"
clearable
placeholder="可多选"
multiple
:multiple-limit="8"
>
<el-option
v-for="item in 9"
:key="item"
:value="item - 1 + fullYear"
:label="item -1 + fullYear"
/>
</el-select>
</el-radio>
</el-form-item>
</el-form>
</template>
<script setup>

View File

@@ -10,12 +10,14 @@
>{{ item.label + " " }}</span>
<el-tag
v-else
:disable-transitions="true"
:key="item.value + ''"
:disable-transitions="true"
:index="index"
:type="getValidTagType(item.elTagType)"
:class="item.elTagClass"
>{{ item.label + " " }}</el-tag>
>
{{ item.label + " " }}
</el-tag>
</template>
</template>
<template v-if="unmatch && showValue">

View File

@@ -1,15 +1,33 @@
<template>
<div class="editor-container">
<div>
<el-upload :action="uploadUrl" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess"
:on-error="handleUploadError" name="file" :show-file-list="false" :headers="headers" class="editor-img-uploader"
v-if="type == 'url'">
<i ref="uploadRef" class="editor-img-uploader"></i>
<el-upload
v-if="type == 'url'"
:action="uploadUrl"
:before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
name="file"
:show-file-list="false"
:headers="headers"
class="editor-img-uploader"
>
<i
ref="uploadRef"
class="editor-img-uploader"
/>
</el-upload>
</div>
<div class="editor">
<quill-editor ref="quillEditorRef" :content="content" @update:content="content = $event" contentType="html"
@textChange="(e) => $emit('update:modelValue', content)" :options="options" :style="styles" />
<quill-editor
ref="quillEditorRef"
:content="content"
content-type="html"
:options="options"
:style="styles"
@update:content="content = $event"
@text-change="(e) => $emit('update:modelValue', content)"
/>
</div>
</div>
</template>

View File

@@ -2,6 +2,7 @@
<div class="upload-file">
<el-upload
multiple
ref="fileUpload"
:action="uploadFileUrl"
:before-upload="handleBeforeUpload"
:file-list="fileList"
@@ -12,26 +13,52 @@
:show-file-list="false"
:headers="headers"
class="upload-file-uploader"
ref="fileUpload"
>
<!-- 上传按钮 -->
<el-button type="primary">选取文件</el-button>
<el-button type="primary">
选取文件
</el-button>
</el-upload>
<!-- 上传提示 -->
<div class="el-upload__tip" v-if="showTip">
<div
v-if="showTip"
class="el-upload__tip"
>
请上传
<template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
<template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
<template v-if="fileSize">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</template>
<template v-if="fileType">
格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
</template>
的文件
</div>
<!-- 文件列表 -->
<transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
<li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
<el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
<transition-group
class="upload-file-list el-upload-list el-upload-list--text"
name="el-fade-in-linear"
tag="ul"
>
<li
v-for="(file, index) in fileList"
:key="file.uid"
class="el-upload-list__item ele-upload-list__item-content"
>
<el-link
:href="`${baseUrl}${file.url}`"
:underline="false"
target="_blank"
>
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
</el-link>
<div class="ele-upload-list__item-content-action">
<el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
<el-link
:underline="false"
type="danger"
@click="handleDelete(index)"
>
删除
</el-link>
</div>
</li>
</transition-group>

View File

@@ -1,5 +1,8 @@
<template>
<div style="padding: 0 15px;" @click="toggleClick">
<div
style="padding: 0 15px;"
@click="toggleClick"
>
<svg
:class="{'is-active':isActive}"
class="hamburger"

View File

@@ -1,6 +1,14 @@
<template>
<div :class="{ show: show }" class="header-search">
<svg-icon class-name="search-icon" icon-class="search" @click.stop="click" v-if="!show" />
<div
:class="{ show: show }"
class="header-search"
>
<svg-icon
v-if="!show"
class-name="search-icon"
icon-class="search"
@click.stop="click"
/>
<el-select
v-else
ref="headerSearchSelectRef"

View File

@@ -8,13 +8,24 @@
@clear="filterIcons"
@input="filterIcons"
>
<template #suffix><i class="el-icon-search el-input__icon" /></template>
<template #suffix>
<i class="el-icon-search el-input__icon" />
</template>
</el-input>
<div class="icon-list">
<div class="list-container">
<div v-for="(item, index) in iconList" class="icon-item-wrapper" :key="index" @click="selectedIcon(item)">
<div
v-for="(item, index) in iconList"
:key="index"
class="icon-item-wrapper"
@click="selectedIcon(item)"
>
<div :class="['icon-item', { active: activeIcon === item }]">
<svg-icon :icon-class="item" class-name="icon" style="height: 25px;width: 16px;"/>
<svg-icon
:icon-class="item"
class-name="icon"
style="height: 25px;width: 16px;"
/>
<span>{{ item }}</span>
</div>
</div>

View File

@@ -1,6 +1,7 @@
<template>
<div class="component-upload-image">
<el-upload
ref="imageUpload"
multiple
:action="uploadImgUrl"
list-type="picture-card"
@@ -9,7 +10,6 @@
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
ref="imageUpload"
:before-remove="handleDelete"
:show-file-list="true"
:headers="headers"
@@ -17,10 +17,15 @@
:on-preview="handlePictureCardPreview"
:class="{ hide: fileList.length >= limit }"
>
<el-icon class="avatar-uploader-icon"><plus /></el-icon>
<el-icon class="avatar-uploader-icon">
<plus />
</el-icon>
</el-upload>
<!-- 上传提示 -->
<div class="el-upload__tip" v-if="showTip">
<div
v-if="showTip"
class="el-upload__tip"
>
请上传
<template v-if="fileSize">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
@@ -40,7 +45,7 @@
<img
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
/>
>
</el-dialog>
</div>
</template>

View File

@@ -1,12 +1,18 @@
<template>
<div class="page-container">
<div v-if="$slots.header" class="page-header">
<div
v-if="$slots.header"
class="page-header"
>
<slot name="header" />
</div>
<div class="page-content">
<slot />
</div>
<div v-if="$slots.footer" class="page-footer">
<div
v-if="$slots.footer"
class="page-footer"
>
<slot name="footer" />
</div>
</div>

View File

@@ -1,20 +1,51 @@
<template>
<el-drawer v-model="noticeVisible" title="公告/通知" direction="rtl" size="400px" destroy-on-close>
<el-empty v-if="noticeList.length === 0" description="暂无公告/通知" />
<div v-else class="notice-list">
<div v-for="item in noticeList" :key="item.noticeId" class="notice-item" :class="{ 'is-read': isRead(item.noticeId), 'unread': !isRead(item.noticeId) }" @click="viewDetail(item)">
<el-drawer
v-model="noticeVisible"
title="公告/通知"
direction="rtl"
size="400px"
destroy-on-close
>
<el-empty
v-if="noticeList.length === 0"
description="暂无公告/通知"
/>
<div
v-else
class="notice-list"
>
<div
v-for="item in noticeList"
:key="item.noticeId"
class="notice-item"
:class="{ 'is-read': isRead(item.noticeId), 'unread': !isRead(item.noticeId) }"
@click="viewDetail(item)"
>
<div class="notice-title">
<span v-if="!isRead(item.noticeId)" class="unread-dot"></span>
<span
v-if="!isRead(item.noticeId)"
class="unread-dot"
/>
{{ item.noticeTitle }}
</div>
<div class="notice-info">
<span class="notice-type">
<el-tag :type="getNoticeTypeTagType(item.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(item.noticeType)"
size="small"
>
{{ getNoticeTypeText(item.noticeType) }}
</el-tag>
</span>
<span class="notice-priority" v-if="item.priority">
<el-tag :type="getPriorityTagType(item.priority)" size="small" effect="plain">
<span
v-if="item.priority"
class="notice-priority"
>
<el-tag
:type="getPriorityTagType(item.priority)"
size="small"
effect="plain"
>
{{ getPriorityText(item.priority) }}
</el-tag>
</span>
@@ -24,23 +55,41 @@
</div>
<!-- 公告/通知详情对话框 -->
<el-dialog v-model="detailVisible" :title="currentNotice.noticeTitle" width="800px" append-to-body>
<el-dialog
v-model="detailVisible"
:title="currentNotice.noticeTitle"
width="800px"
append-to-body
>
<div class="notice-detail">
<div class="detail-header">
<div class="detail-type">
<el-tag :type="getNoticeTypeTagType(currentNotice.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(currentNotice.noticeType)"
size="small"
>
{{ getNoticeTypeText(currentNotice.noticeType) }}
</el-tag>
<el-tag :type="getPriorityTagType(currentNotice.priority)" size="small" effect="plain" style="margin-left: 8px;">
<el-tag
:type="getPriorityTagType(currentNotice.priority)"
size="small"
effect="plain"
style="margin-left: 8px;"
>
{{ getPriorityText(currentNotice.priority) }}
</el-tag>
</div>
<span class="detail-time">{{ parseTime(currentNotice.createTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</div>
<div class="detail-content" v-html="currentNotice.noticeContent"></div>
<div
class="detail-content"
v-html="currentNotice.noticeContent"
/>
</div>
<template #footer>
<el-button @click="detailVisible = false">关闭</el-button>
<el-button @click="detailVisible = false">
关闭
</el-button>
</template>
</el-dialog>
</el-drawer>

View File

@@ -13,7 +13,12 @@
<div class="notice-list">
<div class="notice-list-header">
<span class="notice-list-title">公告列表</span>
<el-button text type="primary" @click="markAllAsRead" v-if="unreadCount > 0">
<el-button
v-if="unreadCount > 0"
text
type="primary"
@click="markAllAsRead"
>
全部标记为已读
</el-button>
</div>
@@ -26,7 +31,10 @@
@click="handleSelectNotice(notice)"
>
<div class="notice-item-left">
<el-icon class="notice-type-icon" :class="getNoticeTypeClass(notice.noticeType)">
<el-icon
class="notice-type-icon"
:class="getNoticeTypeClass(notice.noticeType)"
>
<component :is="getNoticeTypeIcon(notice.noticeType)" />
</el-icon>
<div class="notice-item-content">
@@ -39,7 +47,14 @@
{{ getPriorityText(notice.priority) }}
</el-tag>
<span class="notice-title-text">{{ notice.noticeTitle }}</span>
<el-tag v-if="!notice.isRead" type="danger" size="small" effect="dark">未读</el-tag>
<el-tag
v-if="!notice.isRead"
type="danger"
size="small"
effect="dark"
>
未读
</el-tag>
</div>
<div class="notice-meta">
<span class="notice-date">{{ formatDate(notice.createTime) }}</span>
@@ -47,45 +62,77 @@
</div>
</div>
</div>
<el-icon class="arrow-icon" v-if="activeNoticeId === notice.noticeId">
<el-icon
v-if="activeNoticeId === notice.noticeId"
class="arrow-icon"
>
<ArrowRight />
</el-icon>
</div>
<!-- 空状态 -->
<div v-if="noticeList.length === 0" class="empty-state">
<el-empty description="暂无公告" :image-size="100" />
<div
v-if="noticeList.length === 0"
class="empty-state"
>
<el-empty
description="暂无公告"
:image-size="100"
/>
</div>
</el-scrollbar>
</div>
<!-- 公告详情 -->
<div class="notice-detail" v-if="activeNotice">
<div
v-if="activeNotice"
class="notice-detail"
>
<div class="notice-detail-header">
<h3 class="notice-detail-title">{{ activeNotice.noticeTitle }}</h3>
<h3 class="notice-detail-title">
{{ activeNotice.noticeTitle }}
</h3>
<div class="notice-detail-meta">
<el-tag :type="getPriorityTagType(activeNotice.priority)" size="small" effect="dark">
<el-tag
:type="getPriorityTagType(activeNotice.priority)"
size="small"
effect="dark"
>
{{ getPriorityText(activeNotice.priority) }}
</el-tag>
<el-tag :type="getNoticeTypeTagType(activeNotice.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(activeNotice.noticeType)"
size="small"
>
{{ getNoticeTypeText(activeNotice.noticeType) }}
</el-tag>
<span class="notice-detail-date">{{ formatFullDate(activeNotice.createTime) }}</span>
</div>
</div>
<el-divider />
<div class="notice-detail-body" v-html="activeNotice.noticeContent"></div>
<div
class="notice-detail-body"
v-html="activeNotice.noticeContent"
/>
</div>
<!-- 未选择状态 -->
<div v-else class="no-selection">
<el-empty description="请选择公告查看详情" :image-size="120" />
<div
v-else
class="no-selection"
>
<el-empty
description="请选择公告查看详情"
:image-size="120"
/>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">关闭</el-button>
<el-button @click="handleClose">
关闭
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -21,7 +21,10 @@
@click="handleSelectNotice(notice)"
>
<div class="notice-item-left">
<el-icon class="notice-type-icon" :class="getNoticeTypeClass(notice.noticeType)">
<el-icon
class="notice-type-icon"
:class="getNoticeTypeClass(notice.noticeType)"
>
<component :is="getNoticeTypeIcon(notice.noticeType)" />
</el-icon>
<div class="notice-item-content">
@@ -34,7 +37,14 @@
{{ getPriorityText(notice.priority) }}
</el-tag>
<span class="notice-title-text">{{ notice.noticeTitle }}</span>
<el-tag v-if="!notice.isRead" type="danger" size="small" effect="dark">未读</el-tag>
<el-tag
v-if="!notice.isRead"
type="danger"
size="small"
effect="dark"
>
未读
</el-tag>
</div>
<div class="notice-meta">
<span class="notice-date">{{ formatDate(notice.createTime) }}</span>
@@ -42,7 +52,10 @@
</div>
</div>
</div>
<el-icon class="arrow-icon" v-if="activeNoticeId === notice.noticeId">
<el-icon
v-if="activeNoticeId === notice.noticeId"
class="arrow-icon"
>
<ArrowRight />
</el-icon>
</div>
@@ -50,35 +63,63 @@
</div>
<!-- 公告详情 -->
<div class="notice-detail" v-if="activeNotice">
<div
v-if="activeNotice"
class="notice-detail"
>
<div class="notice-detail-header">
<h3 class="notice-detail-title">{{ activeNotice.noticeTitle }}</h3>
<h3 class="notice-detail-title">
{{ activeNotice.noticeTitle }}
</h3>
<div class="notice-detail-meta">
<el-tag :type="getPriorityTagType(activeNotice.priority)" size="small" effect="dark">
<el-tag
:type="getPriorityTagType(activeNotice.priority)"
size="small"
effect="dark"
>
{{ getPriorityText(activeNotice.priority) }}
</el-tag>
<el-tag :type="getNoticeTypeTagType(activeNotice.noticeType)" size="small">
<el-tag
:type="getNoticeTypeTagType(activeNotice.noticeType)"
size="small"
>
{{ getNoticeTypeText(activeNotice.noticeType) }}
</el-tag>
<span class="notice-detail-date">{{ formatDate(activeNotice.createTime) }}</span>
</div>
</div>
<el-divider />
<div class="notice-detail-body" v-html="activeNotice.noticeContent"></div>
<div
class="notice-detail-body"
v-html="activeNotice.noticeContent"
/>
</div>
<!-- 空状态 -->
<div v-else class="empty-state">
<el-empty description="暂无公告" :image-size="120" />
<div
v-else
class="empty-state"
>
<el-empty
description="暂无公告"
:image-size="120"
/>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="markAllAsRead" v-if="unreadCount > 0" type="info">
<el-button
v-if="unreadCount > 0"
type="info"
@click="markAllAsRead"
>
全部标记为已读
</el-button>
<el-button type="primary" @click="handleClose">
<el-button
type="primary"
@click="handleClose"
>
{{ hasUnread ? '稍后再看' : '知道了' }}
</el-button>
</div>

View File

@@ -1,6 +1,9 @@
<template>
<div>
<svg-icon icon-class="question" @click="goto" />
<svg-icon
icon-class="question"
@click="goto"
/>
</div>
</template>

View File

@@ -1,7 +1,7 @@
<template>
<el-dialog
title="药品追溯码"
v-model="props.openDialog"
title="药品追溯码"
width="842"
append-to-body
destroy-on-close
@@ -15,13 +15,15 @@
>
<div>
<div style="font-size: 16px">
<div style="margin-bottom: 15px">药品名称 {{ props.ypName }}</div>
<div style="margin-bottom: 15px">
药品名称 {{ props.ypName }}
</div>
扫描追溯码
<el-input
ref="traceNoTempRef"
v-model="traceNoTemp"
type="textarea"
:rows="1"
v-model="traceNoTemp"
style="width: 180px; margin-right: 20px"
@input="throttledGetList(traceNoTemp)"
/>
@@ -31,8 +33,22 @@
style="width: 180px; margin-right: 20px"
@keyup.enter="handelTraceNo(traceNoInput)"
/>
<el-button type="primary" plain icon="CircleClose" @click="handleReturn"> 撤回 </el-button>
<el-button type="danger" plain icon="CircleClose" @click="handleClear"> 清除 </el-button>
<el-button
type="primary"
plain
icon="CircleClose"
@click="handleReturn"
>
撤回
</el-button>
<el-button
type="danger"
plain
icon="CircleClose"
@click="handleClear"
>
清除
</el-button>
</div>
<!-- <el-input
ref="inputRef"
@@ -69,11 +85,10 @@
<span style="margin-right: 6px">
[{{ index + 1 }}]
<template v-if="index < 9">&nbsp;</template>
<template v-else></template>
<template v-else />
{{ item }}
</span>
<div
@click="removeTraceNo(index)"
style="
display: flex;
align-items: center;
@@ -84,8 +99,12 @@
border-radius: 50%;
cursor: pointer;
"
@click="removeTraceNo(index)"
>
<el-icon size="10" color="white">
<el-icon
size="10"
color="white"
>
<Close />
</el-icon>
</div>
@@ -98,8 +117,15 @@
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submit"> </el-button>
<el-button @click="cancel"> </el-button>
<el-button
type="primary"
@click="submit"
>
</el-button>
<el-button @click="cancel">
</el-button>
</div>
</template>
</el-dialog>

View File

@@ -6,7 +6,11 @@
trigger="manual"
:width="width"
>
<slot name="popover-content" :row="row" :index="index">
<slot
name="popover-content"
:row="row"
:index="index"
>
<div>列表内容</div>
</slot>
<template #reference>

View File

@@ -1,9 +1,12 @@
<template>
<div :class="{ 'hidden': hidden }" class="pagination-container">
<div
:class="{ 'hidden': hidden }"
class="pagination-container"
>
<el-pagination
:background="background"
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:background="background"
:layout="layout"
:page-sizes="pageSizes"
:pager-count="pagerCount"

View File

@@ -1,3 +1,3 @@
<template >
<template>
<router-view />
</template>

View File

@@ -1,21 +1,69 @@
<template>
<div class="top-right-btn" :style="style">
<div
class="top-right-btn"
:style="style"
>
<el-row>
<el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search">
<el-button circle icon="Search" @click="toggleSearch()" />
<el-tooltip
v-if="search"
class="item"
effect="dark"
:content="showSearch ? '隐藏搜索' : '显示搜索'"
placement="top"
>
<el-button
circle
icon="Search"
@click="toggleSearch()"
/>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="刷新" placement="top">
<el-button circle icon="Refresh" @click="refresh()" />
<el-tooltip
class="item"
effect="dark"
content="刷新"
placement="top"
>
<el-button
circle
icon="Refresh"
@click="refresh()"
/>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
<el-button circle icon="Menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/>
<el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'">
<el-button circle icon="Menu" />
<el-tooltip
v-if="columns"
class="item"
effect="dark"
content="显隐列"
placement="top"
>
<el-button
v-if="showColumnsType == 'transfer'"
circle
icon="Menu"
@click="showColumn()"
/>
<el-dropdown
v-if="showColumnsType == 'checkbox'"
trigger="click"
:hide-on-click="false"
style="padding-left: 12px"
>
<el-button
circle
icon="Menu"
/>
<template #dropdown>
<el-dropdown-menu>
<template v-for="item in columns" :key="item.key">
<template
v-for="item in columns"
:key="item.key"
>
<el-dropdown-item>
<el-checkbox :checked="item.visible" @change="checkboxChange($event, item.label)" :label="item.label" />
<el-checkbox
:checked="item.visible"
:label="item.label"
@change="checkboxChange($event, item.label)"
/>
</el-dropdown-item>
</template>
</el-dropdown-menu>
@@ -23,13 +71,17 @@
</el-dropdown>
</el-tooltip>
</el-row>
<el-dialog :title="title" v-model="open" append-to-body>
<el-dialog
v-model="open"
:title="title"
append-to-body
>
<el-transfer
:titles="['显示', '隐藏']"
v-model="value"
:titles="['显示', '隐藏']"
:data="columns"
@change="dataChange"
></el-transfer>
/>
</el-dialog>
</div>
</template>

View File

@@ -1,6 +1,9 @@
<template>
<div>
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'" @click="toggle" />
<svg-icon
:icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
@click="toggle"
/>
</div>
</template>

View File

@@ -1,12 +1,23 @@
<template>
<div>
<el-dropdown trigger="click" @command="handleSetSize">
<el-dropdown
trigger="click"
@command="handleSetSize"
>
<div class="size-icon--style">
<svg-icon class-name="size-icon" icon-class="size" />
<svg-icon
class-name="size-icon"
icon-class="size"
/>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size === item.value" :command="item.value">
<el-dropdown-item
v-for="item of sizeOptions"
:key="item.value"
:disabled="size === item.value"
:command="item.value"
>
{{ item.label }}
</el-dropdown-item>
</el-dropdown-menu>

View File

@@ -1,6 +1,12 @@
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName" :fill="color" />
<svg
:class="svgClass"
aria-hidden="true"
>
<use
:xlink:href="iconName"
:fill="color"
/>
</svg>
</template>

View File

@@ -1,8 +1,22 @@
<template>
<div class="table-section" v-loading="loading">
<EditableTable ref="editableTableRef" v-bind="$attrs" class="editable-table">
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
<slot :name="slotName" v-bind="slotProps" />
<div
v-loading="loading"
class="table-section"
>
<EditableTable
ref="editableTableRef"
v-bind="$attrs"
class="editable-table"
>
<template
v-for="(_, slotName) in $slots"
:key="slotName"
#[slotName]="slotProps"
>
<slot
:name="slotName"
v-bind="slotProps"
/>
</template>
</EditableTable>
</div>

View File

@@ -1,8 +1,18 @@
<template>
<div class="form-section">
<FormLayout ref="formLayoutRef" v-bind="$attrs">
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
<slot :name="slotName" v-bind="slotProps" />
<FormLayout
ref="formLayoutRef"
v-bind="$attrs"
>
<template
v-for="(_, slotName) in $slots"
:key="slotName"
#[slotName]="slotProps"
>
<slot
:name="slotName"
v-bind="slotProps"
/>
</template>
</FormLayout>
</div>

View File

@@ -8,7 +8,12 @@
@blur="handleBlur"
@change="handleChange"
>
<template v-if="suffix" #suffix>{{ suffix }}</template>
<template
v-if="suffix"
#suffix
>
{{ suffix }}
</template>
</el-input>
</template>

View File

@@ -5,7 +5,10 @@
<slot />
</div>
</template>
<template v-if="$slots.footer" #footer>
<template
v-if="$slots.footer"
#footer
>
<slot name="footer" />
</template>
</Layout>

View File

@@ -2,20 +2,28 @@
<el-menu
:default-active="activeMenu"
mode="horizontal"
@select="handleSelect"
:ellipsis="false"
@select="handleSelect"
>
<template v-for="(item, index) in topMenus">
<!-- 处理有子菜单的情况 -->
<template v-if="item.children && item.children.length > 0 && index < visibleNumber">
<el-sub-menu :style="{'--theme': theme}" :index="item.path" :key="index">
<el-sub-menu
:key="index"
:style="{'--theme': theme}"
:index="item.path"
>
<template #title>
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</template>
<template v-for="(child, childIndex) in item.children" :key="childIndex">
<template
v-for="(child, childIndex) in item.children"
:key="childIndex"
>
<el-menu-item :index="item.path + '/' + (child.path || '')">
{{ child.meta.title }}
</el-menu-item>
@@ -24,29 +32,47 @@
</template>
<!-- 处理无子菜单的情况 -->
<template v-else-if="index < visibleNumber">
<el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index">
<el-menu-item
:key="index"
:style="{'--theme': theme}"
:index="item.path"
>
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</el-menu-item>
</template>
</template>
<!-- 顶部菜单超出数量折叠 -->
<el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">
<template #title>更多菜单</template>
<template v-for="(item, index) in topMenus" :key="index">
<el-sub-menu
v-if="topMenus.length > visibleNumber"
:style="{'--theme': theme}"
index="more"
>
<template #title>
更多菜单
</template>
<template
v-for="(item, index) in topMenus"
:key="index"
>
<!-- 处理有子菜单的情况 -->
<template v-if="item.children && item.children.length > 0 && index >= visibleNumber">
<el-sub-menu :index="item.path">
<template #title>
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</template>
<template v-for="(child, childIndex) in item.children" :key="childIndex">
<template
v-for="(child, childIndex) in item.children"
:key="childIndex"
>
<el-menu-item :index="item.path + '/' + (child.path || '')">
{{ child.meta.title }}
</el-menu-item>
@@ -57,8 +83,9 @@
<template v-else-if="index >= visibleNumber">
<el-menu-item :index="item.path">
<svg-icon
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"/>
v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
:icon-class="item.meta.icon"
/>
{{ item.meta.title }}
</el-menu-item>
</template>

View File

@@ -1,16 +1,19 @@
<template>
<div class="el-tree-select">
<el-select
style="width: 100%"
v-model="valueId"
ref="treeSelect"
v-model="valueId"
style="width: 100%"
:filterable="true"
:clearable="true"
@clear="clearHandle"
:filter-method="selectFilterData"
:placeholder="placeholder"
@clear="clearHandle"
>
<el-option :value="valueId" :label="valueTitle">
<el-option
:value="valueId"
:label="valueTitle"
>
<el-tree
id="tree-option"
ref="selectTree"
@@ -22,7 +25,7 @@
:default-expanded-keys="defaultExpandedKey"
:filter-node-method="filterNode"
@node-click="handleNodeClick"
></el-tree>
/>
</el-option>
</el-select>
</div>

View File

@@ -1,10 +1,14 @@
<template>
<div v-loading="loading" :style="'height:' + height">
<div
v-loading="loading"
:style="'height:' + height"
>
<iframe
:src="url"
frameborder="no"
style="width: 100%; height: 100%"
scrolling="auto" />
scrolling="auto"
/>
</div>
</template>

View File

@@ -4,7 +4,11 @@
* @Description:
-->
<template>
<div class="ball-tag" v-show="tagId" :style="{ backgroundColor: _tag?.color }">
<div
v-show="tagId"
class="ball-tag"
:style="{ backgroundColor: _tag?.color }"
>
{{ _tag?.name }}
</div>
</template>