diff --git a/.env.development b/.env.development index 4df930a..1af570f 100644 --- a/.env.development +++ b/.env.development @@ -1,3 +1,3 @@ VITE_APP_NAME=后台管理系统 -VITE_API_URL=http://127.0.0.1:9090/api -#VITE_API_URL=https://server.gxwebsoft.com/api +VITE_API_URL=http://127.0.0.1:10041/api +#VITE_API_URL=http://1.14.159.185:10041/api diff --git a/.env.production b/.env.production index ec9e8cd..07c8bf3 100644 --- a/.env.production +++ b/.env.production @@ -1,2 +1,2 @@ VITE_APP_NAME=后台管理系统 -VITE_API_URL=https://server.gxwebsoft.com/api +VITE_API_URL=http://1.14.159.185:10041/api diff --git a/src/api/tower/contract/model/index.ts b/src/api/tower/contract/model/index.ts index 5cef615..b818470 100644 --- a/src/api/tower/contract/model/index.ts +++ b/src/api/tower/contract/model/index.ts @@ -7,15 +7,15 @@ export interface Contract { // 合同id contractId?: any; // 项目id - projectId: any; + projectId?: any; // 承租方 - companyId: any; + companyId?: any; // 出租方 - customerId: any; + customerId?: any; // 业务负责人 customerContact?: string; // 合同编号 - contactNumber: string; + contactNumber?: string; // 签订日期 signDate?: string; // 开始日期 @@ -30,6 +30,10 @@ export interface Contract { isInStock?: number; // 是否自动结算 autoSettle?: number; + // 结算方式 + settleMethod?: number; + // 跨月结算日期 + extendMonthDate?: number; userId?: any; } @@ -42,5 +46,12 @@ export interface ContractParam extends PageParam { createTimeStart?: string; createTimeEnd?: string; betweenTime?: any; - } + +export const ContractSettleMethod = [ + '跨月结算', + '自然月结算', + '按日结算', + '系数结算-跨月', + '系数结算-自然月', +] diff --git a/src/api/tower/contractSettle/equipment/index.ts b/src/api/tower/contractSettle/equipment/index.ts new file mode 100644 index 0000000..5d29a18 --- /dev/null +++ b/src/api/tower/contractSettle/equipment/index.ts @@ -0,0 +1,133 @@ +import request from '@/utils/request'; +import type {ApiResult, PageResult} from '@/api'; +import type {ContractSettleEquipment, ContractSettleEquipmentParam} from './model'; + +/** + * 分页查询合同设备 + */ +export async function pageContract(params: ContractSettleEquipmentParam) { + const res = await request.get>>( + '/tower/tower-contract-settle-equipment/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询合同设备列表 + */ +export async function listContractSettleEquipment(params?: ContractSettleEquipmentParam) { + const res = await request.get>( + '/tower/tower-contract-settle-equipment', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询合同设备 + */ +export async function getContractSettleEquipment(id: number) { + const res = await request.get>( + '/tower/tower-contract-settle-equipment/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加合同设备 + */ +export async function addContractSettleEquipment(data: ContractSettleEquipment) { + const res = await request.post>( + '/tower/tower-contract-settle-equipment', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改合同设备 + */ +export async function updateContractSettleEquipment(data: ContractSettleEquipment) { + const res = await request.put>( + '/tower/tower-contract-settle-equipment', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量修改合同设备 + */ +export async function updateBatchContractSettleEquipment(data: ContractSettleEquipment[]) { + const res = await request.put>( + '/tower/tower-contract-settle-equipment/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量添加合同设备 + */ +export async function addBatchContractSettleEquipment(data: ContractSettleEquipment[]) { + const res = await request.post>( + '/tower/tower-contract-settle-equipment/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除合同设备 + */ +export async function removeContractSettleEquipment(id?: number) { + const res = await request.delete>( + '/tower/tower-contract-settle-equipment/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除合同设备 + */ +export async function removeBatchContractSettleEquipment(data: (number | undefined)[]) { + const res = await request.delete>( + '/tower/tower-contract-settle-equipment/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/src/api/tower/contractSettle/equipment/model/index.ts b/src/api/tower/contractSettle/equipment/model/index.ts new file mode 100644 index 0000000..444fd42 --- /dev/null +++ b/src/api/tower/contractSettle/equipment/model/index.ts @@ -0,0 +1,39 @@ +import type { PageParam } from '@/api'; + +/** + * 合同 + */ +export interface ContractSettleEquipment { + contractSettleId?: any; + // 合同id + contractId: any; + // 设备名 + equipmentName: string; + // 规格 + equipmentModel: string; + // 进场编号 + factoryNo: any; + // 自编号 + equipmentNo: any; + // 租期 + rentMonth: any; + // 租金 + rentAmount: any; + // 进退场费 + inOutAmount: any; + // 劳务费 + workerAmount: any; + // 其他费用 + otherAmount: any; + // 备注 + remark?: any; + userId?: any; + +} + +/** + * 合同搜索条件 + */ +export interface ContractSettleEquipmentParam extends PageParam { + contractId?: string; +} diff --git a/src/api/tower/contractSettle/rule/index.ts b/src/api/tower/contractSettle/rule/index.ts new file mode 100644 index 0000000..42b90dc --- /dev/null +++ b/src/api/tower/contractSettle/rule/index.ts @@ -0,0 +1,133 @@ +import request from '@/utils/request'; +import type {ApiResult, PageResult} from '@/api'; +import type {ContractSettleRule, ContractSettleRuleParam} from './model'; + +/** + * 分页查询合同设备 + */ +export async function pageContract(params: ContractSettleRuleParam) { + const res = await request.get>>( + '/tower/tower-contract-settle-rule/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询合同设备列表 + */ +export async function listContractSettleRule(params?: ContractSettleRuleParam) { + const res = await request.get>( + '/tower/tower-contract-settle-rule', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询合同设备 + */ +export async function getContractSettleRule(id: number) { + const res = await request.get>( + '/tower/tower-contract-settle-rule/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加合同设备 + */ +export async function addContractSettleRule(data: ContractSettleRule) { + const res = await request.post>( + '/tower/tower-contract-settle-rule', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改合同设备 + */ +export async function updateContractSettleRule(data: ContractSettleRule) { + const res = await request.put>( + '/tower/tower-contract-settle-rule', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量修改合同设备 + */ +export async function updateBatchContractSettleRule(data: ContractSettleRule[]) { + const res = await request.put>( + '/tower/tower-contract-settle-rule/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量添加合同设备 + */ +export async function addBatchContractSettleRule(data: ContractSettleRule[]) { + const res = await request.post>( + '/tower/tower-contract-settle-rule/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除合同设备 + */ +export async function removeContractSettleRule(id?: number) { + const res = await request.delete>( + '/tower/tower-contract-settle-rule/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除合同设备 + */ +export async function removeBatchContractSettleRule(data: (number | undefined)[]) { + const res = await request.delete>( + '/tower/tower-contract-settle-rule/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/src/api/tower/contractSettle/rule/model/index.ts b/src/api/tower/contractSettle/rule/model/index.ts new file mode 100644 index 0000000..5531a3c --- /dev/null +++ b/src/api/tower/contractSettle/rule/model/index.ts @@ -0,0 +1,18 @@ +import type { PageParam } from '@/api'; + +/** + * 合同 + */ +export interface ContractSettleRule { + contractSettleRuleId?: any; + contractId: any; + startDate: string; + endDate: string; +} + +/** + * 合同搜索条件 + */ +export interface ContractSettleRuleParam extends PageParam { + contractId?: string; +} diff --git a/src/api/tower/settle/index.ts b/src/api/tower/settle/index.ts new file mode 100644 index 0000000..e698e47 --- /dev/null +++ b/src/api/tower/settle/index.ts @@ -0,0 +1,119 @@ +import request from '@/utils/request'; +import type {ApiResult, PageResult} from '@/api'; +import type {Settle, SettleParam} from './model'; + +/** + * 分页查询结算 + */ +export async function pageSettle(params: SettleParam) { + const res = await request.get>>( + '/tower/tower-settle/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询合同列表 + */ +export async function listSettle(params?: SettleParam) { + const res = await request.get>( + '/tower/tower-settle', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询合同 + */ +export async function getSettle(id: number) { + const res = await request.get>( + '/tower/tower-settle/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加合同 + */ +export async function addSettle(data: Settle) { + const res = await request.post>( + '/tower/tower-settle', + data + ); + if (res.data.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改合同 + */ +export async function updateSettle(data: Settle) { + const res = await request.put>( + '/tower/tower-settle', + data + ); + if (res.data.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量修改合同 + */ +export async function updateBatchSettle(data: Settle[]) { + const res = await request.put>( + '/tower/tower-settle/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除合同 + */ +export async function removeSettle(id?: number) { + const res = await request.delete>( + '/tower/tower-settle/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除合同 + */ +export async function removeBatchSettle(data: (number | undefined)[]) { + const res = await request.delete>( + '/tower/tower-settle/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/src/api/tower/settle/model/index.ts b/src/api/tower/settle/model/index.ts new file mode 100644 index 0000000..984f631 --- /dev/null +++ b/src/api/tower/settle/model/index.ts @@ -0,0 +1,27 @@ +import type { PageParam } from '@/api'; + +/** + * 合同 + */ +export interface Settle { + settleId?: any; + settleNo?: any; + status?: any; + contractId?: any; + startDate?: any; + endDate?: string; + settleMethod?: number; + extendMonthDate?: number; + totalAmount?: number; + userId?: any; + contactNumber?: any; + +} + +/** + * 合同搜索条件 + */ +export interface SettleParam extends PageParam { + settleNo?: string; + contractId?: string; +} diff --git a/src/api/tower/settleDetail/index.ts b/src/api/tower/settleDetail/index.ts new file mode 100644 index 0000000..50bef54 --- /dev/null +++ b/src/api/tower/settleDetail/index.ts @@ -0,0 +1,129 @@ +import request from '@/utils/request'; +import type {ApiResult, PageResult} from '@/api'; +import type {SettleDetail, SettleDetailParam} from './model'; + +/** + * 分页查询结算 + */ +export async function pageSettleDetail(params: SettleDetailParam) { + const res = await request.get>>( + '/tower/tower-settle-detail/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询合同列表 + */ +export async function listSettleDetail(params?: SettleDetailParam) { + const res = await request.get>( + '/tower/tower-settle-detail', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询合同 + */ +export async function getSettleDetail(id: number) { + const res = await request.get>( + '/tower/tower-settle-detail/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加合同 + */ +export async function addSettleDetail(data: SettleDetail) { + const res = await request.post>( + '/tower/tower-settle-detail', + data + ); + if (res.data.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改合同 + */ +export async function updateSettleDetail(data: SettleDetail) { + const res = await request.put>( + '/tower/tower-settle-detail', + data + ); + if (res.data.code === 0) { + return res.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量修改合同 + */ +export async function updateBatchSettleDetail(data: SettleDetail[]) { + const res = await request.put>( + '/tower/tower-settle-detail/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} +export async function addBatchSettleDetail(data: SettleDetail[]) { + const res = await request.post>( + '/tower/tower-settle-detail/batch', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除合同 + */ +export async function removeSettleDetail(id?: number) { + const res = await request.delete>( + '/tower/tower-settle-detail/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除合同 + */ +export async function removeBatchSettleDetail(data: (number | undefined)[]) { + const res = await request.delete>( + '/tower/tower-settle-detail/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/src/api/tower/settleDetail/model/index.ts b/src/api/tower/settleDetail/model/index.ts new file mode 100644 index 0000000..c38e29a --- /dev/null +++ b/src/api/tower/settleDetail/model/index.ts @@ -0,0 +1,33 @@ +import type { PageParam } from '@/api'; + +/** + * 合同 + */ +export interface SettleDetail { + settleDetailId?: any; + settleId?: any; + type?: any; + settleCostType?: string; + equipmentName?: string; + equipmentModel?: string; + factoryNo?: string; + startDate?: any; + endDate?: any; + monthAmount?: any; + taxRate?: any; + singleAmount?: any; + num?: any; + unit?: string; + remark?: string; + userId?: any; + days?: any; + dailyAmount?: any; +} + +/** + * 合同搜索条件 + */ +export interface SettleDetailParam extends PageParam { + settleId?: string; + type?: string; +} diff --git a/src/components/TowerContractSelectModel/components/select-data.vue b/src/components/TowerContractSelectModel/components/select-data.vue new file mode 100644 index 0000000..0816fc8 --- /dev/null +++ b/src/components/TowerContractSelectModel/components/select-data.vue @@ -0,0 +1,147 @@ + + + + diff --git a/src/components/TowerContractSelectModel/index.vue b/src/components/TowerContractSelectModel/index.vue new file mode 100644 index 0000000..1fd828b --- /dev/null +++ b/src/components/TowerContractSelectModel/index.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/components/TowerEquipmentModel/components/select-data.vue b/src/components/TowerEquipmentModel/components/select-data.vue new file mode 100644 index 0000000..787b6c2 --- /dev/null +++ b/src/components/TowerEquipmentModel/components/select-data.vue @@ -0,0 +1,161 @@ + + + + diff --git a/src/components/TowerEquipmentModel/index.vue b/src/components/TowerEquipmentModel/index.vue new file mode 100644 index 0000000..b4d482c --- /dev/null +++ b/src/components/TowerEquipmentModel/index.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/styles/common.less b/src/styles/common.less index 134846b..30e47eb 100644 --- a/src/styles/common.less +++ b/src/styles/common.less @@ -102,3 +102,16 @@ margin-top: .5rem; margin-bottom: .5rem; } + +.ml-05{ + margin-left: .5rem; +} + +.mr-05{ + margin-right: .5rem; +} + +.mx-05{ + margin-left: .5rem; + margin-right: .5rem; +} diff --git a/src/views/tower/accessory/components/accessory-edit.vue b/src/views/tower/accessory/components/accessory-edit.vue index 7c7744b..5dee9c1 100644 --- a/src/views/tower/accessory/components/accessory-edit.vue +++ b/src/views/tower/accessory/components/accessory-edit.vue @@ -108,10 +108,10 @@ /> - diff --git a/src/views/tower/contract/components/contract-edit.vue b/src/views/tower/contract/components/contract-edit.vue index b524ff9..9416fc7 100644 --- a/src/views/tower/contract/components/contract-edit.vue +++ b/src/views/tower/contract/components/contract-edit.vue @@ -265,7 +265,6 @@ import { ref, reactive, watch, computed } from "vue"; import { Form, message } from "ant-design-vue"; import { assignObject } from "ele-admin-pro"; import { updateContract, addContract } from "@/api/tower/contract"; -import type { Customer } from "@/api/oa/customer/model"; import { useUserStore } from "@/store/modules/user"; import { Contract } from "@/api/tower/contract/model"; import dayjs from "dayjs"; @@ -279,8 +278,8 @@ import { import { ContractEquipment } from "@/api/tower/contractEquipment/model"; import { TowerModel } from "@/api/tower/model/model"; import { listTowerModel } from "@/api/tower/model"; -import { addBatchContractFile } from "@/api/tower/contractFile"; -import { addBatchContractEquipment } from "@/api/tower/contractEquipment"; +import { addBatchContractFile, listContractFile } from "@/api/tower/contractFile"; +import { addBatchContractEquipment, listContractEquipment } from "@/api/tower/contractEquipment"; const userStore = useUserStore(); // 当前用户信息 @@ -295,7 +294,7 @@ const props = defineProps<{ // 弹窗是否打开 visible: boolean; // 修改回显的数据 - data?: Customer | null; + data?: Contract | null; }>(); const emit = defineEmits<{ @@ -400,7 +399,7 @@ const delFile = index => { }; const getContractFileList = async () => { - + contractFileList.value = await listContractFile({contactId: props.data?.contractId}) }; const equipmentList = ref([]); @@ -410,7 +409,7 @@ const getEquipmentList = async () => { const contractEquipmentList = ref([]); const getContractEquipmentList = async () => { - + contractEquipmentList.value = await listContractEquipment({contactId: props.data?.contractId}) }; const chooseEquipmentName = (res, index) => { @@ -454,7 +453,6 @@ const save = () => { const data = { ...form }; - console.log(contractEquipmentList.value) for (let i = 0; i < contractEquipmentList.value.length; i++) { if (!contractEquipmentList.value[i].equipmentName) { console.log(contractEquipmentList.value[i].equipmentName) @@ -546,6 +544,7 @@ watch( assignObject(form, props.data); isUpdate.value = true; getContractFileList(); + getContractEquipmentList(); projectName.value = props.data.projectName; customerName.value = props.data.customerName; companyName.value = props.data.companyName; diff --git a/src/views/tower/contract/components/contract-settle.vue b/src/views/tower/contract/components/contract-settle.vue new file mode 100644 index 0000000..c9e535d --- /dev/null +++ b/src/views/tower/contract/components/contract-settle.vue @@ -0,0 +1,448 @@ + + + + + diff --git a/src/views/tower/contract/index.vue b/src/views/tower/contract/index.vue index 90f157e..6959f0a 100644 --- a/src/views/tower/contract/index.vue +++ b/src/views/tower/contract/index.vue @@ -4,7 +4,7 @@ diff --git a/src/views/tower/project/components/project-edit.vue b/src/views/tower/project/components/project-edit.vue index a03305b..d4706b7 100644 --- a/src/views/tower/project/components/project-edit.vue +++ b/src/views/tower/project/components/project-edit.vue @@ -59,7 +59,7 @@ /> - - { - form.companyName = data.customerName; + form.companyName = data.companyName; }; const chooseCustomerName = (data: Customer) => { - form.customerName = data.customerName; + form.customerName = data.name; }; const chooseDismantlingCompany = (data: Customer) => { diff --git a/src/views/tower/settle/components/editTable/table0.vue b/src/views/tower/settle/components/editTable/table0.vue new file mode 100644 index 0000000..2e6a588 --- /dev/null +++ b/src/views/tower/settle/components/editTable/table0.vue @@ -0,0 +1,175 @@ + + + diff --git a/src/views/tower/settle/components/editTable/table1.vue b/src/views/tower/settle/components/editTable/table1.vue new file mode 100644 index 0000000..54808b8 --- /dev/null +++ b/src/views/tower/settle/components/editTable/table1.vue @@ -0,0 +1,145 @@ + + + diff --git a/src/views/tower/settle/components/editTable/table2.vue b/src/views/tower/settle/components/editTable/table2.vue new file mode 100644 index 0000000..a33b421 --- /dev/null +++ b/src/views/tower/settle/components/editTable/table2.vue @@ -0,0 +1,178 @@ + + + diff --git a/src/views/tower/settle/components/editTable/table3.vue b/src/views/tower/settle/components/editTable/table3.vue new file mode 100644 index 0000000..5361221 --- /dev/null +++ b/src/views/tower/settle/components/editTable/table3.vue @@ -0,0 +1,168 @@ + + + diff --git a/src/views/tower/settle/components/editTable/table4.vue b/src/views/tower/settle/components/editTable/table4.vue new file mode 100644 index 0000000..1c5354b --- /dev/null +++ b/src/views/tower/settle/components/editTable/table4.vue @@ -0,0 +1,168 @@ + + + diff --git a/src/views/tower/settle/components/search.vue b/src/views/tower/settle/components/search.vue new file mode 100644 index 0000000..bb9c274 --- /dev/null +++ b/src/views/tower/settle/components/search.vue @@ -0,0 +1,205 @@ + + + + diff --git a/src/views/tower/settle/components/settle-edit.vue b/src/views/tower/settle/components/settle-edit.vue new file mode 100644 index 0000000..ea7b156 --- /dev/null +++ b/src/views/tower/settle/components/settle-edit.vue @@ -0,0 +1,504 @@ + + + + + diff --git a/src/views/tower/settle/components/settle-info.vue b/src/views/tower/settle/components/settle-info.vue new file mode 100644 index 0000000..b1d0fe1 --- /dev/null +++ b/src/views/tower/settle/components/settle-info.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/views/tower/settle/index.vue b/src/views/tower/settle/index.vue new file mode 100644 index 0000000..308763f --- /dev/null +++ b/src/views/tower/settle/index.vue @@ -0,0 +1,264 @@ + + + + + + +