新增标准节租金等功能
This commit is contained in:
@@ -6,9 +6,7 @@ import type { Project, ProjectParam } from '@/api/tower/project/model';
|
||||
* 项目数据
|
||||
*/
|
||||
export async function towerProjectData() {
|
||||
const res = await request.get(
|
||||
'/tower/tower-project/data'
|
||||
);
|
||||
const res = await request.get('/tower/tower-project/data');
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@ export interface Project {
|
||||
export interface ProjectParam extends PageParam {
|
||||
projectId?: number;
|
||||
projectName?: string;
|
||||
projectStatus?: any;
|
||||
status?: number;
|
||||
keywords?: string;
|
||||
}
|
||||
|
||||
107
src/api/tower/rent/index.ts
Normal file
107
src/api/tower/rent/index.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
import request from '@/utils/request';
|
||||
import type { ApiResult, PageResult } from '@/api';
|
||||
import type { TowerRent, TowerRentParam } from './model';
|
||||
// const merchantCode = String(localStorage.getItem('merchantCode'));
|
||||
|
||||
/**
|
||||
* 分页查询标准节租金
|
||||
*/
|
||||
export async function pageTowerRent(params: TowerRentParam) {
|
||||
const res = await request.get<ApiResult<PageResult<TowerRent>>>(
|
||||
'/tower/tower-rent/page',
|
||||
{
|
||||
params
|
||||
}
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询标准节租金列表
|
||||
*/
|
||||
export async function listTowerRent(params?: TowerRentParam) {
|
||||
const res = await request.get<ApiResult<TowerRent[]>>('/tower/tower-rent', {
|
||||
params
|
||||
});
|
||||
if (res.data.code === 0 && res.data.data) {
|
||||
return res.data.data;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加标准节租金
|
||||
*/
|
||||
export async function addTowerRent(data: TowerRent) {
|
||||
const res = await request.post<ApiResult<unknown>>(
|
||||
'/tower/tower-rent',
|
||||
data
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改标准节租金
|
||||
*/
|
||||
export async function updateTowerRent(data: TowerRent) {
|
||||
const res = await request.put<ApiResult<unknown>>('/tower/tower-rent', data);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除标准节租金
|
||||
*/
|
||||
export async function removeTowerRent(id?: number) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
'/tower/tower-rent/' + id
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除标准节租金
|
||||
*/
|
||||
export async function removeBatchTowerRent(data: (number | undefined)[]) {
|
||||
const res = await request.delete<ApiResult<unknown>>(
|
||||
'/tower/tower-rent/batch',
|
||||
{
|
||||
data
|
||||
}
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查IP是否存在
|
||||
*/
|
||||
export async function checkExistence(
|
||||
field: string,
|
||||
value: string,
|
||||
id?: number
|
||||
) {
|
||||
const res = await request.get<ApiResult<unknown>>(
|
||||
'/tower/tower-rent/existence',
|
||||
{
|
||||
params: { field, value, id }
|
||||
}
|
||||
);
|
||||
if (res.data.code === 0) {
|
||||
return res.data.message;
|
||||
}
|
||||
return Promise.reject(new Error(res.data.message));
|
||||
}
|
||||
57
src/api/tower/rent/model/index.ts
Normal file
57
src/api/tower/rent/model/index.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import type { PageParam } from '@/api';
|
||||
|
||||
/**
|
||||
* 标准节租金
|
||||
*/
|
||||
export interface TowerRent {
|
||||
rentId?: number;
|
||||
name?: string;
|
||||
rent?: number;
|
||||
month?: number;
|
||||
num?: number;
|
||||
totalRent?: string;
|
||||
companyId?: number;
|
||||
companyName?: string;
|
||||
// 型号分类图片
|
||||
image?: string;
|
||||
// 使用年限
|
||||
yearLife?: number;
|
||||
// 上级分类
|
||||
parentId?: number;
|
||||
// 是否隐藏
|
||||
hide?: number;
|
||||
// 封面图
|
||||
avatar?: string;
|
||||
// 用户ID
|
||||
userId?: string;
|
||||
// 所属门店ID
|
||||
shopId?: string;
|
||||
// 排序
|
||||
sortNumber?: number;
|
||||
// 备注
|
||||
comments?: string;
|
||||
// 状态
|
||||
status?: number;
|
||||
// 创建时间
|
||||
createTime?: string;
|
||||
// 更新时间
|
||||
updateTime?: string;
|
||||
//
|
||||
key?: number;
|
||||
//
|
||||
merchantCode?: string;
|
||||
value?: number;
|
||||
index?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索条件
|
||||
*/
|
||||
export interface TowerRentParam extends PageParam {
|
||||
rentId?: number;
|
||||
title?: string;
|
||||
categoryId?: string;
|
||||
yearLife?: number;
|
||||
// 商户编号
|
||||
merchantCode?: string;
|
||||
}
|
||||
@@ -113,7 +113,7 @@
|
||||
import type { EleProTable } from 'ele-admin-pro/es';
|
||||
import CategoryEdit from './components/category-edit.vue';
|
||||
import type { Category, CategoryParam } from '@/api/goods/category/model';
|
||||
import { listCategory } from '@/api/goods/category';
|
||||
import { listCategory, removeCategory } from "@/api/goods/category";
|
||||
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
|
||||
@@ -221,11 +221,12 @@
|
||||
|
||||
/* 删除单个 */
|
||||
const remove = (row: Category) => {
|
||||
console.log(row);
|
||||
if (row.children?.length) {
|
||||
message.error('请先删除子节点');
|
||||
return;
|
||||
}
|
||||
const hide = messageLoading('请求中..', 0);
|
||||
const hide = messageLoading('请求中..' + row.categoryId, 0);
|
||||
removeCategory(row.categoryId)
|
||||
.then((msg) => {
|
||||
hide();
|
||||
|
||||
@@ -1,237 +1,245 @@
|
||||
<!-- 搜索表单 -->
|
||||
<template>
|
||||
<a-space :size="10" style="flex-wrap: wrap">
|
||||
<a-button type="primary" class="ele-btn-icon" @click="add">
|
||||
<template #icon>
|
||||
<PlusOutlined />
|
||||
</template>
|
||||
<span>添加设备</span>
|
||||
</a-button>
|
||||
<a-button
|
||||
danger
|
||||
type="primary"
|
||||
class="ele-btn-icon"
|
||||
:disabled="selection.length === 0"
|
||||
@click="removeBatch"
|
||||
>
|
||||
<template #icon>
|
||||
<DeleteOutlined />
|
||||
</template>
|
||||
<span>批量删除</span>
|
||||
</a-button>
|
||||
<a-button class="ele-btn-icon" @click="openImport">
|
||||
<template #icon>
|
||||
<UploadOutlined />
|
||||
</template>
|
||||
<span>导入设备</span>
|
||||
</a-button>
|
||||
<a-button class="ele-btn-icon" @click="handleExport">
|
||||
<template #icon>
|
||||
<DownloadOutlined />
|
||||
</template>
|
||||
<span>导出设备</span>
|
||||
</a-button>
|
||||
<a-radio-group v-model:value="status" @change="handleStatus" :disabled="selection.length === 0">
|
||||
<a-radio-button :value="0">闲置</a-radio-button>
|
||||
<a-radio-button :value="1">报废</a-radio-button>
|
||||
<a-radio-button :value="2">注销</a-radio-button>
|
||||
<a-radio-button :value="3">转卖</a-radio-button>
|
||||
<a-radio-button :value="4">在用</a-radio-button>
|
||||
<a-radio-button :value="5">停工</a-radio-button>
|
||||
</a-radio-group>
|
||||
<a-select placeholder="设备状态筛选" style="width: 250px" @change="search"
|
||||
@clear="search"
|
||||
v-model:value="statusFilter" allow-clear>
|
||||
<a-select-option :value="null">全部</a-select-option>
|
||||
<a-select-option :value="0">闲置</a-select-option>
|
||||
<a-select-option :value="1">报废</a-select-option>
|
||||
<a-select-option :value="2">注销</a-select-option>
|
||||
<a-select-option :value="3">转卖</a-select-option>
|
||||
<a-select-option :value="4">在用</a-select-option>
|
||||
<a-select-option :value="5">停工</a-select-option>
|
||||
</a-select>
|
||||
<a-input-search
|
||||
allow-clear
|
||||
placeholder="请输入关键词"
|
||||
v-model:value="searchText"
|
||||
@pressEnter="search"
|
||||
@search="search"
|
||||
/>
|
||||
<a-input-search
|
||||
:min="0"
|
||||
type="number"
|
||||
allow-clear
|
||||
placeholder="剩余可用年份筛选"
|
||||
v-model:value="yearFilter"
|
||||
@pressEnter="search"
|
||||
@search="search"
|
||||
/>
|
||||
<!-- 导入弹窗 -->
|
||||
<Import v-model:visible="showImport" @done="search" />
|
||||
</a-space>
|
||||
<a-space :size="10" style="flex-wrap: wrap">
|
||||
<a-button type="primary" class="ele-btn-icon" @click="add">
|
||||
<template #icon>
|
||||
<PlusOutlined />
|
||||
</template>
|
||||
<span>添加设备</span>
|
||||
</a-button>
|
||||
<a-button
|
||||
danger
|
||||
type="primary"
|
||||
class="ele-btn-icon"
|
||||
:disabled="selection.length === 0"
|
||||
@click="removeBatch"
|
||||
>
|
||||
<template #icon>
|
||||
<DeleteOutlined />
|
||||
</template>
|
||||
<span>批量删除</span>
|
||||
</a-button>
|
||||
<a-button class="ele-btn-icon" @click="openImport">
|
||||
<template #icon>
|
||||
<UploadOutlined />
|
||||
</template>
|
||||
<span>导入设备</span>
|
||||
</a-button>
|
||||
<a-button class="ele-btn-icon" @click="handleExport">
|
||||
<template #icon>
|
||||
<DownloadOutlined />
|
||||
</template>
|
||||
<span>导出设备</span>
|
||||
</a-button>
|
||||
<!-- <a-radio-group-->
|
||||
<!-- v-model:value="status"-->
|
||||
<!-- @change="handleStatus"-->
|
||||
<!-- :disabled="selection.length === 0"-->
|
||||
<!-- >-->
|
||||
<!-- <a-radio-button :value="0">闲置</a-radio-button>-->
|
||||
<!-- <a-radio-button :value="1">报废</a-radio-button>-->
|
||||
<!-- <a-radio-button :value="2">注销</a-radio-button>-->
|
||||
<!-- <a-radio-button :value="3">转卖</a-radio-button>-->
|
||||
<!-- <a-radio-button :value="4">在用</a-radio-button>-->
|
||||
<!-- <a-radio-button :value="5">停工</a-radio-button>-->
|
||||
<!-- </a-radio-group>-->
|
||||
<!-- <a-select-->
|
||||
<!-- placeholder="设备状态筛选"-->
|
||||
<!-- style="width: 250px"-->
|
||||
<!-- @change="search"-->
|
||||
<!-- @clear="search"-->
|
||||
<!-- v-model:value="statusFilter"-->
|
||||
<!-- allow-clear-->
|
||||
<!-- >-->
|
||||
<!-- <a-select-option :value="null">全部</a-select-option>-->
|
||||
<!-- <a-select-option :value="0">闲置</a-select-option>-->
|
||||
<!-- <a-select-option :value="1">报废</a-select-option>-->
|
||||
<!-- <a-select-option :value="2">注销</a-select-option>-->
|
||||
<!-- <a-select-option :value="3">转卖</a-select-option>-->
|
||||
<!-- <a-select-option :value="4">在用</a-select-option>-->
|
||||
<!-- <a-select-option :value="5">停工</a-select-option>-->
|
||||
<!-- </a-select>-->
|
||||
<a-input-search
|
||||
allow-clear
|
||||
placeholder="请输入关键词"
|
||||
v-model:value="searchText"
|
||||
@pressEnter="search"
|
||||
@search="search"
|
||||
/>
|
||||
<a-input-search
|
||||
:min="0"
|
||||
type="number"
|
||||
allow-clear
|
||||
placeholder="剩余可用年份筛选"
|
||||
v-model:value="yearFilter"
|
||||
@pressEnter="search"
|
||||
@search="search"
|
||||
/>
|
||||
<!-- 导入弹窗 -->
|
||||
<Import v-model:visible="showImport" @done="search" />
|
||||
</a-space>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {
|
||||
import {
|
||||
PlusOutlined,
|
||||
UploadOutlined,
|
||||
DownloadOutlined,
|
||||
DeleteOutlined
|
||||
} from "@ant-design/icons-vue";
|
||||
import useSearch from "@/utils/use-search";
|
||||
import { ref, watch } from "vue";
|
||||
import { utils, writeFile } from "xlsx";
|
||||
import { TowerEquipment } from "@/api/tower/equipment/model";
|
||||
import { TowerEquipmentParam } from "@/api/tower/equipment/model";
|
||||
import Import from "./import.vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import { ContractSettleMethod } from "@/api/tower/contract/model";
|
||||
} from '@ant-design/icons-vue';
|
||||
import useSearch from '@/utils/use-search';
|
||||
import { ref, watch } from 'vue';
|
||||
import { utils, writeFile } from 'xlsx';
|
||||
import { TowerEquipment } from '@/api/tower/equipment/model';
|
||||
import { TowerEquipmentParam } from '@/api/tower/equipment/model';
|
||||
import Import from './import.vue';
|
||||
import { message } from 'ant-design-vue';
|
||||
import { ContractSettleMethod } from '@/api/tower/contract/model';
|
||||
|
||||
const props = withDefaults(
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
// 选中的角色
|
||||
selection?: [];
|
||||
// 选中的角色
|
||||
selection?: [];
|
||||
}>(),
|
||||
{}
|
||||
);
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: "search", where?: TowerEquipmentParam): void;
|
||||
(e: "add"): void;
|
||||
(e: "remove"): void;
|
||||
(e: "update", status?: number): void;
|
||||
(e: "import"): void;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'search', where?: TowerEquipmentParam): void;
|
||||
(e: 'add'): void;
|
||||
(e: 'remove'): void;
|
||||
(e: 'update', status?: number): void;
|
||||
(e: 'import'): void;
|
||||
}>();
|
||||
|
||||
// 表单数据
|
||||
const { where, resetFields } = useSearch<TowerEquipmentParam>({
|
||||
// 表单数据
|
||||
const { where, resetFields } = useSearch<TowerEquipmentParam>({
|
||||
equipmentId: undefined,
|
||||
name: undefined,
|
||||
keywords: "",
|
||||
keywords: '',
|
||||
status: undefined,
|
||||
yearFilter: undefined,
|
||||
});
|
||||
// 下来选项
|
||||
const type = ref("keywords");
|
||||
// 搜索内容
|
||||
const searchText = ref("");
|
||||
const yearFilter = ref<number>();
|
||||
const statusFilter = ref(undefined);
|
||||
// 状态
|
||||
const status = ref<number>();
|
||||
// 是否显示导入弹窗
|
||||
const showImport = ref(false);
|
||||
yearFilter: undefined
|
||||
});
|
||||
// 下来选项
|
||||
const type = ref('keywords');
|
||||
// 搜索内容
|
||||
const searchText = ref('');
|
||||
const yearFilter = ref<number>();
|
||||
const statusFilter = ref(undefined);
|
||||
// 状态
|
||||
const status = ref<number>();
|
||||
// 是否显示导入弹窗
|
||||
const showImport = ref(false);
|
||||
|
||||
/* 搜索 */
|
||||
const search = () => {
|
||||
/* 搜索 */
|
||||
const search = () => {
|
||||
resetFields();
|
||||
if (type.value == "keywords") {
|
||||
where.keywords = searchText.value;
|
||||
if (type.value == 'keywords') {
|
||||
where.keywords = searchText.value;
|
||||
}
|
||||
if (statusFilter.value !== undefined) {
|
||||
where.status = statusFilter.value;
|
||||
where.status = statusFilter.value;
|
||||
}
|
||||
if (yearFilter.value !== undefined) {
|
||||
where.yearFilter = yearFilter.value;
|
||||
where.yearFilter = yearFilter.value;
|
||||
}
|
||||
emit("search", {
|
||||
...where
|
||||
emit('search', {
|
||||
...where
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
// 导出
|
||||
const handleExport = () => {
|
||||
// 导出
|
||||
const handleExport = () => {
|
||||
if (!props.selection?.length) {
|
||||
message.error("请至少选择一条数据");
|
||||
return;
|
||||
message.error('请至少选择一条数据');
|
||||
return;
|
||||
}
|
||||
const array: (string | number)[][] = [
|
||||
[
|
||||
"设备状态",
|
||||
"设备名称",
|
||||
"出厂编号",
|
||||
"设备型号",
|
||||
"制造厂商",
|
||||
"采购日期",
|
||||
"备案编号",
|
||||
"出厂日期",
|
||||
"产权单位",
|
||||
"设备来源",
|
||||
"所属仓库",
|
||||
"所属人员",
|
||||
"自编号",
|
||||
"额定载重",
|
||||
"最大起升高度(m)",
|
||||
"臂长",
|
||||
"当前位置",
|
||||
"楼号"
|
||||
]
|
||||
[
|
||||
'设备状态',
|
||||
'设备名称',
|
||||
'出厂编号',
|
||||
'设备型号',
|
||||
'制造厂商',
|
||||
'采购日期',
|
||||
'备案编号',
|
||||
'出厂日期',
|
||||
'产权单位',
|
||||
'设备来源',
|
||||
'所属仓库',
|
||||
'所属人员',
|
||||
'自编号',
|
||||
'额定载重',
|
||||
'最大起升高度(m)',
|
||||
'臂长',
|
||||
'当前位置',
|
||||
'楼号'
|
||||
]
|
||||
];
|
||||
|
||||
props.selection?.forEach((d: TowerEquipment) => {
|
||||
array.push([
|
||||
`${["闲置", "报废", "注销", "转卖", "在用", "停工"][Number(d.status)]}`,
|
||||
`${d.name}`,
|
||||
`${d.factoryNo}`,
|
||||
`${d.model}`,
|
||||
`${d.manufactor}`,
|
||||
`${d.buyDate ? d.buyDate : ""}`,
|
||||
`${d.filingNo}`,
|
||||
`${d.factoryDate ? d.factoryDate : ""}`,
|
||||
`${d.company}`,
|
||||
`${d.source}`,
|
||||
`${d.warehouse}`,
|
||||
`${d.users}`,
|
||||
`${d.equipmentNo}`,
|
||||
`${d.ratedLoad}`,
|
||||
`${d.maxLiftingHeight}`,
|
||||
`${d.armLength}`,
|
||||
`${d.currentLocation}`,
|
||||
`${d.machineNo}`
|
||||
]);
|
||||
array.push([
|
||||
`${['闲置', '报废', '注销', '转卖', '在用', '停工'][Number(d.status)]}`,
|
||||
`${d.name}`,
|
||||
`${d.factoryNo}`,
|
||||
`${d.model}`,
|
||||
`${d.manufactor}`,
|
||||
`${d.buyDate ? d.buyDate : ''}`,
|
||||
`${d.filingNo}`,
|
||||
`${d.factoryDate ? d.factoryDate : ''}`,
|
||||
`${d.company}`,
|
||||
`${d.source}`,
|
||||
`${d.warehouse}`,
|
||||
`${d.users}`,
|
||||
`${d.equipmentNo}`,
|
||||
`${d.ratedLoad}`,
|
||||
`${d.maxLiftingHeight}`,
|
||||
`${d.armLength}`,
|
||||
`${d.currentLocation}`,
|
||||
`${d.machineNo}`
|
||||
]);
|
||||
});
|
||||
const sheetName = "设备导出列表";
|
||||
const sheetName = '设备导出列表';
|
||||
const workbook = {
|
||||
SheetNames: [sheetName],
|
||||
Sheets: {}
|
||||
SheetNames: [sheetName],
|
||||
Sheets: {}
|
||||
};
|
||||
const sheet = utils.aoa_to_sheet(array);
|
||||
workbook.Sheets[sheetName] = sheet;
|
||||
// 设置列宽
|
||||
sheet["!cols"] = [
|
||||
{ wch: 10 },
|
||||
{ wch: 10 },
|
||||
{ wch: 10 },
|
||||
{ wch: 10 },
|
||||
{ wch: 20 },
|
||||
{ wch: 40 },
|
||||
{ wch: 10 }
|
||||
sheet['!cols'] = [
|
||||
{ wch: 10 },
|
||||
{ wch: 10 },
|
||||
{ wch: 10 },
|
||||
{ wch: 10 },
|
||||
{ wch: 20 },
|
||||
{ wch: 40 },
|
||||
{ wch: 10 }
|
||||
];
|
||||
writeFile(workbook, "导出设备管理表.xlsx");
|
||||
};
|
||||
writeFile(workbook, '导出设备管理表.xlsx');
|
||||
};
|
||||
|
||||
// 发布设备
|
||||
const add = () => {
|
||||
emit("add");
|
||||
};
|
||||
// 发布设备
|
||||
const add = () => {
|
||||
emit('add');
|
||||
};
|
||||
|
||||
// 导入
|
||||
const openImport = () => {
|
||||
// 导入
|
||||
const openImport = () => {
|
||||
showImport.value = true;
|
||||
};
|
||||
};
|
||||
|
||||
const handleStatus = () => {
|
||||
emit("update", status.value);
|
||||
};
|
||||
const handleStatus = () => {
|
||||
emit('update', status.value);
|
||||
};
|
||||
|
||||
// 批量删除
|
||||
const removeBatch = () => {
|
||||
emit("remove");
|
||||
};
|
||||
// 批量删除
|
||||
const removeBatch = () => {
|
||||
emit('remove');
|
||||
};
|
||||
|
||||
watch(
|
||||
watch(
|
||||
() => props.selection,
|
||||
() => {
|
||||
}
|
||||
);
|
||||
() => {}
|
||||
);
|
||||
</script>
|
||||
|
||||
@@ -1,17 +1,64 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-card title="设备数据">
|
||||
<a-row :gutter="10">
|
||||
<a-col :span="4">
|
||||
<span>设备总数:{{ equipmentData.totalNum }}台</span>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<span>闲置设备总数:{{ equipmentData.idleNum }}台</span>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<span>已达报废年限设备总数:{{ equipmentData.scrapNum }}台</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div class="count">
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab(undefined)"
|
||||
:class="active == undefined ? 'active' : ''"
|
||||
>
|
||||
{{ `全部设备(${equipmentData.totalNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(0)" :class="active == 0 ? 'active' : ''">
|
||||
{{ `闲置(${equipmentData.idleNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(1)" :class="active == 1 ? 'active' : ''">
|
||||
{{ `已达报废年限(${equipmentData.scrapNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(2)" :class="active == 2 ? 'active' : ''">
|
||||
{{ `已注销(${equipmentData.totalNum2})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(3)" :class="active == 3 ? 'active' : ''">
|
||||
{{ `已转卖(${equipmentData.totalNum3})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(4)" :class="active == 4 ? 'active' : ''">
|
||||
{{ `在用(${equipmentData.totalNum4})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(5)" :class="active == 5 ? 'active' : ''">
|
||||
{{ `已停工(${equipmentData.totalNum5})` }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <a-row :gutter="10">-->
|
||||
<!-- <a-col :span="4">-->
|
||||
<!-- <span>设备总数:{{ equipmentData.totalNum }}台</span>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- <a-col :span="4">-->
|
||||
<!-- <span>闲置设备总数:{{ equipmentData.idleNum }}台</span>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- <a-col :span="4">-->
|
||||
<!-- <span>已达报废年限设备总数:{{ equipmentData.scrapNum }}台</span>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- </a-row>-->
|
||||
</a-card>
|
||||
<div class="page">
|
||||
<div class="ele-body">
|
||||
@@ -40,17 +87,27 @@
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'useYear'">
|
||||
<span v-if="record.factoryDate">{{ dayjs().diff(dayjs(record.factoryDate), "year") }}年</span>
|
||||
<span v-if="record.factoryDate"
|
||||
>{{ dayjs().diff(dayjs(record.factoryDate), 'year') }}年</span
|
||||
>
|
||||
</template>
|
||||
<template v-if="column.key === 'canUseYear'">
|
||||
<span v-if="record.scrapDate">{{ dayjs(record.scrapDate).diff(dayjs(), "year") + 1 }}年</span>
|
||||
<span v-if="record.scrapDate"
|
||||
>{{
|
||||
dayjs(record.scrapDate).diff(dayjs(), 'year') + 1
|
||||
}}年</span
|
||||
>
|
||||
</template>
|
||||
<template v-if="column.key === 'createTime'">
|
||||
{{ record.createTime }}
|
||||
</template>
|
||||
<template v-if="column.key === 'inProject'">
|
||||
<div>
|
||||
<p v-for="(item, index) in record.projectList" :key="index" style="line-height: 1.5">
|
||||
<p
|
||||
v-for="(item, index) in record.projectList"
|
||||
:key="index"
|
||||
style="line-height: 1.5"
|
||||
>
|
||||
{{ item.projectName }}
|
||||
</p>
|
||||
</div>
|
||||
@@ -75,274 +132,313 @@
|
||||
</a-card>
|
||||
</div>
|
||||
<!-- 编辑弹窗 -->
|
||||
<EquipmentEdit v-model:visible="showEdit" :data="current" @done="reload" />
|
||||
<EquipmentEdit
|
||||
v-model:visible="showEdit"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
/>
|
||||
<ProjectList v-model:visible="showProject" :data="current" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { createVNode, reactive, ref } from "vue";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
|
||||
import type { EleProTable } from "ele-admin-pro";
|
||||
import type {
|
||||
DatasourceFunction,
|
||||
ColumnItem
|
||||
} from "ele-admin-pro/es/ele-pro-table/types";
|
||||
import { toDateString } from "ele-admin-pro";
|
||||
import Search from "./components/search.vue";
|
||||
import EquipmentEdit from "./components/equipment-edit.vue";
|
||||
import {
|
||||
pageTowerEquipment,
|
||||
removeBatchTowerEquipment, towerEquipmentData, towerEquipmentQr,
|
||||
updateBatchTowerEquipment
|
||||
} from "@/api/tower/equipment";
|
||||
import {
|
||||
TowerEquipment,
|
||||
TowerEquipmentParam
|
||||
} from "@/api/tower/equipment/model";
|
||||
import { ApiResult, PageResult } from "@/api";
|
||||
import dayjs from "dayjs";
|
||||
import ProjectList from "@/views/tower/equipment/components/project-list.vue";
|
||||
import { createVNode, reactive, ref } from 'vue';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import type { EleProTable } from 'ele-admin-pro';
|
||||
import type {
|
||||
DatasourceFunction,
|
||||
ColumnItem
|
||||
} from 'ele-admin-pro/es/ele-pro-table/types';
|
||||
import Search from './components/search.vue';
|
||||
import EquipmentEdit from './components/equipment-edit.vue';
|
||||
import {
|
||||
pageTowerEquipment,
|
||||
removeBatchTowerEquipment,
|
||||
towerEquipmentData,
|
||||
towerEquipmentQr,
|
||||
updateBatchTowerEquipment
|
||||
} from '@/api/tower/equipment';
|
||||
import {
|
||||
TowerEquipment,
|
||||
TowerEquipmentParam
|
||||
} from '@/api/tower/equipment/model';
|
||||
import dayjs from 'dayjs';
|
||||
import ProjectList from '@/views/tower/equipment/components/project-list.vue';
|
||||
|
||||
defineProps<{
|
||||
activeKey?: boolean;
|
||||
data?: any;
|
||||
}>();
|
||||
defineProps<{
|
||||
activeKey?: boolean;
|
||||
data?: any;
|
||||
}>();
|
||||
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
|
||||
// 表格列配置
|
||||
const columns = ref<ColumnItem[]>([
|
||||
{
|
||||
key: "index",
|
||||
width: 48,
|
||||
align: "center",
|
||||
fixed: "left",
|
||||
hideInSetting: true,
|
||||
customRender: ({ index }) => index + (tableRef.value?.tableIndex ?? 0)
|
||||
},
|
||||
{
|
||||
title: "设备状态",
|
||||
dataIndex: "status",
|
||||
key: "status",
|
||||
customRender: ({ text }) => ["闲置", "报废", "注销", "转卖", "在用", "停工"][text]
|
||||
},
|
||||
{
|
||||
title: "设备名称",
|
||||
dataIndex: "name",
|
||||
key: "name"
|
||||
},
|
||||
{
|
||||
title: "出厂编号",
|
||||
dataIndex: "factoryNo"
|
||||
},
|
||||
{
|
||||
title: "设备型号",
|
||||
dataIndex: "model",
|
||||
key: "model"
|
||||
},
|
||||
{
|
||||
title: "备案编号",
|
||||
dataIndex: "filingNo"
|
||||
},
|
||||
{
|
||||
title: "制造厂商",
|
||||
dataIndex: "manufactor",
|
||||
key: "manufactor"
|
||||
},
|
||||
{
|
||||
title: "所在项目",
|
||||
key: "inProject"
|
||||
},
|
||||
{
|
||||
title: "产权单位(个人)",
|
||||
dataIndex: "company",
|
||||
key: "company"
|
||||
},
|
||||
{
|
||||
title: "购买日期",
|
||||
dataIndex: "buyDate"
|
||||
},
|
||||
{
|
||||
title: "已使用年份",
|
||||
key: "useYear"
|
||||
},
|
||||
{
|
||||
title: "剩余可使用年份",
|
||||
key: "canUseYear"
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
key: "action",
|
||||
width: 200,
|
||||
align: "center",
|
||||
hideInSetting: true
|
||||
}
|
||||
]);
|
||||
|
||||
let equipmentData = reactive({
|
||||
totalNum: 0,
|
||||
idleNum: 0,
|
||||
scrapNum: 0
|
||||
});
|
||||
const getData = async () => {
|
||||
const res = await towerEquipmentData();
|
||||
for (let key in equipmentData) equipmentData[key] = res[key];
|
||||
};
|
||||
|
||||
// 表格选中数据
|
||||
const selection = ref<TowerEquipment[]>([]);
|
||||
// 当前编辑数据
|
||||
const current = ref<TowerEquipment | null>(null);
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({
|
||||
page,
|
||||
limit,
|
||||
where,
|
||||
orders,
|
||||
filters
|
||||
}) => {
|
||||
// 搜索条件
|
||||
if (filters.payMethod) {
|
||||
where.payMethod = filters.payMethod;
|
||||
}
|
||||
if (filters.deliveryType) {
|
||||
where.deliveryType = filters.deliveryType;
|
||||
}
|
||||
if (filters.payStatus) {
|
||||
where.payStatus = filters.payStatus;
|
||||
}
|
||||
if (filters.orderSource) {
|
||||
where.orderSource = filters.orderSource;
|
||||
}
|
||||
where.tenantId = localStorage.getItem("tenantId");
|
||||
where.payStatus = 20;
|
||||
return pageTowerEquipment({
|
||||
...where,
|
||||
...orders,
|
||||
page,
|
||||
limit
|
||||
});
|
||||
};
|
||||
|
||||
/* 搜索 */
|
||||
const reload = (where?: TowerEquipmentParam) => {
|
||||
selection.value = [];
|
||||
tableRef?.value?.reload({ where: where });
|
||||
getData();
|
||||
};
|
||||
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit = (row?: TowerEquipment) => {
|
||||
current.value = row ?? null;
|
||||
showEdit.value = true;
|
||||
};
|
||||
|
||||
const showQr = async (row?: TowerEquipment) => {
|
||||
const res = towerEquipmentQr({ equipmentId: row?.equipmentId })
|
||||
console.log(res)
|
||||
};
|
||||
|
||||
const showProject = ref<Boolean>(false)
|
||||
const showProjectList = async (row?: TowerEquipment) => {
|
||||
current.value = row ?? null;
|
||||
showProject.value = true;
|
||||
};
|
||||
|
||||
/* 批量修改 */
|
||||
const handleStatus = (status) => {
|
||||
if (!selection.value.length) {
|
||||
message.error("请至少选择一条数据");
|
||||
return;
|
||||
}
|
||||
const data = selection.value.map((d) => {
|
||||
return {
|
||||
equipmentId: d.equipmentId,
|
||||
status
|
||||
};
|
||||
});
|
||||
updateBatchTowerEquipment(data).then((msg) => {
|
||||
message.success(msg);
|
||||
reload();
|
||||
});
|
||||
};
|
||||
|
||||
/* 批量删除 */
|
||||
const removeBatch = () => {
|
||||
if (!selection.value.length) {
|
||||
message.error("请至少选择一条数据");
|
||||
return;
|
||||
}
|
||||
Modal.confirm({
|
||||
title: "提示",
|
||||
content: "确定要删除选中的记录吗?",
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
maskClosable: true,
|
||||
onOk: () => {
|
||||
const hide = message.loading("请求中..", 0);
|
||||
removeBatchTowerEquipment(selection.value.map((d) => d.equipmentId))
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
reload();
|
||||
})
|
||||
.catch((e) => {
|
||||
hide();
|
||||
message.error(e.message);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/* 自定义行属性 */
|
||||
const customRow = (record: TowerEquipment) => {
|
||||
return {
|
||||
// 行点击事件
|
||||
onClick: () => {
|
||||
// console.log(record);
|
||||
// 表格列配置
|
||||
const columns = ref<ColumnItem[]>([
|
||||
{
|
||||
key: 'index',
|
||||
width: 48,
|
||||
align: 'center',
|
||||
fixed: 'left',
|
||||
hideInSetting: true,
|
||||
customRender: ({ index }) => index + (tableRef.value?.tableIndex ?? 0)
|
||||
},
|
||||
// 行双击事件
|
||||
onDblclick: () => {
|
||||
openEdit(record);
|
||||
{
|
||||
title: '设备状态',
|
||||
dataIndex: 'status',
|
||||
key: 'status',
|
||||
customRender: ({ text }) =>
|
||||
['闲置', '报废', '注销', '转卖', '在用', '停工'][text]
|
||||
},
|
||||
{
|
||||
title: '设备名称',
|
||||
dataIndex: 'name',
|
||||
key: 'name'
|
||||
},
|
||||
{
|
||||
title: '出厂编号',
|
||||
dataIndex: 'factoryNo'
|
||||
},
|
||||
{
|
||||
title: '设备型号',
|
||||
dataIndex: 'model',
|
||||
key: 'model'
|
||||
},
|
||||
{
|
||||
title: '备案编号',
|
||||
dataIndex: 'filingNo'
|
||||
},
|
||||
{
|
||||
title: '制造厂商',
|
||||
dataIndex: 'manufactor',
|
||||
key: 'manufactor'
|
||||
},
|
||||
{
|
||||
title: '所在项目',
|
||||
key: 'inProject'
|
||||
},
|
||||
{
|
||||
title: '产权单位(个人)',
|
||||
dataIndex: 'company',
|
||||
key: 'company'
|
||||
},
|
||||
{
|
||||
title: '购买日期',
|
||||
dataIndex: 'buyDate'
|
||||
},
|
||||
{
|
||||
title: '已使用年份',
|
||||
key: 'useYear'
|
||||
},
|
||||
{
|
||||
title: '剩余可使用年份',
|
||||
key: 'canUseYear'
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
key: 'action',
|
||||
width: 200,
|
||||
align: 'center',
|
||||
hideInSetting: true
|
||||
}
|
||||
};
|
||||
};
|
||||
]);
|
||||
|
||||
reload();
|
||||
let equipmentData = reactive({
|
||||
totalNum: 0,
|
||||
idleNum: 0,
|
||||
scrapNum: 0,
|
||||
totalNum2: 0,
|
||||
totalNum3: 0,
|
||||
totalNum4: 0,
|
||||
totalNum5: 0
|
||||
});
|
||||
const getData = async () => {
|
||||
const res = await towerEquipmentData();
|
||||
for (let key in equipmentData) equipmentData[key] = res[key];
|
||||
};
|
||||
|
||||
// 表格选中数据
|
||||
const selection = ref<TowerEquipment[]>([]);
|
||||
// 当前编辑数据
|
||||
const current = ref<TowerEquipment | null>(null);
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
const active = ref<any>(undefined);
|
||||
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({
|
||||
page,
|
||||
limit,
|
||||
where,
|
||||
orders,
|
||||
filters
|
||||
}) => {
|
||||
// 搜索条件
|
||||
if (filters.payMethod) {
|
||||
where.payMethod = filters.payMethod;
|
||||
}
|
||||
if (filters.deliveryType) {
|
||||
where.deliveryType = filters.deliveryType;
|
||||
}
|
||||
if (filters.payStatus) {
|
||||
where.payStatus = filters.payStatus;
|
||||
}
|
||||
if (filters.orderSource) {
|
||||
where.orderSource = filters.orderSource;
|
||||
}
|
||||
where.tenantId = localStorage.getItem('tenantId');
|
||||
where.payStatus = 20;
|
||||
return pageTowerEquipment({
|
||||
...where,
|
||||
...orders,
|
||||
page,
|
||||
limit
|
||||
});
|
||||
};
|
||||
|
||||
const onTab = (type: any) => {
|
||||
active.value = type;
|
||||
reload({ status: active.value });
|
||||
};
|
||||
|
||||
/* 搜索 */
|
||||
const reload = (where?: TowerEquipmentParam) => {
|
||||
selection.value = [];
|
||||
tableRef?.value?.reload({ where: where });
|
||||
getData();
|
||||
};
|
||||
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit = (row?: TowerEquipment) => {
|
||||
current.value = row ?? null;
|
||||
showEdit.value = true;
|
||||
};
|
||||
|
||||
const showQr = async (row?: TowerEquipment) => {
|
||||
const res = towerEquipmentQr({ equipmentId: row?.equipmentId });
|
||||
console.log(res);
|
||||
};
|
||||
|
||||
const showProject = ref<Boolean>(false);
|
||||
const showProjectList = async (row?: TowerEquipment) => {
|
||||
current.value = row ?? null;
|
||||
showProject.value = true;
|
||||
};
|
||||
|
||||
/* 批量修改 */
|
||||
const handleStatus = (status) => {
|
||||
if (!selection.value.length) {
|
||||
message.error('请至少选择一条数据');
|
||||
return;
|
||||
}
|
||||
const data = selection.value.map((d) => {
|
||||
return {
|
||||
equipmentId: d.equipmentId,
|
||||
status
|
||||
};
|
||||
});
|
||||
updateBatchTowerEquipment(data).then((msg) => {
|
||||
message.success(msg);
|
||||
reload();
|
||||
});
|
||||
};
|
||||
|
||||
/* 批量删除 */
|
||||
const removeBatch = () => {
|
||||
if (!selection.value.length) {
|
||||
message.error('请至少选择一条数据');
|
||||
return;
|
||||
}
|
||||
Modal.confirm({
|
||||
title: '提示',
|
||||
content: '确定要删除选中的记录吗?',
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
maskClosable: true,
|
||||
onOk: () => {
|
||||
const hide = message.loading('请求中..', 0);
|
||||
removeBatchTowerEquipment(selection.value.map((d) => d.equipmentId))
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
reload();
|
||||
})
|
||||
.catch((e) => {
|
||||
hide();
|
||||
message.error(e.message);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/* 自定义行属性 */
|
||||
const customRow = (record: TowerEquipment) => {
|
||||
return {
|
||||
// 行点击事件
|
||||
onClick: () => {
|
||||
// console.log(record);
|
||||
},
|
||||
// 行双击事件
|
||||
onDblclick: () => {
|
||||
openEdit(record);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
reload();
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: "TowerEquipmentIndex"
|
||||
};
|
||||
export default {
|
||||
name: 'TowerEquipmentIndex'
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
p {
|
||||
line-height: 0.8;
|
||||
}
|
||||
p {
|
||||
line-height: 0.8;
|
||||
}
|
||||
|
||||
.sys-org-table :deep(.ant-table-body) {
|
||||
overflow: auto !important;
|
||||
overflow: overlay !important;
|
||||
}
|
||||
.sys-org-table :deep(.ant-table-body) {
|
||||
overflow: auto !important;
|
||||
overflow: overlay !important;
|
||||
}
|
||||
|
||||
.sys-org-table :deep(.ant-table-pagination.ant-pagination) {
|
||||
padding: 0 4px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.sys-org-table :deep(.ant-table-pagination.ant-pagination) {
|
||||
padding: 0 4px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.price-edit {
|
||||
padding-right: 5px;
|
||||
}
|
||||
.price-edit {
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.comments {
|
||||
max-width: 200px;
|
||||
}
|
||||
.comments {
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
.count {
|
||||
display: flex;
|
||||
.btn {
|
||||
margin: 0 12px;
|
||||
padding: 6px 18px;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
.divider {
|
||||
width: 4px;
|
||||
height: 15px;
|
||||
border-radius: 8px;
|
||||
margin-right: 8px;
|
||||
background-color: #16a90b;
|
||||
}
|
||||
.active {
|
||||
color: #16a90b;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,35 +1,42 @@
|
||||
<!-- 搜索表单 -->
|
||||
<template>
|
||||
<a-space :size="10" style="flex-wrap: wrap">
|
||||
<a-button type="primary" class="ele-btn-icon">
|
||||
<a-button class="ele-btn-icon">
|
||||
<template #icon>
|
||||
<QrcodeOutlined />
|
||||
</template>
|
||||
<span>批量生产二维码</span>
|
||||
</a-button>
|
||||
<a-alert type="success" style="margin-left: 105px">
|
||||
<template #icon><smile-outlined /></template>
|
||||
<template #message>
|
||||
<a-space>
|
||||
<span>设备总数:4</span>
|
||||
<span>在用数:1</span>
|
||||
<span>闲置数:1</span>
|
||||
<span>报废数:1</span>
|
||||
<span>转卖数:1</span>
|
||||
<span>注销数:0</span>
|
||||
<span>自有设备:3</span>
|
||||
<span>租赁设备:1</span>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-alert>
|
||||
<!-- <a-space>-->
|
||||
<!-- <a-button @click="onTab(undefined)"-->
|
||||
<!-- >设备总数:{{ equipmentData.totalNum }}</a-button-->
|
||||
<!-- >-->
|
||||
<!-- <a-button @click="onTab(0)">闲置:{{ equipmentData.idleNum }}</a-button>-->
|
||||
<!-- <a-button @click="onTab(1)"-->
|
||||
<!-- >已达报废年限:{{ equipmentData.scrapNum }}</a-button-->
|
||||
<!-- >-->
|
||||
<!-- <a-button @click="onTab(2)"-->
|
||||
<!-- >已注销:{{ equipmentData.totalNum2 }}</a-button-->
|
||||
<!-- >-->
|
||||
<!-- <a-button @click="onTab(3)"-->
|
||||
<!-- >已转卖:{{ equipmentData.totalNum3 }}</a-button-->
|
||||
<!-- >-->
|
||||
<!-- <a-button @click="onTab(4)">在用:{{ equipmentData.totalNum4 }}</a-button>-->
|
||||
<!-- <a-button @click="onTab(5)"-->
|
||||
<!-- >已停工:{{ equipmentData.totalNum5 }}</a-button-->
|
||||
<!-- >-->
|
||||
<!-- <span>自有设备:3</span>-->
|
||||
<!-- <span>租赁设备:1</span>-->
|
||||
<!-- </a-space>-->
|
||||
</a-space>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { QrcodeOutlined } from '@ant-design/icons-vue';
|
||||
import useSearch from '@/utils/use-search';
|
||||
import { ref, watch } from 'vue';
|
||||
import { reactive, ref, watch } from 'vue';
|
||||
import { TowerEquipmentParam } from '@/api/tower/equipment/model';
|
||||
import { towerEquipmentData } from '@/api/tower/equipment';
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
@@ -62,6 +69,31 @@
|
||||
// 状态
|
||||
const status = ref<number>();
|
||||
|
||||
const active = ref<any>(undefined);
|
||||
|
||||
let equipmentData = reactive({
|
||||
totalNum: 0,
|
||||
idleNum: 0,
|
||||
scrapNum: 0,
|
||||
totalNum2: 0,
|
||||
totalNum3: 0,
|
||||
totalNum4: 0,
|
||||
totalNum5: 0
|
||||
});
|
||||
|
||||
const getData = async () => {
|
||||
const res = await towerEquipmentData();
|
||||
for (let key in equipmentData) equipmentData[key] = res[key];
|
||||
};
|
||||
|
||||
const onTab = (type: any) => {
|
||||
active.value = type;
|
||||
where.status = active.value;
|
||||
emit('search', {
|
||||
...where
|
||||
});
|
||||
};
|
||||
|
||||
/* 搜索 */
|
||||
const search = () => {
|
||||
resetFields();
|
||||
@@ -88,8 +120,36 @@
|
||||
emit('remove');
|
||||
};
|
||||
|
||||
getData();
|
||||
|
||||
watch(
|
||||
() => props.selection,
|
||||
() => {}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.count {
|
||||
display: flex;
|
||||
.btn {
|
||||
margin: 0 12px;
|
||||
padding: 6px 18px;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
.divider {
|
||||
width: 4px;
|
||||
height: 15px;
|
||||
border-radius: 8px;
|
||||
margin-right: 8px;
|
||||
background-color: #16a90b;
|
||||
}
|
||||
.active {
|
||||
color: #16a90b;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,5 +1,54 @@
|
||||
<template>
|
||||
<div class="page">
|
||||
<a-card title="设备数据">
|
||||
<div class="count">
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab(undefined)"
|
||||
:class="active == undefined ? 'active' : ''"
|
||||
>
|
||||
{{ `全部设备(${equipmentData.totalNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(0)" :class="active == 0 ? 'active' : ''">
|
||||
{{ `闲置(${equipmentData.idleNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(1)" :class="active == 1 ? 'active' : ''">
|
||||
{{ `已达报废年限(${equipmentData.scrapNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(2)" :class="active == 2 ? 'active' : ''">
|
||||
{{ `已注销(${equipmentData.totalNum2})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(3)" :class="active == 3 ? 'active' : ''">
|
||||
{{ `已转卖(${equipmentData.totalNum3})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(4)" :class="active == 4 ? 'active' : ''">
|
||||
{{ `在用(${equipmentData.totalNum4})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div @click="onTab(5)" :class="active == 5 ? 'active' : ''">
|
||||
{{ `已停工(${equipmentData.totalNum5})` }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a-card>
|
||||
<div class="ele-body">
|
||||
<a-card :bordered="false">
|
||||
<!-- 表格 -->
|
||||
@@ -52,7 +101,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { createVNode, ref } from 'vue';
|
||||
import { createVNode, reactive, ref } from 'vue';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import type { EleProTable } from 'ele-admin-pro';
|
||||
@@ -66,9 +115,11 @@
|
||||
import {
|
||||
pageTowerEquipment,
|
||||
removeBatchTowerEquipment,
|
||||
statusBatchTowerEquipment, updateBatchTowerEquipment,
|
||||
towerEquipmentData,
|
||||
// statusBatchTowerEquipment,
|
||||
updateBatchTowerEquipment,
|
||||
updateTowerEquipment
|
||||
} from "@/api/tower/equipment";
|
||||
} from '@/api/tower/equipment';
|
||||
import {
|
||||
TowerEquipment,
|
||||
TowerEquipmentParam
|
||||
@@ -96,7 +147,8 @@
|
||||
title: '设备状态',
|
||||
dataIndex: 'status',
|
||||
key: 'status',
|
||||
customRender: ({ text }) => ['闲置', '报废', '注销', '转卖', '在用', '场地'][text]
|
||||
customRender: ({ text }) =>
|
||||
['闲置', '报废', '注销', '转卖', '在用', '场地'][text]
|
||||
},
|
||||
{
|
||||
title: '设备名称',
|
||||
@@ -147,6 +199,28 @@
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
|
||||
const active = ref<any>(undefined);
|
||||
|
||||
let equipmentData = reactive({
|
||||
totalNum: 0,
|
||||
idleNum: 0,
|
||||
scrapNum: 0,
|
||||
totalNum2: 0,
|
||||
totalNum3: 0,
|
||||
totalNum4: 0,
|
||||
totalNum5: 0
|
||||
});
|
||||
|
||||
const getData = async () => {
|
||||
const res = await towerEquipmentData();
|
||||
for (let key in equipmentData) equipmentData[key] = res[key];
|
||||
};
|
||||
|
||||
const onTab = (type: any) => {
|
||||
active.value = type;
|
||||
reload({ status: active.value });
|
||||
};
|
||||
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({
|
||||
page,
|
||||
@@ -249,7 +323,7 @@
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
getData();
|
||||
reload();
|
||||
</script>
|
||||
|
||||
@@ -278,4 +352,27 @@
|
||||
.comments {
|
||||
max-width: 200px;
|
||||
}
|
||||
.count {
|
||||
display: flex;
|
||||
.btn {
|
||||
margin: 0 12px;
|
||||
padding: 6px 18px;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
.divider {
|
||||
width: 4px;
|
||||
height: 15px;
|
||||
border-radius: 8px;
|
||||
margin-right: 8px;
|
||||
background-color: #16a90b;
|
||||
}
|
||||
.active {
|
||||
color: #16a90b;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,120 +1,185 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-card title="项目数据">
|
||||
<a-row :gutter="10">
|
||||
<a-col :span="4">
|
||||
<span>项目总数:{{ projectData.totalNum }}</span>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<span>已开工总数:{{ projectData.startedNum }}</span>
|
||||
</a-col>
|
||||
<a-col :span="4">
|
||||
<span>未开工:{{ projectData.notStartNum }}</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
<div class="page">
|
||||
<div class="ele-body">
|
||||
<a-card :bordered="false">
|
||||
<!-- 表格 -->
|
||||
<ele-pro-table
|
||||
ref="tableRef"
|
||||
row-key="projectId"
|
||||
:columns="columns"
|
||||
:datasource="datasource"
|
||||
v-model:selection="selection"
|
||||
:customRow="customRow"
|
||||
:height="tableHeight"
|
||||
:full-height="fixedHeight ? 'calc(100vh - 100px)' : void 0"
|
||||
tool-class="ele-toolbar-form"
|
||||
:scroll="{ x: 1200 }"
|
||||
class="sys-org-table"
|
||||
:striped="true"
|
||||
>
|
||||
<template #toolbar>
|
||||
<search
|
||||
@search="reload"
|
||||
:selection="selection"
|
||||
@add="openEdit"
|
||||
@remove="removeBatch"
|
||||
/>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'nickname'">
|
||||
{{ record.nickname }}
|
||||
</template>
|
||||
<template v-if="column.key === 'orders'">
|
||||
{{ record.orders.length > 0 ? record.orders[0].comments : "" }}
|
||||
</template>
|
||||
<template v-if="column.key === 'createTime'">
|
||||
{{ record.createTime }}
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<a-space>
|
||||
<a @click="openEdit(record)">修改</a>
|
||||
<a-divider type="vertical" />
|
||||
<a @click="openEdit(record)">库存查看</a>
|
||||
</a-space>
|
||||
</template>
|
||||
</template>
|
||||
</ele-pro-table>
|
||||
</a-card>
|
||||
</div>
|
||||
<!-- 编辑弹窗 -->
|
||||
<ProjectEdit v-model:visible="showEdit" :data="current" @done="reload" />
|
||||
<!-- 订单详情 -->
|
||||
<order-info v-model:visible="showInfo" :data="current" @done="reload" />
|
||||
<div>
|
||||
<a-card title="项目数据">
|
||||
<div class="count">
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab(undefined)"
|
||||
:class="active == undefined ? 'active' : ''"
|
||||
>
|
||||
{{ `全部项目(${projectData.totalNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab('建设中')"
|
||||
:class="active == '建设中' ? 'active' : ''"
|
||||
>
|
||||
{{ `建设中(${projectData.startedNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab('未开工')"
|
||||
:class="active == '未开工' ? 'active' : ''"
|
||||
>
|
||||
{{ `未开工(${projectData.notStartNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab('已完成')"
|
||||
:class="active == '已完成' ? 'active' : ''"
|
||||
>
|
||||
{{ `已完成(${projectData.okNum})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab('停工中')"
|
||||
:class="active == '停工中' ? 'active' : ''"
|
||||
>
|
||||
{{ `停工中(${projectData.notStartNum2})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab('停工已拆机')"
|
||||
:class="active == '停工已拆机' ? 'active' : ''"
|
||||
>
|
||||
{{ `停工已拆机(${projectData.notStartNum3})` }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn">
|
||||
<a-divider type="vertical" class="divider" />
|
||||
<div
|
||||
@click="onTab('完工未拆机')"
|
||||
:class="active == '完工未拆机' ? 'active' : ''"
|
||||
>
|
||||
{{ `完工未拆机(${projectData.notStartNum4})` }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <a-row :gutter="10">-->
|
||||
<!-- <a-col :span="4">-->
|
||||
<!-- <span></span>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- <a-col :span="4">-->
|
||||
<!-- <span>已开工总数:{{ projectData.startedNum }}</span>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- <a-col :span="4">-->
|
||||
<!-- <span>未开工:{{ projectData.notStartNum }}</span>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- </a-row>-->
|
||||
</a-card>
|
||||
<div class="page">
|
||||
<div class="ele-body">
|
||||
<a-card :bordered="false">
|
||||
<!-- 表格 -->
|
||||
<ele-pro-table
|
||||
ref="tableRef"
|
||||
row-key="projectId"
|
||||
:columns="columns"
|
||||
:datasource="datasource"
|
||||
v-model:selection="selection"
|
||||
:customRow="customRow"
|
||||
:height="tableHeight"
|
||||
:full-height="fixedHeight ? 'calc(100vh - 100px)' : void 0"
|
||||
tool-class="ele-toolbar-form"
|
||||
:scroll="{ x: 1200 }"
|
||||
class="sys-org-table"
|
||||
:striped="true"
|
||||
>
|
||||
<template #toolbar>
|
||||
<search
|
||||
@search="reload"
|
||||
:selection="selection"
|
||||
@add="openEdit"
|
||||
@remove="removeBatch"
|
||||
/>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'nickname'">
|
||||
{{ record.nickname }}
|
||||
</template>
|
||||
<template v-if="column.key === 'orders'">
|
||||
{{ record.orders.length > 0 ? record.orders[0].comments : '' }}
|
||||
</template>
|
||||
<template v-if="column.key === 'createTime'">
|
||||
{{ record.createTime }}
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<a-space>
|
||||
<a @click="openEdit(record)">修改</a>
|
||||
<a-divider type="vertical" />
|
||||
<a @click="openEdit(record)">库存查看</a>
|
||||
</a-space>
|
||||
</template>
|
||||
</template>
|
||||
</ele-pro-table>
|
||||
</a-card>
|
||||
</div>
|
||||
<!-- 编辑弹窗 -->
|
||||
<ProjectEdit v-model:visible="showEdit" :data="current" @done="reload" />
|
||||
<!-- 订单详情 -->
|
||||
<order-info v-model:visible="showInfo" :data="current" @done="reload" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { createVNode, computed, ref, reactive } from "vue";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
|
||||
import type { EleProTable } from "ele-admin-pro";
|
||||
import type {
|
||||
import { createVNode, computed, ref, reactive } from 'vue';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import type { EleProTable } from 'ele-admin-pro';
|
||||
import type {
|
||||
DatasourceFunction,
|
||||
ColumnItem
|
||||
} from "ele-admin-pro/es/ele-pro-table/types";
|
||||
import Search from "./components/search.vue";
|
||||
import ProjectEdit from "./components/project-edit.vue";
|
||||
import OrderInfo from "./components/order-info.vue";
|
||||
import {
|
||||
} from 'ele-admin-pro/es/ele-pro-table/types';
|
||||
import Search from './components/search.vue';
|
||||
import ProjectEdit from './components/project-edit.vue';
|
||||
import OrderInfo from './components/order-info.vue';
|
||||
import {
|
||||
pageProject,
|
||||
removeBatchProject,
|
||||
removeProject, towerProjectData
|
||||
} from "@/api/tower/project";
|
||||
import { Project, ProjectParam } from "@/api/tower/project/model";
|
||||
import { towerEquipmentData } from "@/api/tower/equipment";
|
||||
removeProject,
|
||||
towerProjectData
|
||||
} from '@/api/tower/project';
|
||||
import { Project, ProjectParam } from '@/api/tower/project/model';
|
||||
|
||||
defineProps<{
|
||||
defineProps<{
|
||||
activeKey?: boolean;
|
||||
data?: any;
|
||||
}>();
|
||||
}>();
|
||||
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
|
||||
// 表格列配置
|
||||
const columns = ref<ColumnItem[]>([
|
||||
// 表格列配置
|
||||
const columns = ref<ColumnItem[]>([
|
||||
{
|
||||
key: "index",
|
||||
width: 48,
|
||||
align: "center",
|
||||
fixed: "left",
|
||||
hideInSetting: true,
|
||||
customRender: ({ index }) => index + (tableRef.value?.tableIndex ?? 0)
|
||||
key: 'index',
|
||||
width: 48,
|
||||
align: 'center',
|
||||
fixed: 'left',
|
||||
hideInSetting: true,
|
||||
customRender: ({ index }) => index + (tableRef.value?.tableIndex ?? 0)
|
||||
},
|
||||
{
|
||||
title: "项目状态",
|
||||
dataIndex: "projectStatus",
|
||||
key: "projectStatus"
|
||||
title: '项目状态',
|
||||
dataIndex: 'projectStatus',
|
||||
key: 'projectStatus'
|
||||
},
|
||||
{
|
||||
title: "项目名称",
|
||||
dataIndex: "projectName",
|
||||
key: "projectName"
|
||||
title: '项目名称',
|
||||
dataIndex: 'projectName',
|
||||
key: 'projectName'
|
||||
},
|
||||
// {
|
||||
// title: '具体标地',
|
||||
@@ -122,21 +187,21 @@ const columns = ref<ColumnItem[]>([
|
||||
// key: 'orders'
|
||||
// },
|
||||
{
|
||||
title: "承租单位",
|
||||
dataIndex: "customerName",
|
||||
key: "customerName"
|
||||
title: '承租单位',
|
||||
dataIndex: 'customerName',
|
||||
key: 'customerName'
|
||||
},
|
||||
{
|
||||
title: "项目所属主管部门",
|
||||
dataIndex: "competentDepartment"
|
||||
title: '项目所属主管部门',
|
||||
dataIndex: 'competentDepartment'
|
||||
},
|
||||
{
|
||||
title: "关联设备数",
|
||||
dataIndex: "equipmentNum"
|
||||
title: '关联设备数',
|
||||
dataIndex: 'equipmentNum'
|
||||
},
|
||||
{
|
||||
title: "项目管理员",
|
||||
dataIndex: "director"
|
||||
title: '项目管理员',
|
||||
dataIndex: 'director'
|
||||
},
|
||||
// {
|
||||
// title: '检查次数',
|
||||
@@ -149,180 +214,212 @@ const columns = ref<ColumnItem[]>([
|
||||
// key: 'companyId'
|
||||
// },
|
||||
{
|
||||
title: "创建时间",
|
||||
dataIndex: "createTime"
|
||||
title: '创建时间',
|
||||
dataIndex: 'createTime'
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
key: "action",
|
||||
width: 150,
|
||||
align: "center",
|
||||
hideInSetting: true
|
||||
title: '操作',
|
||||
key: 'action',
|
||||
width: 150,
|
||||
align: 'center',
|
||||
hideInSetting: true
|
||||
}
|
||||
]);
|
||||
]);
|
||||
|
||||
// 表格选中数据
|
||||
const selection = ref<Project[]>([]);
|
||||
// 当前编辑数据
|
||||
const current = ref<Project | null>(null);
|
||||
// 是否显示资产详情
|
||||
const showInfo = ref(false);
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
// 表格固定高度
|
||||
const fixedHeight = ref(true);
|
||||
// 表格高度
|
||||
const tableHeight = computed(() => {
|
||||
return fixedHeight.value ? "calc(100vh - 308px)" : void 0;
|
||||
});
|
||||
// 表格选中数据
|
||||
const selection = ref<Project[]>([]);
|
||||
// 当前编辑数据
|
||||
const current = ref<Project | null>(null);
|
||||
// 是否显示资产详情
|
||||
const showInfo = ref(false);
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
// 表格固定高度
|
||||
const fixedHeight = ref(true);
|
||||
const active = ref<any>(undefined);
|
||||
// 表格高度
|
||||
const tableHeight = computed(() => {
|
||||
return fixedHeight.value ? 'calc(100vh - 308px)' : void 0;
|
||||
});
|
||||
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({
|
||||
page,
|
||||
limit,
|
||||
where,
|
||||
orders,
|
||||
filters
|
||||
}) => {
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({
|
||||
page,
|
||||
limit,
|
||||
where,
|
||||
orders,
|
||||
filters
|
||||
}) => {
|
||||
// 搜索条件
|
||||
if (filters.payMethod) {
|
||||
where.payMethod = filters.payMethod;
|
||||
where.payMethod = filters.payMethod;
|
||||
}
|
||||
if (filters.deliveryType) {
|
||||
where.deliveryType = filters.deliveryType;
|
||||
where.deliveryType = filters.deliveryType;
|
||||
}
|
||||
if (filters.payStatus) {
|
||||
where.payStatus = filters.payStatus;
|
||||
where.payStatus = filters.payStatus;
|
||||
}
|
||||
if (filters.orderSource) {
|
||||
where.orderSource = filters.orderSource;
|
||||
where.orderSource = filters.orderSource;
|
||||
}
|
||||
where.tenantId = localStorage.getItem("tenantId");
|
||||
where.tenantId = localStorage.getItem('tenantId');
|
||||
where.payStatus = 20;
|
||||
return pageProject({
|
||||
...where,
|
||||
...orders,
|
||||
page,
|
||||
limit
|
||||
...where,
|
||||
...orders,
|
||||
page,
|
||||
limit
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
/* 搜索 */
|
||||
const reload = (where?: ProjectParam) => {
|
||||
/* 搜索 */
|
||||
const reload = (where?: ProjectParam) => {
|
||||
selection.value = [];
|
||||
tableRef?.value?.reload({ where: where });
|
||||
getData();
|
||||
};
|
||||
};
|
||||
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit = (row?: Project) => {
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit = (row?: Project) => {
|
||||
current.value = row ?? null;
|
||||
showEdit.value = true;
|
||||
};
|
||||
};
|
||||
|
||||
/* 打开用户详情弹窗 */
|
||||
const openInfo = (row?: Project) => {
|
||||
/* 打开用户详情弹窗 */
|
||||
const openInfo = (row?: Project) => {
|
||||
current.value = row ?? null;
|
||||
showInfo.value = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
let projectData = reactive({
|
||||
let projectData = reactive({
|
||||
totalNum: 0,
|
||||
startedNum: 0,
|
||||
notStartNum: 0
|
||||
});
|
||||
const getData = async () => {
|
||||
notStartNum: 0,
|
||||
okNum: 0,
|
||||
notStartNum2: 0,
|
||||
notStartNum3: 0,
|
||||
notStartNum4: 0
|
||||
});
|
||||
const getData = async () => {
|
||||
const res = await towerProjectData();
|
||||
for (let key in projectData) projectData[key] = res[key];
|
||||
};
|
||||
};
|
||||
|
||||
/* 删除单个 */
|
||||
const remove = (row: Project) => {
|
||||
const hide = message.loading("请求中..", 0);
|
||||
const onTab = (type: any) => {
|
||||
active.value = type;
|
||||
reload({ projectStatus: active.value });
|
||||
};
|
||||
|
||||
/* 删除单个 */
|
||||
const remove = (row: Project) => {
|
||||
const hide = message.loading('请求中..', 0);
|
||||
removeProject(row.projectId)
|
||||
.then((msg) => {
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
reload();
|
||||
})
|
||||
.catch((e) => {
|
||||
hide();
|
||||
message.error(e.message);
|
||||
});
|
||||
};
|
||||
|
||||
/* 批量删除 */
|
||||
const removeBatch = () => {
|
||||
console.log(selection.value);
|
||||
if (!selection.value.length) {
|
||||
message.error('请至少选择一条数据');
|
||||
return;
|
||||
}
|
||||
Modal.confirm({
|
||||
title: '提示',
|
||||
content: '确定要删除选中的记录吗?',
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
maskClosable: true,
|
||||
onOk: () => {
|
||||
const hide = message.loading('请求中..', 0);
|
||||
removeBatchProject(selection.value.map((d) => d.projectId))
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
reload();
|
||||
})
|
||||
.catch((e) => {
|
||||
})
|
||||
.catch((e) => {
|
||||
hide();
|
||||
message.error(e.message);
|
||||
});
|
||||
};
|
||||
|
||||
/* 批量删除 */
|
||||
const removeBatch = () => {
|
||||
console.log(selection.value);
|
||||
if (!selection.value.length) {
|
||||
message.error("请至少选择一条数据");
|
||||
return;
|
||||
}
|
||||
Modal.confirm({
|
||||
title: "提示",
|
||||
content: "确定要删除选中的记录吗?",
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
maskClosable: true,
|
||||
onOk: () => {
|
||||
const hide = message.loading("请求中..", 0);
|
||||
removeBatchProject(selection.value.map((d) => d.projectId))
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
reload();
|
||||
})
|
||||
.catch((e) => {
|
||||
hide();
|
||||
message.error(e.message);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
/* 自定义行属性 */
|
||||
const customRow = (record: Project) => {
|
||||
/* 自定义行属性 */
|
||||
const customRow = (record: Project) => {
|
||||
return {
|
||||
// 行点击事件
|
||||
onClick: () => {
|
||||
// console.log(record);
|
||||
},
|
||||
// 行双击事件
|
||||
onDblclick: () => {
|
||||
openEdit(record);
|
||||
}
|
||||
// 行点击事件
|
||||
onClick: () => {
|
||||
// console.log(record);
|
||||
},
|
||||
// 行双击事件
|
||||
onDblclick: () => {
|
||||
openEdit(record);
|
||||
}
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
reload();
|
||||
reload();
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: "ProjectIndex"
|
||||
};
|
||||
export default {
|
||||
name: 'ProjectIndex'
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
p {
|
||||
p {
|
||||
line-height: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
.sys-org-table :deep(.ant-table-body) {
|
||||
.sys-org-table :deep(.ant-table-body) {
|
||||
overflow: auto !important;
|
||||
overflow: overlay !important;
|
||||
}
|
||||
}
|
||||
|
||||
.sys-org-table :deep(.ant-table-pagination.ant-pagination) {
|
||||
.sys-org-table :deep(.ant-table-pagination.ant-pagination) {
|
||||
padding: 0 4px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.price-edit {
|
||||
.price-edit {
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.comments {
|
||||
.comments {
|
||||
max-width: 200px;
|
||||
}
|
||||
}
|
||||
.count {
|
||||
display: flex;
|
||||
.btn {
|
||||
margin: 0 12px;
|
||||
padding: 6px 18px;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
.divider {
|
||||
width: 4px;
|
||||
height: 15px;
|
||||
border-radius: 8px;
|
||||
margin-right: 8px;
|
||||
background-color: #16a90b;
|
||||
}
|
||||
.active {
|
||||
color: #16a90b;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
249
src/views/tower/rent/components/category-edit.vue
Normal file
249
src/views/tower/rent/components/category-edit.vue
Normal file
@@ -0,0 +1,249 @@
|
||||
<!-- 编辑弹窗 -->
|
||||
<template>
|
||||
<ele-modal
|
||||
:width="740"
|
||||
:visible="visible"
|
||||
:confirm-loading="loading"
|
||||
:title="isUpdate ? '修改分类' : '新建分类'"
|
||||
:body-style="{ paddingBottom: '8px' }"
|
||||
@update:visible="updateVisible"
|
||||
@ok="save"
|
||||
>
|
||||
<a-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
:label-col="styleResponsive ? { md: 6, sm: 4, xs: 24 } : { flex: '90px' }"
|
||||
:wrapper-col="
|
||||
styleResponsive ? { md: 18, sm: 20, xs: 24 } : { flex: '1' }
|
||||
"
|
||||
>
|
||||
<a-row :gutter="16">
|
||||
<a-col
|
||||
v-bind="styleResponsive ? { md: 12, sm: 24, xs: 24 } : { span: 12 }"
|
||||
>
|
||||
<a-form-item label="上级分类" name="parentId">
|
||||
<a-tree-select
|
||||
allow-clear
|
||||
:tree-data="categoryList"
|
||||
tree-default-expand-all
|
||||
placeholder="请选择上级分类"
|
||||
:value="form.parentId || undefined"
|
||||
:dropdown-style="{ maxHeight: '360px', overflow: 'auto' }"
|
||||
@update:value="(value?: number) => (form.parentId = value)"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="设备型号" name="title">
|
||||
<a-input
|
||||
allow-clear
|
||||
placeholder="请输入分类名称"
|
||||
v-model:value="form.title"
|
||||
@pressEnter="save"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="使用年限" name="yearLife">
|
||||
<a-input
|
||||
allow-clear
|
||||
placeholder="请输入分类名称"
|
||||
v-model:value="form.yearLife"
|
||||
@pressEnter="save"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</ele-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, watch } from 'vue';
|
||||
import { message } from 'ant-design-vue/es';
|
||||
import type { FormInstance, Rule } from 'ant-design-vue/es/form';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useThemeStore } from '@/store/modules/theme';
|
||||
import useFormData from '@/utils/use-form-data';
|
||||
import type { TowerModel } from '@/api/tower/model/model';
|
||||
import { addTowerModel, updateTowerModel } from '@/api/tower/model';
|
||||
import { FILE_SERVER } from "@/config/setting";
|
||||
import { ItemType } from "ele-admin-pro/es/ele-image-upload/types";
|
||||
import { uploadFile } from "@/api/system/file";
|
||||
import { LoginRecordParam } from "@/api/system/login-record/model";
|
||||
|
||||
// 是否开启响应式布局
|
||||
const themeStore = useThemeStore();
|
||||
const { styleResponsive } = storeToRefs(themeStore);
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'done'): void;
|
||||
(e: 'update:visible', visible: boolean): void;
|
||||
}>();
|
||||
|
||||
const props = defineProps<{
|
||||
// 弹窗是否打开
|
||||
visible: boolean;
|
||||
// 修改回显的数据
|
||||
data?: TowerModel | null;
|
||||
// 上级分类id
|
||||
parentId?: number;
|
||||
// 全部分类数据
|
||||
categoryList: TowerModel[];
|
||||
}>();
|
||||
|
||||
// 表单数据
|
||||
const { form, resetFields, assignFields } = useFormData<TowerModel>({
|
||||
title: '',
|
||||
categoryId: undefined,
|
||||
parentId: undefined,
|
||||
image: '',
|
||||
status: 0,
|
||||
yearLife: undefined,
|
||||
sortNumber: 100
|
||||
});
|
||||
|
||||
//
|
||||
const formRef = ref<FormInstance | null>(null);
|
||||
// 是否是修改
|
||||
const isUpdate = ref(false);
|
||||
// 提交状态
|
||||
const loading = ref(false);
|
||||
// 已上传数据, 可赋初始值用于回显
|
||||
const images = ref([]);
|
||||
|
||||
// 表单验证规则
|
||||
const rules = reactive<Record<string, Rule[]>>({
|
||||
title: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入分类名称',
|
||||
type: 'string',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
sortNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入排序号',
|
||||
type: 'number',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
meta: [
|
||||
{
|
||||
type: 'string',
|
||||
validator: async (_rule: Rule, value: string) => {
|
||||
if (value) {
|
||||
const msg = '请输入正确的JSON格式';
|
||||
try {
|
||||
const obj = JSON.parse(value);
|
||||
if (typeof obj !== 'object' || obj === null) {
|
||||
return Promise.reject(msg);
|
||||
}
|
||||
} catch (_e) {
|
||||
return Promise.reject(msg);
|
||||
}
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// 上传文件
|
||||
const onUpload = (d: ItemType) => {
|
||||
uploadFile(<File>d.file)
|
||||
.then((result) => {
|
||||
form.image = result.path;
|
||||
message.success('上传成功');
|
||||
})
|
||||
.catch((e) => {
|
||||
message.error(e.message);
|
||||
});
|
||||
};
|
||||
|
||||
const onClose = () => {
|
||||
form.image = ''
|
||||
}
|
||||
/* 保存编辑 */
|
||||
const save = () => {
|
||||
if (!formRef.value) {
|
||||
return;
|
||||
}
|
||||
formRef.value
|
||||
.validate()
|
||||
.then(() => {
|
||||
loading.value = true;
|
||||
const categoryForm = {
|
||||
...form,
|
||||
parentId: form.parentId || 0
|
||||
};
|
||||
const saveOrUpdate = isUpdate.value ? updateTowerModel : addTowerModel;
|
||||
saveOrUpdate(categoryForm)
|
||||
.then((msg) => {
|
||||
loading.value = false;
|
||||
message.success(msg);
|
||||
updateVisible(false);
|
||||
emit('done');
|
||||
})
|
||||
.catch((e) => {
|
||||
loading.value = false;
|
||||
message.error(e.message);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
/* 更新visible */
|
||||
const updateVisible = (value: boolean) => {
|
||||
emit('update:visible', value);
|
||||
};
|
||||
|
||||
const updateHideValue = (value: boolean) => {
|
||||
form.status = value ? 0 : 1;
|
||||
};
|
||||
|
||||
watch(
|
||||
() => props.visible,
|
||||
(visible) => {
|
||||
if (visible) {
|
||||
if (props.data) {
|
||||
// 头像赋值
|
||||
images.value = [];
|
||||
if(props.data.image){
|
||||
images.value.push({ uid:1, url: props.data.image, status: '' });
|
||||
}
|
||||
assignFields({
|
||||
...props.data,
|
||||
parentId:
|
||||
props.data.parentId === 0 ? undefined : props.data.parentId
|
||||
});
|
||||
isUpdate.value = true;
|
||||
} else {
|
||||
form.parentId = props.parentId;
|
||||
isUpdate.value = false;
|
||||
}
|
||||
} else {
|
||||
resetFields();
|
||||
formRef.value?.clearValidate();
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import * as icons from '@/layout/menu-icons';
|
||||
|
||||
export default {
|
||||
components: icons,
|
||||
data() {
|
||||
return {
|
||||
iconData: [
|
||||
{
|
||||
title: '已引入的图标',
|
||||
icons: Object.keys(icons)
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
217
src/views/tower/rent/components/rent-edit.vue
Normal file
217
src/views/tower/rent/components/rent-edit.vue
Normal file
@@ -0,0 +1,217 @@
|
||||
<!-- 编辑弹窗 -->
|
||||
<template>
|
||||
<ele-modal
|
||||
:width="500"
|
||||
:visible="visible"
|
||||
:confirm-loading="loading"
|
||||
:title="isUpdate ? '修改' : '新建'"
|
||||
:body-style="{ paddingBottom: '8px' }"
|
||||
@update:visible="updateVisible"
|
||||
@ok="save"
|
||||
>
|
||||
<a-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
:label-col="styleResponsive ? { md: 6, sm: 6, xs: 24 } : { flex: '90px' }"
|
||||
:wrapper-col="
|
||||
styleResponsive ? { md: 18, sm: 20, xs: 24 } : { flex: '1' }
|
||||
"
|
||||
>
|
||||
<a-row :gutter="16">
|
||||
<a-col
|
||||
v-bind="styleResponsive ? { md: 22, sm: 24, xs: 24 } : { span: 12 }"
|
||||
>
|
||||
<a-form-item label="租赁名称" name="company">
|
||||
<SelectCompany
|
||||
:placeholder="`请选择租赁单位`"
|
||||
v-model:value="form.companyName"
|
||||
@done="chooseCompany"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="月租金" name="month">
|
||||
<a-input
|
||||
allow-clear
|
||||
placeholder="请输入月租金"
|
||||
v-model:value="form.month"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="月数" name="num">
|
||||
<a-input
|
||||
allow-clear
|
||||
placeholder="请输入租金"
|
||||
v-model:value="form.num"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</ele-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, watch } from 'vue';
|
||||
import { message } from 'ant-design-vue/es';
|
||||
import type { FormInstance, Rule } from 'ant-design-vue/es/form';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useThemeStore } from '@/store/modules/theme';
|
||||
import useFormData from '@/utils/use-form-data';
|
||||
import type { TowerRent } from '@/api/tower/rent/model';
|
||||
import { addTowerRent, updateTowerRent } from '@/api/tower/rent';
|
||||
import { RuleObject } from 'ant-design-vue/es/form';
|
||||
|
||||
// 是否开启响应式布局
|
||||
const themeStore = useThemeStore();
|
||||
const { styleResponsive } = storeToRefs(themeStore);
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'done'): void;
|
||||
(e: 'update:visible', visible: boolean): void;
|
||||
}>();
|
||||
|
||||
const props = defineProps<{
|
||||
// 弹窗是否打开
|
||||
visible: boolean;
|
||||
// 修改回显的数据
|
||||
data?: TowerRent | null;
|
||||
}>();
|
||||
|
||||
const formRef = ref<FormInstance | null>(null);
|
||||
// 是否是修改
|
||||
const isUpdate = ref(false);
|
||||
// 提交状态
|
||||
const loading = ref(false);
|
||||
|
||||
// 表单数据
|
||||
const { form, resetFields, assignFields } = useFormData<TowerRent>({
|
||||
rentId: undefined,
|
||||
rent: undefined,
|
||||
name: '',
|
||||
month: undefined,
|
||||
num: undefined,
|
||||
totalRent: '',
|
||||
companyName: '',
|
||||
image: '',
|
||||
status: 0,
|
||||
yearLife: undefined,
|
||||
sortNumber: 100
|
||||
});
|
||||
|
||||
// 表单验证规则
|
||||
const rules = reactive<Record<string, Rule[]>>({
|
||||
company: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择租赁单位',
|
||||
type: 'string',
|
||||
trigger: 'blur',
|
||||
validator: async (_rule: RuleObject, value: string) => {
|
||||
console.log(value);
|
||||
if (form.companyName == '') {
|
||||
return Promise.reject('请选择租赁单位');
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入名称',
|
||||
type: 'string',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
month: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入租金',
|
||||
type: 'string',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
num: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入月数',
|
||||
type: 'string',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
sortNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入排序号',
|
||||
type: 'number',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
/* 保存编辑 */
|
||||
const save = () => {
|
||||
if (!formRef.value) {
|
||||
return;
|
||||
}
|
||||
formRef.value
|
||||
.validate()
|
||||
.then(() => {
|
||||
loading.value = true;
|
||||
const categoryForm = {
|
||||
...form
|
||||
};
|
||||
const saveOrUpdate = isUpdate.value ? updateTowerRent : addTowerRent;
|
||||
saveOrUpdate(categoryForm)
|
||||
.then((msg) => {
|
||||
loading.value = false;
|
||||
message.success(msg);
|
||||
updateVisible(false);
|
||||
emit('done');
|
||||
})
|
||||
.catch((e) => {
|
||||
loading.value = false;
|
||||
message.error(e.message);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
/* 更新visible */
|
||||
const updateVisible = (value: boolean) => {
|
||||
emit('update:visible', value);
|
||||
};
|
||||
|
||||
const chooseCompany = (row) => {
|
||||
console.log(row);
|
||||
form.companyName = row.companyName;
|
||||
form.companyId = row.companyId;
|
||||
};
|
||||
|
||||
watch(
|
||||
() => props.visible,
|
||||
(visible) => {
|
||||
if (visible) {
|
||||
if (props.data) {
|
||||
assignFields({
|
||||
...props.data
|
||||
});
|
||||
isUpdate.value = true;
|
||||
} else {
|
||||
isUpdate.value = false;
|
||||
}
|
||||
} else {
|
||||
resetFields();
|
||||
formRef.value?.clearValidate();
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.tab-pane {
|
||||
min-height: 300px;
|
||||
}
|
||||
.ml-10 {
|
||||
margin-left: 5px;
|
||||
}
|
||||
</style>
|
||||
194
src/views/tower/rent/index.vue
Normal file
194
src/views/tower/rent/index.vue
Normal file
@@ -0,0 +1,194 @@
|
||||
<template>
|
||||
<div class="ele-body">
|
||||
<a-card :bordered="false">
|
||||
<!-- 表格 -->
|
||||
<ele-pro-table
|
||||
ref="tableRef"
|
||||
row-key="rentId"
|
||||
:columns="columns"
|
||||
:datasource="datasource"
|
||||
:customRow="customRow"
|
||||
:need-page="false"
|
||||
:expand-icon-column-index="1"
|
||||
:scroll="{ x: 1200 }"
|
||||
cache-key="towerRent"
|
||||
>
|
||||
<template #toolbar>
|
||||
<a-space>
|
||||
<a-button type="primary" class="ele-btn-icon" @click="openEdit()">
|
||||
<template #icon>
|
||||
<plus-outlined />
|
||||
</template>
|
||||
<span>新建</span>
|
||||
</a-button>
|
||||
<!-- 搜索表单 -->
|
||||
<a-input-search
|
||||
allow-clear
|
||||
v-model:value="searchText"
|
||||
placeholder="请输入搜索关键词"
|
||||
@search="search"
|
||||
@pressEnter="search"
|
||||
/>
|
||||
</a-space>
|
||||
</template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key == 'totalRent'">
|
||||
{{ record.month * record.num }}
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<a-space>
|
||||
<a @click="openEdit(record)">修改</a>
|
||||
<a-divider type="vertical" />
|
||||
<a-popconfirm
|
||||
placement="topRight"
|
||||
title="确定要删除此记录吗?"
|
||||
@confirm="remove(record)"
|
||||
>
|
||||
<a class="ele-text-danger">删除</a>
|
||||
</a-popconfirm>
|
||||
</a-space>
|
||||
</template>
|
||||
</template>
|
||||
</ele-pro-table>
|
||||
</a-card>
|
||||
<!-- 编辑弹窗 -->
|
||||
<RentEdit v-model:visible="showEdit" :data="current" @done="reload" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { message } from 'ant-design-vue/es';
|
||||
import { PlusOutlined } from '@ant-design/icons-vue';
|
||||
import type {
|
||||
DatasourceFunction,
|
||||
ColumnItem
|
||||
} from 'ele-admin-pro/es/ele-pro-table/types';
|
||||
import { messageLoading, toDateString } from 'ele-admin-pro/es';
|
||||
import type { EleProTable } from 'ele-admin-pro/es';
|
||||
import type { TowerRent, TowerRentParam } from '@/api/tower/rent/model';
|
||||
import { listTowerRent, removeTowerRent } from '@/api/tower/rent';
|
||||
import RentEdit from '@/views/tower/rent/components/rent-edit.vue';
|
||||
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
|
||||
// 表格列配置
|
||||
const columns = ref<ColumnItem[]>([
|
||||
{
|
||||
key: 'index',
|
||||
width: 48,
|
||||
align: 'center',
|
||||
fixed: 'left',
|
||||
hideInSetting: true,
|
||||
customRender: ({ index }) => index + (tableRef.value?.tableIndex ?? 0)
|
||||
},
|
||||
{
|
||||
title: '单位名称',
|
||||
dataIndex: 'companyName',
|
||||
key: 'companyName',
|
||||
showSorterTooltip: false,
|
||||
ellipsis: true
|
||||
},
|
||||
{
|
||||
title: '月租金',
|
||||
dataIndex: 'month',
|
||||
key: 'month',
|
||||
showSorterTooltip: false,
|
||||
ellipsis: true
|
||||
},
|
||||
{
|
||||
title: '月数',
|
||||
dataIndex: 'num',
|
||||
key: 'num',
|
||||
showSorterTooltip: false,
|
||||
ellipsis: true
|
||||
},
|
||||
{
|
||||
title: '租金',
|
||||
dataIndex: 'totalRent',
|
||||
key: 'totalRent',
|
||||
showSorterTooltip: false,
|
||||
ellipsis: true
|
||||
},
|
||||
{
|
||||
title: '创建时间',
|
||||
dataIndex: 'createTime',
|
||||
sorter: true,
|
||||
showSorterTooltip: false,
|
||||
ellipsis: true,
|
||||
width: 180,
|
||||
customRender: ({ text }) => toDateString(text)
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
key: 'action',
|
||||
width: 200,
|
||||
align: 'center'
|
||||
}
|
||||
]);
|
||||
|
||||
// 当前编辑数据
|
||||
const current = ref<TowerRent | null>(null);
|
||||
const searchText = ref('');
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({ where }) => {
|
||||
if (searchText.value) {
|
||||
where.keywords = searchText.value;
|
||||
}
|
||||
return listTowerRent({ ...where });
|
||||
};
|
||||
|
||||
/* 刷新表格 */
|
||||
const reload = (where?: TowerRentParam) => {
|
||||
tableRef?.value?.reload({ where });
|
||||
};
|
||||
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit = (row?: TowerRent | null, id?: number) => {
|
||||
current.value = row ?? null;
|
||||
showEdit.value = true;
|
||||
};
|
||||
|
||||
const search = (searchText) => {
|
||||
reload({ keywords: searchText });
|
||||
};
|
||||
|
||||
/* 删除单个 */
|
||||
const remove = (row: TowerRent) => {
|
||||
const hide = messageLoading('请求中..', 0);
|
||||
removeTowerRent(row.rentId)
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
reload();
|
||||
})
|
||||
.catch((e) => {
|
||||
hide();
|
||||
message.error(e.message);
|
||||
});
|
||||
};
|
||||
|
||||
/* 自定义行属性 */
|
||||
const customRow = (record: TowerRent) => {
|
||||
return {
|
||||
// 行点击事件
|
||||
onClick: () => {
|
||||
// console.log(record);
|
||||
},
|
||||
// 行双击事件
|
||||
onDblclick: () => {
|
||||
openEdit(record);
|
||||
}
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: 'TowerRent'
|
||||
};
|
||||
</script>
|
||||
322
yarn.lock
322
yarn.lock
@@ -2,11 +2,6 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@alloc/quick-lru@^5.2.0":
|
||||
version "5.2.0"
|
||||
resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
|
||||
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
|
||||
|
||||
"@amap/amap-jsapi-loader@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz"
|
||||
@@ -202,15 +197,6 @@
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/gen-mapping@^0.3.2":
|
||||
version "0.3.3"
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
|
||||
integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
|
||||
dependencies:
|
||||
"@jridgewell/set-array" "^1.0.1"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
||||
"@jridgewell/trace-mapping" "^0.3.9"
|
||||
|
||||
"@jridgewell/resolve-uri@^3.0.3":
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"
|
||||
@@ -705,11 +691,6 @@ ant-design-vue@^3.2.11:
|
||||
vue-types "^3.0.0"
|
||||
warning "^4.0.0"
|
||||
|
||||
any-promise@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
|
||||
|
||||
anymatch@~3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz"
|
||||
@@ -747,11 +728,6 @@ archiver@^5.0.0:
|
||||
tar-stream "^2.2.0"
|
||||
zip-stream "^4.1.0"
|
||||
|
||||
arg@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
|
||||
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz"
|
||||
@@ -782,18 +758,6 @@ asynckit@^0.4.0:
|
||||
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz"
|
||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||
|
||||
autoprefixer@^10.4.14:
|
||||
version "10.4.14"
|
||||
resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d"
|
||||
integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==
|
||||
dependencies:
|
||||
browserslist "^4.21.5"
|
||||
caniuse-lite "^1.0.30001464"
|
||||
fraction.js "^4.2.0"
|
||||
normalize-range "^0.1.2"
|
||||
picocolors "^1.0.0"
|
||||
postcss-value-parser "^4.2.0"
|
||||
|
||||
axios@^0.27.2:
|
||||
version "0.27.2"
|
||||
resolved "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz"
|
||||
@@ -876,16 +840,6 @@ braces@^3.0.2, braces@~3.0.2:
|
||||
dependencies:
|
||||
fill-range "^7.0.1"
|
||||
|
||||
browserslist@^4.21.5:
|
||||
version "4.21.7"
|
||||
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551"
|
||||
integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001489"
|
||||
electron-to-chromium "^1.4.411"
|
||||
node-releases "^2.0.12"
|
||||
update-browserslist-db "^1.0.11"
|
||||
|
||||
buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
|
||||
version "0.2.13"
|
||||
resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz"
|
||||
@@ -945,16 +899,6 @@ callsites@^3.0.0:
|
||||
resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
camelcase-css@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
|
||||
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
|
||||
|
||||
caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001489:
|
||||
version "1.0.30001497"
|
||||
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001497.tgz#0e5387b98e7dbf9c4f743fb16e92cbf0ca780714"
|
||||
integrity sha512-I4/duVK4wL6rAK/aKZl3HXB4g+lIZvaT4VLAn2rCgJ38jVLb0lv2Xug6QuqmxXFVRJMF74SPPWPJ/1Sdm3vCzw==
|
||||
|
||||
ccount@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz"
|
||||
@@ -1073,11 +1017,6 @@ commander@^2.15.1, commander@^2.20.0:
|
||||
resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
commander@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
|
||||
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
|
||||
|
||||
compress-commons@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.1.tgz"
|
||||
@@ -1213,11 +1152,6 @@ dequal@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz"
|
||||
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
|
||||
|
||||
didyoumean@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
|
||||
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
|
||||
|
||||
diff@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmmirror.com/diff/-/diff-5.1.0.tgz"
|
||||
@@ -1230,11 +1164,6 @@ dir-glob@^3.0.1:
|
||||
dependencies:
|
||||
path-type "^4.0.0"
|
||||
|
||||
dlv@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
|
||||
integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz"
|
||||
@@ -1290,11 +1219,6 @@ ele-admin-pro@^1.10.1:
|
||||
resolved "https://registry.npmmirror.com/ele-admin-pro/-/ele-admin-pro-1.10.1.tgz"
|
||||
integrity sha512-EiNJcfGGA/4F20cuHlz7bxr2UJ1RdQGM3+MA7dsiNOp7DxLpP3dOo8wgg+MKyMUZUM2dcpp+Dmz94Q5VDpr44Q==
|
||||
|
||||
electron-to-chromium@^1.4.411:
|
||||
version "1.4.425"
|
||||
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.425.tgz#399df13091b836d28283a545c25c8e4d9da86da8"
|
||||
integrity sha512-wv1NufHxu11zfDbY4fglYQApMswleE9FL/DSeyOyauVXDZ+Kco96JK/tPfBUaDqfRarYp2WH2hJ/5UnVywp9Jg==
|
||||
|
||||
end-of-stream@^1.4.1:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz"
|
||||
@@ -1462,11 +1386,6 @@ esbuild@^0.14.47:
|
||||
esbuild-windows-64 "0.14.54"
|
||||
esbuild-windows-arm64 "0.14.54"
|
||||
|
||||
escalade@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
|
||||
@@ -1712,17 +1631,6 @@ fast-glob@^3.2.11, fast-glob@^3.2.9:
|
||||
merge2 "^1.3.0"
|
||||
micromatch "^4.0.4"
|
||||
|
||||
fast-glob@^3.2.12:
|
||||
version "3.2.12"
|
||||
resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
|
||||
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
|
||||
dependencies:
|
||||
"@nodelib/fs.stat" "^2.0.2"
|
||||
"@nodelib/fs.walk" "^1.2.3"
|
||||
glob-parent "^5.1.2"
|
||||
merge2 "^1.3.0"
|
||||
micromatch "^4.0.4"
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
|
||||
@@ -1806,11 +1714,6 @@ frac@~1.1.2:
|
||||
resolved "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz"
|
||||
integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==
|
||||
|
||||
fraction.js@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
|
||||
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
|
||||
|
||||
fs-constants@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz"
|
||||
@@ -1889,25 +1792,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob-parent@^6.0.1, glob-parent@^6.0.2:
|
||||
glob-parent@^6.0.1:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz"
|
||||
integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob@7.1.6:
|
||||
version "7.1.6"
|
||||
resolved "https://registry.npmmirror.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.1.3, glob@^7.1.4:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz"
|
||||
@@ -2166,13 +2057,6 @@ is-buffer@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz"
|
||||
integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
|
||||
|
||||
is-core-module@^2.11.0:
|
||||
version "2.12.1"
|
||||
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
|
||||
integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-core-module@^2.9.0:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.10.0.tgz"
|
||||
@@ -2222,11 +2106,6 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
jiti@^1.18.2:
|
||||
version "1.18.2"
|
||||
resolved "https://registry.npmmirror.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd"
|
||||
integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==
|
||||
|
||||
js-md5@^0.7.3:
|
||||
version "0.7.3"
|
||||
resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz"
|
||||
@@ -2329,16 +2208,6 @@ lie@~3.3.0:
|
||||
dependencies:
|
||||
immediate "~3.0.5"
|
||||
|
||||
lilconfig@^2.0.5, lilconfig@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
|
||||
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
|
||||
|
||||
lines-and-columns@^1.1.6:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
|
||||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
|
||||
|
||||
listenercount@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz"
|
||||
@@ -2904,7 +2773,7 @@ micromark@^3.0.0:
|
||||
micromark-util-types "^1.0.1"
|
||||
uvu "^0.5.0"
|
||||
|
||||
micromatch@^4.0.4, micromatch@^4.0.5:
|
||||
micromatch@^4.0.4:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz"
|
||||
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
|
||||
@@ -2965,25 +2834,11 @@ ms@2.1.2, ms@^2.1.1:
|
||||
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
||||
mz@^2.7.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nanoid@^3.3.4:
|
||||
version "3.3.4"
|
||||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz"
|
||||
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||
|
||||
nanoid@^3.3.6:
|
||||
version "3.3.6"
|
||||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
|
||||
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
|
||||
|
||||
nanopop@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/nanopop/-/nanopop-2.1.0.tgz"
|
||||
@@ -3008,21 +2863,11 @@ next-tick@^1.1.0:
|
||||
resolved "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz"
|
||||
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
|
||||
|
||||
node-releases@^2.0.12:
|
||||
version "2.0.12"
|
||||
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
|
||||
integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
|
||||
|
||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
normalize-range@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
|
||||
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
|
||||
|
||||
nprogress@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz"
|
||||
@@ -3035,16 +2880,6 @@ nth-check@^2.0.1:
|
||||
dependencies:
|
||||
boolbase "^1.0.0"
|
||||
|
||||
object-assign@^4.0.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
|
||||
object-hash@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
|
||||
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
|
||||
|
||||
once@^1.3.0, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz"
|
||||
@@ -3135,11 +2970,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
|
||||
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
pify@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
|
||||
|
||||
pify@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz"
|
||||
@@ -3153,50 +2983,6 @@ pinia@^2.0.21:
|
||||
"@vue/devtools-api" "^6.2.1"
|
||||
vue-demi "*"
|
||||
|
||||
pirates@^4.0.1:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
|
||||
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
|
||||
|
||||
postcss-import@^15.1.0:
|
||||
version "15.1.0"
|
||||
resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
|
||||
integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
|
||||
dependencies:
|
||||
postcss-value-parser "^4.0.0"
|
||||
read-cache "^1.0.0"
|
||||
resolve "^1.1.7"
|
||||
|
||||
postcss-js@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
|
||||
integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
|
||||
dependencies:
|
||||
camelcase-css "^2.0.1"
|
||||
|
||||
postcss-load-config@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
|
||||
integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
|
||||
dependencies:
|
||||
lilconfig "^2.0.5"
|
||||
yaml "^2.1.1"
|
||||
|
||||
postcss-nested@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
|
||||
integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
|
||||
dependencies:
|
||||
postcss-selector-parser "^6.0.11"
|
||||
|
||||
postcss-selector-parser@^6.0.11:
|
||||
version "6.0.13"
|
||||
resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
|
||||
integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
|
||||
dependencies:
|
||||
cssesc "^3.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
postcss-selector-parser@^6.0.9:
|
||||
version "6.0.10"
|
||||
resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz"
|
||||
@@ -3205,11 +2991,6 @@ postcss-selector-parser@^6.0.9:
|
||||
cssesc "^3.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
|
||||
postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
|
||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||
|
||||
postcss@^8.1.10, postcss@^8.4.16:
|
||||
version "8.4.16"
|
||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.16.tgz"
|
||||
@@ -3219,15 +3000,6 @@ postcss@^8.1.10, postcss@^8.4.16:
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
postcss@^8.4.23, postcss@^8.4.24:
|
||||
version "8.4.24"
|
||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
|
||||
integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
|
||||
dependencies:
|
||||
nanoid "^3.3.6"
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz"
|
||||
@@ -3270,13 +3042,6 @@ queue-microtask@^1.2.2:
|
||||
resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz"
|
||||
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
||||
|
||||
read-cache@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
|
||||
integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
|
||||
dependencies:
|
||||
pify "^2.3.0"
|
||||
|
||||
readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz"
|
||||
@@ -3405,15 +3170,6 @@ resolve-from@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve@^1.1.7, resolve@^1.22.2:
|
||||
version "1.22.2"
|
||||
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
|
||||
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
|
||||
dependencies:
|
||||
is-core-module "^2.11.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
resolve@^1.22.1:
|
||||
version "1.22.1"
|
||||
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz"
|
||||
@@ -3634,19 +3390,6 @@ style-to-object@^0.3.0:
|
||||
dependencies:
|
||||
inline-style-parser "0.1.1"
|
||||
|
||||
sucrase@^3.32.0:
|
||||
version "3.32.0"
|
||||
resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7"
|
||||
integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==
|
||||
dependencies:
|
||||
"@jridgewell/gen-mapping" "^0.3.2"
|
||||
commander "^4.0.0"
|
||||
glob "7.1.6"
|
||||
lines-and-columns "^1.1.6"
|
||||
mz "^2.7.0"
|
||||
pirates "^4.0.1"
|
||||
ts-interface-checker "^0.1.9"
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz"
|
||||
@@ -3671,35 +3414,6 @@ systemjs@^6.12.1:
|
||||
resolved "https://registry.npmmirror.com/systemjs/-/systemjs-6.12.6.tgz"
|
||||
integrity sha512-SawLiWya8/uNR4p12OggSYZ35tP4U4QTpfV57DdZEOPr6+J6zlLSeeEpMmzYTEoBAsMhctdEE+SWJUDYX4EaKw==
|
||||
|
||||
tailwindcss@^3.3.2:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3"
|
||||
integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==
|
||||
dependencies:
|
||||
"@alloc/quick-lru" "^5.2.0"
|
||||
arg "^5.0.2"
|
||||
chokidar "^3.5.3"
|
||||
didyoumean "^1.2.2"
|
||||
dlv "^1.1.3"
|
||||
fast-glob "^3.2.12"
|
||||
glob-parent "^6.0.2"
|
||||
is-glob "^4.0.3"
|
||||
jiti "^1.18.2"
|
||||
lilconfig "^2.1.0"
|
||||
micromatch "^4.0.5"
|
||||
normalize-path "^3.0.0"
|
||||
object-hash "^3.0.0"
|
||||
picocolors "^1.0.0"
|
||||
postcss "^8.4.23"
|
||||
postcss-import "^15.1.0"
|
||||
postcss-js "^4.0.1"
|
||||
postcss-load-config "^4.0.1"
|
||||
postcss-nested "^6.0.1"
|
||||
postcss-selector-parser "^6.0.11"
|
||||
postcss-value-parser "^4.2.0"
|
||||
resolve "^1.22.2"
|
||||
sucrase "^3.32.0"
|
||||
|
||||
tar-stream@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz"
|
||||
@@ -3726,20 +3440,6 @@ text-table@^0.2.0:
|
||||
resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz"
|
||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
||||
|
||||
thenify-all@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||
integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
|
||||
dependencies:
|
||||
thenify ">= 3.1.0 < 4"
|
||||
|
||||
"thenify@>= 3.1.0 < 4":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
|
||||
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
|
||||
tinymce@^5.10.5:
|
||||
version "5.10.5"
|
||||
resolved "https://registry.npmmirror.com/tinymce/-/tinymce-5.10.5.tgz"
|
||||
@@ -3781,11 +3481,6 @@ trough@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/trough/-/trough-2.1.0.tgz"
|
||||
integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==
|
||||
|
||||
ts-interface-checker@^0.1.9:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
|
||||
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
|
||||
|
||||
tslib@2.3.0, tslib@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz"
|
||||
@@ -3965,14 +3660,6 @@ unzipper@^0.10.11:
|
||||
readable-stream "~2.3.6"
|
||||
setimmediate "~1.0.4"
|
||||
|
||||
update-browserslist-db@^1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
|
||||
integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
|
||||
dependencies:
|
||||
escalade "^3.1.1"
|
||||
picocolors "^1.0.0"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.4.1"
|
||||
resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz"
|
||||
@@ -4227,11 +3914,6 @@ yallist@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
||||
yaml@^2.1.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
|
||||
integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
|
||||
|
||||
yocto-queue@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz"
|
||||
|
||||
Reference in New Issue
Block a user