服务指令包样式调整

This commit is contained in:
1378012178@qq.com 2025-09-04 16:22:31 +08:00
parent e75de1efde
commit 8e7ce5f40b
8 changed files with 620 additions and 429 deletions

View File

@ -25,11 +25,11 @@ VITE_DEFAULT_ELDER_TAG_BODY_PIC = 'https://www.focusnu.com/media/default/bodyDef
# 长者标签-情绪标签默认图片
VITE_DEFAULT_ELDER_TAG_EMO_PIC = 'https://www.focusnu.com/media/default/emoDefault.png'
# 服务指令-服务指令图片(大)默认图片
VITE_DEFAULT_DIRECTIVE_PRE_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_PRE_PIC = 'https://www.focusnu.com/media/default/predefault.png'
# 服务指令-服务指令图片(小)默认图片
VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC = 'https://www.focusnu.com/media/default/presmalldefault.png'
# 服务指令-即时指令图标默认图片
VITE_DEFAULT_DIRECTIVE_IM_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_IM_PIC = 'https://www.focusnu.com/media/default/imdefault.png'
# 填写后将作为乾坤子应用启动主应用注册时AppName需保持一致放开 VITE_GLOB_QIANKUN_MICRO_APP_NAME 参数表示jeecg-vue3将以乾坤子应用模式启动
#VITE_GLOB_QIANKUN_MICRO_APP_NAME=jeecg-vue3

View File

@ -25,11 +25,11 @@ VITE_DEFAULT_ELDER_TAG_BODY_PIC = 'https://www.focusnu.com/media/default/bodyDef
# 长者标签-情绪标签默认图片
VITE_DEFAULT_ELDER_TAG_EMO_PIC = 'https://www.focusnu.com/media/default/emoDefault.png'
# 服务指令-服务指令图片(大)默认图片
VITE_DEFAULT_DIRECTIVE_PRE_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_PRE_PIC = 'https://www.focusnu.com/media/default/predefault.png'
# 服务指令-服务指令图片(小)默认图片
VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC = 'https://www.focusnu.com/media/default/presmalldefault.png'
# 服务指令-即时指令图标默认图片
VITE_DEFAULT_DIRECTIVE_IM_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_IM_PIC = 'https://www.focusnu.com/media/default/imdefault.png'
# 填写后将作为乾坤子应用启动主应用注册时AppName需保持一致放开 VITE_GLOB_QIANKUN_MICRO_APP_NAME 参数表示jeecg-vue3将以乾坤子应用模式启动
#VITE_GLOB_QIANKUN_MICRO_APP_NAME=jeecg-vue3

View File

@ -26,11 +26,11 @@ VITE_DEFAULT_ELDER_TAG_BODY_PIC = 'https://www.focusnu.com/media/default/bodyDef
# 长者标签-情绪标签默认图片
VITE_DEFAULT_ELDER_TAG_EMO_PIC = 'https://www.focusnu.com/media/default/emoDefault.png'
# 服务指令-服务指令图片(大)默认图片
VITE_DEFAULT_DIRECTIVE_PRE_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_PRE_PIC = 'https://www.focusnu.com/media/default/predefault.png'
# 服务指令-服务指令图片(小)默认图片
VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_PRESMALL_PIC = 'https://www.focusnu.com/media/default/presmalldefault.png'
# 服务指令-即时指令图标默认图片
VITE_DEFAULT_DIRECTIVE_IM_PIC = 'https://www.focusnu.com/media/default/default.png'
VITE_DEFAULT_DIRECTIVE_IM_PIC = 'https://www.focusnu.com/media/default/imdefault.png'
# 填写后将作为乾坤子应用启动主应用注册时AppName需保持一致放开 VITE_GLOB_QIANKUN_MICRO_APP_NAME 参数表示jeecg-vue3将以乾坤子应用模式启动
#VITE_GLOB_QIANKUN_MICRO_APP_NAME=jeecg-vue3

View File

