1、调整仓库类护理矩阵编排接口:插入服务指令

2、调整仓库类护理矩阵编排接口:变更服务指令
3、调整仓库类护理矩阵编排接口:移除服务指令
4、调整仓库类护理矩阵编排接口:查询服务指令矩阵数据
5、解决供应商申请提交后看不到数据问题
6、服务指令包增加超时时长字段
7、调整服务指令包主界面、引用指令包界面样式,解决内容过多时显示被遮挡问题
This commit is contained in:
1378012178@qq.com 2026-01-19 16:47:46 +08:00
parent dc1bb6a2b4
commit 255445feb5
7 changed files with 202 additions and 157 deletions

View File

@ -24,77 +24,40 @@
</a-row>
</a-form>
</div>
<a-row style="margin-top: -5px;">
<a-col v-for="directive of tableData.records" :key="directive.id" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6" style="padding: 5px 14px 0 0;height: 200px;">
<a-card
:class="['card-3d']"
:headStyle="{ height: '60px', padding: '0 24px',border:'0px' }"
@mouseenter="directive.id"
@mouseleave="directive.id" >
<template #title>
<a-row>
<a-col>
{{directive.packageName}}
</a-col>
</a-row>
</template>
<div style="margin-top: -30px;">
<a-divider style="margin: 0 0 10px 0 " />
<p>服务时长{{directive.totalDuration}} 分钟</p>
<p style="margin-top: -10px;">创建时间{{directive.createTime.substring(0,10)}}</p>
<p style="margin-top: -10px;" class="text-ellipsis" :title="directive.description">说明{{directive.description}}</p>
<div style="float:left;margin-top: 20px;">
<div style="height: calc(100vh - 200px); overflow-y: auto; overflow-x: hidden; margin-top: -5px;">
<a-row>
<a-col v-for="(directive, index) of tableData.records" :key="directive.id" :xs="24" :sm="24" :md="12" :lg="12"
:xl="8" :xxl="6" style="padding: 5px 14px 0 0;height: 200px;"
:style="{ marginTop: index >= 4 ? '60px' : '' }">
<a-card :class="['card-3d']" :headStyle="{ height: '60px', padding: '0 24px', border: '0px' }"
@mouseenter="directive.id" @mouseleave="directive.id">
<template #title>
<a-row>
<a-col>
{{ directive.packageName }}
</a-col>
</a-row>
</template>
<div style="margin-top: -30px;">
<a-divider style="margin: 0 0 10px 0 " />
<p>服务时长{{ directive.totalDuration }} 分钟</p>
<p style="margin-top: -10px;">超时时长{{ directive.timeoutDuration }} 分钟</p>
<p style="margin-top: -10px;">创建时间{{ directive.createTime.substring(0, 10) }}</p>
<p style="margin-top: -10px;" class="text-ellipsis" :title="directive.description">
说明{{ directive.description }}
</p>
<div style="float:left;margin-top: 20px;">
<a-button type="dashed" size="small" @click="packageEdit(directive)">编辑</a-button>
</div>
<div style="float:right;margin-top: 20px;">
<a-switch style="margin-left:10px" :checked="directive.izEnabled == 'Y'"
@change="handleChangeIzEnabled(directive)" checked-children="启" un-checked-children="停" />
</div>
</div>
<div style="float:right;margin-top: 20px;">
<a-switch style="margin-left:10px" :checked="directive.izEnabled == 'Y'" @change="handleChangeIzEnabled(directive)" checked-children="" un-checked-children="" />
</div>
</div>
</a-card>
<!-- <a-row class="cardDivClass">
<a-col :span="24">
<a-row style="padding: 10px">
<a-col :span="12">
<img src="/src/assets/images/logo.png" style="width: 25px;height:25px;" />
</a-col>
<a-col :span="12" style="text-align: right;position:relative;">
<div class="iconEditClass">
<a @click="packageEdit(directive)"> <img src="/src/assets/iot/a4.png" style="width: 15px;height:15px;margin-top:-3px" /></a>
</div>
<span>
<a-switch :checked="directive.izEnabled == '0'" @change="handleChangeIzEnabled(directive)" checked-children="" un-checked-children="" />
</span>
</a-col>
</a-row>
</a-col>
<a-col :span="24" >
<a-popover :title="directive.packageName">
<template #content>
<div style="min-width: 240px;">
<div style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;" v-for="(item,index) in directive.directives">{{ item.directiveName }}</div>
<div style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;color:red;" v-if="directive.directives.length==0">未配置</div>
</div>
</template>
<span class="titleOne ellipsis-two-lines">{{ directive.packageName }}</span>
</a-popover>
</a-col>
<a-col :span="24">
<span class="titleOne ellipsis-two-lines" style="font-size: 14px;">
服务时长{{directive.totalDuration}} 分钟
</span>
</a-col>
<a-col :span="24">
<a-divider style="margin: 10px 0 5px 0;"/>
</a-col>
<a-col :span="12" style="padding: 0px 10px">
{{ directive.createBy_dictText }}
</a-col>
<a-col :span="12" style="text-align: right;padding: 0px 10px;">
{{ directive.createTime.substring(0,10) }}
</a-col>
</a-row> -->
</a-col>
</a-row>
</a-card>
</a-col>
</a-row>
</div>
<div
style="float:right;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
<span style="margin-right: 10px;"> {{ tableData.total }} 条数据</span>
@ -118,30 +81,30 @@ const registerModal = ref();
const searchForm = ref({})
const tableData = ref({})
const labelCol = reactive({
xs:24,
sm:6,
xl:6,
xxl:6
});
const wrapperCol = reactive({
xs: 24,
sm: 24,
});
xs: 24,
sm: 6,
xl: 6,
xxl: 6
});
const wrapperCol = reactive({
xs: 24,
sm: 24,
});
const pageParams = ref({ pageNo: 1, pageSize: 12 })
//
function handleChangeIzEnabled(record){
function handleChangeIzEnabled(record) {
var izEnabled = record.izEnabled == 'Y' ? 'N' : 'Y';
var params = {id:record.id,izEnabled};
var params = { id: record.id, izEnabled };
defHttp.post({ url: '/services/directivePackage/directivePackage/edit', params }).then((res) => {
searchQuery()
});
}
function getHHMM(value){
if(value){
return dayjs(value).format('HH:mm')
}else{
function getHHMM(value) {
if (value) {
return dayjs(value).format('HH:mm')
} else {
return '未配置'
}
}
@ -211,7 +174,7 @@ onMounted(() => {
<style lang="less" scoped>
.jeecg-basic-table-form-container {
padding: 0;
margin-bottom: 14px;
margin-bottom: 14px;
.table-page-search-submitButtons {
display: block;
@ -239,7 +202,8 @@ onMounted(() => {
width: 100%;
}
}
.bjclass{
.bjclass {
text-align: center;
margin-top: 14px;
border-radius: 50%;
@ -248,41 +212,65 @@ onMounted(() => {
background: linear-gradient(to bottom, #fff, #efe9e9);
margin-left: 9px;
}
.titleOne {
text-align: center;
font-size: 16px;
font-weight: 600;
}
.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;
}
.cardDivClass{
.cardDivClass {
transition: all 0.3s ease;
position: relative;
padding: 5px;background-color: white;border-radius: 8px;height: 180px;
padding: 5px;
background-color: white;
border-radius: 8px;
height: 180px;
box-shadow: 4px 4px 6px rgba(0, 0, 0, 0.1);
}
.cardDivClass:hover{
padding: 5px;background-color: #f4fcff;border-radius: 8px;height: 180px;
.cardDivClass:hover {
padding: 5px;
background-color: #f4fcff;
border-radius: 8px;
height: 180px;
box-shadow:
0 0 0 1px #59bffe, /* 描边 */
0 4px 8px rgba(0, 0, 0, 0.1); /* 阴影 */
transform: translate(-2px , -2px); /* 轻微上浮效果 */
0 0 0 1px #59bffe,
/* 描边 */
0 4px 8px rgba(0, 0, 0, 0.1);
/* 阴影 */
transform: translate(-2px, -2px);
/* 轻微上浮效果 */
}
.iconEditClass{
position:absolute;top:0;right:54px;background: #dfdfdf;border-radius:50%;width: 25px;height: 25px;display:flex;justify-content: center;align-items: center;align-items: center;
.iconEditClass {
position: absolute;
top: 0;
right: 54px;
background: #dfdfdf;
border-radius: 50%;
width: 25px;
height: 25px;
display: flex;
justify-content: center;
align-items: center;
align-items: center;
}
/* 基础卡片样式 */
.card-3d {
border-radius: 8px;
border: 1px solid #f0f0f0; /* 边框增强立体感 */
border: 1px solid #f0f0f0;
/* 边框增强立体感 */
background: white;
position: relative;
}
@ -291,9 +279,11 @@ onMounted(() => {
.card-3d:hover {
border: 1px solid #1890ff;
}
.text-ellipsis {
display: -webkit-box;
-webkit-line-clamp: 1; /* 限制显示的行数 */
-webkit-line-clamp: 1;
/* 限制显示的行数 */
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;

View File

@ -60,6 +60,12 @@ export const columns: BasicColumn[] = [
dataIndex: 'serviceDuration',
width: 90,
},
{
title: '超时时长',
align: 'center',
dataIndex: 'timeoutDuration',
width: 90,
},
];
export const selectedColumns: BasicColumn[] = [
@ -129,6 +135,12 @@ export const selectedColumns: BasicColumn[] = [
dataIndex: 'serviceDuration',
width: 90,
},
{
title: '超时时长',
align: 'center',
dataIndex: 'timeoutDuration',
width: 90,
},
{
title: '操作',
key: 'action',

View File

@ -233,7 +233,6 @@ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
beforeFetch: async (params) => {
params.column = 'createTime';
params.order = 'desc';
params.cycleType = '1,2';
params.izEnabled = 'Y';
let rangerQuery = await setRangeQuery();
return Object.assign(params, rangerQuery);

View File

@ -83,20 +83,27 @@
</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 label="超时时长" v-bind="validateInfos.timeoutDuration"
id="DirectivePackageForm-timeoutDuration" name="timeoutDuration">
<a-input-number v-model:value="formData.timeoutDuration" :min="1" :step="5" addon-after="分钟"
placeholder="请输入超时时长(分钟)" allow-clear @keydown="onDurationKeydown" :disabled="disabled" />
</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.izEnabled" id="DirectivePackageForm-izEnabled"
name="izEnabled" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<j-dict-select-tag type='list' 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: 5 }"
<a-textarea v-model:value="formData.description" :maxlength="200" :autosize="{ minRows: 3 }"
:showCount="true" placeholder="请输入说明" />
</a-form-item>
</a-col>
@ -138,11 +145,12 @@ const formData = reactive<Record<string, any>>({
endTimeStr: '',
instructionTagId: '',
totalDuration: 0,
timeoutDuration: 0,
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 6 } });
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 2 } });
const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 3 } });
const wrapperCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 21 } });
const confirmLoading = ref<boolean>(false);
//

View File

@ -55,6 +55,7 @@
directive.typeId_dictText }}
</p>
<p style="margin-top: -10px;">服务时长{{ directive.serviceDuration }}分钟</p>
<p style="margin-top: -10px;">超时时长{{ directive.timeoutDuration }}分钟</p>
<div style="float:left;margin-top: 20px;">
</div>
<div style="float:right;margin-top: 20px;">

View File

@ -4,7 +4,7 @@
<div class="jeecg-basic-table-form-container">
<a-form ref="formRef" :model="searchForm" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :span="14">
<a-col :span="8">
<a-form-item name="packageName">
<template #label><span title="服务指令包名称">服务指令包</span></template>
<a-input v-model:value="searchForm.packageName" allow-clear />
@ -22,14 +22,12 @@
</a-row>
</a-form>
</div>
<a-row >
<a-col v-for="directive of tableData.records" :key="directive.id" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6" style="padding: 5px 14px 0 0;height: 200px;">
<a-row style="margin-top: -5px;margin-bottom: 44px;">
<a-col v-for="(directive, index) of tableData.records" :key="directive.id" :xs="24" :sm="24" :md="12" :lg="12"
:xl="8" :xxl="6" style="padding: 5px 14px 0 0;height: 200px;" :style="{ marginTop: index >= 4 ? '60px' : '' }">
<div @click="handlePackageClick(directive)" :class="{ 'selected': selectedDirective.id === directive.id }">
<a-card
:class="['card-3d']"
:headStyle="{ height: '60px', padding: '0 24px',border:'0px' }"
@mouseenter="directive.id"
@mouseleave="directive.id" >
<a-card :class="['card-3d']" :headStyle="{ height: '60px', padding: '0 24px', border: '0px' }"
@mouseenter="directive.id" @mouseleave="directive.id">
<template #title>
<a-row>
<a-col>
@ -42,37 +40,43 @@
<a-popover :title="directive.packageName">
<template #content>
<div style="min-width: 240px;">
<div style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;" v-for="(item,index) in directive.directives">{{ item.directiveName }}</div>
<div style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;color:red;" v-if="directive.directives.length==0">未配置</div>
<div
style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;"
v-for="(item, index) in directive.directives">{{ item.directiveName }}</div>
<div
style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;color:red;"
v-if="directive.directives.length == 0">未配置</div>
</div>
</template>
<p>服务时长{{directive.totalDuration}} 分钟</p>
<p style="margin-top: -10px;">创建时间{{directive.createTime.substring(0,10)}}</p>
<p style="margin-top: -10px;" class="text-ellipsis" :title="directive.description">说明{{directive.description}}</p>
<p>服务时长{{ directive.totalDuration }} 分钟</p>
<p style="margin-top: -10px;">超时时长{{ directive.timeoutDuration }} 分钟</p>
<p style="margin-top: -10px;">创建时间{{ directive.createTime.substring(0, 10) }}</p>
<p style="margin-top: -10px;" class="text-ellipsis" :title="directive.description">
说明{{ directive.description }}</p>
</a-popover>
<div style="float:left;margin-top: 20px;">
<a-popover :title="directive.packageName">
<template #content>
<div style="min-width: 240px;">
<div style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;" v-for="(item,index) in directive.directives">{{ item.directiveName }}</div>
<div style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;color:red;" v-if="directive.directives.length==0">未配置</div>
</div>
</template>
<a-button type="dashed" size="small">指令详情</a-button>
</a-popover>
<a-popover :title="directive.packageName">
<template #content>
<div style="min-width: 240px;">
<div
style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;"
v-for="(item, index) in directive.directives">{{ item.directiveName }}</div>
<div
style="max-width: 400px;line-height:30px;padding:5px;border-radius:5px;margin:5px;background:#f5f5f5;color:red;"
v-if="directive.directives.length == 0">未配置</div>
</div>
</template>
<a-button type="dashed" size="small">指令详情</a-button>
</a-popover>
</div>
<div style="float:right;margin-top: 20px;">
<a-switch style="margin-left:10px" :checked="directive.izEnabled == 'Y'" disabled checked-children="" un-checked-children="" />
<a-switch style="margin-left:10px" :checked="directive.izEnabled == 'Y'" disabled checked-children=""
un-checked-children="停" />
</div>
</div>
</a-card>
</div>
</a-col>
</a-row>
</div>
</template>
@ -93,7 +97,7 @@ const labelCol = reactive({
xs: 24,
sm: 4,
xl: 9,
xxl: 9
xxl: 5
});
const wrapperCol = reactive({
xs: 24,
@ -109,10 +113,10 @@ function searchQuery() {
queryList({})
}
function getHHMM(value){
if(value){
return dayjs(value).format('HH:mm')
}else{
function getHHMM(value) {
if (value) {
return dayjs(value).format('HH:mm')
} else {
return '未配置'
}
}
@ -331,30 +335,51 @@ defineExpose({
font-size: 16px;
font-weight: 600;
}
.cardDivClass{
.cardDivClass {
transition: all 0.3s ease;
position: relative;
padding: 5px;background-color: white;border-radius: 8px;height: 180px;
padding: 5px;
background-color: white;
border-radius: 8px;
height: 180px;
box-shadow: 4px 4px 6px rgba(0, 0, 0, 0.1);
}
.cardDivClass:hover{
padding: 5px;background-color: #f4fcff;border-radius: 8px;height: 180px;
.cardDivClass:hover {
padding: 5px;
background-color: #f4fcff;
border-radius: 8px;
height: 180px;
box-shadow:
0 0 0 2px #d3d3d3, /* 描边 */
0 4px 8px rgba(0, 0, 0, 0.1); /* 阴影 */
transform: translate(-2px , -2px); /* 轻微上浮效果 */
0 0 0 2px #d3d3d3,
/* 描边 */
0 4px 8px rgba(0, 0, 0, 0.1);
/* 阴影 */
transform: translate(-2px, -2px);
/* 轻微上浮效果 */
}
.iconEditClass{
position:absolute;top:0;right:54px;background: #dfdfdf;border-radius:50%;width: 25px;height: 25px;display:flex;justify-content: center;align-items: center;align-items: center;
.iconEditClass {
position: absolute;
top: 0;
right: 54px;
background: #dfdfdf;
border-radius: 50%;
width: 25px;
height: 25px;
display: flex;
justify-content: center;
align-items: center;
align-items: center;
}
/* 基础卡片样式 */
.card-3d {
border-radius: 8px;
border: 1px solid #f0f0f0; /* 边框增强立体感 */
border: 1px solid #f0f0f0;
/* 边框增强立体感 */
background: white;
position: relative;
}
@ -363,9 +388,11 @@ defineExpose({
.card-3d:hover {
border: 1px solid #1890ff;
}
.text-ellipsis {
display: -webkit-box;
-webkit-line-clamp: 1; /* 限制显示的行数 */
-webkit-line-clamp: 1;
/* 限制显示的行数 */
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;

View File

@ -71,6 +71,13 @@
:showCount="true" :disabled="!!formData.id"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="服务时长" v-bind="validateInfos.serviceDuration"
id="ConfigServiceDirectiveForm-serviceDuration" name="serviceDuration">
<a-input-number v-model:value="formData.serviceDuration" :min="5" :max="55" :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.tollPrice" id="ConfigServiceDirectiveForm-tollPrice"
name="tollPrice">
@ -85,6 +92,13 @@
placeholder="请选择指令类型" allowClear @upDictCode="upCycleTypeDictCode" :disabled="!!formData.id" />
</a-form-item>
</a-col> -->
<a-col :span="12">
<a-form-item label="超时时长" v-bind="validateInfos.timeoutDuration"
id="ConfigServiceDirectiveForm-timeoutDuration" name="timeoutDuration">
<a-input-number v-model:value="formData.timeoutDuration" :min="0" :max="55" :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.comPrice" id="ConfigServiceDirectiveForm-comPrice"
name="comPrice">
@ -99,13 +113,6 @@
placeholder="请选择是否启用"  allowClear :disabled="disabled" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="服务时长" v-bind="validateInfos.serviceDuration"
id="ConfigServiceDirectiveForm-serviceDuration" name="serviceDuration">
<a-input-number v-model:value="formData.serviceDuration" :min="5" :max="55" :step="5" addon-after="分钟"
placeholder="请输入服务时长(分钟)" allow-clear @keydown="onDurationKeydown" :disabled="disabled" />
</a-form-item>
</a-col>
</a-row>
<a-row style="padding: 20px;">
<a-col :span="6">
@ -292,6 +299,7 @@ const formData = reactive<Record<string, any>>({
sort: 99,
serviceContent: '',
serviceDuration: '5',
timeoutDuration: '0',
status: '',
izEnabled: 'Y',
createBy: '',