设备维护
This commit is contained in:
parent
bf4f19122f
commit
c581bcc6f0
|
@ -0,0 +1,82 @@
|
||||||
|
<template>
|
||||||
|
<BasicDrawer
|
||||||
|
v-bind="$attrs"
|
||||||
|
@register="registerDrawer"
|
||||||
|
:title="getTitle"
|
||||||
|
:width="adaptiveWidth"
|
||||||
|
@ok="handleSubmit"
|
||||||
|
:showFooter="showFooter"
|
||||||
|
destroyOnClose
|
||||||
|
>
|
||||||
|
<BasicForm @register="registerForm" ></BasicForm>
|
||||||
|
</BasicDrawer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { defineComponent, ref, computed, unref, useAttrs } from 'vue';
|
||||||
|
import { BasicForm, useForm } from '/@/components/Form/index';
|
||||||
|
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
|
||||||
|
import { useDrawerAdaptiveWidth } from '/@/hooks/jeecg/useAdaptiveWidth';
|
||||||
|
import { formSchema } from '../weihu.data';
|
||||||
|
import { saveSendOrg } from '../weihu.api';
|
||||||
|
import { useMessage } from "@/hooks/web/useMessage";
|
||||||
|
const { createMessage } = useMessage();
|
||||||
|
// 声明Emits
|
||||||
|
const emit = defineEmits(['success', 'register']);
|
||||||
|
const attrs = useAttrs();
|
||||||
|
const isUpdate = ref(true);
|
||||||
|
const rowId = ref('');
|
||||||
|
//表单配置
|
||||||
|
const [registerForm, { setProps, resetFields, validateFields, getFieldsValue, setFieldsValue, validate, updateSchema }] = useForm({
|
||||||
|
labelWidth: 90,
|
||||||
|
schemas: formSchema,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
});
|
||||||
|
const showFooter = ref(true);
|
||||||
|
const records = ref<any[]>([]);
|
||||||
|
//表单赋值
|
||||||
|
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
|
||||||
|
await resetFields();
|
||||||
|
showFooter.value = data?.showFooter ?? true;
|
||||||
|
setDrawerProps({ confirmLoading: false, showFooter: showFooter.value });
|
||||||
|
isUpdate.value = !!data?.isUpdate;
|
||||||
|
|
||||||
|
if(data.records){
|
||||||
|
records.value = data.records;
|
||||||
|
let record = data.records[0];
|
||||||
|
console.log(record);
|
||||||
|
await setFieldsValue({
|
||||||
|
...record,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 隐藏底部时禁用整个表单
|
||||||
|
setProps({ disabled: !showFooter.value });
|
||||||
|
});
|
||||||
|
//获取标题
|
||||||
|
const getTitle = computed(() => {
|
||||||
|
if (!unref(isUpdate)) {
|
||||||
|
return '新增维护设备';
|
||||||
|
} else {
|
||||||
|
return unref(showFooter) ? '指定派往机构' : '维护设备详情';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const { adaptiveWidth } = useDrawerAdaptiveWidth();
|
||||||
|
|
||||||
|
//提交事件
|
||||||
|
async function handleSubmit() {
|
||||||
|
try {
|
||||||
|
let values = await validate();
|
||||||
|
values.deviceMaintainList = records.value;
|
||||||
|
setDrawerProps({ confirmLoading: true });
|
||||||
|
await saveSendOrg(values);
|
||||||
|
//关闭弹窗
|
||||||
|
closeDrawer();
|
||||||
|
//刷新列表
|
||||||
|
emit('success');
|
||||||
|
} finally {
|
||||||
|
setDrawerProps({ confirmLoading: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
|
@ -0,0 +1,113 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<!--引用表格-->
|
||||||
|
<BasicTable @register="registerTable" :rowSelection="rowSelection" @selection-change="handleSelectionChange" size="small">
|
||||||
|
<!--插槽:table标题-->
|
||||||
|
<template #tableTitle>
|
||||||
|
<a-button v-if="selectedRowKeys.length > 0" preIcon="ant-design:flag-outlined" @click="handleSendOrg" >选择发往机构</a-button>
|
||||||
|
</template>
|
||||||
|
<!--操作栏-->
|
||||||
|
<template #action="{ record }">
|
||||||
|
<TableAction :actions="getTableAction(record)"/>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<SendOrgDrawer @register="registerDrawer" @success="handleSuccess" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" name="iot-weihu" setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { BasicTable, TableAction } from '/@/components/Table';
|
||||||
|
import { useListPage } from '/@/hooks/system/useListPage';
|
||||||
|
import { list } from './weihu.api';
|
||||||
|
import { columns, searchFormSchema } from './weihu.data';
|
||||||
|
import { useDrawer } from "@/components/Drawer";
|
||||||
|
import SendOrgDrawer from './components/SendOrgDrawer.vue';
|
||||||
|
|
||||||
|
const [registerDrawer, { openDrawer }] = useDrawer();
|
||||||
|
const queryParam = reactive<any>({});
|
||||||
|
const selectedRows = ref<any[]>([]);
|
||||||
|
|
||||||
|
//注册table数据
|
||||||
|
const { prefixCls,tableContext } = useListPage({
|
||||||
|
tableProps:{
|
||||||
|
title: '设备维修',
|
||||||
|
api: list,
|
||||||
|
columns,
|
||||||
|
canResize:false,
|
||||||
|
showIndexColumn: true,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
actionColumn: {
|
||||||
|
width: 120,
|
||||||
|
fixed:'right'
|
||||||
|
},
|
||||||
|
beforeFetch: (params) => {
|
||||||
|
return Object.assign(params, queryParam);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
|
||||||
|
|
||||||
|
function handleSelectionChange(selectedRowSet) {
|
||||||
|
selectedRows.value = selectedRowSet.rows;
|
||||||
|
console.log('当前选中数据:', selectedRows.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSendOrg(){
|
||||||
|
openDrawer(true, {
|
||||||
|
records : selectedRows.value,
|
||||||
|
isUpdate: true,
|
||||||
|
showFooter: true,
|
||||||
|
tenantSaas: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成功回调
|
||||||
|
*/
|
||||||
|
function handleSuccess() {
|
||||||
|
(selectedRowKeys.value = []) && reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleDetail(record){
|
||||||
|
let records = [];
|
||||||
|
records.push(record);
|
||||||
|
openDrawer(true, {
|
||||||
|
records : records,
|
||||||
|
isUpdate: true,
|
||||||
|
showFooter: false,
|
||||||
|
tenantSaas: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作栏
|
||||||
|
*/
|
||||||
|
function getTableAction(record){
|
||||||
|
const actions = [];
|
||||||
|
if(record.reserveDepartId){
|
||||||
|
actions.push({
|
||||||
|
label: '详情',
|
||||||
|
onClick: () => {
|
||||||
|
handleDetail(record);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
:deep(.selected-row) {
|
||||||
|
background-color: #e6f7ff !important;
|
||||||
|
|
||||||
|
&:hover td {
|
||||||
|
background-color: #e6f7ff !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
|
||||||
|
enum Api {
|
||||||
|
list = '/iot/weihu/deviceMaintain/list',
|
||||||
|
saveSendOrg = '/iot/weihu/deviceMaintain/saveSendOrg',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接口
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
export const list = (params) => defHttp.get({ url: Api.list, params });
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
export const saveSendOrg = (params) => {
|
||||||
|
return defHttp.post({ url: Api.saveSendOrg, params });
|
||||||
|
};
|
|
@ -0,0 +1,196 @@
|
||||||
|
import {BasicColumn} from '/@/components/Table';
|
||||||
|
import {FormSchema} from '/@/components/Table';
|
||||||
|
|
||||||
|
//列表数据
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '设备类型',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'type'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '设备编码',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'deviceId'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'SN',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'sn'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '维修状态',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'maintainStatus',
|
||||||
|
customRender:({record})=>{
|
||||||
|
if(record.maintainStatus==0){
|
||||||
|
return "正常";
|
||||||
|
}
|
||||||
|
if(record.maintainStatus==1){
|
||||||
|
return "报修";
|
||||||
|
}
|
||||||
|
if(record.maintainStatus==2){
|
||||||
|
return "报废";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '绑定区域',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'nuId',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '绑定机构',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'orgCode',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '绑定机构名',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'departName',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '发往机构名',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'reserveDepartName'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '更新时间',
|
||||||
|
align: "center",
|
||||||
|
dataIndex: 'updateDate'
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
label: '设备类型',
|
||||||
|
field: 'type',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择类型',
|
||||||
|
options: [
|
||||||
|
{ label: '摄像头', value: '摄像头' },
|
||||||
|
{ label: '电表', value: '电表' },
|
||||||
|
{ label: '水表', value: '水表' },
|
||||||
|
{ label: '温湿度计', value: '温湿度计' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'SN',
|
||||||
|
field: 'sn',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '维修状态',
|
||||||
|
field: 'maintainStatus',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择类型',
|
||||||
|
options: [
|
||||||
|
{ label: '正常', value: '0' },
|
||||||
|
{ label: '报修', value: '1' },
|
||||||
|
{ label: '报废', value: '2' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '在线状态',
|
||||||
|
field: 'online',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择状态',
|
||||||
|
options: [
|
||||||
|
{ label: '在线', value: 'true' },
|
||||||
|
{ label: '离线', value: 'false' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '信号强度',
|
||||||
|
field: 'csq',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择强度',
|
||||||
|
options: [
|
||||||
|
{ label: '高', value: '1' },
|
||||||
|
{ label: '中', value: '2' },
|
||||||
|
{ label: '低', value: '3' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '机构',
|
||||||
|
field: 'departId',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择机构',
|
||||||
|
dictCode: 'sys_depart,depart_name,id,org_category = 1 order by depart_name asc',
|
||||||
|
},
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '区域',
|
||||||
|
field: 'nuId',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择区域',
|
||||||
|
dictCode: 'nu_base_info,nu_name,id,del_flag = 0 order by nu_name asc',
|
||||||
|
},
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '发往机构',
|
||||||
|
field: 'reserveDepartId',
|
||||||
|
component: 'JDictSelectTag',
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请选择区域',
|
||||||
|
dictCode: 'nu_base_info,nu_name,id,del_flag = 0 order by nu_name asc',
|
||||||
|
},
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'id',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '选择机构',
|
||||||
|
field: 'reserveDepartId',
|
||||||
|
component: 'JSelectDept',
|
||||||
|
componentProps: {
|
||||||
|
//是否开启异步加载
|
||||||
|
sync: false,
|
||||||
|
//是否显示复选框
|
||||||
|
checkable: true,
|
||||||
|
//是否显示选择按钮
|
||||||
|
showButton: false,
|
||||||
|
//父子节点选中状态不再关联
|
||||||
|
checkStrictly: false,
|
||||||
|
//选择框标题
|
||||||
|
modalTitle: '请选择机构',
|
||||||
|
},
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '备注',
|
||||||
|
field: 'remark',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
componentProps: {
|
||||||
|
showCount: true,
|
||||||
|
maxlength: 1000,
|
||||||
|
autosize:{
|
||||||
|
minRows: 5
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
Loading…
Reference in New Issue