@ -188,10 +188,11 @@ onMounted(() => {
<style lang="less" scoped>
.jeecg-basic-table-form-container {
padding: 0;
margin-bottom: 14px;
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
margin-bottom: 14px;
white-space: nowrap;
}
@ -206,7 +207,7 @@ onMounted(() => {
}
.ant-form-item:not(.ant-form-item-with-help) {
margin-bottom: 16px;
margin-bottom: 14px;
height: 32px;
}
@ -217,7 +218,7 @@ onMounted(() => {
}
.bjclass{
text-align: center;
margin-top: 24px;
margin-top: 14px;
border-radius: 50%;
width: 60px;
height: 60px;

View File

@ -5,6 +5,7 @@ export const columns: BasicColumn[] = [
title: '分类标签',
align: 'center',
dataIndex: 'instructionTagId_dictText',
width: 120,
},
{
title: '服务类别',
@ -21,36 +22,43 @@ export const columns: BasicColumn[] = [
align: 'center',
dataIndex: 'directiveName',
},
{
title: '体型标签',
align: 'center',
dataIndex: 'bodyTagList',
ellipsis: false,
format(text, record, index) {
if (!!text) {
return text.map((item) => item.tagName).join('、');
} else {
return '-';
}
},
},
{
title: '情绪标签',
align: 'center',
dataIndex: 'emotionTagList',
ellipsis: false,
format(text, record, index) {
if (!!text) {
return text.map((item) => item.tagName).join('、');
} else {
return '-';
}
},
},
// {
// title: '体型标签',
// align: 'center',
// dataIndex: 'bodyTagList',
// ellipsis: false,
// format(text, record, index) {
// if (!!text) {
// return text.map((item) => item.tagName).join('、');
// } else {
// return '-';
// }
// },
// },
// {
// title: '情绪标签',
// align: 'center',
// dataIndex: 'emotionTagList',
// ellipsis: false,
// format(text, record, index) {
// if (!!text) {
// return text.map((item) => item.tagName).join('、');
// } else {
// return '-';
// }
// },
// },
{
title: '周期类型',
align: 'center',
dataIndex: 'cycleType_dictText',
width: 90,
},
{
title: '服务时长',
align: 'center',
dataIndex: 'serviceDuration',
width: 90,
},
];
@ -66,6 +74,7 @@ export const selectedColumns: BasicColumn[] = [
title: '分类标签',
align: 'center',
dataIndex: 'instructionTagName',
width: 120,
},
{
title: '服务类别',
@ -82,36 +91,43 @@ export const selectedColumns: BasicColumn[] = [
align: 'center',
dataIndex: 'directiveName',
},
{
title: '指令标签',
align: 'center',
dataIndex: 'bodyTagList',
ellipsis: false,
format(text, record, index) {
if (!!text) {
return text.map((item) => item.tagName).join('、');
} else {
return '-';
}
},
},
{
title: '指令标签',
align: 'center',
dataIndex: 'emotionTagList',
ellipsis: false,
format(text, record, index) {
if (!!text) {
return text.map((item) => item.tagName).join('、');
} else {
return '-';
}
},
},
// {
// title: '指令标签',
// align: 'center',
// dataIndex: 'bodyTagList',
// ellipsis: false,
// format(text, record, index) {
// if (!!text) {
// return text.map((item) => item.tagName).join('、');
// } else {
// return '-';
// }
// },
// },
// {
// title: '指令标签',
// align: 'center',
// dataIndex: 'emotionTagList',
// ellipsis: false,
// format(text, record, index) {
// if (!!text) {
// return text.map((item) => item.tagName).join('、');
// } else {
// return '-';
// }
// },
// },
{
title: '周期类型',
align: 'center',
dataIndex: 'cycleType',
width: 90,
},
{
title: '服务时长',
align: 'center',
dataIndex: 'serviceDuration',
width: 90,
},
{
title: '操作',
@ -119,6 +135,6 @@ export const selectedColumns: BasicColumn[] = [
slots: { customRender: 'action' },
fixed: 'right', // 如果需要固定在右侧
align: 'center',
width: 100,
width: 80,
},
];

View File

@ -5,116 +5,147 @@
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol"
:wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="4">
<a-form-item name="categoryId">
<template #label><span title="服务类别">分类标签</span></template>
<j-dict-select-tag type="list" v-model:value="queryParam.instructionTagId"
<a-col :lg="5">
<a-form-item name="instructionTagId">
<template #label><span title="分类标签">分类标签</span></template>
<j-dict-select-tag v-model:value="queryParam.instructionTagId"
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 0 order by sort asc`"
:ignoreDisabled="true" placeholder="请选择服务类别" allow-clear :disabled="queryParam.instructionTagId" />
placeholder="请选择分类标签" allowClear :ignoreDisabled="true"
@change="onInstructionTagChange" />
</a-form-item>
</a-col>
<a-col :lg="4">
<a-col :lg="5">
<a-form-item name="categoryId">
<template #label><span title="服务类别">服务类别</span></template>
<j-dict-select-tag type="list" v-model:value="queryParam.categoryId"
:dictCode="`nu_config_service_category,category_name,id,del_flag = 0 and iz_enabled = 0 order by sort asc`"
:ignoreDisabled="true" placeholder="请选择服务类别" allow-clear />
:dictCode="`nu_config_service_category,category_name,id,del_flag = 0 and iz_enabled = 0 and instruction_id = '${queryParam.instructionTagId || ''}' order by sort asc`"
placeholder="请选择服务类别" allowClear :ignoreDisabled="true"
@change="onCategoryChange" />
</a-form-item>
</a-col>
<a-col :lg="4">
<a-col :lg="5">
<a-form-item name="typeId">
<template #label><span title="服务类型">服务类型</span></template>
<j-dict-select-tag type="list" v-model:value="queryParam.typeId"
:dictCode="`nu_config_service_type,type_name,id,del_flag = 0 and iz_enabled = 0 and category_id = ${queryParam.categoryId || -1} order by sort asc`"
placeholder="请选择服务类型" :ignoreDisabled="true" allowClear />
:dictCode="`nu_config_service_type,type_name,id,del_flag = 0 and iz_enabled = 0 and category_id = '${queryParam.categoryId || ''}' order by sort asc`"
placeholder="请选择服务类型" allowClear :ignoreDisabled="true" />
</a-form-item>
</a-col>
<a-col :lg="4">
<a-col :lg="5">
<a-form-item name="directiveName">
<template #label><span title="服务指令">服务指令</span></template>
<JInput v-model:value="queryParam.directiveName" placeholder="请输入服务指令名称" allowClear />
</a-form-item>
</a-col>
<a-col :xl="4" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset"
style="margin-left: 8px">重置</a-button>
</a-col>
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!--引用表格-->
<BasicTable @register="registerTable" :scroll="{ x: '100%', y: '32vh' }">
<!--插槽:table标题-->
<template #tableTitle>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
</template>
<template v-slot:bodyCell="{ column, record, index, text }">
</template>
</BasicTable>
<a-table :columns="selectedColumns" :data-source="directiveList" :scroll="{ x: '100%', y: '32vh' }"
:pagination="false" size="small">
<template v-slot:bodyCell="{ column, record, index, text }">
<span v-if="column.dataIndex === 'index'">
{{ parseInt(index) + 1 }}
</span>
<span v-if="column.dataIndex === 'instructionTagName'">
{{ text || record.instructionTagId_dictText }}
</span>
<span v-if="column.dataIndex === 'categoryName'">
{{ text || record.categoryId_dictText }}
</span>
<span v-if="column.dataIndex === 'typeName'">
{{ text || record.typeId_dictText }}
</span>
<span v-if="column.dataIndex === 'bodyTagList'">
{{ handleTags('', text, '') }}
</span>
<span v-if="column.dataIndex === 'emotionTagList'">
{{ handleTags('', text, '') }}
</span>
<span v-if="column.dataIndex === 'cycleType'">
{{ filterDictTextByCache('period_type', text) }}
</span>
</template>
<template #action="{ record }">
<a @click="removeDirective(record.id)">移除</a>
</template>
</a-table>
<div style="text-align: right;margin-top: 10px;margin-right: 10px;">
{{ directiveList.length }} 条记录
</div>
<!-- 表单区域 -->
<ConfigServiceDirectiveModal ref="registerModal" @success="handleSuccess"></ConfigServiceDirectiveModal>
<!--左右布局左侧指令列表右侧已选列表-->
<a-row>
<!-- 左侧指令列表 -->
<a-col :span="12">
<div style="margin-left: 14px; padding: 1px; background-color: white; border-radius: 10px;">
<a-tag color="blue" style="margin-top: 8px; margin-left: 14px;">全部指令</a-tag>
<BasicTable @register="registerTable" :scroll="{ x: '100%', y: '58vh' }">
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
</template>
</BasicTable>
</div>
</a-col>
<!-- 右侧已选择指令 -->
<a-col :span="12">
<div style="margin-left: 14px; padding: 8px 14px; background-color: white; border-radius: 10px;">
<a-tag color="green" style="margin-bottom: 10px;">已选择 {{ directiveList.length }} </a-tag>
<a-table :columns="selectedColumns" :data-source="directiveList" :scroll="{ x: '100%', y: '67vh' }"
:pagination="false" size="small" bordered>
<template v-slot:bodyCell="{ column, record, index, text }">
<span v-if="column.dataIndex === 'index'">
{{ index + 1 }}
</span>
<span v-else-if="column.dataIndex === 'instructionTagName'">
{{ text || record.instructionTagId_dictText }}
</span>
<span v-else-if="column.dataIndex === 'categoryName'">
{{ text || record.categoryId_dictText }}
</span>
<span v-else-if="column.dataIndex === 'typeName'">
{{ text || record.typeId_dictText }}
</span>
<span v-else-if="column.dataIndex === 'bodyTagList'">
{{ handleTags('', text, '') }}
</span>
<span v-else-if="column.dataIndex === 'emotionTagList'">
{{ handleTags('', text, '') }}
</span>
<span v-else-if="column.dataIndex === 'cycleType'">
{{ filterDictTextByCache('period_type', text) }}
</span>
<span v-else>{{ text }}</span>
</template>
<template #action="{ record }">
<a @click="removeDirective(record.id)">移除</a>
</template>
</a-table>
</div>
</a-col>
</a-row>
<!-- 表单弹窗 -->
<ConfigServiceDirectiveModal ref="registerModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" name="serviceDirective-configServiceDirective" setup>
import { ref, reactive, computed, defineExpose } from 'vue';
import { ref, reactive, defineEmits, defineProps, computed } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, selectedColumns } from './ConfigServiceDirective.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './ConfigServiceDirective.api';
import JInput from "/@/components/Form/src/jeecg/components/JInput.vue";
import JInput from '/@/components/Form/src/jeecg/components/JInput.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { cloneDeep } from "lodash-es";
import ConfigServiceDirectiveModal from './ConfigServiceDirectiveModal.vue'
import { cloneDeep } from 'lodash-es';
import ConfigServiceDirectiveModal from './ConfigServiceDirectiveModal.vue';
import { filterDictTextByCache } from '/@/utils/dict/JDictSelectUtil';
const emit = defineEmits(['deleteDirective', 'addDirective']);
const formRef = ref();
const queryParam = reactive<any>({});
const registerModal = ref();
const directiveInfo = ref<any>({});
//table
//
const props = defineProps({
directiveList: {
type: Array,
default: () => []
}
});
//
const isDirectiveSelected = (id) => {
return props.directiveList.some(item => item.id === id);
};
//
const labelCol = reactive({ xs: 24, sm: 8, xl: 8, xxl: 8 });
const wrapperCol = reactive({ xs: 24, sm: 16 });
//
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
title: '服务指令',
@ -126,58 +157,42 @@ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
showIndexColumn: true,
showTableSetting: false,
actionColumn: {
width: 90,
width: 80,
fixed: 'center',
},
// 👉 customRow
customRow: (record) => {
return {
style: isDirectiveSelected(record.id) ? 'background-color: #E6F7FF;' : ''
};
},
beforeFetch: async (params) => {
params.column = 'createTime'
params.order = 'desc'
params.column = 'createTime';
params.order = 'desc';
let rangerQuery = await setRangeQuery();
return Object.assign(params, rangerQuery);
},
},
});
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
const props = defineProps({
directiveList: [],
});
const labelCol = reactive({
xs: 24,
sm: 8,
xl: 8,
xxl: 8
});
const wrapperCol = reactive({
xs: 24,
sm: 16,
});
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
function getInstructionName(record) {
console.log("🚀 ~ getInstructionName ~ record:", record)
return "";
}
/**
* 选择
* @param directive_
*/
function handleSelect(directive_) {
console.log("🚀 ~ handleSelect ~ directive_:", directive_)
queryParam.instructionTagId = directive_.instructionTagId
reload();
emit('addDirective', directive_)
}
/**
* 操作栏
* 选择指令
*/
function handleSelect(record) {
emit('addDirective', record);
}
/**
* 操作栏选择按钮
*/
function getTableAction(record) {
return [
@ -188,37 +203,44 @@ function getTableAction(record) {
];
}
/**
* 下拉操作栏
*/
function getDropDownAction(record) {
return [
]
return [];
}
/**
* 查询
* 查询 / 重置
*/
function searchQuery() {
reload();
}
/**
* 重置
*/
function searchReset() {
formRef.value.resetFields();
queryParam.instructionTagId = undefined;
queryParam.categoryId = undefined;
queryParam.typeId = undefined;
selectedRowKeys.value = [];
//
reload();
}
let rangeField = 'tollPrice,comPrice,'
/**
* 联动更新分类标签变化时清空下级
*/
function onInstructionTagChange() {
queryParam.categoryId = undefined;
queryParam.typeId = undefined;
reload();
}
function onCategoryChange() {
queryParam.typeId = undefined;
reload();
}
/**
* 设置范围查询条件
* 范围查询处理
*/
let rangeField = 'tollPrice,comPrice,';
async function setRangeQuery() {
let queryParamClone = cloneDeep(queryParam);
if (rangeField) {
@ -233,67 +255,57 @@ async function setRangeQuery() {
queryParamClone[item + '_begin'] = '';
queryParamClone[item + '_end'] = '';
}
})
});
}
return queryParamClone;
}
/**
* 移除
* @param directiveId
* 移除已选指令
*/
function removeDirective(directiveId) {
emit('deleteDirective', directiveId)
emit('deleteDirective', directiveId);
}
/**
* 处理服务指令标签翻译
* 标签处理
*/
function handleTags(prefix, tagList, suffix) {
if (!!tagList && tagList.length > 0) {
if (Array.isArray(tagList) && tagList.length > 0) {
let str = tagList.map(item => item.tagName).join('、 ');
return prefix + str + suffix
return prefix + str + suffix;
} else {
return ' - '
return ' - ';
}
}
function edit(record) {
console.log("🚀 ~ edit ~ record:", record)
directiveInfo.value = record
console.log("🚀 ~ edit ~ directiveInfo:", directiveInfo)
queryParam.instructionTagId = record.instructionTagId
}
defineExpose({
edit
});
/**
* 编辑方法供父组件调用
*/
function edit(record) {
directiveInfo.value = record;
queryParam.instructionTagId = record.instructionTagId;
}
defineExpose({ edit });
</script>
<style lang="less" scoped>
.jeecg-basic-table-form-container {
padding: 0;
margin-bottom: 14px;
.table-page-search-submitButtons {
display: block;
white-space: nowrap;
}
.query-group-cust {
min-width: 100px !important;
}
.query-group-split-cust {
width: 30px;
display: inline-block;
text-align: center
}
.ant-form-item:not(.ant-form-item-with-help) {
height: 0px;
:deep(.ant-form-item) {
margin-bottom: 8px;
}
:deep(.ant-picker),
:deep(.ant-input-number) {
:deep(.ant-input-number),
:deep(.ant-select-selector) {
width: 100%;
}
}
@ -310,4 +322,4 @@ audio::-webkit-media-controls-time-remaining-display {
:deep(.ant-table-title) {
display: none !important;
}
</style>
</style>

View File

@ -1,40 +1,112 @@
<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"
name="DirectivePackageForm">
<a-row>
<a-col :span="8">
<a-form-item label="包名称" v-bind="validateInfos.packageName" id="DirectivePackageForm-packageName" name="packageName">
<a-input v-model:value="formData.packageName" placeholder="请输入服务指令包名称" allow-clear></a-input>
</a-form-item>
</a-col>
<a-col :span="6">
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="DirectivePackageForm-izEnabled"
name="izEnabled">
<j-dict-select-tag type='radio' v-model:value="formData.izEnabled" dictCode="iz_enabled"
placeholder="是否启用" allow-clear />
</a-form-item>
</a-col>
<a-col :span="10">
<a-form-item label="时间" v-bind="validateInfos.startTimeStr" id="DirectivePackageForm-startTimeStr"
name="startTimeStr">
<a-time-picker v-model:value="formData.startTimeStr" format="HH:mm" />
-
<a-time-picker v-model:value="formData.endTimeStr" format="HH:mm" />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="说明" v-bind="validateInfos.description" id="DirectivePackageForm-description"
name="description" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<a-textarea v-model:value="formData.description" :rows="1" placeholder="请输入说明" />
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
<div class="card-style">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"
name="DirectivePackageForm">
<!-- <a-row>
<a-col :span="12">
<a-form-item label="指令包名称" v-bind="validateInfos.packageName" id="DirectivePackageForm-packageName"
name="packageName">
<a-input v-model:value="formData.packageName" placeholder="请输入服务指令包名称" allow-clear :maxlength="20"
:showCount="true"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="DirectivePackageForm-izEnabled"
name="izEnabled" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<j-dict-select-tag type='radio' v-model:value="formData.izEnabled" dictCode="iz_enabled"
placeholder="是否启用" allow-clear />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="服务总时长" v-bind="validateInfos.totalDuration" id="DirectivePackageForm-totalDuration"
name="totalDuration">
<a-input-number v-model:value="formData.totalDuration" :min="1" :step="5" addon-after="分钟"
placeholder="请输入服务时长(分钟)" allow-clear @keydown="onDurationKeydown" :disabled="disabled" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="服务包说明" v-bind="validateInfos.description" id="DirectivePackageForm-description"
name="description" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<a-textarea v-model:value="formData.description" :maxlength="200" :autosize="{ minRows: 2 }"
:showCount="true" placeholder="请输入说明" />
</a-form-item>
</a-col>
</a-row> -->
<!-- <a-row>
<a-col :span="8">
<a-form-item label="指令包名称" v-bind="validateInfos.packageName" id="DirectivePackageForm-packageName"
name="packageName">
<a-input v-model:value="formData.packageName" placeholder="请输入服务指令包名称" allow-clear :maxlength="20"
:showCount="true"></a-input>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="服务总时长" v-bind="validateInfos.totalDuration" id="DirectivePackageForm-totalDuration"
name="totalDuration">
<a-input-number v-model:value="formData.totalDuration" :min="1" :step="5" addon-after="分钟"
placeholder="请输入服务时长(分钟)" allow-clear @keydown="onDurationKeydown" :disabled="disabled" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="DirectivePackageForm-izEnabled"
name="izEnabled">
<j-dict-select-tag type='radio' v-model:value="formData.izEnabled" dictCode="iz_enabled"
placeholder="是否启用" allow-clear />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="指令包说明" v-bind="validateInfos.description" id="DirectivePackageForm-description"
name="description" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<a-textarea v-model:value="formData.description" :maxlength="200" :autosize="{ minRows: 1 }"
:showCount="true" placeholder="请输入说明" />
</a-form-item>
</a-col>
</a-row> -->
<a-row>
<a-col :span="12">
<a-row>
<a-col :span="24">
<a-form-item label="指令包名称" v-bind="validateInfos.packageName" id="DirectivePackageForm-packageName"
name="packageName">
<a-input v-model:value="formData.packageName" placeholder="请输入服务指令包名称" allow-clear :maxlength="20"
:showCount="true"></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="服务总时长" v-bind="validateInfos.totalDuration"
id="DirectivePackageForm-totalDuration" name="totalDuration">
<a-input-number v-model:value="formData.totalDuration" :min="1" :step="5" addon-after="分钟"
placeholder="请输入服务时长(分钟)" allow-clear @keydown="onDurationKeydown" :disabled="disabled" />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="DirectivePackageForm-izEnabled"
name="izEnabled">
<j-dict-select-tag type='list' v-model:value="formData.izEnabled" dictCode="iz_enabled"
placeholder="是否启用" allow-clear />
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-row>
<a-col :span="24">
<a-form-item label="说明" v-bind="validateInfos.description" id="DirectivePackageForm-description"
name="description" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<a-textarea v-model:value="formData.description" :maxlength="200" :autosize="{ minRows: 5 }"
:showCount="true" placeholder="请输入说明" />
</a-form-item>
</a-col>
</a-row>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</div>
</a-spin>
</template>
@ -65,20 +137,47 @@ const formData = reactive<Record<string, any>>({
startTimeStr: '',
endTimeStr: '',
instructionTagId: '',
totalDuration: 0,
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 6 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 2 } });
const wrapperCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 21 } });
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 6 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 2 } });
const wrapperCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 21 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
// packageName: [{ required: true, message: '!' },],
// sort: [{ required: true, message: '!' }, { pattern: /^\d+$/, message: '!' },],
packageName: [{ required: true, message: '请输入服务指令包名称!' },],
totalDuration: [{ required: true, message: '请输入服务总时长(分钟)!' }, {
validator: (_, value) => {
if (value <= 0) {
return Promise.reject('请输入服务总时长!');
}
return Promise.resolve();
},
},],
izEnabled: [{ required: true, message: '请选择是否启用!' },],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
const onDurationKeydown = (e: KeyboardEvent) => {
const key = e.key;
//
if (['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab'].includes(key)) return;
//
if (!/[\d.]/.test(key)) {
e.preventDefault();
return;
}
const input = e.target as HTMLInputElement;
const { value, selectionStart: s, selectionEnd: t } = input;
const next = value.slice(0, s!) + key + value.slice(t!);
// 52
if (!/^\d{0,3}$/.test(next)) {
e.preventDefault();
}
};
//
const disabled = computed(() => {
if (props.formBpm === true) {
@ -114,12 +213,12 @@ function edit(record) {
console.log("🚀 ~ nextTick ~ tmpData:", tmpData)
//
Object.assign(formData, tmpData);
if(formData.startTimeStr){
formData.startTimeStr = dayjs(formData.startTimeStr,"YYYY-MM-DD hh:mm:ss")
if (formData.startTimeStr) {
formData.startTimeStr = dayjs(formData.startTimeStr, "YYYY-MM-DD hh:mm:ss")
}
if(formData.endTimeStr){
formData.endTimeStr = dayjs(formData.endTimeStr,"YYYY-MM-DD hh:mm:ss")
if (formData.endTimeStr) {
formData.endTimeStr = dayjs(formData.endTimeStr, "YYYY-MM-DD hh:mm:ss")
}
console.log("🚀 ~ nextTick ~ formData:", formData)
});
@ -162,43 +261,43 @@ async function submitForm(directives) {
if (directives.length > 0) {
model.directives = directives
}
if(!model.packageName){
createMessage.warning('请填写服务指令包名称');
// if (!model.packageName) {
// createMessage.warning('');
// confirmLoading.value = false;
// return;
// }
// if (!model.startTimeStr) {
// createMessage.warning('');
// confirmLoading.value = false;
// return;
// }
// if (!model.endTimeStr) {
// createMessage.warning('');
// confirmLoading.value = false;
// return;
// }
var directivesList = model.directives;
if (!directivesList || directivesList.length == 0) {
createMessage.warning('请选择服务指令');
confirmLoading.value = false;
return;
} else {
model.instructionTagId = directivesList[0].instructionTagId;
}
if(!model.startTimeStr){
createMessage.warning('请选择开始时间');
confirmLoading.value = false;
return;
}
if(!model.endTimeStr){
createMessage.warning('请选择结束时间');
confirmLoading.value = false;
return;
}
var directivesList = model.directives;
if(directivesList.length == 0){
createMessage.warning('请选择服务指令');
console.log('model', model);
// confirmLoading.value = false;
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
return;
}else{
model.instructionTagId = directivesList[0].instructionTagId;
}
console.log('model', model);
// confirmLoading.value = false;
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
});
}
@ -213,4 +312,18 @@ defineExpose({
.antd-modal-form {
padding: 14px;
}
.card-style {
padding-top: 14px;
padding-left: 14px;
padding-right: 14px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
margin-bottom: 14px;
}
:deep .ant-input-number-group-wrapper {
width: 100%;
}
</style>

View File

@ -3,132 +3,154 @@
<DirectivePackageForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></DirectivePackageForm>
</j-modal> -->
<a-drawer v-model:open="visible" v-if="visible" :title="title" width="80vw" :closable="false"
:footer-style="{ textAlign: 'right' }" @close="handleCancel">
:footer-style="{ textAlign: 'right' }" @close="handleCancel" :bodyStyle="{ padding: '14px' }">
<a-row>
<a-col :span="18">
<DirectivePackageForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false">
</DirectivePackageForm>
</a-col>
<a-col :span="6" style="padding-top: 19px;">
<a-button type="primary" style="margin-left:10px;" @click="handleQuoteDirectives"><Icon icon="ant-design:reconciliation-outlined" />引用服务指令包</a-button>
<a-button type="primary" style="margin-left:10px;" @click="handleAddDirectives"><Icon icon="ant-design:file-add-outlined" />选择服务指令</a-button>
<a-col :span="24">
<DirectivePackageForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false">
</DirectivePackageForm>
</a-col>
</a-row>
<a-row>
<a-col :span="6" v-for="directive of seletedRecord.directives" :key="directive.id" style="padding: 8px;" @click="directiveInfo(directive)" >
<div class="directiveClass" :class="{ 'selected': selectedDirective === directive.id }">
<div class="fenleiClass">
<a-row>
<a-col :span="12" class="ellipsis-two-lines">
{{directive.instructionTagName||directive.instructionTagId_dictText}}
<div class="card-style" style="min-height: 60vh;">
<a-row>
<a-col :span="24">
<div style="float: right;">
<a-button type="primary" @click="handleQuoteDirectives">
<Icon icon="ant-design:reconciliation-outlined" />引用服务指令包
</a-button>
<a-button type="primary" style="margin-left:10px;" @click="handleAddDirectives">
<Icon icon="ant-design:file-add-outlined" />选择服务指令
</a-button>
</div>
</a-col>
<a-col :span="6" v-for="directive of seletedRecord.directives" :key="directive.id" style="padding: 8px;"
@click="directiveInfo(directive)">
<div class="directiveClass" :class="{ 'selected': selectedDirective === directive.id }">
<div class="fenleiClass">
<a-row>
<a-col :span="12" class="ellipsis-two-lines">
{{ directive.instructionTagName || directive.instructionTagId_dictText }}
</a-col>
<a-col :span="12" style="text-align: right;padding-right: 10px;"
v-show="selectedDirective === directive.id">
<span
style="background-color: #67b4eb;border-radius: 50%;padding: 3px;color: white;width:27px;cursor: pointer;">
<a-popconfirm title="是否确认移除?" ok-text="确认" cancel-text="取消"
@confirm="deleteDirective(directive.id)">
<Icon icon="ant-design:delete-outlined" size="18" />
</a-popconfirm>
</span>
</a-col>
</a-row>
</div>
<!-- <div class="fwsjClass">10:00 - 10:10</div> -->
<div class="imgClass" style="margin-top: 10px;">
<img :src="getImgPath(directive.previewFile)" style="width: 100px;height:100px" />
</div>
<a-row style="margin-top: 10px;">
<a-col :span="14">
<span class="ellipsis-two-lines" style="margin-left:10px;font-size:20px;">{{ directive.directiveName
}}</span>
</a-col>
<a-col :span="12" style="text-align: right;padding-right: 10px;" v-show="selectedDirective === directive.id">
<span style="background-color: #67b4eb;border-radius: 50%;padding: 3px;color: white;width:27px;cursor: pointer;">
<a-popconfirm title="是否确认移除?" ok-text="确认" cancel-text="取消"
@confirm="deleteDirective(directive.id)">
<Icon icon="ant-design:delete-outlined" size="18"/>
</a-popconfirm>
<a-col :span="10" style="text-align: right;">
<span class="yuanClass">
<a-popover title="服务说明">
<template #content>
<p v-if="directive.serviceContent">{{ directive.serviceContent }}</p>
<p v-else>暂无</p>
</template>
<img style="width: 15px;height: 15px;" src="/src/assets/wlb/edit.png"></img>
</a-popover>
</span>
<span class="yuanClass">
<a-popover title="音频介绍">
<template #content>
<audio controls disabled="false" v-if="directive.mp3File">
<source :src="getFileAccessHttpUrl(directive.mp3File)">
</audio>
<span v-else>暂无</span>
</template>
<img style="width: 15px;height: 15px;" src="/src/assets/wlb/mp3.png"></img>
</a-popover>
</span>
<span class="yuanClass">
<a-popover title="视频介绍">
<template #content>
<video controls v-if="directive.mp4File">
<source :src="getFileAccessHttpUrl(directive.mp4File)">
</video>
<span v-else>暂无</span>
</template>
<img style="width: 15px;height: 15px;" src="/src/assets/wlb/mp4.png"></img>
</a-popover>
</span>
</a-col>
</a-row>
</div>
<!-- <div class="fwsjClass">10:00 - 10:10</div> -->
<div class="imgClass" style="margin-top: 10px;">
<img :src="getImgPath(directive.previewFile)" style="width: 100px;height:100px"/>
</div>
<a-row style="margin-top: 10px;">
<a-col :span="14">
<span class="ellipsis-two-lines" style="margin-left:10px;font-size:20px;">{{ directive.directiveName }}</span>
</a-col>
<a-col :span="10" style="text-align: right;">
<span class="yuanClass">
<a-popover title="服务说明">
<template #content>
<p v-if="directive.serviceContent">{{directive.serviceContent}}</p>
<p v-else>暂无</p>
</template>
<img style="width: 15px;height: 15px;" src="/src/assets/wlb/edit.png"></img>
</a-popover>
</span>
<span class="yuanClass">
<a-popover title="音频介绍">
<template #content>
<audio controls disabled="false" v-if="directive.mp3File">
<source :src="getFileAccessHttpUrl(directive.mp3File)">
</audio>
<span v-else>暂无</span>
</template>
<img style="width: 15px;height: 15px;" src="/src/assets/wlb/mp3.png"></img>
</a-popover>
</span>
<span class="yuanClass">
<a-popover title="视频介绍">
<template #content>
<video controls v-if="directive.mp4File">
<source :src="getFileAccessHttpUrl(directive.mp4File)">
</video>
<span v-else>暂无</span>
</template>
<img style="width: 15px;height: 15px;" src="/src/assets/wlb/mp4.png"></img>
</a-popover>
</span>
</a-col>
</a-row>
<div style="margin-top: 10px;">
<div style="display: flex; width:100% ;height: 50rpx;">
<view style="background-color: rgb(240,240,240);width: 100px;height: 25px;border-radius: 5px;position: relative;margin-left: 10px;">
<view style="position: absolute;top: 0;left: 0;width: 50%;height: 100%;">
<img style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;" src="/src/assets/wlb/wlb-type1.png"></img>
<div style="color: #fff;z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;">
医保
</div>
<div style="margin-top: 10px;">
<div style="display: flex; width:100% ;height: 50rpx;">
<view
style="background-color: rgb(240,240,240);width: 100px;height: 25px;border-radius: 5px;position: relative;margin-left: 10px;">
<view style="position: absolute;top: 0;left: 0;width: 50%;height: 100%;">
<img style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;"
src="/src/assets/wlb/wlb-type1.png"></img>
<div
style="color: #fff;z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;">
医保
</div>
</view>
<view style="position: absolute;top: 0;left: 40%;width: 70%;height: 100%;">
<div
style="z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;margin-left: -2px;">
{{ directive.izReimbursement == '1' ? '报销' : '不报销' }}
</div>
</view>
</view>
<view style="position: absolute;top: 0;left: 40%;width: 70%;height: 100%;">
<div style="z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;margin-left: -2px;">
{{directive.izReimbursement=='1'?'报销':'不报销'}}
</div>
</view>
</view>
<view style="background-color: rgb(240,240,240);width: 100px;height: 25px;border-radius: 5px;position: relative;margin-left: 10px;">
<view style="position: absolute;top: 0;left: 0;width: 50%;height: 100%;">
<img style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;" src="/src/assets/wlb/wlb-type2.png"></img>
<div style="color: #fff;z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;">
优惠
</div>
<view
style="background-color: rgb(240,240,240);width: 100px;height: 25px;border-radius: 5px;position: relative;margin-left: 10px;">
<view style="position: absolute;top: 0;left: 0;width: 50%;height: 100%;">
<img style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;"
src="/src/assets/wlb/wlb-type2.png"></img>
<div
style="color: #fff;z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;">
优惠
</div>
</view>
<view style="position: absolute;top: 0;left: 40%;width: 70%;height: 100%;">
<div
style="z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;margin-left: -2px;">
{{ directive.izPreferential == '1' ? '参与' : '不参与' }}
</div>
</view>
</view>
<view style="position: absolute;top: 0;left: 40%;width: 70%;height: 100%;">
<div style="z-index: 999;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);font-size: 12px;margin-left: -2px;">
{{directive.izPreferential=='1'?'参与':'不参与'}}
</div>
</view>
</view>
</div>
</div>
<a-divider />
<a-row>
<a-col :span="16" style="padding-left: 5px;">
<span class="typeClass" v-if="directive.typeName">{{ directive.typeName }}</span>
<span class="typeClass" v-if="handleBodyTags('', directive, '')">{{ handleBodyTags('', directive, '')
}}</span>
<span class="typeClass" v-if="handleEmotionTags('', directive, '')">{{ handleEmotionTags('', directive,
'')
}}</span>
</a-col>
<a-col :span="8" style="text-align: right;padding-right: 5px;">
<span class="rchlClass" v-if="directive.cycleType == '1'">日常护理</span>
<span class="zqhlClass" v-if="directive.cycleType == '2'">周期护理</span>
<span class="jshlClass" v-if="directive.cycleType == '3'">即时护理</span>
</a-col>
</a-row>
</div>
<a-divider />
<a-row>
<a-col :span="16" style="padding-left: 5px;">
<span class="typeClass" v-if="directive.typeName">{{ directive.typeName }}</span>
<span class="typeClass" v-if="handleBodyTags('', directive, '')">{{ handleBodyTags('', directive, '') }}</span>
<span class="typeClass" v-if="handleEmotionTags('', directive, '')">{{ handleEmotionTags('', directive, '') }}</span>
</a-col>
<a-col :span="8" style="text-align: right;padding-right: 5px;">
<span class="rchlClass" v-if="directive.cycleType=='1'">日常护理</span>
<span class="zqhlClass" v-if="directive.cycleType=='2'">周期护理</span>
<span class="jshlClass" v-if="directive.cycleType=='3'">即时护理</span>
</a-col>
</a-row>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</div>
<!-- 服务指令列表编辑页 -->
<a-drawer v-model:open="directiveEditDrawer" title="选择服务指令" width="70vw" :closable="false"
<a-drawer v-model:open="directiveEditDrawer" title="选择服务指令" width="100vw" :closable="false"
:footer-style="{ textAlign: 'right' }" :body-style="{ padding: 0 }">
<ConfigServiceDirectiveList ref="configServiceDirectiveListRef"
:directiveList="seletedRecord.directives"
<ConfigServiceDirectiveList ref="configServiceDirectiveListRef" :directiveList="seletedRecord.directives"
@deleteDirective="deleteDirective" @addDirective="addDirective">
</ConfigServiceDirectiveList>
<template #footer>
@ -139,8 +161,8 @@
<!-- 引用 -->
<a-drawer v-model:open="directiveQuoteDrawer" title="引用服务指令包" width="80vw" :closable="false"
:footer-style="{ textAlign: 'right'}" :body-style="{ background: '#dfdfdf' }" >
<PackageList ref="directivePackageListRef" ></PackageList>
:footer-style="{ textAlign: 'right' }" :body-style="{ background: '#dfdfdf' }">
<PackageList ref="directivePackageListRef"></PackageList>
<template #footer>
<a-button style="margin-right: 8px" @click="handleQuoteDrawCancel">关闭</a-button>
<a-button type="primary" @click="handleQuoteDrawOk">确定</a-button>
@ -203,10 +225,10 @@ function handleEmotionTags(prefix, directive_, suffix) {
}
}
function getImgPath(pathUrl){
if(pathUrl && pathUrl.length>0){
function getImgPath(pathUrl) {
if (pathUrl && pathUrl.length > 0) {
return getFileAccessHttpUrl(pathUrl);
}else{
} else {
return '../../resource/img/logo.png';
}
}
@ -320,7 +342,7 @@ function addDirective(directive_) {
createMessage.success('选择成功');
seletedRecord.value.directives.push(directive_)
}
console.log('seletedRecord.value--->',seletedRecord.value);
console.log('seletedRecord.value--->', seletedRecord.value);
}
/**
@ -375,7 +397,7 @@ defineExpose({
}
.directiveInfoClass {
margin-top: 10px;
margin-top: 14px;
}
.scrollable-content {
@ -389,7 +411,7 @@ defineExpose({
.directiveClass{
.directiveClass {
transition: all 0.3s ease;
position: relative;
border-radius: 8px;
@ -399,17 +421,20 @@ defineExpose({
box-shadow: 4px 4px 6px rgba(0, 0, 0, 0.1);
}
.directiveClass:hover{
.directiveClass:hover {
background: linear-gradient(to bottom, #e1f3ff, #ffffff);
border-radius: 8px;
height: 320px;
box-shadow:
0 0 0 1px #59bffe, /* 描边 */
0 4px 8px rgba(0, 0, 0, 0.1); /* 阴影 */
transform: translate(-2px , -2px); /* 轻微上浮效果 */
box-shadow:
0 0 0 1px #59bffe,
/* 描边 */
0 4px 8px rgba(0, 0, 0, 0.1);
/* 阴影 */
transform: translate(-2px, -2px);
/* 轻微上浮效果 */
}
.fenleiClass{
.fenleiClass {
background-image: url('/src/assets/wlb/wlb-title.png');
background-size: 100% 100%;
height: 36px;
@ -417,16 +442,18 @@ defineExpose({
padding: 7px 0 0 20px;
}
.fwsjClass{
.fwsjClass {
text-align: center;
font-weight: 700;
font-size: 20px;
margin: 7px;
}
.imgClass{
.imgClass {
text-align: center;
}
.ybClass{
.ybClass {
// background: #f0f0f0;padding:5px;margin:5px;
// border-radius: 5px;
// color: #ffffff;
@ -437,54 +464,76 @@ defineExpose({
padding-left: 10px;
color: #fff;
}
.jgyhClass{
background: #f0f0f0;padding:5px;margin:5px;
.jgyhClass {
background: #f0f0f0;
padding: 5px;
margin: 5px;
border-radius: 5px;
// color: #ffffff;
}
.typeClass{
.typeClass {
margin-left: 10px;
padding: 5px;
border-radius: 5px;
background: #f0f0f0;
}
.rchlClass{
.rchlClass {
margin-left: 10px;
padding: 5px;
border-radius: 5px;
background: #f5fafe;
border: 1px solid #59bffe;
color: #59bffe;
margin-right:5px;
margin-right: 5px;
}
.zqhlClass{
.zqhlClass {
margin-left: 10px;
padding: 5px;
border-radius: 5px;
background: #fff2df;
border: 1px solid #fb9f65;
color: #fb9f65;
margin-right:5px;
margin-right: 5px;
}
.jshlClass{
.jshlClass {
margin-left: 10px;
padding: 5px;
border-radius: 5px;
background: #e9e5fe;
border: 1px solid #9986fc;
color: #9986fc;
margin-right:5px;
margin-right: 5px;
}
.yuanClass{
margin-right:10px;background-color: #e3e6e8; border-radius: 50%; padding: 0px 5px 5px 5px;
.yuanClass {
margin-right: 10px;
background-color: #e3e6e8;
border-radius: 50%;
padding: 0px 5px 5px 5px;
cursor: pointer;
}
.ellipsis-two-lines {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1; /* 限制文本为2行 */
-webkit-line-clamp: 1;
/* 限制文本为2行 */
overflow: hidden;
text-overflow: ellipsis;
}
.card-style {
padding-top: 14px;
padding-left: 14px;
padding-right: 14px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
margin-bottom: 14px;
}
</style>