修改文章病例库管理相关操作问题111
This commit is contained in:
parent
7103c40c44
commit
1b50770874
@ -31,7 +31,15 @@
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="发表时间" name="pushDate">
|
||||
<a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.pushDate" style="width: 100%" placeholder="发表时间" />
|
||||
<a-date-picker
|
||||
show-time
|
||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||
v-model:value="form.pushDate"
|
||||
style="width: 100%"
|
||||
placeholder="发表时间"
|
||||
:disabled-date="disabledFutureDate"
|
||||
:disabled-time="disabledFutureTime"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="是否外部链接" name="isLink">
|
||||
<a-switch v-model:checked="isLinkChecked" @change="isLinkCheckedChange" />
|
||||
@ -213,6 +221,7 @@
|
||||
import SmartWangeditor from '/@/components/framework/wangeditor/index.vue';
|
||||
import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
|
||||
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
// ------------------------ 事件 ------------------------
|
||||
|
||||
@ -329,7 +338,7 @@
|
||||
articleTitle: undefined, //标题
|
||||
articleStatus: 1, //状态(1:正常 2:禁用)- 默认为正常
|
||||
|
||||
pushDate: undefined, //发表时间
|
||||
pushDate: new Date().toISOString().slice(0, 19).replace('T', ' '), //发表时间,默认为当天
|
||||
isLink: 0, //是否外部链接(0:否 1:是)
|
||||
isLinkUrl: undefined, //外部链接地址
|
||||
shareQrcode: undefined, //分享二维码地址
|
||||
@ -344,6 +353,54 @@
|
||||
// 是否外部链接开关状态
|
||||
const isLinkChecked = ref(false);
|
||||
|
||||
// 禁用未来日期
|
||||
function disabledFutureDate(current) {
|
||||
// 禁用今天之后的日期
|
||||
return current && current > dayjs().endOf('day');
|
||||
}
|
||||
|
||||
// 禁用未来时间
|
||||
function disabledFutureTime(date) {
|
||||
if (date) {
|
||||
const today = dayjs();
|
||||
const selectedDate = dayjs(date);
|
||||
|
||||
// 如果是今天,禁用未来时间
|
||||
if (selectedDate.isSame(today, 'day')) {
|
||||
return {
|
||||
disabledHours: () => {
|
||||
const hours = [];
|
||||
for (let i = today.hour() + 1; i < 24; i++) {
|
||||
hours.push(i);
|
||||
}
|
||||
return hours;
|
||||
},
|
||||
disabledMinutes: (hour) => {
|
||||
if (hour === today.hour()) {
|
||||
const minutes = [];
|
||||
for (let i = today.minute() + 1; i < 60; i++) {
|
||||
minutes.push(i);
|
||||
}
|
||||
return minutes;
|
||||
}
|
||||
return [];
|
||||
},
|
||||
disabledSeconds: (hour, minute) => {
|
||||
if (hour === today.hour() && minute === today.minute()) {
|
||||
const seconds = [];
|
||||
for (let i = today.second() + 1; i < 60; i++) {
|
||||
seconds.push(i);
|
||||
}
|
||||
return seconds;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// 二维码相关数据
|
||||
const qrcodeLoading = ref(false);
|
||||
|
||||
@ -626,7 +683,37 @@
|
||||
const rules = computed(() => ({
|
||||
articleTitle: [{ required: true, message: '标题 必填' }],
|
||||
articleStatus: [{ required: true, message: '状态(1:正常 2:禁用) 必填' }],
|
||||
pushDate: [{ required: true, message: '发表时间 必填' }],
|
||||
pushDate: [
|
||||
{ required: true, message: '发表时间 必填' },
|
||||
{
|
||||
validator: (rule, value) => {
|
||||
if (!value) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
const selectedDate = new Date(value);
|
||||
const currentDate = new Date();
|
||||
// 设置当前时间为当天的23:59:59,允许选择当天
|
||||
currentDate.setHours(23, 59, 59, 999);
|
||||
|
||||
if (selectedDate > currentDate) {
|
||||
return Promise.reject('发表时间不能大于当前时间');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
authorList: [
|
||||
{
|
||||
required: true,
|
||||
message: '作者 必填',
|
||||
validator: (rule, value) => {
|
||||
if (!value || !Array.isArray(value) || value.length === 0) {
|
||||
return Promise.reject('请至少选择一个作者');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
isLinkUrl: [{
|
||||
required: isLinkChecked.value,
|
||||
message: '外部链接地址 必填',
|
||||
|
||||
@ -20,9 +20,6 @@
|
||||
<a-form-item label="标题" name="videoTitle">
|
||||
<a-input style="width: 100%" v-model:value="form.videoTitle" placeholder="标题" />
|
||||
</a-form-item>
|
||||
<a-form-item label="视频编号" name="videoNo">
|
||||
<a-input style="width: 100%" v-model:value="form.videoNo" placeholder="视频编号" />
|
||||
</a-form-item>
|
||||
<a-form-item label="状态" name="videoStatus">
|
||||
<SmartEnumSelect
|
||||
width="100%"
|
||||
@ -34,14 +31,25 @@
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="发表时间" name="pushDate">
|
||||
<a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.pushDate" style="width: 100%" placeholder="发表时间" />
|
||||
<a-date-picker
|
||||
show-time
|
||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||
v-model:value="form.pushDate"
|
||||
style="width: 100%"
|
||||
placeholder="发表时间"
|
||||
:disabled-date="disabledFutureDate"
|
||||
:disabled-time="disabledFutureTime"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="是否外部链接" name="isLink">
|
||||
<a-form-item label="是否外部链接" name="isLink" :colon="false">
|
||||
<a-switch v-model:checked="isLinkChecked" />
|
||||
</a-form-item>
|
||||
<a-form-item label="外部链接地址" name="isLinkUrl" v-if="isLinkChecked">
|
||||
<a-input style="width: 100%" v-model:value="form.isLinkUrl" placeholder="外部链接地址" />
|
||||
</a-form-item>
|
||||
<a-form-item label="视频编号" name="videoNo" v-if="!isLinkChecked">
|
||||
<a-input style="width: 100%" v-model:value="form.videoNo" placeholder="视频编号" />
|
||||
</a-form-item>
|
||||
<a-form-item label="疾病标签" name="labelList">
|
||||
<div class="label-container">
|
||||
<!-- 标签选择器 -->
|
||||
@ -211,6 +219,7 @@
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons-vue';
|
||||
import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
// ------------------------ 事件 ------------------------
|
||||
|
||||
@ -325,7 +334,7 @@
|
||||
videoNo: undefined, //视频编号
|
||||
videoStatus: 1, //状态,默认正常
|
||||
deleteStatus: 0, //删除状态,默认未删除
|
||||
pushDate: undefined, //发表时间
|
||||
pushDate: new Date().toISOString().slice(0, 19).replace('T', ' '), //发表时间,默认为当天
|
||||
isLink: 0, //是否外部链接,0:否 1:是
|
||||
isLinkUrl: undefined, //外部链接地址
|
||||
labelList: [], //标签列表
|
||||
@ -335,12 +344,82 @@
|
||||
|
||||
let form = reactive({ ...formDefault });
|
||||
|
||||
const rules = {
|
||||
// ------------------------ 外部链接相关 ------------------------
|
||||
const isLinkChecked = computed({
|
||||
get: () => form.isLink === 1,
|
||||
set: (value) => {
|
||||
form.isLink = value ? 1 : 0;
|
||||
if (value) {
|
||||
// 选择外部链接时,清空视频编号
|
||||
form.videoNo = undefined;
|
||||
} else {
|
||||
// 不选择外部链接时,清空外部链接地址
|
||||
form.isLinkUrl = undefined;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const rules = computed(() => ({
|
||||
videoTitle: [{ required: true, message: '标题 必填' }],
|
||||
videoNo: [{ required: true, message: '视频编号 必填' }],
|
||||
videoNo: [{
|
||||
required: !isLinkChecked.value,
|
||||
message: '视频编号 必填',
|
||||
validator: (rule, value) => {
|
||||
if (isLinkChecked.value) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
if (!value || value.trim() === '') {
|
||||
return Promise.reject('视频编号 必填');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}],
|
||||
videoStatus: [{ required: true, message: '状态 必填' }],
|
||||
pushDate: [{ required: true, message: '发表时间 必填' }],
|
||||
};
|
||||
pushDate: [
|
||||
{ required: true, message: '发表时间 必填' },
|
||||
{
|
||||
validator: (rule, value) => {
|
||||
if (!value) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
const selectedDate = new Date(value);
|
||||
const currentDate = new Date();
|
||||
// 设置当前时间为当天的23:59:59,允许选择当天
|
||||
currentDate.setHours(23, 59, 59, 999);
|
||||
|
||||
if (selectedDate > currentDate) {
|
||||
return Promise.reject('发表时间不能大于当前时间');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
isLinkUrl: [{
|
||||
required: isLinkChecked.value,
|
||||
message: '外部链接地址 必填',
|
||||
validator: (rule, value) => {
|
||||
if (!isLinkChecked.value) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
if (!value || value.trim() === '') {
|
||||
return Promise.reject('外部链接地址 必填');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}],
|
||||
authorList: [
|
||||
{
|
||||
required: true,
|
||||
message: '作者 必填',
|
||||
validator: (rule, value) => {
|
||||
if (!value || !Array.isArray(value) || value.length === 0) {
|
||||
return Promise.reject('请至少选择一个作者');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
}));
|
||||
|
||||
// 点击确定,验证表单
|
||||
async function onSubmit() {
|
||||
@ -371,17 +450,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------ 外部链接相关 ------------------------
|
||||
const isLinkChecked = computed({
|
||||
get: () => form.isLink === 1,
|
||||
set: (value) => {
|
||||
form.isLink = value ? 1 : 0;
|
||||
if (!value) {
|
||||
form.isLinkUrl = undefined;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// ------------------------ 标签相关 ------------------------
|
||||
const selectedLabels = ref([null, null, null]);
|
||||
const labelOptions = ref([[], [], []]);
|
||||
@ -612,6 +680,54 @@
|
||||
});
|
||||
}
|
||||
|
||||
// 禁用未来日期
|
||||
function disabledFutureDate(current) {
|
||||
// 禁用今天之后的日期
|
||||
return current && current > dayjs().endOf('day');
|
||||
}
|
||||
|
||||
// 禁用未来时间
|
||||
function disabledFutureTime(date) {
|
||||
if (date) {
|
||||
const today = dayjs();
|
||||
const selectedDate = dayjs(date);
|
||||
|
||||
// 如果是今天,禁用未来时间
|
||||
if (selectedDate.isSame(today, 'day')) {
|
||||
return {
|
||||
disabledHours: () => {
|
||||
const hours = [];
|
||||
for (let i = today.hour() + 1; i < 24; i++) {
|
||||
hours.push(i);
|
||||
}
|
||||
return hours;
|
||||
},
|
||||
disabledMinutes: (hour) => {
|
||||
if (hour === today.hour()) {
|
||||
const minutes = [];
|
||||
for (let i = today.minute() + 1; i < 60; i++) {
|
||||
minutes.push(i);
|
||||
}
|
||||
return minutes;
|
||||
}
|
||||
return [];
|
||||
},
|
||||
disabledSeconds: (hour, minute) => {
|
||||
if (hour === today.hour() && minute === today.minute()) {
|
||||
const seconds = [];
|
||||
for (let i = today.second() + 1; i < 60; i++) {
|
||||
seconds.push(i);
|
||||
}
|
||||
return seconds;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
// 暴露方法
|
||||
defineExpose({
|
||||
|
||||
@ -10,14 +10,11 @@
|
||||
<a-form class="smart-query-form">
|
||||
<a-row class="smart-query-form-row">
|
||||
<a-form-item label="关键字" class="smart-query-form-item">
|
||||
<a-input style="width: 200px" v-model:value="queryForm.keywords" placeholder="标题/作者/" />
|
||||
<a-input style="width: 200px" v-model:value="queryForm.keywords" placeholder="疾病名称/标题/作者" />
|
||||
</a-form-item>
|
||||
<a-form-item label="状态" name="videoStatus" class="smart-query-form-item">
|
||||
<SmartEnumSelect enum-name="STATUS_ENUM" v-model:value="queryForm.videoStatus" width="160px" />
|
||||
</a-form-item>
|
||||
<a-form-item label="删除状态" name="deleteStatus" class="smart-query-form-item">
|
||||
<SmartEnumSelect enum-name="DELETE_STATUS_ENUM" v-model:value="queryForm.deleteStatus" width="160px" />
|
||||
</a-form-item>
|
||||
<a-form-item class="smart-query-form-item">
|
||||
<a-button type="primary" @click="onSearch">
|
||||
<template #icon>
|
||||
@ -107,10 +104,6 @@
|
||||
/>
|
||||
</template>
|
||||
|
||||
<template v-if="column.dataIndex === 'deleteStatus'">
|
||||
<span>{{ text === 1 ? '是' : '否' }}</span>
|
||||
</template>
|
||||
|
||||
<template v-if="column.dataIndex === 'videoTitle'">
|
||||
<div class="text-wrap">{{ text }}</div>
|
||||
</template>
|
||||
@ -196,11 +189,6 @@
|
||||
},
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '删除状态',
|
||||
dataIndex: 'deleteStatus',
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: '阅读量',
|
||||
dataIndex: 'readNum',
|
||||
@ -239,7 +227,6 @@
|
||||
const queryFormState = {
|
||||
keywords: undefined, //关键字
|
||||
videoStatus: undefined, //状态
|
||||
deleteStatus: undefined, //删除状态
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
};
|
||||
|
||||
@ -44,7 +44,9 @@
|
||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||
v-model:value="form.pushDate"
|
||||
style="width: 100%"
|
||||
placeholder="发表时间"
|
||||
placeholder="发表时间"
|
||||
:disabled-date="disabledFutureDate"
|
||||
:disabled-time="disabledFutureTime"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="内容" name="exchangeContent">
|
||||
@ -222,13 +224,15 @@
|
||||
<script setup>
|
||||
import { reactive, ref, nextTick, computed } from 'vue';
|
||||
import _ from 'lodash';
|
||||
import { message } from 'ant-design-vue';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { SmartLoading } from '/@/components/framework/smart-loading';
|
||||
import { caseExchangeApi } from '/@/api/business/case-exchange/case-exchange-api';
|
||||
import { caseClinicalArticleApi } from '/@/api/business/case-clinical-article/case-clinical-article-api';
|
||||
import { smartSentry } from '/@/lib/smart-sentry';
|
||||
import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue';
|
||||
import SmartWangeditor from '/@/components/framework/wangeditor/index.vue';
|
||||
import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue';
|
||||
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
// ------------------------ 事件 ------------------------
|
||||
|
||||
@ -333,7 +337,7 @@
|
||||
exchangeTitle: undefined, //标题
|
||||
exchangeStatus: 1, //状态(1:正常 2:禁用)- 默认为正常
|
||||
isSelected: 0, //精选状态(0:否 1:是)- 默认为否
|
||||
pushDate: undefined, //发表时间
|
||||
pushDate: new Date().toISOString().slice(0, 19).replace('T', ' '), //发表时间,默认为当天
|
||||
exchangeContent: '', //内容
|
||||
exchangeSummary: undefined, //总结
|
||||
labelList: [], //标签列表
|
||||
@ -371,7 +375,25 @@
|
||||
exchangeTitle: [{ required: true, message: '标题 必填' }],
|
||||
exchangeStatus: [{ required: true, message: '状态 必填' }],
|
||||
isSelected: [{ required: true, message: '精选状态 必填' }],
|
||||
pushDate: [{ required: true, message: '发表时间 必填' }],
|
||||
pushDate: [
|
||||
{ required: true, message: '发表时间 必填' },
|
||||
{
|
||||
validator: (rule, value) => {
|
||||
if (!value) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
const selectedDate = new Date(value);
|
||||
const currentDate = new Date();
|
||||
// 设置当前时间为当天的23:59:59,允许选择当天
|
||||
currentDate.setHours(23, 59, 59, 999);
|
||||
|
||||
if (selectedDate > currentDate) {
|
||||
return Promise.reject('发表时间不能大于当前时间');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
exchangeContent: [{ required: true, message: '内容 必填' }],
|
||||
exchangeSummary: [{ required: true, message: '总结 必填' }],
|
||||
};
|
||||
@ -535,6 +557,53 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 禁用未来日期
|
||||
function disabledFutureDate(current) {
|
||||
return current && current > dayjs().endOf('day').toDate();
|
||||
}
|
||||
|
||||
// 禁用未来时间
|
||||
function disabledFutureTime(date) {
|
||||
if (date) {
|
||||
const today = dayjs();
|
||||
const selectedDate = dayjs(date);
|
||||
|
||||
// 如果是今天,禁用未来时间
|
||||
if (selectedDate.isSame(today, 'day')) {
|
||||
return {
|
||||
disabledHours: () => {
|
||||
const hours = [];
|
||||
for (let i = today.hour() + 1; i < 24; i++) {
|
||||
hours.push(i);
|
||||
}
|
||||
return hours;
|
||||
},
|
||||
disabledMinutes: (hour) => {
|
||||
if (hour === today.hour()) {
|
||||
const minutes = [];
|
||||
for (let i = today.minute() + 1; i < 60; i++) {
|
||||
minutes.push(i);
|
||||
}
|
||||
return minutes;
|
||||
}
|
||||
return [];
|
||||
},
|
||||
disabledSeconds: (hour, minute) => {
|
||||
if (hour === today.hour() && minute === today.minute()) {
|
||||
const seconds = [];
|
||||
for (let i = today.second() + 1; i < 60; i++) {
|
||||
seconds.push(i);
|
||||
}
|
||||
return seconds;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
show,
|
||||
});
|
||||
|
||||
@ -238,7 +238,7 @@
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
fixed: 'right',
|
||||
width: 90,
|
||||
width: 120,
|
||||
},
|
||||
]);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user