Merge branch 'master' of http://47.115.223.229:8888/yangjun/nursing_unit_vue
This commit is contained in:
commit
3e1297b8f0
|
@ -196,24 +196,28 @@
|
|||
.jeecg-menu-item-active:not(.jeecg-menu-submenu) {
|
||||
color: white !important;
|
||||
background-color: #1890ff !important;
|
||||
border-radius: 5px;
|
||||
margin: 10px 20px;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
margin: 0px 20px 0 20px;
|
||||
}
|
||||
|
||||
.jeecg-menu-vertical .jeecg-menu-item:hover, .jeecg-menu-vertical .jeecg-menu-submenu-title:hover {
|
||||
color: #fff !important;
|
||||
border-radius: 8px;
|
||||
background: #c9cacc;
|
||||
margin: 10px 20px 0 20px;
|
||||
}
|
||||
// .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;
|
||||
color: #606266 !important;
|
||||
background: #f0f0f0;
|
||||
|
||||
}
|
||||
.jeecg-menu-vertical .jeecg-menu-item, .jeecg-menu-vertical .jeecg-menu-submenu-title {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
margin-top: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -504,7 +504,7 @@
|
|||
padding: 24px 10px 0px 10px;
|
||||
margin-bottom: 8px;
|
||||
background-color: @component-background;
|
||||
border-radius: 5px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -523,7 +523,7 @@
|
|||
.ant-table-wrapper {
|
||||
padding: 6px;
|
||||
background-color: @component-background;
|
||||
border-radius: 5px;
|
||||
border-radius: 8px;
|
||||
|
||||
.ant-table-title {
|
||||
min-height: 40px;
|
||||
|
@ -624,4 +624,7 @@
|
|||
}
|
||||
// update-end--author:liaozhiyang---date:20240604---for:【TV360X-377】关联记录必填影响到了table的输入框和页码样式
|
||||
}
|
||||
.ant-table-wrapper .ant-table.ant-table-middle .ant-table-tbody > tr > td{
|
||||
padding: 8px 8px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -7,9 +7,44 @@
|
|||
// &.ant-btn-error:not(.ant-btn-link),
|
||||
// &.ant-btn-warning:not(.ant-btn-link),
|
||||
&.ant-btn-primary:not(.ant-btn-link) {
|
||||
box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important;
|
||||
background: linear-gradient(to right, #1ea1fb, #0480e7);
|
||||
// box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important;
|
||||
// background: linear-gradient(to right, #1ea1fb, #017de9);
|
||||
|
||||
// align-items: center;
|
||||
border-radius: 8px;
|
||||
background: linear-gradient(to right,#1ea0fa , #017de9);
|
||||
// border: 1px solid #fff;
|
||||
// color: #fff;
|
||||
// position: relative; /* needed for pseudo-element */
|
||||
overflow: hidden; /* clip the animated stripe */
|
||||
// height: 34px;
|
||||
}
|
||||
&.ant-btn-primary:not(.ant-btn-link)::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
transparent 0%,
|
||||
rgba(255,255,255,0.4) 50%,
|
||||
transparent 100%
|
||||
);
|
||||
transform: skewX(0);
|
||||
}
|
||||
|
||||
&.ant-btn-primary:not(.ant-btn-link):hover::before {
|
||||
animation: light-sweep 1.5s forwards;
|
||||
}
|
||||
|
||||
@keyframes light-sweep {
|
||||
to {
|
||||
left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
// &-group {
|
||||
// .ant-btn:not(:first-child) {
|
||||
// bottom: 1px;
|
||||
|
@ -322,3 +357,51 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.ant-btn-default {
|
||||
border-radius: 8px !important;
|
||||
color: white;
|
||||
background: linear-gradient(to right,#1ea0fa , #017de9);
|
||||
border: 0px;
|
||||
}
|
||||
:where(.css-dev-only-do-not-override-9m98ij).ant-btn-default:not(:disabled):hover {
|
||||
color: white;
|
||||
border-color: white;
|
||||
}
|
||||
&.ant-btn-default:not(.ant-btn-link) {
|
||||
border-radius: 8px;
|
||||
color: white;
|
||||
background: linear-gradient(to right,#1ea0fa , #017de9);
|
||||
overflow: hidden; /* clip the animated stripe */
|
||||
}
|
||||
&.ant-btn-default:not(:disabled):hover {
|
||||
color: white;
|
||||
border-color: #40a9ff;
|
||||
}
|
||||
&.ant-btn-default:not(.ant-btn-link)::before {
|
||||
content: '';
|
||||
color: white;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
transparent 0%,
|
||||
rgba(255,255,255,0.4) 50%,
|
||||
transparent 100%
|
||||
);
|
||||
transform: skewX(0);
|
||||
}
|
||||
|
||||
&.ant-btn-default:not(.ant-btn-link):hover::before {
|
||||
animation: light-sweep 1.5s forwards;
|
||||
}
|
||||
|
||||
@keyframes light-sweep {
|
||||
to {
|
||||
left: 100%;
|
||||
}
|
||||
}
|
|
@ -18,11 +18,11 @@ export default {
|
|||
totalField: 'total',
|
||||
},
|
||||
// 可选的分页选项
|
||||
pageSizeOptions: ['10', '50', '80', '100'],
|
||||
pageSizeOptions: ['15', '50', '80', '100'],
|
||||
// 表格默认尺寸
|
||||
defaultSize: 'middle',
|
||||
//默认每页显示多少条
|
||||
defaultPageSize: 10,
|
||||
defaultPageSize: 15,
|
||||
// 默认排序方法
|
||||
defaultSortFn: (sortInfo: SorterResult) => {
|
||||
//update-begin-author:taoyan date:2022-10-21 for: VUEN-2199【表单设计器】多字段排序
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
</div>
|
||||
<a-row>
|
||||
<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-row style="padding: 5px;background-color: white;border-radius: 8px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img :src="handleHeadPath(item.headPath)" style="width: 40px;height:40px;margin-top: 10px;" @error="setDefaultImage"/>
|
||||
|
@ -62,47 +62,6 @@
|
|||
</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>
|
||||
<span class="buttonMargin">
|
||||
<a-button type="primary" @click="handleEdit(item)">编辑</a-button>
|
||||
</span>
|
||||
<span class="buttonMargin">
|
||||
<a-button type="primary" @click="handleFwbq(item)">服务标签</a-button>
|
||||
</span>
|
||||
<span class="buttonMargin">
|
||||
<a-button type="primary" @click="handleFpzh(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.entryTime}}</p>
|
||||
<p>身份证号: {{item.idCard}}</p>
|
||||
<p>联系电话: {{item.tel}}</p>
|
||||
<p>出生日期: {{item.dateOfBirth}}</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> -->
|
||||
</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;">
|
||||
|
@ -310,7 +269,7 @@ function onPageChange(page,pageSize){
|
|||
.cardClass{
|
||||
margin: 5px;
|
||||
// 添加向右下的阴影效果
|
||||
border-radius: 5px;
|
||||
border-radius: 8px;
|
||||
transition: box-shadow 0.3s ease-in-out;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@ import { defHttp } from '/@/utils/http/axios';
|
|||
const employeesDataSource = ref<any[]>([]);
|
||||
const tagsDetailData = ref<any[]>([]);
|
||||
const employeesInfo = reactive<any>({});
|
||||
const emit = defineEmits(['register', 'ok']);
|
||||
//注册model
|
||||
const [registerModal, {openModal}] = useModal();
|
||||
//注册table数据
|
||||
|
@ -191,11 +192,15 @@ import { defHttp } from '/@/utils/http/axios';
|
|||
reload();
|
||||
getEmployessServiceTagsList();
|
||||
}
|
||||
function submitForm(){
|
||||
emit('ok');
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
init,
|
||||
submitForm
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
<a-row>
|
||||
<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-row style="padding: 5px;background-color: white;border-radius: 8px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img :src="handleHeadPath(item.headPath)" style="width: 40px;height:40px;margin-top: 10px;" />
|
||||
|
@ -297,7 +297,7 @@
|
|||
.cardClass{
|
||||
margin: 5px;
|
||||
// 添加向右下的阴影效果
|
||||
border-radius: 5px;
|
||||
border-radius: 8px;
|
||||
transition: box-shadow 0.3s ease-in-out;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
|
||||
|
||||
|
|
|
@ -55,18 +55,18 @@ export const columns: BasicColumn[] = [
|
|||
align: "center",
|
||||
dataIndex: 'medicationId_dictText'
|
||||
},
|
||||
{
|
||||
title: '物料图片',
|
||||
align: "center",
|
||||
dataIndex: 'materialImg',
|
||||
customRender: render.renderImage,
|
||||
},
|
||||
{
|
||||
title: '物料标识',
|
||||
align: "center",
|
||||
dataIndex: 'materialIdent',
|
||||
customRender: render.renderImage,
|
||||
},
|
||||
// {
|
||||
// title: '物料图片',
|
||||
// align: "center",
|
||||
// dataIndex: 'materialImg',
|
||||
// customRender: render.renderImage,
|
||||
// },
|
||||
// {
|
||||
// title: '物料标识',
|
||||
// align: "center",
|
||||
// dataIndex: 'materialIdent',
|
||||
// customRender: render.renderImage,
|
||||
// },
|
||||
{
|
||||
title: '是否启用',
|
||||
align: "center",
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
<a-menu
|
||||
v-model:openKeys="openKeys"
|
||||
v-model:selectedKeys="selectedKeys"
|
||||
style="height:720px;overflow-y:auto;overflow-x: hidden;"
|
||||
style="height:700px;overflow-y:auto;overflow-x: hidden;"
|
||||
mode="inline"
|
||||
>
|
||||
<template v-for="(item2,key2) in treeChildData" >
|
||||
|
@ -84,7 +84,7 @@
|
|||
<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;" >
|
||||
<a-menu-item v-for="(item3,key3) in item2.children" :key="key3" style="height:50px;text-align:left;" >
|
||||
<div @click="onSelect(item3)">
|
||||
<span style="font-size: 18px;">·</span> <span style="margin-left: 10px;">{{item3.title}}</span>
|
||||
</div>
|
||||
|
|
|
@ -50,12 +50,12 @@ export const columns: BasicColumn[] = [
|
|||
align:"center",
|
||||
dataIndex: 'wechartId'
|
||||
},
|
||||
{
|
||||
title: '资质照片',
|
||||
align:"center",
|
||||
dataIndex: 'imgPath',
|
||||
customRender:render.renderImage,
|
||||
},
|
||||
// {
|
||||
// title: '资质照片',
|
||||
// align:"center",
|
||||
// dataIndex: 'imgPath',
|
||||
// customRender:render.renderImage,
|
||||
// },
|
||||
];
|
||||
//查询数据
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
|
|
|
@ -1,5 +1,38 @@
|
|||
<template>
|
||||
<div>
|
||||
<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="suppliersName">
|
||||
<template #label><span title="供应商名称">供应商名称</span></template>
|
||||
<j-input placeholder="请输入供应商名称" v-model:value="queryParam.suppliersName" allow-clear ></j-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="personInCharge">
|
||||
<template #label><span title="负责人">负责人</span></template>
|
||||
<j-input placeholder="请输入负责人" v-model:value="queryParam.personInCharge" allow-clear ></j-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="supplyState">
|
||||
<template #label><span title="供应状态">供应状态</span></template>
|
||||
<j-dict-select-tag type='list' placeholder="请选择供应状态" v-model:value="queryParam.supplyState" dictCode="supply_state" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6" :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">
|
||||
<!--插槽:table标题-->
|
||||
|
@ -32,9 +65,12 @@
|
|||
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||
import { useUserStore } from '/@/store/modules/user';
|
||||
import { useDrawer } from '/@/components/Drawer';
|
||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||
import JInput from '/@/components/Form/src/jeecg/components/JInput.vue';
|
||||
const queryParam = reactive<any>({});
|
||||
const checkedKeys = ref<Array<string | number>>([]);
|
||||
const userStore = useUserStore();
|
||||
const formRef = ref();
|
||||
//注册model
|
||||
const [registerModal, {openModal}] = useModal();
|
||||
//注册drawer
|
||||
|
@ -47,16 +83,6 @@
|
|||
columns,
|
||||
canResize:false,
|
||||
showIndexColumn: true,
|
||||
formConfig: {
|
||||
//labelWidth: 120,
|
||||
schemas: searchFormSchema,
|
||||
autoSubmitOnEnter:true,
|
||||
showAdvancedButton:true,
|
||||
fieldMapToNumber: [
|
||||
],
|
||||
fieldMapToTime: [
|
||||
],
|
||||
},
|
||||
actionColumn: {
|
||||
width: 160,
|
||||
fixed:'right'
|
||||
|
@ -77,7 +103,16 @@
|
|||
})
|
||||
|
||||
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
|
||||
|
||||
const labelCol = reactive({
|
||||
xs:24,
|
||||
sm:6,
|
||||
xl:6,
|
||||
xxl:6
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: 24,
|
||||
sm: 24,
|
||||
});
|
||||
// 高级查询配置
|
||||
const superQueryConfig = reactive(superQuerySchema);
|
||||
|
||||
|
@ -90,6 +125,22 @@
|
|||
});
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function searchQuery() {
|
||||
reload();
|
||||
}
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
function searchReset() {
|
||||
formRef.value.resetFields();
|
||||
selectedRowKeys.value = [];
|
||||
//刷新数据
|
||||
reload();
|
||||
}
|
||||
/**
|
||||
* 新增事件
|
||||
*/
|
||||
|
@ -175,6 +226,29 @@
|
|||
</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%;
|
||||
}
|
||||
}
|
||||
:deep(.ant-picker),:deep(.ant-input-number){
|
||||
width: 100%;
|
||||
}
|
||||
|
|
|
@ -203,6 +203,7 @@
|
|||
cameraData.value.regionId = formData.regionId;
|
||||
cameraData.value.multitrans = formData.multitrans;
|
||||
cameraData.value.scale = formData.scale;
|
||||
cameraData.value.parentId = formData.parentId;
|
||||
})
|
||||
|
||||
</script>
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
<span style="margin-left: 5px;">
|
||||
<a-button preIcon="ant-design:swap-outlined" @click="switchResolution">{{ resolution }}</a-button>
|
||||
</span>
|
||||
<span style="margin-left: 5px;">
|
||||
<!-- <span style="margin-left: 5px;">
|
||||
<a-button preIcon="ant-design:phone-outlined" @click="screenshot">巡航*</a-button>
|
||||
</span>
|
||||
</span>-->
|
||||
<span style="margin-left: 5px;" v-show="!izPhone">
|
||||
<a-button preIcon="ant-design:phone-outlined" @click="startPhone">电话</a-button>
|
||||
</span>
|
||||
|
|
|
@ -196,6 +196,7 @@ import {
|
|||
formData.regionId = props.data.regionId;
|
||||
formData.multitrans = props.data.multitrans;
|
||||
formData.scale = props.data.scale;
|
||||
formData.parentId = props.data.parentId;
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
<template>
|
||||
<a-row class="p-2">
|
||||
<a-col :span="9">
|
||||
<PlanAddTree ref="leftTree" :data="formData" @select="onTreeSelect"/>
|
||||
</a-col>
|
||||
<a-col :span="15">
|
||||
<PlanAddForm ref="addForm" :initData="formData" :data="nodeData" @success="submitCallback" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="iot-nuIotRegionInfo" setup>
|
||||
import {defineExpose, nextTick, reactive, ref} from 'vue';
|
||||
import { useDesign } from '/@/hooks/web/useDesign';
|
||||
import PlanAddTree from './PlanAddTree.vue'
|
||||
import PlanAddForm from './PlanAddForm.vue';
|
||||
const emit = defineEmits(['register', 'ok']);
|
||||
|
||||
const formData = reactive<Record<string, any>>({
|
||||
projectId: '',
|
||||
regionId: ''
|
||||
});
|
||||
|
||||
// 给子组件定义一个ref变量
|
||||
const leftTree = ref();
|
||||
const addForm = ref();
|
||||
// 当前选中的区域信息
|
||||
const nodeData = ref({});
|
||||
|
||||
// 左侧树选择后触发
|
||||
function onTreeSelect(data) {
|
||||
nodeData.value = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
async function edit(record) {
|
||||
await nextTick(() => {
|
||||
const tmpData = {};
|
||||
Object.keys(formData).forEach((key) => {
|
||||
if(record.hasOwnProperty(key)){
|
||||
tmpData[key] = record[key]
|
||||
}
|
||||
})
|
||||
//赋值
|
||||
Object.assign(formData, tmpData);
|
||||
leftTree.value.clean();
|
||||
});
|
||||
}
|
||||
|
||||
async function submitForm(){
|
||||
addForm.value.submitForm();
|
||||
}
|
||||
|
||||
function submitCallback() {
|
||||
emit('ok');
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
edit,
|
||||
submitForm
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
.p-2{
|
||||
height: calc(100vh - 325px);
|
||||
}
|
||||
|
||||
.form-content{
|
||||
background-color: #ffffff;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
:deep(.ant-tabs-nav ){
|
||||
padding: 0 20px;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,160 @@
|
|||
<template>
|
||||
<a-card :bordered="false" style="height: 100%">
|
||||
<div class="title">
|
||||
2.选择录像存储位置、码流、计划
|
||||
</div>
|
||||
<a-divider />
|
||||
<a-spin :spinning="loading">
|
||||
<BasicForm @register="registerForm" class="jeecg-basic-form">
|
||||
<template #storageDevInput="{ model, field }">
|
||||
<a-select v-model:value="model[field]">
|
||||
<template v-for="item in storageDevOptions" :key="`${item.storageDevId}`">
|
||||
<a-select-option :value="item.storageDevId" :label="item.storageDevName">
|
||||
{{item.storageDevName}}
|
||||
</a-select-option>
|
||||
</template>
|
||||
</a-select>
|
||||
</template>
|
||||
<template #planInput="{ model, field }">
|
||||
<a-select v-model:value="model[field]">
|
||||
<template v-for="item in planOptions" :key="`${item.recordPlanId}`">
|
||||
<a-select-option :value="item.recordPlanId" :label="item.planName">
|
||||
{{item.planName}}
|
||||
</a-select-option>
|
||||
</template>
|
||||
</a-select>
|
||||
</template>
|
||||
</BasicForm>
|
||||
</a-spin>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { watch, computed, inject, ref, unref, onMounted } from 'vue';
|
||||
import { BasicForm, useForm } from '/@/components/Form/index';
|
||||
import { addRecordCfgs, getAllRecordPlans, getStorageDevice } from '../plan.api';
|
||||
import { addFormSchema } from "../plan.data";
|
||||
import { useDesign } from '/@/hooks/web/useDesign';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import {propTypes} from "@/utils/propTypes";
|
||||
const { createMessage, createSuccessModal } = useMessage();
|
||||
const emit = defineEmits(['success']);
|
||||
const props = defineProps({
|
||||
initData: { type: Object, default: () => ({}) },
|
||||
data: { type: Array, default: () => ([]) }
|
||||
});
|
||||
const areaOptions = ref<any[]>([]);
|
||||
const loading = ref<boolean>(false);
|
||||
// 当前是否是更新模式
|
||||
const isUpdate = ref<boolean>(true);
|
||||
// 当前的弹窗数据
|
||||
const initModel = ref<object>({});
|
||||
// 当前的弹窗数据
|
||||
const treeModel = ref<object>([]);
|
||||
// 当前的弹窗数据
|
||||
const model = ref<object>({});
|
||||
|
||||
const planOptions = ref<any[]>([]);
|
||||
const storageDevOptions = ref<any[]>([]);
|
||||
|
||||
//注册表单
|
||||
const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
|
||||
schemas: addFormSchema,
|
||||
showActionButtonGroup: false
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
watch(
|
||||
() => props.initData,
|
||||
async () => {
|
||||
let record = unref(props.initData);
|
||||
if (typeof record !== 'object') {
|
||||
record = {};
|
||||
}
|
||||
initModel.value = record;
|
||||
if(record.projectId!=''&&record.regionId!=''){
|
||||
await fetchStorageDev(record.projectId,record.regionId);
|
||||
await fetchPlan();
|
||||
}
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
// data 变化,重填表单
|
||||
watch(
|
||||
() => props.data,
|
||||
async () => {
|
||||
let record = unref(props.data);
|
||||
console.log(record);
|
||||
if (typeof record !== 'object') {
|
||||
record = [];
|
||||
}
|
||||
treeModel.value = record;
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
});
|
||||
|
||||
// 提交事件
|
||||
async function submitForm() {
|
||||
if(treeModel.value!=null){
|
||||
if(treeModel.value.length == 0){
|
||||
createMessage.info('请选择监控点!');
|
||||
}else{
|
||||
try {
|
||||
loading.value = true;
|
||||
let values = await validate();
|
||||
values = Object.assign({}, model.value, values);
|
||||
console.log(values);
|
||||
values["ids"] = treeModel.value.join(',');
|
||||
//提交表单
|
||||
await addRecordCfgs(values);
|
||||
//刷新列表
|
||||
emit('success');
|
||||
Object.assign(model.value, {});
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const fetchStorageDev = async (projectId,regionId) => {
|
||||
storageDevOptions.value = [];
|
||||
const data = await getStorageDevice({ projectId : projectId, regionId: regionId });
|
||||
console.log(data);
|
||||
Object.assign(storageDevOptions.value, data);
|
||||
}
|
||||
|
||||
const fetchPlan = async () => {
|
||||
planOptions.value = [];
|
||||
const data = await getAllRecordPlans({});
|
||||
console.log(data);
|
||||
Object.assign(planOptions.value, data);
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
submitForm,
|
||||
});
|
||||
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
|
||||
:deep(.ant-card-body){
|
||||
padding: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
.ant-divider-horizontal{
|
||||
margin: 0px 0px 20px 0px;
|
||||
}
|
||||
|
||||
.title{
|
||||
padding: 10px 0px 10px 10px;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.jeecg-basic-form {
|
||||
padding: 0px 20px;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,147 @@
|
|||
<template>
|
||||
<a-card :bordered="false" style="height: 100%" class="card">
|
||||
<div class="title">
|
||||
1.选择监控点
|
||||
</div>
|
||||
<a-divider />
|
||||
<a-alert type="info" show-icon class="alert" style="margin-bottom: 8px">
|
||||
<template #message>
|
||||
<template v-if="checkedKeys.length > 0">
|
||||
<span>已选中 {{ checkedKeys.length }} 条记录</span>
|
||||
<a-divider type="vertical" />
|
||||
<a @click="clean">清空</a>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span>未选中任何数据</span>
|
||||
</template>
|
||||
</template>
|
||||
</a-alert>
|
||||
<a-spin :spinning="loading">
|
||||
<!--区域树-->
|
||||
<template v-if="treeData.length > 0">
|
||||
<a-tree
|
||||
:clickRowToExpand="false"
|
||||
:treeData="treeData"
|
||||
:selectedKeys="selectedKeys"
|
||||
:checkStrictly="checkStrictly"
|
||||
:load-data="loadChildrenTreeData"
|
||||
:checkedKeys="checkedKeys"
|
||||
v-model:expandedKeys="expandedKeys"
|
||||
@check="onCheck"
|
||||
checkable
|
||||
>
|
||||
</a-tree>
|
||||
</template>
|
||||
<a-empty v-else description="暂无数据" />
|
||||
</a-spin>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {defineExpose, nextTick, onMounted, ref, unref, watch} from 'vue';
|
||||
import { useModal } from '/@/components/Modal';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { useMethods } from '/@/hooks/system/useMethods';
|
||||
const { createMessage } = useMessage();
|
||||
import { queryTreeList } from '../plan.api';
|
||||
const props = defineProps({
|
||||
data: { type: Object, default: () => ({}) },
|
||||
});
|
||||
// 当前的弹窗数据
|
||||
const model = ref<object>({});
|
||||
const emit = defineEmits(['select']);
|
||||
const syncoading = ref<boolean>(false);
|
||||
const loading = ref<boolean>(false);
|
||||
// 区域树列表数据
|
||||
const treeData = ref<any[]>([]);
|
||||
// 当前选中的项
|
||||
const checkedKeys = ref<any[]>([]);
|
||||
// 当前展开的项
|
||||
const expandedKeys = ref<any[]>([]);
|
||||
// 当前选中的项
|
||||
const selectedKeys = ref<any[]>([]);
|
||||
// 树父子是否关联
|
||||
const checkStrictly = ref<boolean>(true);
|
||||
|
||||
// 加载顶级区域信息
|
||||
async function loadRootTreeData() {
|
||||
if(model.value.projectId==''&&model.value.regionId==''){
|
||||
return ;
|
||||
}
|
||||
try {
|
||||
loading.value = true;
|
||||
treeData.value = [];
|
||||
model.value["recordPlanId"] = "-1";
|
||||
const result = await queryTreeList(model.value);
|
||||
if (Array.isArray(result)) {
|
||||
treeData.value = result;
|
||||
}
|
||||
} finally {
|
||||
loading.value = false;
|
||||
syncoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
function clean(){
|
||||
checkedKeys.value = [];
|
||||
emit('select', checkedKeys.value);
|
||||
}
|
||||
|
||||
// 树复选框选择事件
|
||||
function onCheck(e) {
|
||||
if (Array.isArray(e)) {
|
||||
checkedKeys.value = e;
|
||||
} else {
|
||||
checkedKeys.value = e.checked;
|
||||
}
|
||||
emit('select', checkedKeys.value);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// data 变化,重填表单
|
||||
watch(
|
||||
() => props.data,
|
||||
async () => {
|
||||
let record = unref(props.data);
|
||||
if (typeof record !== 'object') {
|
||||
record = {};
|
||||
}
|
||||
model.value = record;
|
||||
await loadRootTreeData();
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
});
|
||||
|
||||
defineExpose({
|
||||
clean
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
:deep(.ant-card-body){
|
||||
padding: 0px 0px 0px 0px;
|
||||
background-color: aliceblue;
|
||||
}
|
||||
|
||||
.card{
|
||||
background-color: aliceblue;
|
||||
}
|
||||
|
||||
:deep(.ant-tree-list-holder){
|
||||
background-color: aliceblue !important;
|
||||
}
|
||||
|
||||
.ant-divider-horizontal{
|
||||
margin: 0px 0px 10px 0px;
|
||||
}
|
||||
|
||||
.title{
|
||||
padding: 10px 0px 10px 10px;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,181 @@
|
|||
<template>
|
||||
<a-card :bordered="false" style="height: 100%">
|
||||
<a-spin :spinning="syncoading">
|
||||
<!-- <div class="j-table-operator" style="width: 100%">
|
||||
<a-button preIcon="ant-design:sync-outlined" @click="loadRootTreeData">刷新</a-button>
|
||||
</div>-->
|
||||
<a-spin :spinning="loading">
|
||||
<!--区域树-->
|
||||
<template v-if="treeData.length > 0">
|
||||
<a-tree
|
||||
v-if="!treeReloading"
|
||||
:clickRowToExpand="false"
|
||||
:treeData="treeData"
|
||||
:selectedKeys="selectedKeys"
|
||||
:checkStrictly="checkStrictly"
|
||||
:load-data="loadChildrenTreeData"
|
||||
:checkedKeys="checkedKeys"
|
||||
v-model:expandedKeys="expandedKeys"
|
||||
@select="onSelect"
|
||||
>
|
||||
</a-tree>
|
||||
</template>
|
||||
<a-empty v-else description="暂无数据" />
|
||||
</a-spin>
|
||||
</a-spin>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { nextTick, ref } from 'vue';
|
||||
import { useModal } from '/@/components/Modal';
|
||||
import { useMessage } from '/@/hooks/web/useMessage';
|
||||
import { useMethods } from '/@/hooks/system/useMethods';
|
||||
const { createMessage } = useMessage();
|
||||
import { queryProjectTreeSync, queryRegionTreeSync } from '../plan.api';
|
||||
|
||||
const emit = defineEmits(['select', 'rootTreeData']);
|
||||
const syncoading = ref<boolean>(false);
|
||||
const loading = ref<boolean>(false);
|
||||
// 区域树列表数据
|
||||
const treeData = ref<any[]>([]);
|
||||
// 当前选中的项
|
||||
const checkedKeys = ref<any[]>([]);
|
||||
// 当前展开的项
|
||||
const expandedKeys = ref<any[]>([]);
|
||||
// 当前选中的项
|
||||
const selectedKeys = ref<any[]>([]);
|
||||
// 树组件重新加载
|
||||
const treeReloading = ref<boolean>(false);
|
||||
// 树父子是否关联
|
||||
const checkStrictly = ref<boolean>(true);
|
||||
// 当前选中的区域
|
||||
const currentRegion = ref<any>(null);
|
||||
|
||||
// 加载顶级区域信息
|
||||
async function loadRootTreeData() {
|
||||
try {
|
||||
loading.value = true;
|
||||
treeData.value = [];
|
||||
const result = await queryProjectTreeSync();
|
||||
if (Array.isArray(result)) {
|
||||
treeData.value = result;
|
||||
}
|
||||
if (expandedKeys.value.length === 0) {
|
||||
autoExpandParentNode();
|
||||
} else {
|
||||
if (selectedKeys.value.length === 0) {
|
||||
let item = treeData.value[0];
|
||||
if (item) {
|
||||
// 默认选中第一个
|
||||
setSelectedKey(item.id, item);
|
||||
}
|
||||
} else {
|
||||
emit('select', currentRegion.value);
|
||||
}
|
||||
}
|
||||
emit('rootTreeData', treeData.value);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
syncoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
loadRootTreeData();
|
||||
|
||||
/**
|
||||
* 加载子级区域信息
|
||||
*/
|
||||
async function loadChildrenTreeData(treeNode) {
|
||||
try {
|
||||
const result = await queryRegionTreeSync({
|
||||
parentId: treeNode.dataRef.id,
|
||||
projectId: treeNode.dataRef.projectId,
|
||||
});
|
||||
if (result.length == 0) {
|
||||
treeNode.dataRef.isLeaf = true;
|
||||
} else {
|
||||
treeNode.dataRef.children = result;
|
||||
if (expandedKeys.value.length > 0) {
|
||||
// 判断获取的子级是否有当前展开的项
|
||||
let subKeys: any[] = [];
|
||||
for (let key of expandedKeys.value) {
|
||||
if (result.findIndex((item) => item.id === key) !== -1) {
|
||||
subKeys.push(key);
|
||||
}
|
||||
}
|
||||
if (subKeys.length > 0) {
|
||||
expandedKeys.value = [...expandedKeys.value];
|
||||
}
|
||||
}
|
||||
}
|
||||
treeData.value = [...treeData.value];
|
||||
emit('rootTreeData', treeData.value);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动展开父节点,只展开一级
|
||||
*/
|
||||
function autoExpandParentNode() {
|
||||
let item = treeData.value[0];
|
||||
if (item) {
|
||||
if (!item.isLeaf) {
|
||||
expandedKeys.value = [item.key];
|
||||
}
|
||||
// 默认选中第一个
|
||||
setSelectedKey(item.id, item);
|
||||
reloadTree();
|
||||
} else {
|
||||
emit('select', null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新加载树组件,防止无法默认展开数据
|
||||
*/
|
||||
async function reloadTree() {
|
||||
await nextTick();
|
||||
treeReloading.value = true;
|
||||
await nextTick();
|
||||
treeReloading.value = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前选中的行
|
||||
*/
|
||||
function setSelectedKey(key: string, data?: object) {
|
||||
selectedKeys.value = [key];
|
||||
if (data) {
|
||||
currentRegion.value = data;
|
||||
emit('select', data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 树选择事件
|
||||
*/
|
||||
function onSelect(selKeys, event) {
|
||||
if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
|
||||
setSelectedKey(selKeys[0], event.selectedNodes[0]);
|
||||
} else {
|
||||
// 这样可以防止用户取消选择
|
||||
setSelectedKey(selectedKeys.value[0]);
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
loadRootTreeData,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
:deep(.ant-card-body){
|
||||
padding: 24px 0px 0px 24px;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,213 @@
|
|||
<template>
|
||||
<div>
|
||||
<!--引用表格-->
|
||||
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button v-if="queryParam.regionId" type="primary" preIcon="ant-design:plus-outlined" @click="handleAdd"> 新增</a-button>
|
||||
<a-button v-if="selectedRowKeys.length > 0" preIcon="ant-design:delete-outlined" @click="batchHandleDelete"> 删除</a-button>
|
||||
</template>
|
||||
<!--操作栏-->
|
||||
<template #action="{ record }"></template>
|
||||
<template v-slot:bodyCell="{ column, record, index, text }">
|
||||
<template v-if="column.dataIndex === 'recordSwitchBoolean'">
|
||||
<a-switch
|
||||
v-model:checked="record.recordSwitchBoolean"
|
||||
checked-children="开"
|
||||
un-checked-children="关"
|
||||
@change="(checked) => handleSwitchChange(checked, record)"
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
<!-- <template #recordSlot="{ text, record }">
|
||||
<a-switch
|
||||
v-model:checked="record.recordSwitch"
|
||||
checked-children="启用"
|
||||
un-checked-children="停用"
|
||||
/>
|
||||
</template>-->
|
||||
</BasicTable>
|
||||
<!-- 表单区域 -->
|
||||
<PlanModal ref="registerModal"></PlanModal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="iot-nuIotCameraInfo" setup>
|
||||
import { ref, reactive, createVNode, h, onMounted, watch, unref } from 'vue';
|
||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||
import { useListPage } from '/@/hooks/system/useListPage';
|
||||
import { columns } from '../plan.data';
|
||||
import {batchDeleteCfgs, editRecordCfgs, list} from '../plan.api';
|
||||
import { useUserStore } from '/@/store/modules/user';
|
||||
import { useDrawer } from "@/components/Drawer";
|
||||
import { useRouter } from 'vue-router';
|
||||
import PlanModal from './PlanModal.vue';
|
||||
|
||||
const props = defineProps({
|
||||
data: { type: Object, default: () => ({}) },
|
||||
});
|
||||
//注册drawer
|
||||
const [registerDrawer, { openDrawer }] = useDrawer();
|
||||
let router = useRouter();
|
||||
const queryParam = reactive<any>({});
|
||||
const registerModal = ref();
|
||||
const userStore = useUserStore();
|
||||
//注册table数据
|
||||
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||
tableProps: {
|
||||
title: '护理单元-物联管理-录像计划',
|
||||
api: list,
|
||||
columns,
|
||||
rowKey : "ids",
|
||||
canResize: false,
|
||||
showActionColumn: false,
|
||||
actionColumn: {
|
||||
width: 180,
|
||||
fixed: 'right',
|
||||
},
|
||||
beforeFetch: async (params) => {
|
||||
return Object.assign(params, queryParam);
|
||||
},
|
||||
},
|
||||
});
|
||||
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource, getSelectRows }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||
const labelCol = reactive({
|
||||
xs:24,
|
||||
sm:4,
|
||||
xl:6,
|
||||
xxl:4
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: 24,
|
||||
sm: 20,
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
watch(
|
||||
() => props.data,
|
||||
async () => {
|
||||
queryParam.projectId = props.data.projectId;
|
||||
queryParam.regionId = props.data.regionId;
|
||||
let record = unref(props.data);
|
||||
if (typeof record !== 'object') {
|
||||
record = {};
|
||||
}
|
||||
reload();
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
});
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
function handleAdd(record: Recordable) {
|
||||
record["projectId"] = queryParam.projectId;
|
||||
record["regionId"] = queryParam.regionId;
|
||||
registerModal.value.disableSubmit = false;
|
||||
registerModal.value.edit(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
function handleEdit(record: Recordable) {
|
||||
record["projectId"] = queryParam.projectId;
|
||||
record["regionId"] = queryParam.regionId;
|
||||
openDrawer(true, {
|
||||
record,
|
||||
isUpdate: true,
|
||||
showFooter: true,
|
||||
tenantSaas: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除事件
|
||||
*/
|
||||
async function batchHandleDelete() {
|
||||
const selectRows = getSelectRows();
|
||||
let ids = [];
|
||||
let devIds = [];
|
||||
if(selectRows.length>0){
|
||||
selectRows.forEach(function(element) {
|
||||
ids.push(element.ids);
|
||||
devIds.push(element.deviceIndex);
|
||||
})
|
||||
let params = { ids: ids.join(","), deviceIndex: devIds.join(",")};
|
||||
console.log(params);
|
||||
await batchDeleteCfgs(params);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功回调
|
||||
*/
|
||||
function handleSuccess() {
|
||||
reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作栏
|
||||
*/
|
||||
function getTableAction(record) {
|
||||
return [
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
function handleSwitchChange(checked, record) {
|
||||
let recordSwitch = 0;
|
||||
if(checked){
|
||||
recordSwitch = 1;
|
||||
}
|
||||
editRecordCfgs({ ids: record.ids, recordSwitch: recordSwitch });
|
||||
}
|
||||
|
||||
/**
|
||||
* 左侧树选择后触发
|
||||
*/
|
||||
function onTreeSelect(data) {
|
||||
// departData.value = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 左侧树rootTreeData触发
|
||||
*/
|
||||
function onRootTreeData(data) {
|
||||
// rootTreeData.value = data;
|
||||
}
|
||||
|
||||
</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%;
|
||||
}
|
||||
}
|
||||
|
||||
.p-2{
|
||||
height: calc(100vh - 120px);
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,67 @@
|
|||
<template>
|
||||
<j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||
<PlanAdd ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></PlanAdd>
|
||||
</j-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, nextTick, defineExpose } from 'vue';
|
||||
|
||||
import JModal from '/@/components/Modal/src/JModal/JModal.vue';
|
||||
import PlanAdd from "./PlanAdd.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']);
|
||||
|
||||
// const player = ref();
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param record
|
||||
*/
|
||||
function edit(record) {
|
||||
title.value = "添加录像设置";
|
||||
visible.value = true;
|
||||
nextTick(() => {
|
||||
registerForm.value.edit(record);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 确定按钮点击事件
|
||||
*/
|
||||
function handleOk() {
|
||||
registerForm.value.submitForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* form保存回调事件
|
||||
*/
|
||||
function submitCallback() {
|
||||
handleCancel();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消按钮回调事件
|
||||
*/
|
||||
function handleCancel() {
|
||||
visible.value = false;
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
edit,
|
||||
disableSubmit,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
/**隐藏样式-modal确定按钮 */
|
||||
.jee-hidden {
|
||||
display: none !important;
|
||||
}
|
||||
</style>
|
||||
<style lang="less" scoped></style>
|
|
@ -0,0 +1,46 @@
|
|||
<template>
|
||||
|
||||
<a-row class="p-2" type="flex" :gutter="10">
|
||||
<a-col :xl="4" :lg="24" :md="24" style="margin-bottom: 10px">
|
||||
<PlanLeftTree ref="leftTree" @select="onTreeSelect" @rootTreeData="onRootTreeData" />
|
||||
</a-col>
|
||||
<a-col :xl="20" :lg="24" :md="24" style="margin-bottom: 10px">
|
||||
<div v-show="planData != null">
|
||||
<PlanList :data="planData" />
|
||||
</div>
|
||||
<div v-show="planData == null" style="padding-top: 40px">
|
||||
<a-empty description="请选择区域" />
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</template>
|
||||
|
||||
<script lang="ts" name="iot-nuIotCameraInfo" setup>
|
||||
import { ref } from 'vue';
|
||||
import { useDesign } from '/@/hooks/web/useDesign';
|
||||
import PlanLeftTree from './components/PlanLeftTree.vue'
|
||||
import PlanList from './components/PlanList.vue';
|
||||
|
||||
// 给子组件定义一个ref变量
|
||||
const leftTree = ref();
|
||||
// 当前选中的区域信息
|
||||
const planData = ref({});
|
||||
const rootTreeData = ref<any[]>([]);
|
||||
// 左侧树选择后触发
|
||||
function onTreeSelect(data) {
|
||||
planData.value = data;
|
||||
}
|
||||
// 左侧树rootTreeData触发
|
||||
function onRootTreeData(data) {
|
||||
rootTreeData.value = data;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
.p-2{
|
||||
height: calc(100vh - 120px);
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,86 @@
|
|||
import { defHttp } from '/@/utils/http/axios';
|
||||
import {Modal} from "ant-design-vue";
|
||||
|
||||
enum Api {
|
||||
queryProjectTreeSync = '/iot/projectInfo/queryRegionTreeSync',
|
||||
queryRegionTreeSync = '/iot/regionInfo/queryRegionTreeSync',
|
||||
queryTreeList = '/iot/cameraInfo/queryTreeList',
|
||||
getStorageDevice = '/iot/cameraInfo/getStorageDevice',
|
||||
getAllRecordPlans = '/iot/cameraInfo/getAllRecordPlans',
|
||||
getRecordCfgs = '/iot/cameraInfo/getRecordCfgs',
|
||||
addRecordCfgs = '/iot/cameraInfo/addRecordCfgs',
|
||||
setRecordCfgs = '/iot/cameraInfo/setRecordCfgs',
|
||||
delRecordCfgs = '/iot/cameraInfo/delRecordCfgs',
|
||||
getBatchProgress = '/iot/cameraInfo/getBatchProgress',
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取项目树列表
|
||||
* @param params
|
||||
*/
|
||||
export const queryProjectTreeSync = (params?) => defHttp.get({ url: Api.queryProjectTreeSync, params });
|
||||
|
||||
/**
|
||||
* 获取区域树列表
|
||||
* @param params
|
||||
*/
|
||||
export const queryRegionTreeSync = (params?) => defHttp.get({ url: Api.queryRegionTreeSync, params });
|
||||
|
||||
/**
|
||||
* 获取树列表
|
||||
* @param params
|
||||
*/
|
||||
export const queryTreeList = (params?) => defHttp.get({ url: Api.queryTreeList, params });
|
||||
|
||||
/**
|
||||
* 列表接口
|
||||
* @param params
|
||||
*/
|
||||
export const getStorageDevice = (params) => defHttp.get({ url: Api.getStorageDevice, params });
|
||||
|
||||
/**
|
||||
* 获取存储设备列表
|
||||
* @param params
|
||||
*/
|
||||
export const getAllRecordPlans = (params) => defHttp.get({ url: Api.getAllRecordPlans, params });
|
||||
|
||||
/**
|
||||
* 获取录像配置
|
||||
* @param params
|
||||
*/
|
||||
export const list = (params) => defHttp.get({ url: Api.getRecordCfgs, params });
|
||||
|
||||
/**
|
||||
* 添加录像计划
|
||||
* @param params
|
||||
*/
|
||||
export const addRecordCfgs = (params) => defHttp.post({ url: Api.addRecordCfgs, params });
|
||||
|
||||
/**
|
||||
* 设置录像计划
|
||||
* @param params
|
||||
*/
|
||||
export const editRecordCfgs = (params) => defHttp.post({ url: Api.setRecordCfgs, params });
|
||||
|
||||
/**
|
||||
* 获取批量操作录像计划进度
|
||||
* @param params
|
||||
*/
|
||||
export const getBatchProgress = (params) => defHttp.get({ url: Api.getBatchProgress, params });
|
||||
|
||||
|
||||
/**
|
||||
* 批量删除数据源
|
||||
* @param params
|
||||
*/
|
||||
export const batchDeleteCfgs = (params) => {
|
||||
Modal.confirm({
|
||||
title: '确认删除',
|
||||
content: '是否删除选中数据',
|
||||
okText: '确认',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
defHttp.get({ url: Api.delRecordCfgs, params });
|
||||
},
|
||||
});
|
||||
};
|
|
@ -0,0 +1,158 @@
|
|||
import {BasicColumn} from '/@/components/Table';
|
||||
import {FormSchema} from '/@/components/Table';
|
||||
|
||||
//列表数据
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: '设备序号',
|
||||
align: "center",
|
||||
dataIndex: 'deviceIndex'
|
||||
},
|
||||
{
|
||||
title: '设备名称',
|
||||
align: "center",
|
||||
dataIndex: 'deviceName'
|
||||
},
|
||||
{
|
||||
title: 'IP地址',
|
||||
align: "center",
|
||||
dataIndex: 'ip'
|
||||
},
|
||||
{
|
||||
title: '录像开关',
|
||||
align: "center",
|
||||
dataIndex: 'recordSwitchBoolean',
|
||||
},
|
||||
{
|
||||
title: '录像存储位置',
|
||||
align: "center",
|
||||
dataIndex: 'storageDevName'
|
||||
},
|
||||
{
|
||||
title: '录像码流',
|
||||
align: "center",
|
||||
dataIndex: 'streamType',
|
||||
customRender:({record})=>{
|
||||
if(record.streamType == 0){
|
||||
return '主码流';
|
||||
}else if(record.streamType == 1){
|
||||
return '子码流';
|
||||
}else{
|
||||
return '';
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '录像计划',
|
||||
align: "center",
|
||||
dataIndex: 'planName'
|
||||
},
|
||||
];
|
||||
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
label: '',
|
||||
field: 'ids',
|
||||
component: 'Input',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
label: '设备序号',
|
||||
field: 'deviceIndex',
|
||||
component: 'Input',
|
||||
dynamicDisabled: true
|
||||
},
|
||||
{
|
||||
label: '设备名称',
|
||||
field: 'deviceName',
|
||||
component: 'Input',
|
||||
dynamicDisabled: true
|
||||
},
|
||||
{
|
||||
label: '录像开关',
|
||||
field: 'recordSwitch',
|
||||
component: 'Select',
|
||||
componentProps: {
|
||||
options: [
|
||||
{label:'开启' , value: '1'},
|
||||
{label:'关闭' , value: '0'},
|
||||
]
|
||||
},
|
||||
defaultValue: '1'
|
||||
},
|
||||
{
|
||||
label: '存储位置',
|
||||
field: 'storageDevName',
|
||||
component: 'Input',
|
||||
slot: 'storageDevInput',
|
||||
},
|
||||
{
|
||||
label: '录像码流',
|
||||
field: 'streamType',
|
||||
component: 'Select',
|
||||
componentProps: {
|
||||
options: [
|
||||
{label:'主码流' , value: 0},
|
||||
{label:'子码流' , value: 1},
|
||||
]
|
||||
},
|
||||
dynamicDisabled: true
|
||||
},
|
||||
{
|
||||
label: '录像计划',
|
||||
field: 'planName',
|
||||
component: 'Input',
|
||||
}
|
||||
];
|
||||
|
||||
export const addFormSchema: FormSchema[] = [
|
||||
{
|
||||
label: '设备序号',
|
||||
field: 'deviceIndex',
|
||||
component: 'Input',
|
||||
show: false
|
||||
},
|
||||
{
|
||||
label: '录像开关',
|
||||
field: 'recordSwitch',
|
||||
component: 'Select',
|
||||
componentProps: {
|
||||
options: [
|
||||
{label:'开启' , value: '1'},
|
||||
{label:'关闭' , value: '0'},
|
||||
]
|
||||
},
|
||||
defaultValue: '1',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
label: '存储位置',
|
||||
field: 'storageDevId',
|
||||
component: 'Input',
|
||||
slot: 'storageDevInput',
|
||||
defaultValue: '0',
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
label: '录像码流',
|
||||
field: 'streamType',
|
||||
component: 'Select',
|
||||
componentProps: {
|
||||
options: [
|
||||
{label:'主码流' , value: 0},
|
||||
{label:'子码流' , value: 1},
|
||||
]
|
||||
},
|
||||
defaultValue: 0,
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
label: '录像计划',
|
||||
field: 'recordPlanId',
|
||||
component: 'Input',
|
||||
slot: 'planInput',
|
||||
defaultValue: '1',
|
||||
required: true,
|
||||
}
|
||||
];
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
<a-input v-model:value="searchForm.packageName" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||
<a-col :lg="6" :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>
|
||||
|
@ -26,7 +26,7 @@
|
|||
</div>
|
||||
<a-row>
|
||||
<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-row style="padding: 5px;background-color: white;border-radius: 8px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img src="/src/assets/images/logo.png" style="width: 40px;height:40px;margin-top: 10px;" />
|
||||
|
@ -86,17 +86,15 @@ const registerModal = ref();
|
|||
const searchForm = ref({})
|
||||
const tableData = ref({})
|
||||
const labelCol = reactive({
|
||||
xs: 24,
|
||||
sm: 4,
|
||||
xl: 6,
|
||||
xxl: 6
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: 24,
|
||||
sm: 20,
|
||||
xl: 14,
|
||||
xxl: 14
|
||||
});
|
||||
xs:24,
|
||||
sm:6,
|
||||
xl:6,
|
||||
xxl:6
|
||||
});
|
||||
const wrapperCol = reactive({
|
||||
xs: 24,
|
||||
sm: 24,
|
||||
});
|
||||
const pageParams = ref({ pageNo: 1, pageSize: 12 })
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
:footer-style="{ textAlign: 'right' }" @close="handleCancel">
|
||||
<div style="display:flex;justify-content:space-between">
|
||||
|
||||
<div style="background-color: #fafafa;border-radius: 5px;padding: 10px;width: 25vw">
|
||||
<div style="background-color: #fafafa;border-radius: 8px;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>
|
||||
</div>
|
||||
|
||||
<div style="background-color: #fafafa;border-radius: 5px;padding: 10px;width: 25vw;height: 80vh;overflow:auto;">
|
||||
<div style="background-color: #fafafa;border-radius: 8px;padding: 10px;width: 25vw;height: 80vh;overflow:auto;">
|
||||
<div style="padding: 15px;height: 30px;width:100%;">
|
||||
<a-row>
|
||||
<a-col :span="12">
|
||||
|
@ -31,7 +31,7 @@
|
|||
<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;border-radius: 5px;" @click="directiveInfo(directive)" :class="{ 'selected': selectedDirective === directive.id }">
|
||||
style="margin-top: 15px;border-radius: 8px;" @click="directiveInfo(directive)" :class="{ 'selected': selectedDirective === directive.id }">
|
||||
<a-card size="small">
|
||||
<div >
|
||||
<a-row :span="24">
|
||||
|
@ -69,7 +69,7 @@
|
|||
</div>
|
||||
<div>
|
||||
|
||||
<div style="border-radius: 5px;padding: 10px;width: 25vw;height: 80vh;overflow:auto;border: 1px solid #dcdfe6;">
|
||||
<div style="border-radius: 8px;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">
|
||||
|
|
|
@ -92,11 +92,11 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'izPreferential_dictText',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '收费频次',
|
||||
align: 'center',
|
||||
dataIndex: 'chargingFrequency_dictText',
|
||||
},
|
||||
// {
|
||||
// title: '收费频次',
|
||||
// align: 'center',
|
||||
// dataIndex: 'chargingFrequency_dictText',
|
||||
// },
|
||||
{
|
||||
title: '周期类型',
|
||||
align: 'center',
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
:ignoreDisabled="true" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<template v-if="toggleSearchStatus">
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="directiveName">
|
||||
<template #label><span title="服务指令">服务指令</span></template>
|
||||
|
@ -35,7 +34,7 @@
|
|||
:ignoreDisabled="true" placeholder="请选分类标签" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6">
|
||||
<!-- <a-col :lg="6">
|
||||
<a-form-item name="tollPrice">
|
||||
<template #label><span title="收费价格">收费价格</span></template>
|
||||
<JRangeNumber v-model:value="queryParam.tollPrice" class="query-group-cust"></JRangeNumber>
|
||||
|
@ -46,7 +45,7 @@
|
|||
<template #label><span title="提成价格">提成价格</span></template>
|
||||
<JRangeNumber v-model:value="queryParam.comPrice" class="query-group-cust"></JRangeNumber>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-col> -->
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="izReimbursement">
|
||||
<template #label><span title="医保报销">医保报销</span></template>
|
||||
|
@ -71,15 +70,14 @@
|
|||
<a-col :lg="6">
|
||||
<a-form-item name="bodyTags">
|
||||
<template #label><span title="体型标签">体型标签</span></template>
|
||||
<JSelectMultiple type="list" v-model:value="queryParam.bodyTags"
|
||||
:dictCode="`nu_config_body_tag,tag_name,id,del_flag = '0' order by sort asc`" :ignoreDisabled="true"
|
||||
placeholder="请选择体型标签" allowClear />
|
||||
<j-dict-select-tag type='list' v-model:value="queryParam.bodyTags" :dictCode="`nu_config_body_tag,tag_name,id,del_flag = '0' order by sort asc`"
|
||||
:ignoreDisabled="true" placeholder="请选择体型标签" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :lg="6">
|
||||
<a-form-item name="emotionTags">
|
||||
<template #label><span title="情绪标签">情绪标签</span></template>
|
||||
<JSelectMultiple type="list" v-model:value="queryParam.emotionTags"
|
||||
<j-dict-select-tag type="list" v-model:value="queryParam.emotionTags"
|
||||
:dictCode="`nu_config_emotion_tag,tag_name,id,del_flag = '0' order by sort asc`" :ignoreDisabled="true"
|
||||
placeholder="请选择情绪标签" allowClear />
|
||||
</a-form-item>
|
||||
|
@ -98,17 +96,12 @@
|
|||
:ignoreDisabled="true" placeholder="请选择是否启用" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</template>
|
||||
<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 @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
|
||||
{{ toggleSearchStatus ? '收起' : '展开' }}
|
||||
<Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
|
||||
</a>
|
||||
</a-col>
|
||||
</span>
|
||||
</a-col>
|
||||
|
@ -119,15 +112,15 @@
|
|||
<BasicTable @register="registerTable">
|
||||
<!--插槽:table标题-->
|
||||
<template #tableTitle>
|
||||
<a-button type="primary" v-auth="'serviceDirective:config_service_directive:add'" @click="handleCategory"
|
||||
<a-button type="primary" class="btnPrivate" v-auth="'serviceDirective:config_service_directive:add'" @click="handleCategory"
|
||||
preIcon="tabler:settings">配置服务类别</a-button>
|
||||
<a-button type="primary" v-auth="'serviceDirective:config_service_directive:add'" @click="handleType"
|
||||
<a-button type="primary" class="btnPrivate" v-auth="'serviceDirective:config_service_directive:add'" @click="handleType"
|
||||
preIcon="tabler:settings">配置服务类型</a-button>
|
||||
<a-button type="primary" v-auth="'serviceDirective:config_service_directive:add'" @click="handleBodyTag"
|
||||
<a-button type="primary" class="btnPrivate" v-auth="'serviceDirective:config_service_directive:add'" @click="handleBodyTag"
|
||||
preIcon="tabler:settings">配置体型标签</a-button>
|
||||
<a-button type="primary" v-auth="'serviceDirective:config_service_directive:add'" @click="handleEmotionTag"
|
||||
<a-button type="primary" class="btnPrivate" v-auth="'serviceDirective:config_service_directive:add'" @click="handleEmotionTag"
|
||||
preIcon="tabler:settings">配置情绪标签</a-button>
|
||||
<a-button type="primary" v-auth="'serviceDirective:config_service_directive:add'" @click="handleAdd"
|
||||
<a-button type="primary" class="btnPrivate" v-auth="'serviceDirective:config_service_directive:add'" @click="handleAdd"
|
||||
preIcon="ant-design:plus-outlined">新增服务指令</a-button>
|
||||
<!-- <a-button type="primary" v-auth="'serviceDirective:config_service_directive:exportXls'"
|
||||
preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
|
||||
|
@ -248,6 +241,11 @@ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
|||
canResize: false,
|
||||
useSearchForm: false,
|
||||
showIndexColumn: true,
|
||||
pagination: {
|
||||
current: 1,
|
||||
pageSize: 10,
|
||||
pageSizeOptions: ['10', '20', '50', '100'],
|
||||
},
|
||||
actionColumn: {
|
||||
width: 160,
|
||||
fixed: 'right',
|
||||
|
@ -511,4 +509,8 @@ audio::-webkit-media-controls-current-time-display,
|
|||
audio::-webkit-media-controls-time-remaining-display {
|
||||
display: none;
|
||||
}
|
||||
.btnPrivate{
|
||||
height: 34px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -158,13 +158,13 @@
|
|||
<a-col :span="12">
|
||||
<a-form-item label="语音文件" v-bind="validateInfos.mp3File" id="ConfigServiceDirectiveForm-mp3File"
|
||||
name="mp3File">
|
||||
<j-upload v-model:value="formData.mp3File" accept=".mp3" :disabled="true" :maxCount="1"></j-upload>
|
||||
<j-upload v-model:value="formData.mp3File" accept=".mp3" :maxCount="1"></j-upload>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="视频文件" v-bind="validateInfos.mp4File" id="ConfigServiceDirectiveForm-mp4File"
|
||||
name="mp4File">
|
||||
<j-upload v-model:value="formData.mp4File" accept=".mp4" :disabled="true" :maxCount="1"></j-upload>
|
||||
<j-upload v-model:value="formData.mp4File" accept=".mp4" :maxCount="1"></j-upload>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
</div>
|
||||
<a-row>
|
||||
<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-row style="padding: 5px;background-color: white;border-radius: 8px;height: 220px;">
|
||||
<a-col :span="4">
|
||||
<div class="bjclass">
|
||||
<img src="/src/assets/images/logo.png" style="width: 40px;height:40px;margin-top: 10px;" />
|
||||
|
|
Loading…
Reference in New Issue