Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
5f6db02737
|
|
@ -0,0 +1,27 @@
|
|||
# 是否打开mock
|
||||
VITE_USE_MOCK = true
|
||||
|
||||
# 发布路径
|
||||
VITE_PUBLIC_PATH = /
|
||||
|
||||
|
||||
# 跨域代理,您可以配置多个 ,请注意,没有换行符
|
||||
VITE_PROXY = [["/nursing-unit-002","http://localhost:8082/nursing-unit_002"],["/upload","http://localhost:3300/upload"]]
|
||||
|
||||
#后台接口全路径地址(必填)
|
||||
VITE_GLOB_DOMAIN_URL=http://localhost:8082/nursing-unit_002
|
||||
|
||||
#后台接口父地址(必填)
|
||||
VITE_GLOB_API_URL=/nursing-unit-002
|
||||
|
||||
# 接口前缀
|
||||
VITE_GLOB_API_URL_PREFIX=
|
||||
|
||||
#微前端qiankun应用,命名必须以VITE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径
|
||||
VITE_APP_SUB_jeecg-app-1 = '//localhost:8092'
|
||||
|
||||
|
||||
# 填写后将作为乾坤子应用启动,主应用注册时AppName需保持一致(放开 VITE_GLOB_QIANKUN_MICRO_APP_NAME 参数表示jeecg-vue3将以乾坤子应用模式启动)
|
||||
#VITE_GLOB_QIANKUN_MICRO_APP_NAME=jeecg-vue3
|
||||
# 作为乾坤子应用启动时必填,需与qiankun主应用注册子应用时填写的 entry 保持一致
|
||||
#VITE_GLOB_QIANKUN_MICRO_APP_ENTRY=//localhost:3001/jeecg-vue3
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# port
|
||||
VITE_PORT = 3102
|
||||
|
||||
# 网站标题
|
||||
VITE_GLOB_APP_TITLE = 业务系统2
|
||||
|
||||
# 简称,此变量只能是字符/下划线
|
||||
VITE_GLOB_APP_SHORT_NAME = 业务系统2
|
||||
|
||||
# 单点登录服务端地址
|
||||
VITE_GLOB_APP_CAS_BASE_URL=http://cas.test.com:8443/cas
|
||||
|
||||
# 是否开启单点登录
|
||||
VITE_GLOB_APP_OPEN_SSO = false
|
||||
|
||||
# 开启微前端模式
|
||||
VITE_GLOB_APP_OPEN_QIANKUN=true
|
||||
|
||||
# 文件预览地址
|
||||
VITE_GLOB_ONLINE_VIEW_URL=http://fileview.jeecg.com/onlinePreview
|
||||
|
||||
# 运维服务器接口地址
|
||||
VITE_GLOB_INSTITUTIONS_URL=http://192.168.2.19:8080/nursing-unit/
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 234 KiB |
|
|
@ -3,7 +3,7 @@
|
|||
* @Description: logo component
|
||||
-->
|
||||
<template>
|
||||
<div class="anticon advisoryClass" :class="getAppLogoClass" @click="goHome" style="background-image: url('/src/assets/images/bj.png');text-align: center;">
|
||||
<div class="anticon" :class="getAppLogoClass" @click="goHome" style="background: #e3f6fc;text-align: center;">
|
||||
<img src="../../../assets/images/logo2.png" style="width:100%" v-show="showTitle"/>
|
||||
<div class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="!showTitle">
|
||||
<img src="../../../assets/images/logo.png" style="width:100%"/>
|
||||
|
|
@ -92,7 +92,4 @@
|
|||
}
|
||||
}
|
||||
|
||||
.advisoryClass{
|
||||
background-image: url(/@/assets/images/bj.png);
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -192,4 +192,28 @@
|
|||
</script>
|
||||
<style lang="less">
|
||||
@import './index.less';
|
||||
|
||||
.jeecg-menu-item-active:not(.jeecg-menu-submenu) {
|
||||
color: white !important;
|
||||
background-color: #1890ff !important;
|
||||
border-radius: 5px;
|
||||
margin: 10px 20px;
|
||||
padding: 10px;
|
||||
}
|
||||
// .jeecg-menu {
|
||||
// background: #fbfbfd;
|
||||
// position: relative;
|
||||
// display: block;
|
||||
// width: 100%;
|
||||
// padding: 0;
|
||||
// margin: 0;
|
||||
// font-size: 14px;
|
||||
// color: rgba(0, 0, 0, 0.88);
|
||||
// list-style: none;
|
||||
// outline: none;
|
||||
// border-radius: 5px;
|
||||
// }
|
||||
.jeecg-menu-light.jeecg-menu-vertical .jeecg-menu-item-active.jeecg-menu-submenu {
|
||||
background: #f0f0f0;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -501,10 +501,10 @@
|
|||
padding: 10px;
|
||||
|
||||
.ant-form {
|
||||
padding: 12px 10px 6px 10px;
|
||||
padding: 24px 10px 0px 10px;
|
||||
margin-bottom: 8px;
|
||||
background-color: @component-background;
|
||||
border-radius: 2px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -523,7 +523,7 @@
|
|||
.ant-table-wrapper {
|
||||
padding: 6px;
|
||||
background-color: @component-background;
|
||||
border-radius: 2px;
|
||||
border-radius: 5px;
|
||||
|
||||
.ant-table-title {
|
||||
min-height: 40px;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<Tooltip placement="top" v-bind="getBindProps" >
|
||||
<Tooltip placement="top" v-bind="getBindProps">
|
||||
<template #title>
|
||||
<span>{{ t('component.table.settingColumn') }}</span>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<Header :class="getHeaderClass" style="background-image: url('/src/assets/images/bj.png');">
|
||||
<Header :class="getHeaderClass" style="background-image: url('../resource/img/bj.png');">
|
||||
<!-- left start -->
|
||||
<div :class="`${prefixCls}-left`" >
|
||||
<!-- logo -->
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<template>
|
||||
<Layout :class="prefixCls" v-bind="lockEvents">
|
||||
<LayoutFeatures />
|
||||
<LayoutHeader fixed v-if="getShowFullHeaderRef" />
|
||||
<!-- <LayoutFeatures /> -->
|
||||
<!-- <LayoutHeader fixed v-if="getShowFullHeaderRef" /> -->
|
||||
<Layout :class="[layoutClass]">
|
||||
<LayoutSideBar v-if="getShowSidebar || getIsMobile" />
|
||||
<Layout :class="`${prefixCls}-main`" style="background-image: url('/src/assets/images/bj.png');">
|
||||
<Layout :class="`${prefixCls}-main`" style="background-image: url('../resource/img/bj.png');">
|
||||
<LayoutMultipleHeader />
|
||||
<LayoutContent />
|
||||
<LayoutFooter />
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<Sider />
|
||||
</Drawer>
|
||||
<MixSider v-else-if="getIsMixSidebar" />
|
||||
<Sider v-else />
|
||||
<Sider v-else />
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useMessage } from "/@/hooks/web/useMessage";
|
||||
|
||||
const { createConfirm } = useMessage();
|
||||
|
||||
enum Api {
|
||||
list = '/sysconfig/sysConfig/list',
|
||||
save='/sysconfig/sysConfig/add',
|
||||
edit='/sysconfig/sysConfig/edit',
|
||||
deleteOne = '/sysconfig/sysConfig/delete',
|
||||
deleteBatch = '/sysconfig/sysConfig/deleteBatch',
|
||||
importExcel = '/sysconfig/sysConfig/importExcel',
|
||||
exportXls = '/sysconfig/sysConfig/exportXls',
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出api
|
||||
* @param params
|
||||
*/
|
||||
export const getExportUrl = Api.exportXls;
|
||||
|
||||
/**
|
||||
* 导入api
|
||||
*/
|
||||
export const getImportUrl = Api.importExcel;
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
*/
|
||||
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||
|
||||
/**
|
||||
* 删除单个
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const deleteOne = (params,handleSuccess) => {
|
||||
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
* @param params
|
||||
* @param handleSuccess
|
||||
*/
|
||||
export const batchDelete = (params, handleSuccess) => {
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认删除',
|
||||
content: '是否删除选中数据',
|
||||
okText: '确认',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
|
||||
handleSuccess();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存或者更新
|
||||
* @param params
|
||||
* @param isUpdate
|
||||
*/
|
||||
export const saveOrUpdate = (params, isUpdate) => {
|
||||
let url = isUpdate ? Api.edit : Api.save;
|
||||
return defHttp.post({ url: url, params }, { isTransformResponse: false });
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
import {BasicColumn} from '/@/components/Table';
|
||||
import {FormSchema} from '/@/components/Table';
|
||||
import { rules} from '/@/utils/helper/validator';
|
||||
import { render } from '/@/utils/common/renderUtils';
|
||||
import { getWeekMonthQuarterYear } from '/@/utils';
|
||||
//列表数据
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: '参数名称',
|
||||
align: "center",
|
||||
dataIndex: 'name',
|
||||
},
|
||||
{
|
||||
title: '键名',
|
||||
align: "center",
|
||||
dataIndex: 'configKey',
|
||||
},
|
||||
{
|
||||
title: '键值',
|
||||
align: "center",
|
||||
dataIndex: 'configValue'
|
||||
},
|
||||
{
|
||||
title: '备注',
|
||||
align: "center",
|
||||
dataIndex: 'descr'
|
||||
},
|
||||
{
|
||||
title: '是否启用',
|
||||
align: "center",
|
||||
dataIndex: 'izEnabled_dictText',
|
||||
width:100
|
||||
},
|
||||
];
|
||||
|
||||
// 高级查询数据
|
||||
export const superQuerySchema = {
|
||||
name: {title: '参数名称',order: 0,view: 'text', type: 'string',},
|
||||
configKey: {title: '键名',order: 1,view: 'text', type: 'string',},
|
||||
configValue: {title: '键值',order: 2,view: 'textarea', type: 'string',},
|
||||
descr: {title: '备注',order: 3,view: 'textarea', type: 'string',},
|
||||
izEnabled: {title: '是否启用',order: 4,view: 'text', type: 'string',},
|
||||
};
|
||||
|
|
@ -0,0 +1,254 @@
|
|||
<template>
|
||||
<div class="p-2">
|
||||
<!--查询区域-->
|
||||
<div class="jeecg-basic-table-form-container">
|
||||
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol"
|
||||
:wrapper-col="wrapperCol">
|
||||
<a-row :gutter="24">
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="name">
|
||||
<template #label><span title="参数名称">参数名称</span></template>
|
||||
<JInput v-model:value="queryParam.name" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="configKey">
|
||||
<template #label><span title="键名">键名</span></template>
|
||||
<JInput v-model:value="queryParam.configKey" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="izEnabled">
|
||||
<template #label><span title="是否启用">是否启用</span></template>
|
||||
<j-dict-select-tag type='list' v-model:value="queryParam.izEnabled" dictCode="iz_enabled"
|
||||
placeholder="请选择是否启用" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :xl="6" :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>
|
||||
</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" v-auth="'sysconfig:nu_sys_config:add'" @click="handleAdd"
|
||||
preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" v-auth="'sysconfig:nu_sys_config:exportXls'" preIcon="ant-design:export-outlined"
|
||||
@click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" v-auth="'sysconfig:nu_sys_config:importExcel'"
|
||||
preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
<a-dropdown v-if="selectedRowKeys.length > 0">
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item key="1" @click="batchHandleDelete">
|
||||
<Icon icon="ant-design:delete-outlined"></Icon>
|
||||
删除
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button v-auth="'sysconfig:nu_sys_config:deleteBatch'">批量操作
|
||||
<Icon icon="mdi:chevron-down"></Icon>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
|
||||
</template>
|
||||
<template v-slot:bodyCell="{ column, record, index, text }">
|
||||
</template>
|
||||
</BasicTable>
|
||||
<!-- 表单区域 -->
|
||||
<SysConfigModal ref="registerModal" @success="handleSuccess"></SysConfigModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="sysconfig-sysConfig" setup>
|
||||
import { ref, reactive } from 'vue';
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||
import { useListPage } from '/@/hooks/system/useListPage';
|
||||
import { columns, superQuerySchema } from './SysConfig.data';
|
||||
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './SysConfig.api';
|
||||
import SysConfigModal from './components/SysConfigModal.vue'
|
||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||
import JInput from "/@/components/Form/src/jeecg/components/JInput.vue";
|
||||
|
||||
const formRef = ref();
|
||||
const queryParam = reactive<any>({});
|
||||
const registerModal = ref();
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
title: '系统参数配置',
|
||||
api: list,
|
||||
columns,
|
||||
canResize: false,
|
||||
useSearchForm: false,
|
||||
actionColumn: {
|
||||
width: 230,
|
||||
fixed: 'right',
|
||||
},
|
||||
beforeFetch: async (params) => {
|
||||
return Object.assign(params, queryParam);
|
||||
},
|
||||
},
|
||||
exportConfig: {
|
||||
name: "系统参数配置",
|
||||
url: getExportUrl,
|
||||
params: queryParam,
|
||||
},
|
||||
importConfig: {
|
||||
url: getImportUrl,
|
||||
success: handleSuccess
|
||||
},
|
||||
});
|
||||
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||
const labelCol = reactive({
|
||||
xs: 24,
|
||||
sm: 4,
|
||||
xl: 6,
|
||||
xxl: 4
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: 24,
|
||||
sm: 20,
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* 新增事件
|
||||
*/
|
||||
function handleAdd() {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.add();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑事件
|
||||
*/
|
||||
function handleEdit(record: Recordable) {
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
function handleDetail(record: Recordable) {
|
||||
registerModal.value.disableSubmit = true;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除事件
|
||||
*/
|
||||
async function handleDelete(record) {
|
||||
await deleteOne({ id: record.id }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除事件
|
||||
*/
|
||||
async function batchHandleDelete() {
|
||||
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功回调
|
||||
*/
|
||||
function handleSuccess() {
|
||||
(selectedRowKeys.value = []) && reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作栏
|
||||
*/
|
||||
function getTableAction(record) {
|
||||
return [
|
||||
{
|
||||
label: '编辑',
|
||||
onClick: handleEdit.bind(null, record),
|
||||
auth: 'sysconfig:nu_sys_config:edit'
|
||||
},
|
||||
{
|
||||
label: '详情',
|
||||
onClick: handleDetail.bind(null, record),
|
||||
}, {
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '是否确认删除',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
placement: 'topLeft',
|
||||
},
|
||||
auth: 'sysconfig:nu_sys_config:delete'
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉操作栏
|
||||
*/
|
||||
function getDropDownAction(record) {
|
||||
return [
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function searchQuery() {
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function searchReset() {
|
||||
formRef.value.resetFields();
|
||||
selectedRowKeys.value = [];
|
||||
//刷新数据
|
||||
reload();
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.jeecg-basic-table-form-container {
|
||||
padding: 0;
|
||||
|
||||
.table-page-search-submitButtons {
|
||||
display: block;
|
||||
margin-bottom: 24px;
|
||||
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) {
|
||||
margin-bottom: 16px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
:deep(.ant-picker),
|
||||
:deep(.ant-input-number) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
<template>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<JFormContainer :disabled="disabled">
|
||||
<template #detail>
|
||||
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"
|
||||
name="SysConfigForm">
|
||||
<a-row>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="参数名称" v-bind="validateInfos.name" id="SysConfigForm-name" name="name">
|
||||
<a-input v-model:value="formData.name" placeholder="请输入参数名称" allow-clear></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="键名" v-bind="validateInfos.configKey" id="SysConfigForm-configKey" name="configKey">
|
||||
<a-input v-model:value="formData.configKey" placeholder="请输入键名" allow-clear></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="键值" v-bind="validateInfos.configValue" id="SysConfigForm-configValue"
|
||||
name="configValue">
|
||||
<a-textarea v-model:value="formData.configValue" :rows="4" placeholder="请输入键值" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="备注" v-bind="validateInfos.descr" id="SysConfigForm-descr" name="descr">
|
||||
<a-textarea v-model:value="formData.descr" :rows="4" placeholder="请输入备注" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="SysConfigForm-izEnabled" name="izEnabled">
|
||||
<j-dict-select-tag type='radio' v-model:value="formData.izEnabled" dictCode="iz_enabled"
|
||||
placeholder="请选择是否启用" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</template>
|
||||
</JFormContainer>
|
||||
</a-spin>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { getValueType } from '/@/utils';
|
||||
import { saveOrUpdate } from '../SysConfig.api';
|
||||
import { Form } from 'ant-design-vue';
|
||||
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
|
||||
import { duplicateValidate } from '/@/utils/helper/validator'
|
||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||
|
||||
const props = defineProps({
|
||||
formDisabled: { type: Boolean, default: false },
|
||||
formData: { type: Object, default: () => ({}) },
|
||||
formBpm: { type: Boolean, default: true }
|
||||
});
|
||||
const formRef = ref();
|
||||
const useForm = Form.useForm;
|
||||
const emit = defineEmits(['register', 'ok']);
|
||||
const formData = reactive<Record<string, any>>({
|
||||
id: '',
|
||||
name: '',
|
||||
configKey: '',
|
||||
configValue: '',
|
||||
descr: '',
|
||||
izEnabled: '0',
|
||||
delFlag: '0',
|
||||
});
|
||||
const { createMessage } = useMessage();
|
||||
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
|
||||
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
|
||||
const confirmLoading = ref<boolean>(false);
|
||||
//表单验证
|
||||
const validatorRules = reactive({
|
||||
configKey: [{ required: true, message: '请输入键名!' }, { validator: configKeyDuplicatevalidate }],
|
||||
izEnabled: [{ required: true, message: '请输入是否启用!' },],
|
||||
});
|
||||
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
|
||||
|
||||
// 表单禁用
|
||||
const disabled = computed(() => {
|
||||
if (props.formBpm === true) {
|
||||
if (props.formData.disabled === false) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return props.formDisabled;
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
function add() {
|
||||
edit({});
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
function edit(record) {
|
||||
nextTick(() => {
|
||||
resetFields();
|
||||
const tmpData = {};
|
||||
Object.keys(formData).forEach((key) => {
|
||||
if (record.hasOwnProperty(key)) {
|
||||
tmpData[key] = record[key]
|
||||
}
|
||||
})
|
||||
//赋值
|
||||
Object.assign(formData, tmpData);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交数据
|
||||
*/
|
||||
async function submitForm() {
|
||||
try {
|
||||
// 触发表单验证
|
||||
await validate();
|
||||
} catch ({ errorFields }) {
|
||||
if (errorFields) {
|
||||
const firstField = errorFields[0];
|
||||
if (firstField) {
|
||||
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
|
||||
}
|
||||
}
|
||||
return Promise.reject(errorFields);
|
||||
}
|
||||
confirmLoading.value = true;
|
||||
const isUpdate = ref<boolean>(false);
|
||||
//时间格式化
|
||||
let model = formData;
|
||||
if (model.id) {
|
||||
isUpdate.value = true;
|
||||
}
|
||||
//循环数据
|
||||
for (let data in model) {
|
||||
//如果该数据是数组并且是字符串类型
|
||||
if (model[data] instanceof Array) {
|
||||
let valueType = getValueType(formRef.value.getProps, data);
|
||||
//如果是字符串类型的需要变成以逗号分割的字符串
|
||||
if (valueType === 'string') {
|
||||
model[data] = model[data].join(',');
|
||||
}
|
||||
}
|
||||
}
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async function configKeyDuplicatevalidate(_r, value) {
|
||||
return duplicateValidate('nu_sys_config', 'config_key', value, formData.id || '')
|
||||
}
|
||||
defineExpose({
|
||||
add,
|
||||
edit,
|
||||
submitForm,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.antd-modal-form {
|
||||
padding: 14px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
<template>
|
||||
<j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||
<SysConfigForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></SysConfigForm>
|
||||
</j-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
import SysConfigForm from './SysConfigForm.vue'
|
||||
import JModal from '/@/components/Modal/src/JModal/JModal.vue';
|
||||
|
||||
const title = ref<string>('');
|
||||
const width = ref<number>(800);
|
||||
const visible = ref<boolean>(false);
|
||||
const disableSubmit = ref<boolean>(false);
|
||||
const registerForm = ref();
|
||||
const emit = defineEmits(['register', 'success']);
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
function add() {
|
||||
title.value = '新增';
|
||||
visible.value = true;
|
||||
nextTick(() => {
|
||||
registerForm.value.add();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param record
|
||||
*/
|
||||
function edit(record) {
|
||||
title.value = disableSubmit.value ? '详情' : '编辑';
|
||||
visible.value = true;
|
||||
nextTick(() => {
|
||||
registerForm.value.edit(record);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定按钮点击事件
|
||||
*/
|
||||
function handleOk() {
|
||||
registerForm.value.submitForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* form保存回调事件
|
||||
*/
|
||||
function submitCallback() {
|
||||
handleCancel();
|
||||
emit('success');
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消按钮回调事件
|
||||
*/
|
||||
function handleCancel() {
|
||||
visible.value = false;
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
add,
|
||||
edit,
|
||||
disableSubmit,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
/**隐藏样式-modal确定按钮 */
|
||||
.jee-hidden {
|
||||
display: none !important;
|
||||
}
|
||||
</style>
|
||||
<style lang="less" scoped></style>
|
||||
|
|
@ -23,10 +23,49 @@
|
|||
</a-form>
|
||||
</div>
|
||||
<a-row>
|
||||
<a-col :span="6" v-for="(item,index) in dataList" :key="index">
|
||||
<a-col :span="6" v-for="(item,index) in dataList" :key="index" style="padding: 5px 10px 0 0;height: 240px;">
|
||||
<a-row style="padding: 5px;background-color: white;border-radius: 5px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img :src="handleHeadPath(item.headPath)" style="width: 40px;height:40px;margin-top: 10px;" @error="setDefaultImage"/>
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :span="20" style="padding-left: 15px;">
|
||||
<div>
|
||||
<span class="titleOne">
|
||||
{{item.name}} /
|
||||
{{item.sex_dictText?item.sex_dictText:'无'}}
|
||||
</span>
|
||||
</div>
|
||||
<div style="height: 130px">
|
||||
<div class="center-lines">入职日期: {{item.entryTime }}</div>
|
||||
<div class="center-lines">身份证号: {{item.idCard }}</div>
|
||||
<div class="center-lines">联系电话: {{item.tel }}</div>
|
||||
<div class="center-lines">出生日期: {{item.dateOfBirth }}</div>
|
||||
</div>
|
||||
<div style="color: #857f7f;">
|
||||
<span style="float:left;"><Icon icon="ant-design:user-add-outlined" :size="18" /><span style="margin-left:5px;">{{ item.createBy_dictText }}</span></span>
|
||||
<span style="margin-left: 15px;float:left;"><Icon icon="ant-design:field-time-outlined" :size="20" /><span style="margin-left:5px;font-size:16px;">{{ item.createTime.substring(0,10) }}</span></span>
|
||||
<span style="margin-right: 15px;float:right;">
|
||||
<a-dropdown :trigger="['hover']" placement="topRight">
|
||||
<a-button type="link"><Icon icon="ant-design:more-outlined" :size="20" /></a-button>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item @click="handleEdit(item)">编辑</a-menu-item>
|
||||
<a-menu-item @click="handleFwbq(item)">服务标签</a-menu-item>
|
||||
<a-menu-item @click="handleFpzh(item)">分配账号</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
</span>
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
|
||||
<!-- <a-col :span="6" v-for="(item,index) in dataList" :key="index">
|
||||
<a-card :title="item.name +'/'+item.sex_dictText" class="cardClass">
|
||||
<template #extra><a title="操作">
|
||||
|
||||
<a-popover title="功能" style="width: 300px;">
|
||||
<template #content>
|
||||
<div>
|
||||
|
|
@ -43,9 +82,7 @@
|
|||
</template>
|
||||
<icon icon="ant-design:setting-outlined" />
|
||||
</a-popover>
|
||||
|
||||
</a></template>
|
||||
<!-- 人员信息 -->
|
||||
<a-row>
|
||||
<a-col :span="8" style="padding: 0 8px;">
|
||||
<img
|
||||
|
|
@ -62,12 +99,17 @@
|
|||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="24" style="text-align: right;">
|
||||
</a-col> -->
|
||||
<!-- <a-col :span="24" style="text-align: right;">
|
||||
<a-pagination v-model:current="current" v-model:page-size="pageSize" :total="total" show-less-items @change="onPageChange" />
|
||||
</a-col>
|
||||
</a-col> -->
|
||||
</a-row>
|
||||
|
||||
<div style="text-align:right;right: 20px;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
|
||||
<span style="margin-right: 10px;">共 {{ total }} 条数据</span>
|
||||
<Pagination showLessItems v-model:current="current" :pageSize="pageSize" size="small"
|
||||
show-quick-jumper :total="total" @change="onPageChange" />
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 表单区域 -->
|
||||
|
|
@ -103,7 +145,7 @@
|
|||
const registerServiceTagModal = ref();
|
||||
const dataList = ref<any[]>([]);
|
||||
const current = ref(1);
|
||||
const pageSize = ref(8);
|
||||
const pageSize = ref(12);
|
||||
const total = ref(0);
|
||||
|
||||
const labelCol = reactive({
|
||||
|
|
@ -123,7 +165,7 @@
|
|||
if(headPath){
|
||||
return getFileAccessHttpUrl(headPath);
|
||||
}else{
|
||||
return '../../../../../public/resource/img/logo.png';
|
||||
return '../resource/img/logo.png';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -276,4 +318,30 @@ function onPageChange(page,pageSize){
|
|||
.buttonMargin{
|
||||
margin: 3px;
|
||||
}
|
||||
.bjclass{
|
||||
text-align: center;
|
||||
margin-top: 16px;
|
||||
border-radius: 50%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background: linear-gradient(to bottom, #fff, #efe9e9);
|
||||
}
|
||||
.titleOne {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.ellipsis-two-lines {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2; /* 限制文本为2行 */
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height:24px;color: #5a5a5a;
|
||||
}
|
||||
.center-lines {
|
||||
line-height:24px;color: #5a5a5a;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -27,66 +27,61 @@
|
|||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
|
||||
<a-row>
|
||||
<a-col :span="6" v-for="(item,index) in dataList" :key="index">
|
||||
<a-card class="cardClass">
|
||||
<template #title>
|
||||
{{item.customerName}} /
|
||||
{{item.customerSex_dictText?item.customerSex_dictText:'无'}} /
|
||||
<span v-if="item.currentState=='0'" style="color: #1890ff">{{item.currentState_dictText}}</span>
|
||||
<span v-if="item.currentState=='1'" style="color: green">{{item.currentState_dictText}}</span>
|
||||
<span v-if="item.currentState=='2'" style="color: #ff6c00">{{item.currentState_dictText}}</span>
|
||||
<span v-if="item.currentState=='3'" style="color: red">{{item.currentState_dictText}}</span>
|
||||
</template>
|
||||
<template #extra><a title="操作">
|
||||
|
||||
<a-popover title="功能" style="width: 300px;" placement="topRight">
|
||||
<template #content>
|
||||
<div>
|
||||
<span class="buttonMargin">
|
||||
<a-button type="primary" @click="handleEdit(item)">编辑</a-button>
|
||||
</span>
|
||||
<span class="buttonMargin" v-if="item.currentState!='3'">
|
||||
<a-button type="primary" @click="handleCheckNu(item)">更换护理单元</a-button>
|
||||
</span>
|
||||
<span class="buttonMargin" v-if="item.currentState=='1'">
|
||||
<a-button type="primary" @click="handleWaichu(item)">外出</a-button>
|
||||
</span>
|
||||
<span class="buttonMargin" v-if="item.currentState=='2'">
|
||||
<a-button type="primary" @click="handleFanhui(item)">返回</a-button>
|
||||
</span>
|
||||
<span class="buttonMargin" v-if="item.currentState=='1' || item.currentState=='2'">
|
||||
<a-button type="primary" @click="handleTuizhu(item)">退住</a-button>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<icon icon="ant-design:setting-outlined" />
|
||||
</a-popover>
|
||||
|
||||
</a></template>
|
||||
<!-- 人员信息 -->
|
||||
<a-row>
|
||||
<a-col :span="8" style="padding: 0 8px;">
|
||||
<img
|
||||
width="100%"
|
||||
:src="handleHeadPath(item.headPath)"
|
||||
@error="setDefaultImage"
|
||||
/>
|
||||
</a-col>
|
||||
<a-col :span="16">
|
||||
<p>护理单元:{{item.nuId_dictText }}</p>
|
||||
<p>报销类型:{{item.reimbType_dictText }}</p>
|
||||
<p>医保类型:{{item.medicalType_dictText }}</p>
|
||||
<p>联系电话:{{item.contactNumber }}</p>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="24" style="text-align: right;">
|
||||
<a-pagination v-model:current="current" v-model:page-size="pageSize" :total="total" show-less-items @change="onPageChange" />
|
||||
<a-col :span="6" v-for="(item,index) in dataList" :key="index" style="padding: 5px 10px 0 0;height: 240px;">
|
||||
<a-row style="padding: 5px;background-color: white;border-radius: 5px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img :src="handleHeadPath(item.headPath)" style="width: 40px;height:40px;margin-top: 10px;" />
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :span="20" style="padding-left: 15px;">
|
||||
<div>
|
||||
<span class="titleOne">
|
||||
{{item.customerName}} /
|
||||
{{item.customerSex_dictText?item.customerSex_dictText:'无'}} /
|
||||
<span v-if="item.currentState=='0'" style="color: #1890ff">{{item.currentState_dictText}}</span>
|
||||
<span v-if="item.currentState=='1'" style="color: green">{{item.currentState_dictText}}</span>
|
||||
<span v-if="item.currentState=='2'" style="color: #ff6c00">{{item.currentState_dictText}}</span>
|
||||
<span v-if="item.currentState=='3'" style="color: red">{{item.currentState_dictText}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div style="height: 130px">
|
||||
<div class="center-lines">护理单元:{{item.nuId_dictText }}</div>
|
||||
<div class="center-lines">报销类型:{{item.reimbType_dictText }}</div>
|
||||
<div class="center-lines">医保类型:{{item.medicalType_dictText }}</div>
|
||||
<div class="center-lines">联系电话:{{item.contactNumber }}</div>
|
||||
</div>
|
||||
<div style="color: #857f7f;">
|
||||
<span style="float:left;"><Icon icon="ant-design:user-add-outlined" :size="18" /><span style="margin-left:5px;">{{ item.createBy_dictText }}</span></span>
|
||||
<span style="margin-left: 15px;float:left;"><Icon icon="ant-design:field-time-outlined" :size="20" /><span style="margin-left:5px;font-size:16px;">{{ item.createTime.substring(0,10) }}</span></span>
|
||||
<span style="margin-right: 15px;float:right;">
|
||||
<a-dropdown :trigger="['hover']" placement="topRight">
|
||||
<a-button type="link"><Icon icon="ant-design:more-outlined" :size="20" /></a-button>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item @click="handleEdit(item)">编辑</a-menu-item>
|
||||
<a-menu-item @click="handleCheckNu(item)" v-if="item.currentState!='3'">更换护理单元</a-menu-item>
|
||||
<a-menu-item @click="handleWaichu(item)" v-if="item.currentState=='1'">外出</a-menu-item>
|
||||
<a-menu-item @click="handleFanhui(item)" v-if="item.currentState=='2'">返回</a-menu-item>
|
||||
<a-menu-item @click="handleTuizhu(item)" v-if="item.currentState=='1' || item.currentState=='2'">退住</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
</span>
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
|
||||
</a-row>
|
||||
|
||||
<div style="text-align:right;right: 20px;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
|
||||
<span style="margin-right: 10px;">共 {{ total }} 条数据</span>
|
||||
<Pagination showLessItems v-model:current="current" :pageSize="pageSize" size="small"
|
||||
show-quick-jumper :total="total" @change="onPageChange" />
|
||||
</div>
|
||||
<!-- 表单区域 -->
|
||||
<NuBizCustomerInfoModal ref="registerModal" @success="handleSuccess"></NuBizCustomerInfoModal>
|
||||
<CheckNuListModal ref="checkNuListModal" @success="handleSuccess"></CheckNuListModal>
|
||||
|
|
@ -114,7 +109,7 @@
|
|||
const userStore = useUserStore();
|
||||
const dataList = ref<any[]>([]);
|
||||
const current = ref(1);
|
||||
const pageSize = ref(8);
|
||||
const pageSize = ref(12);
|
||||
const total = ref(0);
|
||||
const labelCol = reactive({
|
||||
xs:24,
|
||||
|
|
@ -158,7 +153,7 @@
|
|||
if(headPath){
|
||||
return getFileAccessHttpUrl(headPath);
|
||||
}else{
|
||||
return '../../../../../public/resource/img/logo.png';
|
||||
return '../resource/img/logo.png';
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
|
@ -226,21 +221,6 @@
|
|||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉操作栏
|
||||
*/
|
||||
function getDropDownAction(record) {
|
||||
return [ {
|
||||
label: '删除',
|
||||
popConfirm: {
|
||||
title: '是否确认删除',
|
||||
confirm: handleDelete.bind(null, record),
|
||||
placement: 'topLeft',
|
||||
},
|
||||
auth: 'nuBizCustomerInfo:nu_biz_customer_info:delete'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
|
|
@ -258,12 +238,17 @@
|
|||
reload();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
function onPageChange(page,pageSize){
|
||||
console.log('onPageChange', page,pageSize);
|
||||
current.value = page;
|
||||
reload();
|
||||
}
|
||||
/**
|
||||
* 加载数据
|
||||
*/
|
||||
function reload(){
|
||||
queryParam.pageSize = pageSize;
|
||||
queryParam.pageNo = current;
|
||||
|
|
@ -320,4 +305,30 @@
|
|||
.buttonMargin{
|
||||
margin: 3px;
|
||||
}
|
||||
.bjclass{
|
||||
text-align: center;
|
||||
margin-top: 16px;
|
||||
border-radius: 50%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background: linear-gradient(to bottom, #fff, #efe9e9);
|
||||
}
|
||||
.titleOne {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.ellipsis-two-lines {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2; /* 限制文本为2行 */
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height:24px;color: #5a5a5a;
|
||||
}
|
||||
.center-lines {
|
||||
line-height:24px;color: #5a5a5a;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -57,62 +57,71 @@
|
|||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<a-row>
|
||||
<a-col :span="4" style="padding: 0 10px 0 0;">
|
||||
<div style="height:729px;background:white;padding: 10px; ">
|
||||
<a-tabs v-model:activeKey="activeKey" tabPosition="left" type="card" style="height:600px;">
|
||||
<a-tab-pane :key="key" v-for="(item,key) in treeData">
|
||||
<!-- 一级分类 -->
|
||||
<template #tab>
|
||||
<div><img src="/src/assets/images/logo.png" /></div>
|
||||
<span title="{{item.title}}">{{item.title}}</span>
|
||||
</template>
|
||||
<div>
|
||||
<div style="width:300px;float: left;">
|
||||
<div style="with: 100%;display: flex;">
|
||||
<div class="all-card">
|
||||
<div v-for="(item, index) in treeData" :key="index" style="position: relative;">
|
||||
<div :class="clickCount === index ? 'card-target' : 'card'" :style="getCardStyle(index,treeData.length)" @click="handleClick(index,item)">
|
||||
<img class="logo" src="/src/assets/images/logo.png" width="30" height="30" />
|
||||
<span style="margin-top: 8px;">{{ item.title }}</span>
|
||||
</div>
|
||||
<div v-show="clickCount === index && index !== 4" class="sanjiao-down"></div>
|
||||
<div v-show="clickCount === index && index" class="sanjiao-up"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="background: #fff;border-radius: 0px 5px 5px 5px ;width: calc(100% - 80px);">
|
||||
<a-menu
|
||||
v-model:openKeys="openKeys"
|
||||
v-model:selectedKeys="selectedKeys"
|
||||
style="height:690px;overflow:auto;"
|
||||
style="height:720px;overflow-y:auto;overflow-x: hidden;"
|
||||
mode="inline"
|
||||
>
|
||||
<template v-for="(item2,key2) in item.children" >
|
||||
<a-sub-menu v-if="item2.children.length>0" :key="`sub`+key2" style="background-image: url('/src/assets/images/bj.png');text-align:center;border-radius:5px;">
|
||||
<template v-for="(item2,key2) in treeChildData" >
|
||||
<a-sub-menu v-if="item2.children.length>0" :key="`sub`+key2" style="margin:20px;background-image: url('../resource/img/bj.png');text-align:center;border-radius:5px;">
|
||||
<template #title>
|
||||
<div>
|
||||
<div style="height:50px;line-height:50px;">
|
||||
<span><img src="/src/assets/images/logo.png" /></span><span style="margin-left: 10px;">{{item2.title}}</span>
|
||||
</div>
|
||||
</template>
|
||||
<a-menu-item v-for="(item3,key3) in item2.children" :key="key3" style="height:50px;" >
|
||||
<div @click="onSelect(item3)"><span style="font-size: 18px;">·</span> <span style="margin-left: 10px;">{{item3.title}}</span></div>
|
||||
<div @click="onSelect(item3)">
|
||||
<span style="font-size: 18px;">·</span> <span style="margin-left: 10px;">{{item3.title}}</span>
|
||||
</div>
|
||||
</a-menu-item>
|
||||
</a-sub-menu>
|
||||
<a-menu-item v-if="item2.children.length==0" :key="`sub`+key2" style="background-image: url('/src/assets/images/bj.png');text-align:center;border-radius:5px;">
|
||||
<a-menu-item v-if="item2.children.length==0" :key="`sub`+key2" style="margin:20px;background-image: url('../resource/img/bj.png');text-align:center;border-radius:5px;width:85%;height:50px;line-height:50px;">
|
||||
<div @click="onSelect(item2)">
|
||||
<span><img src="/src/assets/images/logo.png" /></span><span style="margin-left: 10px;">{{item2.title}}</span>
|
||||
</div>
|
||||
</a-menu-item>
|
||||
</template>
|
||||
</a-menu>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :span="20">
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" >
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" v-auth="'configMaterialInfo:config_material_info:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" v-auth="'configMaterialInfo:config_material_info:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" v-auth="'configMaterialInfo:config_material_info:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" />
|
||||
</template>
|
||||
<template v-slot:bodyCell="{ column, record, index, text }">
|
||||
</template>
|
||||
</BasicTable>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div style="width:calc(100% - 320px);float: left;margin-left: 20px;">
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" >
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" v-auth="'configMaterialInfo:config_material_info:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
|
||||
<a-button type="primary" v-auth="'configMaterialInfo:config_material_info:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
<j-upload-button type="primary" v-auth="'configMaterialInfo:config_material_info:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }">
|
||||
<TableAction :actions="getTableAction(record)" />
|
||||
</template>
|
||||
<template v-slot:bodyCell="{ column, record, index, text }">
|
||||
</template>
|
||||
</BasicTable>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- 表单区域 -->
|
||||
<ConfigMaterialInfoModal ref="registerModal" @success="handleSuccess"></ConfigMaterialInfoModal>
|
||||
|
|
@ -143,11 +152,40 @@ import type { CollapseProps } from 'ant-design-vue';
|
|||
const registerModal = ref();
|
||||
const userStore = useUserStore();
|
||||
let treeData = ref<any>([]);
|
||||
let treeChildData = ref<any>([]);
|
||||
const activeKey = ref(0);
|
||||
const activeKey2 = ref(0);
|
||||
const rootSubmenuKeys= ['sub1']
|
||||
const openKeys= []
|
||||
const selectedKeys= []
|
||||
const clickCount = ref(0);
|
||||
/**
|
||||
* 点击菜单
|
||||
* @param index 菜单索引
|
||||
* @param lengths 菜单数量
|
||||
* @param item 菜单数据
|
||||
*/
|
||||
const handleClick = (index,item) => {
|
||||
clickCount.value = index;
|
||||
treeChildData.value = item.children;
|
||||
|
||||
};
|
||||
const getCardStyle = (index,allSize) => {
|
||||
const style = {borderBottomLeftRadius:'',borderTopLeftRadius:''};
|
||||
if (clickCount.value - 1 === index) {
|
||||
style.borderBottomLeftRadius = '5px';
|
||||
}
|
||||
if (clickCount.value + 1 === index) {
|
||||
style.borderTopLeftRadius= '5px';
|
||||
}
|
||||
if(!index){
|
||||
style.borderTopLeftRadius= '5px';
|
||||
}
|
||||
if(index === allSize){
|
||||
style.borderBottomLeftRadius= '5px';
|
||||
}
|
||||
return style;
|
||||
};
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
|
|
@ -307,6 +345,12 @@ import type { CollapseProps } from 'ant-design-vue';
|
|||
onMounted(() => {
|
||||
defHttp.get({url:'/ConfigMaterial/configMaterialCategory/getMaterialTreeData'}).then(res =>{
|
||||
treeData.value = res;
|
||||
console.log("🚀 ~ defHttp.get ~ treeData:", treeData)
|
||||
console.log("🚀 ~ defHttp.get ~ res:", res)
|
||||
if(treeData.value.length > 0){
|
||||
treeChildData.value = treeData.value[0].children;
|
||||
}
|
||||
|
||||
})
|
||||
});
|
||||
|
||||
|
|
@ -337,4 +381,67 @@ import type { CollapseProps } from 'ant-design-vue';
|
|||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.all-card {
|
||||
width: 80px;
|
||||
height: 730px;
|
||||
// background-color: rgb(217, 230, 239);
|
||||
// display: flex;
|
||||
/* justify-content: flex-end; */
|
||||
align-items: flex-end;
|
||||
flex-direction: column;
|
||||
// padding-top: 10px;
|
||||
}
|
||||
|
||||
.card {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 80px;
|
||||
height: 120px;
|
||||
flex-direction: column;
|
||||
background-color: rgb(243, 248, 251);
|
||||
/* border-radius: 25px; */
|
||||
}
|
||||
|
||||
.card-target {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 80px;
|
||||
height: 120px;
|
||||
flex-direction: column;
|
||||
background-color: #fff;
|
||||
border-top-left-radius: 30px;
|
||||
border-bottom-left-radius: 30px;
|
||||
/* position: relative; */
|
||||
/* border-radius: 10px; */
|
||||
}
|
||||
|
||||
.sanjiao-down {
|
||||
position: absolute;
|
||||
bottom: -26px;
|
||||
left: 17px;
|
||||
width: 64px;
|
||||
/* 上边长度 */
|
||||
height: 27px;
|
||||
/* 右边长度 */
|
||||
background-color: #fff;
|
||||
/* 三角形填充色 */
|
||||
/* 三点依次为:右上 (100% 0),右下 (100% 100%),左上 (0 0) */
|
||||
clip-path: polygon(100% 0, 100% 100%, 0 0);
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.sanjiao-up {
|
||||
position: absolute;
|
||||
top: -26px;
|
||||
left: 17px;
|
||||
width: 64px;
|
||||
height: 27px;
|
||||
background-color: #fff;
|
||||
/* 三点依次为:右下 (100% 100%),左下 (0 100%),右上 (100% 0) */
|
||||
clip-path: polygon(100% 100%, 0 100%, 100% 0);
|
||||
z-index: 999;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -25,14 +25,26 @@
|
|||
</a-form>
|
||||
</div>
|
||||
<a-row>
|
||||
<a-col :span="6" v-for="directive of tableData.records" :key="directive.id">
|
||||
<a-card :bordered="false" style="margin: 5px;">
|
||||
<!-- 自定义标题区域 -->
|
||||
<template #title>
|
||||
<div style="display: flex; align-items: center; justify-content: space-between;">
|
||||
<span>{{ directive.packageName }}</span>
|
||||
<a-dropdown :trigger="['hover']" placement="bottomRight">
|
||||
<a-button type="link" preIcon="tabler:settings"></a-button>
|
||||
<a-col :span="6" v-for="directive of tableData.records" :key="directive.id" style="padding: 5px 10px 0 0;height: 240px;">
|
||||
<a-row style="padding: 5px;background-color: white;border-radius: 5px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img src="/src/assets/images/logo.png" style="width: 40px;height:40px;margin-top: 10px;" />
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :span="20" style="padding-left: 15px;">
|
||||
<div>
|
||||
<span class="titleOne">{{ directive.packageName }}</span>
|
||||
</div>
|
||||
<div style="height: 130px">
|
||||
<span class="ellipsis-two-lines" :title="directive.description">{{ directive.description }}</span>
|
||||
</div>
|
||||
<div style="color: #857f7f;">
|
||||
<span style="float:left;"><Icon icon="ant-design:user-add-outlined" :size="18" /><span style="margin-left:5px;">{{ directive.createBy_dictText }}</span></span>
|
||||
<span style="margin-left: 15px;float:left;"><Icon icon="ant-design:field-time-outlined" :size="20" /><span style="margin-left:5px;font-size:16px;">{{ directive.createTime.substring(0,10) }}</span></span>
|
||||
<span style="margin-right: 15px;float:right;">
|
||||
<a-dropdown :trigger="['hover']" placement="topRight">
|
||||
<a-button type="link"><Icon icon="ant-design:more-outlined" :size="20" /></a-button>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item @click="packageEdit(directive)">
|
||||
|
|
@ -47,25 +59,14 @@
|
|||
</a-menu>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 保持原有内容区域 -->
|
||||
<div style="position: relative; height: 23vh;">
|
||||
<div
|
||||
style="height: 80%; overflow-y: auto; line-height: 1.5;white-space: pre-line;word-wrap: break-word;overflow-wrap: break-word;">
|
||||
{{ directive.description }}
|
||||
</div>
|
||||
<div
|
||||
style="position: absolute;bottom: 0;right: 0;font-weight: 600;color: rgba(0, 0, 0, 0.6);padding: 8px 0 0;">
|
||||
{{ directive.createTime }} - {{ directive.createBy_dictText }}
|
||||
</div>
|
||||
</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div
|
||||
style="position: fixed;right: 20px;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
|
||||
style="text-align:right;right: 20px;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
|
||||
<span style="margin-right: 10px;">共 {{ tableData.total }} 条数据</span>
|
||||
<Pagination showLessItems v-model:current="pageParams.pageNo" :pageSize="pageParams.pageSize" size="small"
|
||||
show-quick-jumper :total="tableData.total" @change="queryList" />
|
||||
|
|
@ -96,7 +97,7 @@ const wrapperCol = reactive({
|
|||
xl: 14,
|
||||
xxl: 14
|
||||
});
|
||||
const pageParams = ref({ pageNo: 1, pageSize: 8 })
|
||||
const pageParams = ref({ pageNo: 1, pageSize: 12 })
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
|
|
@ -156,7 +157,7 @@ function remove(data) {
|
|||
}
|
||||
|
||||
onMounted(() => {
|
||||
queryList({ pageNo: 1, pageSize: 10 })
|
||||
queryList({ pageNo: 1, pageSize: 12 })
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
@ -190,4 +191,27 @@ onMounted(() => {
|
|||
width: 100%;
|
||||
}
|
||||
}
|
||||
.bjclass{
|
||||
text-align: center;
|
||||
margin-top: 16px;
|
||||
border-radius: 50%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background: linear-gradient(to bottom, #fff, #efe9e9);
|
||||
}
|
||||
.titleOne {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.ellipsis-two-lines {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2; /* 限制文本为2行 */
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height:24px;color: #5a5a5a;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -5,31 +5,53 @@
|
|||
<a-drawer v-model:open="visible" v-if="visible" :title="title" width="80vw" :closable="false"
|
||||
:footer-style="{ textAlign: 'right' }" @close="handleCancel">
|
||||
<div style="display:flex;justify-content:space-between">
|
||||
<div>
|
||||
<a-card title="服务指令包详情" style="width: 25vw">
|
||||
|
||||
<div style="background-color: #fafafa;border-radius: 5px;padding: 10px;width: 25vw">
|
||||
<div style="font-size: 18px;font-weight:700;padding: 15px">服务指令包详情</div>
|
||||
<DirectivePackageForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false">
|
||||
</DirectivePackageForm>
|
||||
</a-card>
|
||||
</div>
|
||||
<a-card title="服务指令" style="width: 25vw">
|
||||
<template #extra>
|
||||
<a href="javascript:void(0);" @click="handleQuoteDirectives">引用 </a>
|
||||
<a href="javascript:void(0);" @click="handleAddDirectives">新增</a>
|
||||
</template>
|
||||
<div class="scrollable-content">
|
||||
|
||||
<div style="background-color: #fafafa;border-radius: 5px;padding: 10px;width: 25vw;height: 80vh;overflow:auto;">
|
||||
<div style="padding: 15px;height: 30px;width:100%;">
|
||||
<a-row>
|
||||
<a-col :span="12">
|
||||
<span style="font-size: 18px;font-weight:700;">服务指令</span>
|
||||
</a-col>
|
||||
<a-col :span="12" style="text-align: right;">
|
||||
<span style="color: #777;">
|
||||
<Icon icon="ant-design:reconciliation-outlined" /><a href="javascript:void(0);" @click="handleQuoteDirectives" style="color: #777;">引用 </a>
|
||||
</span>
|
||||
<span style="color: #777;margin-left: 10px;">
|
||||
<Icon icon="ant-design:file-add-outlined" /><a href="javascript:void(0);" @click="handleAddDirectives" style="color: #777;">新增</a>
|
||||
</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div style="margin-top: 15px;">
|
||||
<a-row>
|
||||
<a-col :span="22" :push="1" v-for="directive of seletedRecord.directives" :key="directive.id"
|
||||
style="margin-top: 15px;" @click="directiveInfo(directive)">
|
||||
<a-badge-ribbon :text="filterDictTextByCache('period_type', directive.cycleType)"
|
||||
:style="{ top: '-10px' }">
|
||||
style="margin-top: 15px;border-radius: 5px;" @click="directiveInfo(directive)" :class="{ 'selected': selectedDirective === directive.id }">
|
||||
<a-card size="small">
|
||||
<span>
|
||||
<a-popconfirm title="是否确认移除?" ok-text="确认" cancel-text="取消"
|
||||
@confirm="deleteDirective(directive.id)">
|
||||
<a-button type="link" danger preIcon="ic:baseline-remove-circle"></a-button>
|
||||
</a-popconfirm>
|
||||
</span>
|
||||
<div :class="{ 'selected': selectedDirective === directive.id }">
|
||||
<div >
|
||||
<a-row :span="24">
|
||||
<a-col :span="12" >
|
||||
<span style="background-color: #67b4eb;border-radius: 50%;padding: 3px;color: white;width:27px;display: block;text-align: center;" v-if="selectedDirective === directive.id">
|
||||
<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-col :span="12" style="text-align: right;">
|
||||
<span v-if="directive.cycleType=='1'" style="background-color: #1c9ef9;border-radius: 0 15px 15px 15px;padding: 5px 10px;color:white;">{{filterDictTextByCache('period_type', directive.cycleType)}}</span>
|
||||
<span v-if="directive.cycleType=='2'" style="background-color: #7a5ffd;border-radius: 0 15px 15px 15px;padding: 5px 10px;color:white;">{{filterDictTextByCache('period_type', directive.cycleType)}}</span>
|
||||
<span v-if="directive.cycleType=='3'" style="background-color: #35b082;border-radius: 0 15px 15px 15px;padding: 5px 10px;color:white;">{{filterDictTextByCache('period_type', directive.cycleType)}}</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
</div>
|
||||
<div style="margin-top: 10px;">
|
||||
<div>
|
||||
{{ directive.directiveName }}
|
||||
</div>
|
||||
|
|
@ -41,36 +63,43 @@
|
|||
</div>
|
||||
</div>
|
||||
</a-card>
|
||||
</a-badge-ribbon>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
<div>
|
||||
<a-card title="服务指令详情" style="width: 25vw">
|
||||
<div class="">分类标签:{{ filterDictTextByCache('instruction_tag', derectiveInfo.instructionTagId) }}</div>
|
||||
<div class="directiveInfoClass">服务类别:{{ derectiveInfo.categoryName || derectiveInfo.categoryId_dictText }}
|
||||
|
||||
<div style="border-radius: 5px;padding: 10px;width: 25vw;height: 80vh;overflow:auto;border: 1px solid #dcdfe6;">
|
||||
<div style="padding: 15px;height: 30px;width:100%;">
|
||||
<a-row>
|
||||
<a-col :span="24">
|
||||
<span style="font-size: 18px;font-weight:700;">服务指令详情</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="directiveInfoClass">服务类型:{{ derectiveInfo.typeName || derectiveInfo.typeId_dictText }}</div>
|
||||
<div class="directiveInfoClass">服务指令名称:{{ derectiveInfo.directiveName }}</div>
|
||||
<div class="directiveInfoClass">周期类型:{{ filterDictTextByCache('period_type', derectiveInfo.cycleType) }}</div>
|
||||
<div class="directiveInfoClass">服务时长(分钟):{{ derectiveInfo.serviceDuration }}</div>
|
||||
<div class="directiveInfoClass">服务说明:{{ derectiveInfo.serviceContent }}</div>
|
||||
<div class="directiveInfoClass">体型标签:{{ handleBodyTags('', derectiveInfo, '') }}</div>
|
||||
<div class="directiveInfoClass">情绪标签:{{ handleEmotionTags('', derectiveInfo, '') }}</div>
|
||||
<div class="directiveInfoClass">语音文件:
|
||||
<span v-if="!derectiveInfo.mp3File">暂无文件</span>
|
||||
<audio controls disabled="false" v-else>
|
||||
<source :src="getFileAccessHttpUrl(derectiveInfo.mp3File)">
|
||||
</audio>
|
||||
<div style="margin-top: 20px;padding: 15px;">
|
||||
<div class="directiveInfoClass">服务类别:{{ derectiveInfo.categoryName || derectiveInfo.categoryId_dictText }}</div>
|
||||
<div class="directiveInfoClass">服务类型:{{ derectiveInfo.typeName || derectiveInfo.typeId_dictText }}</div>
|
||||
<div class="directiveInfoClass">服务指令名称:{{ derectiveInfo.directiveName }}</div>
|
||||
<div class="directiveInfoClass">周期类型:{{ filterDictTextByCache('period_type', derectiveInfo.cycleType) }}</div>
|
||||
<div class="directiveInfoClass">服务时长(分钟):{{ derectiveInfo.serviceDuration }}</div>
|
||||
<div class="directiveInfoClass">服务说明:{{ derectiveInfo.serviceContent }}</div>
|
||||
<div class="directiveInfoClass">体型标签:{{ handleBodyTags('', derectiveInfo, '') }}</div>
|
||||
<div class="directiveInfoClass">情绪标签:{{ handleEmotionTags('', derectiveInfo, '') }}</div>
|
||||
<div class="directiveInfoClass">语音文件:
|
||||
<span v-if="!derectiveInfo.mp3File">暂无文件</span>
|
||||
<audio controls disabled="false" v-else>
|
||||
<source :src="getFileAccessHttpUrl(derectiveInfo.mp3File)">
|
||||
</audio>
|
||||
</div>
|
||||
<div class="directiveInfoClass">视频文件:
|
||||
<span v-if="!derectiveInfo.mp4File">暂无文件</span>
|
||||
<video controls v-else>
|
||||
<source :src="getFileAccessHttpUrl(derectiveInfo.mp4File)">
|
||||
</video>
|
||||
</div>
|
||||
</div>
|
||||
<div class="directiveInfoClass">视频文件:
|
||||
<span v-if="!derectiveInfo.mp4File">暂无文件</span>
|
||||
<video controls v-else>
|
||||
<source :src="getFileAccessHttpUrl(derectiveInfo.mp4File)">
|
||||
</video>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -303,8 +332,7 @@ defineExpose({
|
|||
</style>
|
||||
<style lang="less" scoped>
|
||||
.selected {
|
||||
color: rgb(0, 156, 0);
|
||||
font-weight: bold;
|
||||
border: 1px solid #1890ff;
|
||||
}
|
||||
|
||||
.directiveInfoClass {
|
||||
|
|
|
|||
|
|
@ -27,12 +27,7 @@
|
|||
<div>
|
||||
<div class="scrollable-content">
|
||||
<a-row>
|
||||
<a-col :span="11" :push="1" v-for="(directive, index) of tableData.records" :key="directive.id">
|
||||
<!-- <a-popover :placement="index % 2 == 0 ? 'left' : 'right'">
|
||||
<template #content>
|
||||
<p style="width: 10vw; word-wrap: break-word; white-space: pre-wrap">{{ directive.description ||
|
||||
'暂无说明' }}</p>
|
||||
</template> -->
|
||||
<a-col :span="11" :push="1" v-for="(directive, index) of tableData.records" :key="index">
|
||||
<a-card :bordered="false" size="small" class="smart-card"
|
||||
style="margin: 10px;box-shadow: 1px 1px 5px #b0b0b0;" @click="handlePackageClick(directive)"
|
||||
:class="{ 'selected': selectedDirective.id === directive.id }">
|
||||
|
|
|
|||
|
|
@ -14,10 +14,8 @@
|
|||
<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-button type="primary" preIcon="ant-design:plus-outlined" @click="handleAdd"
|
||||
style="margin-left: 8px">新增</a-button>
|
||||
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
|
||||
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="handleAdd" style="margin-left: 8px">新增</a-button>
|
||||
</a-col>
|
||||
</span>
|
||||
</a-col>
|
||||
|
|
@ -25,14 +23,26 @@
|
|||
</a-form>
|
||||
</div>
|
||||
<a-row>
|
||||
<a-col :span="6" v-for="directive of tableData.records" :key="directive.id">
|
||||
<a-card :bordered="false" style="margin: 5px;">
|
||||
<!-- 自定义标题区域 -->
|
||||
<template #title>
|
||||
<div style="display: flex; align-items: center; justify-content: space-between;">
|
||||
<span>{{ directive.tagName }}</span>
|
||||
<a-dropdown :trigger="['hover']" placement="bottomRight">
|
||||
<a-button type="link" preIcon="tabler:settings"></a-button>
|
||||
<a-col :span="6" v-for="directive of tableData.records" :key="directive.id" style="padding: 5px 10px 0 0;height: 240px;">
|
||||
<a-row style="padding: 5px;background-color: white;border-radius: 5px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img src="/src/assets/images/logo.png" style="width: 40px;height:40px;margin-top: 10px;" />
|
||||
</div>
|
||||
</a-col>
|
||||
<a-col :span="20" style="padding-left: 15px;">
|
||||
<div>
|
||||
<span class="titleOne">{{ directive.tagName }}</span>
|
||||
</div>
|
||||
<div style="height: 130px">
|
||||
<span class="ellipsis-two-lines" :title="directive.description">{{ directive.description }}</span>
|
||||
</div>
|
||||
<div style="color: #857f7f;">
|
||||
<span style="float:left;"><Icon icon="ant-design:user-add-outlined" :size="18" /><span style="margin-left:5px;">{{ directive.createBy_dictText }}</span></span>
|
||||
<span style="margin-left: 15px;float:left;"><Icon icon="ant-design:field-time-outlined" :size="20" /><span style="margin-left:5px;font-size:16px;">{{ directive.createTime.substring(0,10) }}</span></span>
|
||||
<span style="margin-right: 15px;float:right;">
|
||||
<a-dropdown :trigger="['hover']" placement="topRight">
|
||||
<a-button type="link"><Icon icon="ant-design:more-outlined" :size="20" /></a-button>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item @click="tagEdit(directive)">
|
||||
|
|
@ -47,25 +57,14 @@
|
|||
</a-menu>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 保持原有内容区域 -->
|
||||
<div style="position: relative; height: 11vh;">
|
||||
<div
|
||||
style="height: 75%; overflow-y: auto; line-height: 1.5;white-space: pre-line;word-wrap: break-word;overflow-wrap: break-word;">
|
||||
{{ directive.description }}
|
||||
</div>
|
||||
<div
|
||||
style="position: absolute;bottom: 0;right: 0;font-weight: 600;color: rgba(0, 0, 0, 0.6);padding: 8px 0 0;">
|
||||
{{ directive.createTime }} - {{ directive.createBy_dictText }}
|
||||
</div>
|
||||
</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div
|
||||
style="position: fixed;right: 20px;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
|
||||
|
||||
<div style="text-align:right;right: 20px;bottom: 20px;z-index: 999;padding: 8px 16px;border-radius: 4px;display: flex;align-items: center;">
|
||||
<span style="margin-right: 10px;">共 {{ tableData.total }} 条数据</span>
|
||||
<Pagination showLessItems v-model:current="pageParams.pageNo" :pageSize="pageParams.pageSize" size="small"
|
||||
show-quick-jumper :total="tableData.total" @change="queryList" />
|
||||
|
|
@ -156,7 +155,7 @@ function remove(data) {
|
|||
}
|
||||
|
||||
onMounted(() => {
|
||||
queryList({ pageNo: 1, pageSize: 10 })
|
||||
queryList({ pageNo: 1, pageSize: 12 })
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
@ -190,4 +189,27 @@ onMounted(() => {
|
|||
width: 100%;
|
||||
}
|
||||
}
|
||||
.bjclass{
|
||||
text-align: center;
|
||||
margin-top: 16px;
|
||||
border-radius: 50%;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background: linear-gradient(to bottom, #fff, #efe9e9);
|
||||
}
|
||||
.titleOne {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.ellipsis-two-lines {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2; /* 限制文本为2行 */
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height:24px;color: #5a5a5a;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -122,8 +122,8 @@
|
|||
const rememberMe = ref(false);
|
||||
|
||||
const formData = reactive({
|
||||
account: 'admin',
|
||||
password: '123456',
|
||||
account: '',
|
||||
password: '',
|
||||
inputCode: '',
|
||||
});
|
||||
const randCodeData = reactive({
|
||||
|
|
|
|||
|
|
@ -81,10 +81,9 @@ export function useBasicFormSchema() {
|
|||
// 机构类型选项
|
||||
export const orgCategoryOptions = {
|
||||
// 一级部门
|
||||
root: [{ value: '1', label: '公司' }],
|
||||
root: [{ value: '1', label: '机构' }],
|
||||
// 子级部门
|
||||
child: [
|
||||
{ value: '2', label: '部门' },
|
||||
{ value: '3', label: '岗位' },
|
||||
{ value: '2', label: '区域' },
|
||||
],
|
||||
};
|
||||
|
|
|
|||
|
|
@ -132,8 +132,8 @@
|
|||
//账号登录表单字段
|
||||
const formData = reactive<any>({
|
||||
inputCode: '',
|
||||
username: 'admin',
|
||||
password: '123456',
|
||||
username: '',
|
||||
password: '',
|
||||
});
|
||||
//手机登录表单字段
|
||||
const phoneFormData = reactive<any>({
|
||||
|
|
|
|||
Loading…
Reference in New Issue