材料管理 变更清单
This commit is contained in:
@ -5,7 +5,7 @@ VITE_APP_TITLE = 新能源项目管理平台
|
|||||||
VITE_APP_ENV = 'development'
|
VITE_APP_ENV = 'development'
|
||||||
|
|
||||||
# 开发环境
|
# 开发环境
|
||||||
VITE_APP_BASE_API = 'http://192.168.110.119:8898'
|
VITE_APP_BASE_API = 'http://192.168.110.159:8898'
|
||||||
|
|
||||||
# 无人机接口地址
|
# 无人机接口地址
|
||||||
|
|
||||||
|
@ -97,3 +97,14 @@ export const delBatch = (ids: string | number | Array<string | number>) => {
|
|||||||
method: 'delete'
|
method: 'delete'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-材料设备批次详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getPcDetail = (id: string | number): AxiosPromise<CailiaoshebeiVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/materialbatchdemandplan/spQuery/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -97,3 +97,14 @@ export const delBatch = (ids: string | number | Array<string | number>) => {
|
|||||||
method: 'delete'
|
method: 'delete'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-材料设备批次详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getPcDetail = (id: string | number): AxiosPromise<CailiaoshebeiVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/cailiaoshebei/spQuery/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -83,6 +83,9 @@ export interface CailiaoshebeiForm extends BaseEntity {
|
|||||||
projectId?: string | number;
|
projectId?: string | number;
|
||||||
batchNumber?: string | number;
|
batchNumber?: string | number;
|
||||||
approvalDesign?: string;
|
approvalDesign?: string;
|
||||||
|
bo: any;
|
||||||
|
file: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批次ID
|
* 批次ID
|
||||||
*/
|
*/
|
||||||
|
@ -97,3 +97,14 @@ export const delBatch = (ids: string | number | Array<string | number>) => {
|
|||||||
method: 'delete'
|
method: 'delete'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-材料设备批次详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getPcDetail = (id: string | number): AxiosPromise<CailiaoshebeiVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/materialsorder/spQuery/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -45,7 +45,7 @@ export const addCailiaoshebei = (data: CailiaoshebeiForm) => {
|
|||||||
*/
|
*/
|
||||||
export const updateCailiaoshebei = (data: CailiaoshebeiForm) => {
|
export const updateCailiaoshebei = (data: CailiaoshebeiForm) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/cailiaoshebei/cailiaoshebei',
|
url: '/cailiaoshebei/materialsorder/changeTheStatusOfTheMaterials',
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
|
63
src/api/materials/repertory/index.ts
Normal file
63
src/api/materials/repertory/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { RepertoryVO, RepertoryForm, RepertoryQuery } from '@/api/materials/repertory/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-库存详情列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listRepertory = (query?: RepertoryQuery): AxiosPromise<RepertoryVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertory/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-库存详情详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getRepertory = (id: string | number): AxiosPromise<RepertoryVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertory/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增物资-库存详情
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addRepertory = (data: RepertoryForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertory',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改物资-库存详情
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateRepertory = (data: RepertoryForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertory',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除物资-库存详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delRepertory = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertory/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
81
src/api/materials/repertory/types.ts
Normal file
81
src/api/materials/repertory/types.ts
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
export interface RepertoryVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目ID
|
||||||
|
*/
|
||||||
|
projectId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备材料名称
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格型号
|
||||||
|
*/
|
||||||
|
specification: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RepertoryForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目ID
|
||||||
|
*/
|
||||||
|
projectId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备材料名称
|
||||||
|
*/
|
||||||
|
name?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格型号
|
||||||
|
*/
|
||||||
|
specification?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RepertoryQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目ID
|
||||||
|
*/
|
||||||
|
projectId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备材料名称
|
||||||
|
*/
|
||||||
|
name?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格型号
|
||||||
|
*/
|
||||||
|
specification?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/materials/repertoryDetails/index.ts
Normal file
63
src/api/materials/repertoryDetails/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { RepertoryDetailsVO, RepertoryDetailsForm, RepertoryDetailsQuery } from '@/api/materials/repertoryDetails/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-库存列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listRepertoryDetails = (query?: RepertoryDetailsQuery): AxiosPromise<RepertoryDetailsVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertoryDetails/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-库存详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getRepertoryDetails = (id: string | number): AxiosPromise<RepertoryDetailsVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertoryDetails/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增物资-库存
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addRepertoryDetails = (data: RepertoryDetailsForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertoryDetails',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改物资-库存
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateRepertoryDetails = (data: RepertoryDetailsForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertoryDetails',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除物资-库存
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delRepertoryDetails = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/repertoryDetails/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
187
src/api/materials/repertoryDetails/types.ts
Normal file
187
src/api/materials/repertoryDetails/types.ts
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
export interface RepertoryDetailsVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目ID
|
||||||
|
*/
|
||||||
|
projectId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库存ID
|
||||||
|
*/
|
||||||
|
repertoryId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据来源ID
|
||||||
|
*/
|
||||||
|
materialsorderId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物料编码
|
||||||
|
*/
|
||||||
|
materialCode: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原始数量
|
||||||
|
*/
|
||||||
|
originalQuantity: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更原因
|
||||||
|
*/
|
||||||
|
changeReasons: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更数量
|
||||||
|
*/
|
||||||
|
changeQuantity: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终数量
|
||||||
|
*/
|
||||||
|
finalNumber: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作状态(字典)
|
||||||
|
*/
|
||||||
|
operationStatus: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人
|
||||||
|
*/
|
||||||
|
operationName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人联系电话
|
||||||
|
*/
|
||||||
|
operationPhone: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RepertoryDetailsForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目ID
|
||||||
|
*/
|
||||||
|
projectId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库存ID
|
||||||
|
*/
|
||||||
|
repertoryId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据来源ID
|
||||||
|
*/
|
||||||
|
materialsorderId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物料编码
|
||||||
|
*/
|
||||||
|
materialCode?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原始数量
|
||||||
|
*/
|
||||||
|
originalQuantity?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更原因
|
||||||
|
*/
|
||||||
|
changeReasons?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更数量
|
||||||
|
*/
|
||||||
|
changeQuantity?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终数量
|
||||||
|
*/
|
||||||
|
finalNumber?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作状态(字典)
|
||||||
|
*/
|
||||||
|
operationStatus?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人
|
||||||
|
*/
|
||||||
|
operationName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人联系电话
|
||||||
|
*/
|
||||||
|
operationPhone?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RepertoryDetailsQuery extends PageQuery {
|
||||||
|
/**
|
||||||
|
* 项目ID
|
||||||
|
*/
|
||||||
|
projectId?: string | number;
|
||||||
|
id?: string | number;
|
||||||
|
name?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库存ID
|
||||||
|
*/
|
||||||
|
repertoryId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据来源ID
|
||||||
|
*/
|
||||||
|
materialsorderId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物料编码
|
||||||
|
*/
|
||||||
|
materialCode?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原始数量
|
||||||
|
*/
|
||||||
|
originalQuantity?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更原因
|
||||||
|
*/
|
||||||
|
changeReasons?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更数量
|
||||||
|
*/
|
||||||
|
changeQuantity?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终数量
|
||||||
|
*/
|
||||||
|
finalNumber?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作状态(字典)
|
||||||
|
*/
|
||||||
|
operationStatus?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人
|
||||||
|
*/
|
||||||
|
operationName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人联系电话
|
||||||
|
*/
|
||||||
|
operationPhone?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
@ -97,3 +97,14 @@ export const delBatch = (ids: string | number | Array<string | number>) => {
|
|||||||
method: 'delete'
|
method: 'delete'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询物资-材料设备批次详情
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getPcDetail = (id: string | number): AxiosPromise<CailiaoshebeiVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/cailiaoshebei/cailiaoshebei/spQueryPlan/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -140,7 +140,10 @@ export interface SafetyInspectionForm extends BaseEntity {
|
|||||||
* 主键ID
|
* 主键ID
|
||||||
*/
|
*/
|
||||||
id?: string | number;
|
id?: string | number;
|
||||||
|
/**
|
||||||
|
* 整改单位类型
|
||||||
|
*/
|
||||||
|
rectificationUnit?: string;
|
||||||
/**
|
/**
|
||||||
* 父id(默认为0)
|
* 父id(默认为0)
|
||||||
*/
|
*/
|
||||||
|
@ -112,6 +112,11 @@ const props = defineProps({
|
|||||||
type: Function as PropType<(files: any[]) => void>,
|
type: Function as PropType<(files: any[]) => void>,
|
||||||
default: undefined
|
default: undefined
|
||||||
},
|
},
|
||||||
|
// 失败回调
|
||||||
|
onUploadError: {
|
||||||
|
type: Function as PropType<(err: any, file: any, fileList: any) => void>,
|
||||||
|
default: undefined
|
||||||
|
},
|
||||||
params: {
|
params: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({})
|
default: () => ({})
|
||||||
|
@ -47,6 +47,9 @@
|
|||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="success" plain icon="Check" @click="submitForm" v-hasPermi="['cailiaoshebei:cailiaoshebei:delete']">保存</el-button>
|
<el-button type="success" plain icon="Check" @click="submitForm" v-hasPermi="['cailiaoshebei:cailiaoshebei:delete']">保存</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button plain type="warning" icon="Finished" @click="handleAudit()" v-hasPermi="['out:monthPlan:remove']">审核</el-button>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -78,11 +81,6 @@
|
|||||||
<dict-tag :options="wf_business_status" :value="scope.row.planAuditStatus" />
|
<dict-tag :options="wf_business_status" :value="scope.row.planAuditStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" width="150">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)" v-hasPermi="['out:monthPlan:remove']">审核</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -205,6 +203,7 @@ const { queryParams, form, rules } = toRefs(data);
|
|||||||
|
|
||||||
/** 查询物资-材料设备列表 */
|
/** 查询物资-材料设备列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
if (!queryParams.value.batchNumber) return;
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await listCailiaoshebei(queryParams.value);
|
const res = await listCailiaoshebei(queryParams.value);
|
||||||
cailiaoshebeiList.value = res.rows;
|
cailiaoshebeiList.value = res.rows;
|
||||||
@ -215,15 +214,16 @@ const getList = async () => {
|
|||||||
//查询批次列表
|
//查询批次列表
|
||||||
const getBatchList = async () => {
|
const getBatchList = async () => {
|
||||||
const res = await listBatch(queryParams.value);
|
const res = await listBatch(queryParams.value);
|
||||||
console.log('🚀 ~ getBatchList ~ res:', res);
|
|
||||||
batchOptions.value = res.rows;
|
batchOptions.value = res.rows;
|
||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
try {
|
try {
|
||||||
|
queryParams.value.batchNumber = res.rows[0].batchNumber;
|
||||||
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
||||||
form.value.batchNumber = res.rows[0].batchNumber;
|
form.value.batchNumber = res.rows[0].batchNumber;
|
||||||
form.value.approvalProject = res.rows[0].approvalProject;
|
form.value.approvalProject = res.rows[0].approvalProject;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
form.value.batchNumber = '';
|
form.value.batchNumber = '';
|
||||||
|
queryParams.value.batchNumber = '';
|
||||||
}
|
}
|
||||||
getList();
|
getList();
|
||||||
};
|
};
|
||||||
@ -286,17 +286,6 @@ const handleAdd = () => {
|
|||||||
dialog.title = '选择物资-材料设备';
|
dialog.title = '选择物资-材料设备';
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 修改按钮操作 */
|
|
||||||
// const handleUpdate = async (row?: CailiaoshebeiVO) => {
|
|
||||||
// reset();
|
|
||||||
// const _id = row?.id || ids.value[0];
|
|
||||||
// const res = await getCailiaoshebei(_id);
|
|
||||||
// Object.assign(form.value, res.data);
|
|
||||||
// selectValue.value = (form.value.supplierId as string).split(',');
|
|
||||||
// dialog.visible = true;
|
|
||||||
// dialog.title = '修改物资-材料设备';
|
|
||||||
// };
|
|
||||||
|
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
buttonLoading.value = true;
|
buttonLoading.value = true;
|
||||||
@ -351,14 +340,15 @@ const handleDelete = async (row?: CailiaoshebeiVO) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** 审核按钮操作 */
|
/** 审核按钮操作 */
|
||||||
const handleAudit = async (row?: CailiaoshebeiVO) => {
|
const handleAudit = async () => {
|
||||||
const data = {
|
if (!form.value.approvalProject) {
|
||||||
...row,
|
proxy?.$modal.msgError('请选择批次号');
|
||||||
approvalProject: form.value.approvalProject
|
return;
|
||||||
};
|
}
|
||||||
|
proxy?.$tab.closePage(proxy.$route);
|
||||||
proxy?.$tab.openPage('/materials-management/batchPlan/indexEdit', '审核物资设备批次需求计划', {
|
proxy?.$tab.openPage('/materials-management/batchPlan/indexEdit', '审核物资设备批次需求计划', {
|
||||||
id: row?.id,
|
id: form.value.batchNumber,
|
||||||
data: JSON.stringify(data),
|
approvalProject: form.value.approvalProject + '_batchRequirements',
|
||||||
type: 'update'
|
type: 'update'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -16,58 +16,29 @@
|
|||||||
<!-- 表单区域 -->
|
<!-- 表单区域 -->
|
||||||
<el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
|
<el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
|
||||||
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
|
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
|
||||||
<h3 class="text-lg font-semibold text-gray-800">施工产值</h3>
|
<h3 class="text-lg font-semibold text-gray-800">物资设备批次需求计划</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<el-form
|
<el-table v-loading="loading" :data="cailiaoshebeiList">
|
||||||
ref="leaveFormRef"
|
<el-table-column label="供货商" align="center" prop="supplierCompany" />
|
||||||
v-loading="loading"
|
<el-table-column label="设备材料名称" align="center" prop="name" />
|
||||||
:disabled="routeParams.type === 'view'"
|
<el-table-column label="规格型号" align="center" prop="specification" />
|
||||||
:model="form"
|
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
|
||||||
:rules="rules"
|
<el-table-column label="计量单位" align="center" prop="unit" width="80" />
|
||||||
label-width="120px"
|
<el-table-column label="供应周期(天)" align="center" prop="estimatedCycle" />
|
||||||
class="space-y-4"
|
<el-table-column label="需求数量" align="center" prop="demandQuantity">
|
||||||
>
|
<template #default="scope">
|
||||||
<el-row :gutter="20" justify="center">
|
<el-input v-model="scope.row.demandQuantity" type="number" />
|
||||||
<el-col :span="12" :offset="0">
|
</template>
|
||||||
<el-form-item label="计划到场时间" prop="arrivalTime">
|
</el-table-column>
|
||||||
<el-date-picker
|
<el-table-column label="计划到场时间" align="center" prop="arrivalTime" width="250">
|
||||||
clearable
|
<template #default="scope">
|
||||||
v-model="form.arrivalTime"
|
<div class="flex justify-center w100%">
|
||||||
disabled
|
<el-date-picker v-model="scope.row.arrivalTime" type="date" value-format="YYYY-MM-DD" />
|
||||||
type="date"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
placeholder="请选择计划到场时间"
|
|
||||||
>
|
|
||||||
</el-date-picker>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="计划完成时间" prop="finishTime">
|
|
||||||
<el-date-picker clearable v-model="form.finishTime" disabled type="date" value-format="YYYY-MM-DD" placeholder="请选择计划完成时间">
|
|
||||||
</el-date-picker>
|
|
||||||
</el-form-item>
|
|
||||||
<div v-for="(item, index) in selectValue" :key="index">
|
|
||||||
<el-divider content-position="center"
|
|
||||||
><el-text tag="b">{{ item }}</el-text></el-divider
|
|
||||||
>
|
|
||||||
<el-form-item label="单价" prop="unitPrice">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].unitPrice" type="number" disabled placeholder="请输入单价" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="数量" prop="num">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].num" type="number" disabled placeholder="请输入数量" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="合同号" prop="contractNum">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].contractNum" disabled placeholder="请输入合同号" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="预估供应周期" prop="estimatedCycle">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].estimatedCycle" disabled type="number" placeholder="请输入预估供应周期" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="供货公司" prop="supplierCompany">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].supplierCompany" disabled placeholder="请输入供货公司" />
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</template>
|
||||||
</el-row>
|
</el-table-column>
|
||||||
</el-form>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<!-- 提交组件 -->
|
<!-- 提交组件 -->
|
||||||
@ -117,6 +88,8 @@ import { getKnowledgeDocument } from '@/api/design/technicalStandard';
|
|||||||
import { getConstructionValue } from '@/api/out/constructionValue';
|
import { getConstructionValue } from '@/api/out/constructionValue';
|
||||||
import { workScheduleListDetail } from '@/api/progress/plan';
|
import { workScheduleListDetail } from '@/api/progress/plan';
|
||||||
import { getCailiaoshebei } from '@/api/materials/suppliesprice';
|
import { getCailiaoshebei } from '@/api/materials/suppliesprice';
|
||||||
|
import { getPcDetail, listCailiaoshebei } from '@/api/materials/batchPlan';
|
||||||
|
import { CailiaoshebeiVO } from '@/api/materials/batchPlan/types';
|
||||||
// 获取用户 store
|
// 获取用户 store
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
// 从 store 中获取项目列表和当前选中的项目
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
@ -156,25 +129,11 @@ const submitFormData = ref<StartProcessBo>({
|
|||||||
});
|
});
|
||||||
const taskVariables = ref<Record<string, any>>({});
|
const taskVariables = ref<Record<string, any>>({});
|
||||||
const selectValue = ref<string[]>([]);
|
const selectValue = ref<string[]>([]);
|
||||||
|
const cailiaoshebeiList = ref<CailiaoshebeiVO[]>([]);
|
||||||
|
|
||||||
const initFormData = {
|
const initFormData = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
batchNumber: undefined,
|
approvalProject: undefined
|
||||||
supplierId: undefined,
|
|
||||||
supplier: undefined,
|
|
||||||
name: undefined,
|
|
||||||
supply: undefined,
|
|
||||||
specification: undefined,
|
|
||||||
signalment: undefined,
|
|
||||||
materialCode: undefined,
|
|
||||||
arrivalTime: undefined,
|
|
||||||
finishTime: undefined,
|
|
||||||
unit: undefined,
|
|
||||||
plan: undefined,
|
|
||||||
realQuantity: undefined,
|
|
||||||
projectId: currentProject.value.id,
|
|
||||||
listOfMaterialInventory: [],
|
|
||||||
remark: undefined
|
|
||||||
};
|
};
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
@ -199,20 +158,19 @@ const getInfo = () => {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
nextTick(async () => {
|
nextTick(async () => {
|
||||||
const res = JSON.parse(routeParams.value.data);
|
const id = routeParams.value.id.split('_')[0];
|
||||||
Object.assign(form.value, res.data);
|
const res = await listCailiaoshebei({ pageNum: 1, pageSize: 10, batchNumber: id });
|
||||||
selectValue.value = (form.value.supplier as string).split(',');
|
cailiaoshebeiList.value = res.rows;
|
||||||
if (!form.value.listOfMaterialInventory.length) {
|
if (!form.value.approvalProject) {
|
||||||
form.value.listOfMaterialInventory = selectValue.value.map((item) => {
|
const res = await getPcDetail(id);
|
||||||
return {
|
form.value.approvalProject = res.data.approvalProject;
|
||||||
supplierCompany: item,
|
} else {
|
||||||
estimatedCycle: '',
|
form.value.approvalProject = routeParams.value.approvalProject;
|
||||||
contractNum: '',
|
|
||||||
num: '',
|
|
||||||
unitPrice: ''
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('🚀 ~ getInfo ~ form.value.approvalProject:', form.value.approvalProject);
|
||||||
|
form.value.id = routeParams.value.id;
|
||||||
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
});
|
});
|
||||||
|
@ -333,6 +333,8 @@ const { queryParams, form, rules } = toRefs(data);
|
|||||||
|
|
||||||
/** 查询物资-材料设备列表 */
|
/** 查询物资-材料设备列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
if (!queryParams.value.batchNumber) return;
|
||||||
|
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await listCailiaoshebei(queryParams.value);
|
const res = await listCailiaoshebei(queryParams.value);
|
||||||
cailiaoshebeiList.value = res.rows;
|
cailiaoshebeiList.value = res.rows;
|
||||||
@ -347,14 +349,13 @@ const getBatchList = async () => {
|
|||||||
batchOptions.value = res.rows;
|
batchOptions.value = res.rows;
|
||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
try {
|
try {
|
||||||
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
|
||||||
queryParams.value.batchNumber = res.rows[0].batchNumber;
|
queryParams.value.batchNumber = res.rows[0].batchNumber;
|
||||||
|
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
||||||
form.value.batchNumber = res.rows[0].batchNumber;
|
form.value.batchNumber = res.rows[0].batchNumber;
|
||||||
form.value.batchId = res.rows[0].id;
|
form.value.approvalDesign = res.rows[0].approvalDesign;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
form.value.batchNumber = '';
|
form.value.batchNumber = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -362,7 +363,8 @@ const getBatchList = async () => {
|
|||||||
const handleNodeClick = (data: any) => {
|
const handleNodeClick = (data: any) => {
|
||||||
queryParams.value.batchNumber = data.batchNumber;
|
queryParams.value.batchNumber = data.batchNumber;
|
||||||
form.value.batchNumber = data.batchNumber;
|
form.value.batchNumber = data.batchNumber;
|
||||||
form.value.batchId = data.id;
|
form.value.approvalDesign = data.approvalDesign;
|
||||||
|
|
||||||
if (data.batchNumber === '0') {
|
if (data.batchNumber === '0') {
|
||||||
queryParams.value.batchNumber = '';
|
queryParams.value.batchNumber = '';
|
||||||
}
|
}
|
||||||
@ -378,7 +380,9 @@ const cancel = () => {
|
|||||||
/** 表单重置 */
|
/** 表单重置 */
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
const preservedBatchId = form.value.batchNumber; // 先保存当前的 batchNumber
|
const preservedBatchId = form.value.batchNumber; // 先保存当前的 batchNumber
|
||||||
form.value = { ...initFormData, batchNumber: preservedBatchId }; // 重置但保留
|
const approvalDesigndBatchId = form.value.approvalDesign; // 先保存当前的 batchNumber
|
||||||
|
|
||||||
|
form.value = { ...initFormData, batchNumber: preservedBatchId, approvalDesign: approvalDesigndBatchId }; // 重置但保留
|
||||||
cailiaoshebeiFormRef.value?.resetFields();
|
cailiaoshebeiFormRef.value?.resetFields();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -421,9 +425,14 @@ const handleUpdate = async (row?: CailiaoshebeiVO) => {
|
|||||||
|
|
||||||
/** 审核按钮操作 */
|
/** 审核按钮操作 */
|
||||||
const handleAudit = async () => {
|
const handleAudit = async () => {
|
||||||
|
if (!form.value.batchNumber) {
|
||||||
|
proxy?.$modal.msgError('请选择批次');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
proxy?.$tab.closePage(proxy.$route);
|
||||||
proxy?.$tab.openPage('/materials-management/cailiaoshebei/indexEdit', '审核材料设备设计', {
|
proxy?.$tab.openPage('/materials-management/cailiaoshebei/indexEdit', '审核材料设备设计', {
|
||||||
id: form.value.batchId,
|
id: form.value.batchNumber + '_materialDesign',
|
||||||
number: form.value.batchNumber,
|
approvalDesign: form.value.approvalDesign,
|
||||||
type: 'update'
|
type: 'update'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -19,55 +19,21 @@
|
|||||||
<h3 class="text-lg font-semibold text-gray-800">设计材料设备</h3>
|
<h3 class="text-lg font-semibold text-gray-800">设计材料设备</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<el-form
|
<el-table v-loading="loading" :data="cailiaoshebeiList">
|
||||||
ref="leaveFormRef"
|
<el-table-column label="供货商" align="center" prop="supplier" />
|
||||||
v-loading="loading"
|
<el-table-column label="设备材料名称" align="center" prop="name" />
|
||||||
:disabled="routeParams.type === 'view'"
|
<el-table-column label="供货来源" align="center" prop="supply">
|
||||||
:model="form"
|
<template #default="scope">
|
||||||
:rules="rules"
|
<dict-tag :options="supply" :value="scope.row.supply" />
|
||||||
label-width="120px"
|
</template>
|
||||||
class="space-y-4"
|
</el-table-column>
|
||||||
>
|
<el-table-column label="规格型号" align="center" prop="specification" />
|
||||||
<el-row :gutter="20" justify="center">
|
<el-table-column label="特征描述" align="center" prop="signalment" />
|
||||||
<el-col :span="12" :offset="0">
|
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
|
||||||
<el-form-item label="批次号" prop="batchNumber">
|
<el-table-column label="计量单位" align="center" prop="unit" />
|
||||||
<el-input v-model="form.batchNumber" placeholder="请输入批次ID" disabled />
|
<el-table-column label="计划数量" align="center" prop="plan" />
|
||||||
</el-form-item>
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<!-- <el-form-item label="供货商ID" prop="supplierId">
|
</el-table>
|
||||||
<el-input v-model="form.supplierId" placeholder="请输入供货商ID" />
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item label="供货商" prop="supplier">
|
|
||||||
<el-input v-model="form.supplier" disabled></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="设备材料名称" prop="name">
|
|
||||||
<el-input v-model="form.name" placeholder="请输入设备材料名称" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="供货来源" prop="supply">
|
|
||||||
<el-select v-model="form.supply" value-key="value" placeholder="请选择供货来源" clearable filterable @change="" disabled>
|
|
||||||
<el-option v-for="item in supply" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="规格型号" prop="specification">
|
|
||||||
<el-input v-model="form.specification" placeholder="请输入规格型号" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="特征描述" prop="signalment">
|
|
||||||
<el-input v-model="form.signalment" placeholder="请输入特征描述" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="物料编码" prop="materialCode">
|
|
||||||
<el-input v-model="form.materialCode" placeholder="请输入物料编码" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="计量单位" prop="unit">
|
|
||||||
<el-input v-model="form.unit" placeholder="请输入计量单位" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="计划数量" prop="plan">
|
|
||||||
<el-input v-model="form.plan" placeholder="请输入计划数量" type="number" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="form.remark" placeholder="请输入内容" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<!-- 提交组件 -->
|
<!-- 提交组件 -->
|
||||||
@ -112,7 +78,8 @@ import ApprovalButton from '@/components/Process/approvalButton.vue';
|
|||||||
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
|
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
import { useUserStoreHook } from '@/store/modules/user';
|
import { useUserStoreHook } from '@/store/modules/user';
|
||||||
import { getCailiaoshebei, listCailiaoshebei } from '@/api/materials/cailiaoshebei';
|
import { getCailiaoshebei, getPcDetail, listCailiaoshebei } from '@/api/materials/cailiaoshebei';
|
||||||
|
import { CailiaoshebeiVO } from '@/api/materials/cailiaoshebei/types';
|
||||||
// 获取用户 store
|
// 获取用户 store
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
// 从 store 中获取项目列表和当前选中的项目
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
@ -154,8 +121,12 @@ const submitFormData = ref<StartProcessBo>({
|
|||||||
});
|
});
|
||||||
const taskVariables = ref<Record<string, any>>({});
|
const taskVariables = ref<Record<string, any>>({});
|
||||||
const selectValue = ref<string[]>([]);
|
const selectValue = ref<string[]>([]);
|
||||||
|
const cailiaoshebeiList = ref<CailiaoshebeiVO[]>([]);
|
||||||
|
|
||||||
const initFormData = [];
|
const initFormData = {
|
||||||
|
approvalDesign: undefined,
|
||||||
|
id: undefined
|
||||||
|
};
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
rules: {}
|
rules: {}
|
||||||
@ -179,8 +150,16 @@ const getInfo = () => {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
nextTick(async () => {
|
nextTick(async () => {
|
||||||
const res = await listCailiaoshebei({ pageNum: 1, pageSize: 10, batchNumber: routeParams.value.batchNumber });
|
const id = routeParams.value.id.split('_')[0];
|
||||||
form.value = res.rows;
|
const res = await listCailiaoshebei({ pageNum: 1, pageSize: 10, batchNumber: id });
|
||||||
|
cailiaoshebeiList.value = res.rows;
|
||||||
|
if (!form.value.approvalDesign) {
|
||||||
|
const res = await getPcDetail(id);
|
||||||
|
form.value.approvalDesign = res.data.approvalDesign;
|
||||||
|
} else {
|
||||||
|
form.value.approvalDesign = routeParams.value.approvalDesign;
|
||||||
|
}
|
||||||
|
form.value.id = routeParams.value.id;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
});
|
});
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
</el-col> -->
|
</el-col> -->
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="success" plain icon="Check" @click="submitForm" v-hasPermi="['cailiaoshebei:cailiaoshebei:delete']">保存</el-button>
|
<el-button type="success" plain icon="Check" @click="submitForm" v-hasPermi="['cailiaoshebei:cailiaoshebei:delete']">保存</el-button>
|
||||||
|
<el-button plain type="warning" icon="Finished" @click="handleAudit()" v-hasPermi="['out:monthPlan:remove']">审核</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
@ -256,8 +257,10 @@ const getBatchList = async () => {
|
|||||||
batchOptions.value = res.rows;
|
batchOptions.value = res.rows;
|
||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
try {
|
try {
|
||||||
|
queryParams.value.batchNumber = res.rows[0].batchNumber;
|
||||||
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
||||||
form.value.batchNumber = res.rows[0].batchNumber;
|
form.value.batchNumber = res.rows[0].batchNumber;
|
||||||
|
form.value.approvalOrder = res.rows[0].approvalOrder;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
form.value.batchNumber = '';
|
form.value.batchNumber = '';
|
||||||
}
|
}
|
||||||
@ -268,7 +271,7 @@ const getBatchList = async () => {
|
|||||||
const handleNodeClick = (data: any) => {
|
const handleNodeClick = (data: any) => {
|
||||||
queryParams.value.batchNumber = data.batchNumber;
|
queryParams.value.batchNumber = data.batchNumber;
|
||||||
form.value.batchNumber = data.batchNumber;
|
form.value.batchNumber = data.batchNumber;
|
||||||
console.log('🚀 ~ handleNodeClick ~ form.value:', form.value);
|
form.value.approvalOrder = data.approvalOrder;
|
||||||
if (data.batchNumber === '0') {
|
if (data.batchNumber === '0') {
|
||||||
queryParams.value.batchNumber = '';
|
queryParams.value.batchNumber = '';
|
||||||
}
|
}
|
||||||
@ -348,6 +351,21 @@ const submitForm = async () => {
|
|||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** 审核按钮操作 */
|
||||||
|
const handleAudit = async () => {
|
||||||
|
if (!form.value.batchNumber) {
|
||||||
|
proxy?.$modal.msgError('请选择批次');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy?.$tab.closePage(proxy.$route);
|
||||||
|
proxy?.$tab.openPage('/materials-management/orderEquipment/indexEdit', '审核物资订货', {
|
||||||
|
id: form.value.batchNumber,
|
||||||
|
approvalOrder: form.value.approvalOrder + '_equipmentOrdering',
|
||||||
|
type: 'update'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/** 提交穿梭框数据 */
|
/** 提交穿梭框数据 */
|
||||||
const submitTransferForm = async () => {
|
const submitTransferForm = async () => {
|
||||||
cailiaoshebeiList.value = cailiaoshebeiSelectedList.value.map((id) => {
|
cailiaoshebeiList.value = cailiaoshebeiSelectedList.value.map((id) => {
|
||||||
|
346
src/views/materials/orderEquipment/indexEdit.vue
Normal file
346
src/views/materials/orderEquipment/indexEdit.vue
Normal file
@ -0,0 +1,346 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-4 bg-gray-50">
|
||||||
|
<div class="max-w-4xl mx-auto">
|
||||||
|
<!-- 顶部按钮区域 -->
|
||||||
|
<el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md">
|
||||||
|
<approvalButton
|
||||||
|
@submitForm="submitForm"
|
||||||
|
@approvalVerifyOpen="approvalVerifyOpen"
|
||||||
|
@handleApprovalRecord="handleApprovalRecord"
|
||||||
|
:buttonLoading="buttonLoading"
|
||||||
|
:id="form.id"
|
||||||
|
:status="form.approvalOrder"
|
||||||
|
:pageType="routeParams.type"
|
||||||
|
/>
|
||||||
|
</el-card>
|
||||||
|
<!-- 表单区域 -->
|
||||||
|
<el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
|
||||||
|
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
|
||||||
|
<h3 class="text-lg font-semibold text-gray-800">物资-设备订货</h3>
|
||||||
|
</div>
|
||||||
|
<div class="p-6">
|
||||||
|
<el-table v-loading="loading" :data="cailiaoshebeiList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<!-- <el-table-column label="供货商ID" align="center" prop="supplierId" /> -->
|
||||||
|
<!-- <el-table-column label="供货商" align="center" prop="supplierCompany" /> -->
|
||||||
|
<el-table-column label="设备材料名称" align="center" prop="name" />
|
||||||
|
<el-table-column label="规格型号" align="center" prop="specification" />
|
||||||
|
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
|
||||||
|
<el-table-column label="需求数量" align="center" prop="demandQuantity" width="80" />
|
||||||
|
<el-table-column label="验收数量" align="center" prop="acceptanceQuantity" />
|
||||||
|
<el-table-column label="订货量" align="center" prop="orderQuantity" />
|
||||||
|
<el-table-column label="预计到货时间" align="center" prop="expectedArrival" width="250" />
|
||||||
|
<el-table-column label="预计生产完成时间" align="center" prop="productionTime" width="250" />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<!-- 提交组件 -->
|
||||||
|
<submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" />
|
||||||
|
<approvalRecord ref="approvalRecordRef"></approvalRecord>
|
||||||
|
<!-- 流程选择对话框 -->
|
||||||
|
<el-dialog
|
||||||
|
draggable
|
||||||
|
v-model="dialogVisible.visible"
|
||||||
|
:title="dialogVisible.title"
|
||||||
|
:before-close="handleClose"
|
||||||
|
width="500"
|
||||||
|
class="rounded-lg shadow-lg"
|
||||||
|
>
|
||||||
|
<div class="p-4">
|
||||||
|
<p class="text-gray-600 mb-4">请选择要启动的流程:</p>
|
||||||
|
<el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%">
|
||||||
|
<el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3">
|
||||||
|
<el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors"
|
||||||
|
>取消</el-button
|
||||||
|
>
|
||||||
|
<el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors"
|
||||||
|
>确认</el-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Leave" lang="ts">
|
||||||
|
import { LeaveForm, LeaveQuery, LeaveVO } from '@/api/workflow/leave/types';
|
||||||
|
import { startWorkFlow } from '@/api/workflow/task';
|
||||||
|
import SubmitVerify from '@/components/Process/submitVerify.vue';
|
||||||
|
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
|
||||||
|
import ApprovalButton from '@/components/Process/approvalButton.vue';
|
||||||
|
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
import { useUserStoreHook } from '@/store/modules/user';
|
||||||
|
import { getPcDetail, listCailiaoshebei } from '@/api/materials/orderEquipment';
|
||||||
|
// 获取用户 store
|
||||||
|
const userStore = useUserStoreHook();
|
||||||
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
|
const currentProject = computed(() => userStore.selectedProject);
|
||||||
|
const buttonLoading = ref(false);
|
||||||
|
const loading = ref(true);
|
||||||
|
//路由参数
|
||||||
|
const routeParams = ref<Record<string, any>>({});
|
||||||
|
const flowCode = ref<string>('');
|
||||||
|
const status = ref<string>('');
|
||||||
|
const dialogVisible = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: '流程定义'
|
||||||
|
});
|
||||||
|
//提交组件
|
||||||
|
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
|
||||||
|
//审批记录组件
|
||||||
|
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
|
||||||
|
//按钮组件
|
||||||
|
const flowCodeOptions = [
|
||||||
|
{
|
||||||
|
value: currentProject.value?.id + '_equipmentOrdering',
|
||||||
|
label: '物资-设备订货审批'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
const { supply } = toRefs<any>(proxy?.useDict('supply'));
|
||||||
|
|
||||||
|
const leaveFormRef = ref<ElFormInstance>();
|
||||||
|
const dialog = reactive({
|
||||||
|
visible: false,
|
||||||
|
title: '',
|
||||||
|
isEdit: false
|
||||||
|
});
|
||||||
|
const submitFormData = ref<StartProcessBo>({
|
||||||
|
businessId: '',
|
||||||
|
flowCode: '',
|
||||||
|
variables: {}
|
||||||
|
});
|
||||||
|
const taskVariables = ref<Record<string, any>>({});
|
||||||
|
const selectValue = ref<string[]>([]);
|
||||||
|
const cailiaoshebeiList = ref([]);
|
||||||
|
|
||||||
|
const initFormData = {
|
||||||
|
approvalOrder: undefined,
|
||||||
|
id: undefined
|
||||||
|
};
|
||||||
|
const data = reactive({
|
||||||
|
form: { ...initFormData },
|
||||||
|
rules: {}
|
||||||
|
});
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
dialogVisible.visible = false;
|
||||||
|
flowCode.value = '';
|
||||||
|
buttonLoading.value = false;
|
||||||
|
};
|
||||||
|
const { form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = { ...initFormData };
|
||||||
|
leaveFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 获取详情 */
|
||||||
|
const getInfo = () => {
|
||||||
|
loading.value = true;
|
||||||
|
buttonLoading.value = false;
|
||||||
|
nextTick(async () => {
|
||||||
|
const id = routeParams.value.id.split('_')[0];
|
||||||
|
const res = await listCailiaoshebei({ pageNum: 1, pageSize: 10, batchNumber: id });
|
||||||
|
cailiaoshebeiList.value = res.rows;
|
||||||
|
if (!form.value.approvalOrder) {
|
||||||
|
const res = await getPcDetail(id);
|
||||||
|
form.value.approvalOrder = (res.data as any).approvalOrder;
|
||||||
|
} else {
|
||||||
|
form.value.approvalOrder = routeParams.value.approvalOrder;
|
||||||
|
}
|
||||||
|
console.log('🚀 ~ getInfo ~ form.value.approvalOrder:', form.value.approvalOrder);
|
||||||
|
form.value.id = routeParams.value.id;
|
||||||
|
|
||||||
|
loading.value = false;
|
||||||
|
buttonLoading.value = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = (status1: string) => {
|
||||||
|
status.value = status1;
|
||||||
|
submit(status.value, form.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
const submitFlow = async () => {
|
||||||
|
handleStartWorkFlow(form.value);
|
||||||
|
dialogVisible.visible = false;
|
||||||
|
};
|
||||||
|
//提交申请
|
||||||
|
const handleStartWorkFlow = async (data: LeaveForm) => {
|
||||||
|
try {
|
||||||
|
submitFormData.value.flowCode = flowCode.value;
|
||||||
|
submitFormData.value.businessId = data.id;
|
||||||
|
//流程变量
|
||||||
|
taskVariables.value = {
|
||||||
|
// leave4/5 使用的流程变量
|
||||||
|
userList: ['1', '3', '4']
|
||||||
|
};
|
||||||
|
submitFormData.value.variables = taskVariables.value;
|
||||||
|
const resp = await startWorkFlow(submitFormData.value);
|
||||||
|
if (submitVerifyRef.value) {
|
||||||
|
buttonLoading.value = false;
|
||||||
|
submitVerifyRef.value.openDialog(resp.data.taskId);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
buttonLoading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//审批记录
|
||||||
|
const handleApprovalRecord = () => {
|
||||||
|
approvalRecordRef.value.init(form.value.id);
|
||||||
|
};
|
||||||
|
//提交回调
|
||||||
|
const submitCallback = async () => {
|
||||||
|
await proxy.$tab.closePage(proxy.$route);
|
||||||
|
proxy.$router.go(-1);
|
||||||
|
};
|
||||||
|
//审批
|
||||||
|
const approvalVerifyOpen = async () => {
|
||||||
|
submitVerifyRef.value.openDialog(routeParams.value.taskId);
|
||||||
|
};
|
||||||
|
// 图纸上传成功之后 开始提交
|
||||||
|
const submit = async (status, data) => {
|
||||||
|
form.value = data;
|
||||||
|
if (status === 'draft') {
|
||||||
|
buttonLoading.value = false;
|
||||||
|
proxy?.$modal.msgSuccess('暂存成功');
|
||||||
|
proxy.$tab.closePage(proxy.$route);
|
||||||
|
proxy.$router.go(-1);
|
||||||
|
} else {
|
||||||
|
if ((form.value.approvalOrder === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') {
|
||||||
|
flowCode.value = flowCodeOptions[0].value;
|
||||||
|
dialogVisible.visible = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//说明启动过先随意穿个参数
|
||||||
|
if (flowCode.value === '' || flowCode.value === null) {
|
||||||
|
flowCode.value = 'xx';
|
||||||
|
}
|
||||||
|
await handleStartWorkFlow(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
nextTick(async () => {
|
||||||
|
routeParams.value = proxy.$route.query;
|
||||||
|
console.log('🚀 ~ proxy.$route.query:', proxy.$route.query);
|
||||||
|
reset();
|
||||||
|
loading.value = false;
|
||||||
|
if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') {
|
||||||
|
getInfo();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
/* 全局样式 */
|
||||||
|
:root {
|
||||||
|
--primary: #409eff;
|
||||||
|
--primary-light: #66b1ff;
|
||||||
|
--primary-dark: #3a8ee6;
|
||||||
|
--success: #67c23a;
|
||||||
|
--warning: #e6a23c;
|
||||||
|
--danger: #f56c6c;
|
||||||
|
--info: #909399;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 表单样式优化 */
|
||||||
|
.el-form-item {
|
||||||
|
.el-form-item__label {
|
||||||
|
color: #606266;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__inner,
|
||||||
|
.el-select .el-input__inner {
|
||||||
|
border-radius: 4px;
|
||||||
|
transition:
|
||||||
|
border-color 0.2s,
|
||||||
|
box-shadow 0.2s;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border-color: var(--primary-light);
|
||||||
|
box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-textarea__inner {
|
||||||
|
border-radius: 4px;
|
||||||
|
transition:
|
||||||
|
border-color 0.2s,
|
||||||
|
box-shadow 0.2s;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border-color: var(--primary-light);
|
||||||
|
box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 按钮样式优化 */
|
||||||
|
.el-button {
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: all 0.2s;
|
||||||
|
|
||||||
|
&.is-primary {
|
||||||
|
background-color: var(--primary);
|
||||||
|
border-color: var(--primary);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--primary-light);
|
||||||
|
border-color: var(--primary-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background-color: var(--primary-dark);
|
||||||
|
border-color: var(--primary-dark);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-text {
|
||||||
|
color: var(--primary);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: var(--primary-light);
|
||||||
|
background-color: rgba(64, 158, 255, 0.05);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 卡片样式优化 */
|
||||||
|
.el-card {
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
/* transform: translateY(-2px); */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 对话框样式优化 */
|
||||||
|
.el-dialog {
|
||||||
|
.el-dialog__header {
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
border-bottom: 1px solid #ebeef5;
|
||||||
|
padding: 15px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dialog__title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-dialog__footer {
|
||||||
|
padding: 15px 20px;
|
||||||
|
border-top: 1px solid #ebeef5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -30,40 +30,42 @@
|
|||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<el-table v-loading="loading" :data="cailiaoshebeiList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="cailiaoshebeiList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<!-- <el-table-column label="供货商ID" align="center" prop="supplierId" /> -->
|
<el-table-column label="设备材料名称" align="center" prop="name" width="110" />
|
||||||
<el-table-column label="供货商" align="center" prop="supplier" />
|
|
||||||
<el-table-column label="设备材料名称" align="center" prop="name" />
|
|
||||||
<el-table-column label="供货来源" align="center" prop="supply">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="supply" :value="scope.row.supply" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="规格型号" align="center" prop="specification" />
|
<el-table-column label="规格型号" align="center" prop="specification" />
|
||||||
<el-table-column label="特征描述" align="center" prop="signalment" />
|
<el-table-column label="需求数量" align="center" prop="demandQuantity" />
|
||||||
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
|
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
|
||||||
<el-table-column label="计量单位" align="center" prop="unit" />
|
<el-table-column label="计量单位" align="center" prop="unit" />
|
||||||
<el-table-column label="计划数量" align="center" prop="plan" />
|
<el-table-column label="计划到场时间" align="center" prop="arrivalTime" width="110" />
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="订货数量" align="center" prop="orderQuantity" />
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="预计到货时间" align="center" prop="expectedArrival" width="110" />
|
||||||
|
<el-table-column label="预计生产完成时间" align="center" prop="productionTime" width="130" />
|
||||||
|
<el-table-column label="验收数量" align="center" prop="acceptanceQuantity" />
|
||||||
|
<el-table-column label="实际到货时间" align="center" prop="actualArrival" width="110" />
|
||||||
|
<el-table-column label="需求提交时间" align="center" prop="requiredTime" width="110" />
|
||||||
|
<el-table-column label="订货时间" align="center" prop="orderTime" width="110" />
|
||||||
|
<el-table-column label="验收时间" align="center" prop="receptionTime" width="110" />
|
||||||
|
<el-table-column label="物资执行状态" align="center" prop="materialStatus" width="110">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tooltip content="修改" placement="top">
|
<dict-tag :options="material_status" :value="scope.row.materialStatus" />
|
||||||
<el-button
|
</template>
|
||||||
link
|
</el-table-column>
|
||||||
type="primary"
|
<el-table-column label="物资逾期类型" align="center" prop="overdueType" width="110">
|
||||||
icon="Edit"
|
<template #default="scope">
|
||||||
@click="handleUpdate(scope.row)"
|
<dict-tag :options="overdue_type" :value="scope.row.overdueType" />
|
||||||
v-hasPermi="['cailiaoshebei:cailiaoshebei:edit']"
|
</template>
|
||||||
></el-button>
|
</el-table-column>
|
||||||
</el-tooltip>
|
<el-table-column label="逾期原因" align="center" prop="cause" />
|
||||||
<el-tooltip content="删除" placement="top">
|
<el-table-column label="签收单据" align="center" prop="signature" />
|
||||||
<el-button
|
<el-table-column label="退货单据" align="center" prop="returnedSalesReport" />
|
||||||
link
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
type="primary"
|
<el-table-column label="操作" align="center" width="150" fixed="right">
|
||||||
icon="Delete"
|
<template #default="scope">
|
||||||
@click="handleDelete(scope.row)"
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['cailiaoshebei:cailiaoshebei:edit']"
|
||||||
v-hasPermi="['cailiaoshebei:cailiaoshebei:remove']"
|
>修改</el-button
|
||||||
></el-button>
|
>
|
||||||
</el-tooltip>
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['cailiaoshebei:cailiaoshebei:remove']"
|
||||||
|
>删除</el-button
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -73,56 +75,72 @@
|
|||||||
|
|
||||||
<!-- 添加或修改物资-材料设备对话框 -->
|
<!-- 添加或修改物资-材料设备对话框 -->
|
||||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
<el-form ref="cailiaoshebeiFormRef" :model="form" :rules="rules" label-width="110px">
|
<el-form ref="cailiaoshebeiFormRef" :model="form" :rules="rules" label-width="130px">
|
||||||
<el-form-item label="批次号" prop="batchNumber">
|
<el-form-item label="物资执行状态" prop="materialStatus">
|
||||||
<el-input v-model="form.batchNumber" placeholder="请输入批次ID" disabled />
|
<el-select v-model="form.bo.materialStatus" placeholder="请选择物资执行状态" clearable filterable @change="handleChange">
|
||||||
</el-form-item>
|
<el-option v-for="item in material_status" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
<!-- <el-form-item label="供货商ID" prop="supplierId">
|
|
||||||
<el-input v-model="form.supplierId" placeholder="请输入供货商ID" />
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item label="供货商" prop="supplier">
|
|
||||||
<el-select v-model="selectValue" value-key="id" multiple placeholder="请选择供货商" clearable filterable>
|
|
||||||
<el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id"> </el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="设备材料名称" prop="name">
|
<el-form-item label="物资逾期类型" prop="overdueType" v-if="form.bo.materialStatus == 3">
|
||||||
<el-input v-model="form.name" placeholder="请输入设备材料名称" />
|
<el-select v-model="form.bo.overdueType" placeholder="请选择物资逾期类型" clearable filterable>
|
||||||
</el-form-item>
|
<el-option v-for="item in overdue_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
<el-form-item label="供货来源" prop="supply">
|
|
||||||
<el-select v-model="form.supply" value-key="value" placeholder="请选择供货来源" clearable filterable @change="">
|
|
||||||
<el-option v-for="item in supply" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="规格型号" prop="specification">
|
<el-form-item label="逾期原因" prop="cause" v-if="form.bo.materialStatus == 3">
|
||||||
<el-input v-model="form.specification" placeholder="请输入规格型号" />
|
<el-input v-model="form.bo.cause" placeholder="请输入逾期原因" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="特征描述" prop="signalment">
|
<el-form-item label="实际到货时间" prop="actualArrival" v-if="form.bo.materialStatus < 4">
|
||||||
<el-input v-model="form.signalment" placeholder="请输入特征描述" />
|
<el-date-picker clearable v-model="form.bo.actualArrival" type="date" value-format="YYYY-MM-DD" placeholder="请选择实际到货时间" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="物料编码" prop="materialCode">
|
<el-form-item label="验收时间" prop="receptionTime" v-if="form.bo.materialStatus < 4">
|
||||||
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
|
<el-date-picker clearable v-model="form.bo.receptionTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择验收时间" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item label="计划到场时间" prop="arrivalTime">
|
<el-form-item label="验收数量" prop="acceptanceQuantity" v-if="form.bo.materialStatus < 4">
|
||||||
<el-date-picker clearable v-model="form.arrivalTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择计划到场时间">
|
<el-input v-model="form.bo.acceptanceQuantity" type="number" placeholder="请输入验收数量" />
|
||||||
</el-date-picker>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="计划完成时间" prop="finishTime">
|
<el-form-item label="需求提交时间" prop="requiredTime">
|
||||||
<el-date-picker clearable v-model="form.finishTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择计划完成时间">
|
<el-date-picker clearable v-model="form.bo.requiredTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择需求提交时间" />
|
||||||
</el-date-picker>
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item label="计量单位" prop="unit">
|
|
||||||
<el-input v-model="form.unit" placeholder="请输入计量单位" />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="计划数量" prop="plan">
|
|
||||||
<el-input v-model="form.plan" placeholder="请输入计划数量" type="number" />
|
<el-form-item label="订货时间" prop="orderTime">
|
||||||
|
<el-date-picker clearable v-model="form.bo.orderTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择订货时间" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="操作状态" prop="operationStatus" v-if="form.bo.materialStatus <= 4 || form.bo.materialStatus == 10">
|
||||||
|
<el-select v-model="form.bo.operationStatus" placeholder="请选择物资执行状态" clearable filterable @change="handleChange">
|
||||||
|
<el-option v-for="item in operation_s" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="单据类型" prop="billType" v-if="form.bo.materialStatus < 4 || form.bo.materialStatus == 10">
|
||||||
|
<el-select v-model="form.bo.billType" placeholder="请选择单据类型" clearable filterable>
|
||||||
|
<el-option label="签收单" value="1" />
|
||||||
|
<el-option label="退货单" value="2" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="上传文件" prop="file" v-if="form.bo.materialStatus < 4 || form.bo.materialStatus == 10">
|
||||||
|
<file-upload
|
||||||
|
v-model="form.file"
|
||||||
|
:fileType="['doc', 'docx']"
|
||||||
|
:autoUpload="false"
|
||||||
|
ref="fileUploadRef"
|
||||||
|
:data="{ ...form.bo }"
|
||||||
|
uploadUrl="/cailiaoshebei/materialsorder/changeTheStatusOfTheMaterials"
|
||||||
|
:onUploadError="
|
||||||
|
(err, file, fileList) => {
|
||||||
|
buttonLoading = false;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
:limit="1"
|
||||||
|
:onUploadSuccess="handleUploadSuccess"
|
||||||
|
showFileList
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- <el-form-item label="实际数量" prop="realQuantity">
|
|
||||||
<el-input v-model="form.realQuantity" placeholder="请输入实际数量" />
|
|
||||||
</el-form-item> -->
|
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
@ -149,7 +167,9 @@ import { listContractor } from '@/api/project/contractor';
|
|||||||
import { useUserStoreHook } from '@/store/modules/user';
|
import { useUserStoreHook } from '@/store/modules/user';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { supply } = toRefs<any>(proxy?.useDict('supply'));
|
const { supply, overdue_type, material_status, operation_status } = toRefs<any>(
|
||||||
|
proxy?.useDict('supply', 'material_status', 'overdue_type', 'operation_status')
|
||||||
|
);
|
||||||
// 获取用户 store
|
// 获取用户 store
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
// 从 store 中获取项目列表和当前选中的项目
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
@ -164,6 +184,7 @@ const single = ref(true);
|
|||||||
const multiple = ref(true);
|
const multiple = ref(true);
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
const batchOptions = ref<any[]>([]);
|
const batchOptions = ref<any[]>([]);
|
||||||
|
const fileUploadRef = ref();
|
||||||
|
|
||||||
const queryFormRef = ref<ElFormInstance>();
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
const cailiaoshebeiFormRef = ref<ElFormInstance>();
|
const cailiaoshebeiFormRef = ref<ElFormInstance>();
|
||||||
@ -188,7 +209,18 @@ const initFormData: CailiaoshebeiForm = {
|
|||||||
unit: undefined,
|
unit: undefined,
|
||||||
plan: undefined,
|
plan: undefined,
|
||||||
realQuantity: undefined,
|
realQuantity: undefined,
|
||||||
|
file: undefined,
|
||||||
projectId: currentProject.value.id,
|
projectId: currentProject.value.id,
|
||||||
|
bo: {
|
||||||
|
requiredTime: undefined,
|
||||||
|
orderTime: undefined,
|
||||||
|
receptionTime: undefined,
|
||||||
|
materialStatus: undefined,
|
||||||
|
overdueType: undefined,
|
||||||
|
cause: undefined,
|
||||||
|
billType: undefined,
|
||||||
|
remark: undefined
|
||||||
|
},
|
||||||
remark: undefined
|
remark: undefined
|
||||||
};
|
};
|
||||||
const data = reactive<PageData<CailiaoshebeiForm, CailiaoshebeiQuery>>({
|
const data = reactive<PageData<CailiaoshebeiForm, CailiaoshebeiQuery>>({
|
||||||
@ -295,12 +327,13 @@ const handleAdd = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
|
const operation_s = ref([]);
|
||||||
const handleUpdate = async (row?: CailiaoshebeiVO) => {
|
const handleUpdate = async (row?: CailiaoshebeiVO) => {
|
||||||
reset();
|
reset();
|
||||||
const _id = row?.id || ids.value[0];
|
operation_s.value = operation_status.value.slice(0, 2);
|
||||||
const res = await getCailiaoshebei(_id);
|
Object.assign(form.value.bo, row);
|
||||||
Object.assign(form.value, res.data);
|
console.log('🚀 ~ handleUpdate ~ form.value:', form.value);
|
||||||
selectValue.value = (form.value.supplierId as string).split(',');
|
// selectValue.value = (form.value.supplierId as string).split(',');
|
||||||
dialog.visible = true;
|
dialog.visible = true;
|
||||||
dialog.title = '修改物资-材料设备';
|
dialog.title = '修改物资-材料设备';
|
||||||
};
|
};
|
||||||
@ -311,14 +344,7 @@ const submitForm = () => {
|
|||||||
cailiaoshebeiFormRef.value?.validate(async (valid: boolean) => {
|
cailiaoshebeiFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
buttonLoading.value = true;
|
buttonLoading.value = true;
|
||||||
if (form.value.id) {
|
fileUploadRef.value!.submitUpload();
|
||||||
await updateCailiaoshebei(form.value).finally(() => (buttonLoading.value = false));
|
|
||||||
} else {
|
|
||||||
await addCailiaoshebei(form.value).finally(() => (buttonLoading.value = false));
|
|
||||||
}
|
|
||||||
proxy?.$modal.msgSuccess('操作成功');
|
|
||||||
dialog.visible = false;
|
|
||||||
await getList();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -353,15 +379,21 @@ const handleDelete = async (row?: CailiaoshebeiVO) => {
|
|||||||
await getList();
|
await getList();
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 导出按钮操作 */
|
const handleUploadSuccess = () => {
|
||||||
const handleExport = () => {
|
proxy?.$modal.msgSuccess('操作成功');
|
||||||
proxy?.download(
|
dialog.visible = false;
|
||||||
'cailiaoshebei/cailiaoshebei/export',
|
buttonLoading.value = false;
|
||||||
{
|
getList();
|
||||||
...queryParams.value
|
};
|
||||||
},
|
|
||||||
`cailiaoshebei_${new Date().getTime()}.xlsx`
|
const handleChange = (value: number) => {
|
||||||
);
|
if (!(value < 4 || value == 10)) {
|
||||||
|
form.value.bo.billType = '';
|
||||||
|
form.value.file = '';
|
||||||
|
} else if (value == 3) {
|
||||||
|
form.value.bo.overdueType = '';
|
||||||
|
form.value.bo.cause = '';
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 查询供货商列表 */
|
/** 查询供货商列表 */
|
||||||
|
257
src/views/materials/repertory/index.vue
Normal file
257
src/views/materials/repertory/index.vue
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="name" :inline="true">
|
||||||
|
<el-form-item label="名称" prop="name">
|
||||||
|
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:repertoryDetails:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="repertoryDetailsList">
|
||||||
|
<el-table-column label="名称" align="center" prop="name" />
|
||||||
|
<el-table-column label="规格" align="center" prop="specification" />
|
||||||
|
<el-table-column label="物料编码" align="center" prop="materialCode" />
|
||||||
|
<el-table-column label="原始数量" align="center" prop="originalQuantity" />
|
||||||
|
<el-table-column label="变更原因" align="center" prop="changeReasons" />
|
||||||
|
<el-table-column label="变更数量" align="center" prop="changeQuantity" />
|
||||||
|
<el-table-column label="操作状态" align="center" prop="operationStatus">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="operation_status" :value="scope.row.operationStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作人" align="center" prop="operationName" />
|
||||||
|
<el-table-column label="操作人联系电话" align="center" prop="operationPhone" />
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改物资-库存对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="repertoryDetailsFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<!-- <el-form-item label="库存ID" prop="repertoryId">
|
||||||
|
<el-input v-model="form.repertoryId" placeholder="请输入库存ID" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="数据来源ID" prop="materialsorderId">
|
||||||
|
<el-input v-model="form.materialsorderId" placeholder="请输入数据来源ID" />
|
||||||
|
</el-form-item> -->
|
||||||
|
<el-form-item label="物料编码" prop="materialCode">
|
||||||
|
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="变更原因" prop="changeReasons">
|
||||||
|
<el-input v-model="form.changeReasons" placeholder="请输入变更原因" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="变更数量" prop="changeQuantity">
|
||||||
|
<el-input v-model="form.changeQuantity" placeholder="请输入变更数量" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="操作人" prop="operationName">
|
||||||
|
<el-input v-model="form.operationName" placeholder="请输入操作人" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="操作状态" prop="operationStatus">
|
||||||
|
<el-select v-model="form.operationStatus" placeholder="请选择操作状态">
|
||||||
|
<el-option v-for="item in operation_s" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="联系电话" prop="operationPhone">
|
||||||
|
<el-input v-model="form.operationPhone" placeholder="请输入操作人联系电话" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="RepertoryDetails" lang="ts">
|
||||||
|
import {
|
||||||
|
listRepertoryDetails,
|
||||||
|
getRepertoryDetails,
|
||||||
|
delRepertoryDetails,
|
||||||
|
addRepertoryDetails,
|
||||||
|
updateRepertoryDetails
|
||||||
|
} from '@/api/materials/repertoryDetails';
|
||||||
|
import { RepertoryDetailsVO, RepertoryDetailsQuery, RepertoryDetailsForm } from '@/api/materials/repertoryDetails/types';
|
||||||
|
import { useUserStoreHook } from '@/store/modules/user';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const operation_s = ref([]);
|
||||||
|
const repertoryDetailsList = ref<RepertoryDetailsVO[]>([]);
|
||||||
|
const buttonLoading = ref(false);
|
||||||
|
const loading = ref(true);
|
||||||
|
const showSearch = ref(true);
|
||||||
|
const ids = ref<Array<string | number>>([]);
|
||||||
|
const total = ref(0);
|
||||||
|
const { operation_status } = toRefs(proxy?.useDict('operation_status'));
|
||||||
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
|
const repertoryDetailsFormRef = ref<ElFormInstance>();
|
||||||
|
// 获取用户 store
|
||||||
|
const userStore = useUserStoreHook();
|
||||||
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
|
const currentProject = computed(() => userStore.selectedProject);
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const initFormData: RepertoryDetailsForm = {
|
||||||
|
id: undefined,
|
||||||
|
projectId: currentProject.value.id,
|
||||||
|
repertoryId: undefined,
|
||||||
|
materialsorderId: undefined,
|
||||||
|
materialCode: undefined,
|
||||||
|
originalQuantity: undefined,
|
||||||
|
changeReasons: undefined,
|
||||||
|
changeQuantity: undefined,
|
||||||
|
finalNumber: undefined,
|
||||||
|
operationStatus: undefined,
|
||||||
|
operationName: undefined,
|
||||||
|
operationPhone: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<RepertoryDetailsForm, RepertoryDetailsQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
projectId: currentProject.value.id,
|
||||||
|
repertoryId: undefined,
|
||||||
|
materialsorderId: undefined,
|
||||||
|
materialCode: undefined,
|
||||||
|
name: undefined,
|
||||||
|
|
||||||
|
id: undefined,
|
||||||
|
originalQuantity: undefined,
|
||||||
|
changeReasons: undefined,
|
||||||
|
changeQuantity: undefined,
|
||||||
|
finalNumber: undefined,
|
||||||
|
operationStatus: undefined,
|
||||||
|
operationName: undefined,
|
||||||
|
operationPhone: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: 'ID不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询物资-库存列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listRepertoryDetails(queryParams.value);
|
||||||
|
repertoryDetailsList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = { ...initFormData };
|
||||||
|
repertoryDetailsFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
reset();
|
||||||
|
operation_s.value = operation_status.value.slice(-2);
|
||||||
|
console.log('🚀 ~ handleAdd ~ operation_s.value:', operation_s.value, operation_status);
|
||||||
|
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = '添加物资-库存';
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: RepertoryDetailsVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0];
|
||||||
|
const res = await getRepertoryDetails(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = '修改物资-库存';
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
repertoryDetailsFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
form.value.repertoryId = route.query.id as string;
|
||||||
|
await addRepertoryDetails(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
proxy?.$modal.msgSuccess('操作成功');
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.query.id,
|
||||||
|
(nid: string, oid) => {
|
||||||
|
console.log(nid);
|
||||||
|
queryParams.value.repertoryId = nid;
|
||||||
|
form.value.repertoryId = nid;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
queryParams.value.repertoryId = route.query.id as string;
|
||||||
|
form.value.repertoryId = route.query.id as string;
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
|
||||||
|
//监听项目id刷新数据
|
||||||
|
const listeningProject = watch(
|
||||||
|
() => currentProject.value.id,
|
||||||
|
(nid, oid) => {
|
||||||
|
queryParams.value.projectId = nid;
|
||||||
|
form.value.projectId = nid;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
listeningProject();
|
||||||
|
});
|
||||||
|
</script>
|
167
src/views/materials/repertoryDetails/index.vue
Normal file
167
src/views/materials/repertoryDetails/index.vue
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="设备材料名称" prop="name" label-width="100">
|
||||||
|
<el-input v-model="queryParams.name" placeholder="请输入设备材料名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<!-- <template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:repertory:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['system:repertory:edit']"
|
||||||
|
>修改</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['system:repertory:remove']"
|
||||||
|
>删除</el-button
|
||||||
|
>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['system:repertory:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template> -->
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="repertoryList">
|
||||||
|
<!-- <el-table-column type="selection" width="55" align="center" /> -->
|
||||||
|
<el-table-column label="设备材料名称" align="center" prop="name" />
|
||||||
|
<el-table-column label="规格型号" align="center" prop="specification" />
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="View" @click="handleUpdate(scope.row)" v-hasPermi="['system:repertory:edit']">详情</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Repertory" lang="ts">
|
||||||
|
import { listRepertory, getRepertory, delRepertory, addRepertory, updateRepertory } from '@/api/materials/repertory';
|
||||||
|
import { RepertoryVO, RepertoryQuery, RepertoryForm } from '@/api/materials/repertory/types';
|
||||||
|
import { useUserStoreHook } from '@/store/modules/user';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const repertoryList = ref<RepertoryVO[]>([]);
|
||||||
|
const buttonLoading = ref(false);
|
||||||
|
const loading = ref(true);
|
||||||
|
const showSearch = ref(true);
|
||||||
|
const ids = ref<Array<string | number>>([]);
|
||||||
|
const single = ref(true);
|
||||||
|
const multiple = ref(true);
|
||||||
|
const total = ref(0);
|
||||||
|
// 获取用户 store
|
||||||
|
const userStore = useUserStoreHook();
|
||||||
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
|
const currentProject = computed(() => userStore.selectedProject);
|
||||||
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
|
const repertoryFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: RepertoryForm = {
|
||||||
|
id: undefined,
|
||||||
|
projectId: undefined,
|
||||||
|
name: undefined,
|
||||||
|
specification: undefined,
|
||||||
|
remark: undefined
|
||||||
|
};
|
||||||
|
const data = reactive<PageData<RepertoryForm, RepertoryQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
projectId: undefined,
|
||||||
|
name: undefined,
|
||||||
|
specification: undefined,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: 'ID不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询物资-库存详情列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listRepertory(queryParams.value);
|
||||||
|
repertoryList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = { ...initFormData };
|
||||||
|
repertoryFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: RepertoryVO) => {
|
||||||
|
proxy?.$tab.openPage('/materials-management/repertoryDetail', '物资清单详情', {
|
||||||
|
id: row.id
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
|
||||||
|
//监听项目id刷新数据
|
||||||
|
const listeningProject = watch(
|
||||||
|
() => currentProject.value.id,
|
||||||
|
(nid, oid) => {
|
||||||
|
queryParams.value.projectId = nid;
|
||||||
|
form.value.projectId = nid;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
listeningProject();
|
||||||
|
});
|
||||||
|
</script>
|
@ -39,6 +39,14 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="19">
|
<el-col :span="19">
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button plain type="warning" icon="Finished" @click="handleAudit()" v-hasPermi="['out:monthPlan:remove']">审核</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
<el-table v-loading="loading" :data="cailiaoshebeiList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="cailiaoshebeiList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="供货商" align="center" prop="supplier" />
|
<el-table-column label="供货商" align="center" prop="supplier" />
|
||||||
@ -75,7 +83,6 @@
|
|||||||
><el-button link type="primary" icon="View" @click="handleDelete(scope.row)" v-hasPermi="['cailiaoshebei:cailiaoshebei:remove']"
|
><el-button link type="primary" icon="View" @click="handleDelete(scope.row)" v-hasPermi="['cailiaoshebei:cailiaoshebei:remove']"
|
||||||
>详情</el-button
|
>详情</el-button
|
||||||
>
|
>
|
||||||
<el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)" v-hasPermi="['out:monthPlan:remove']">审核</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -321,6 +328,8 @@ const { queryParams, form, rules } = toRefs(data);
|
|||||||
|
|
||||||
/** 查询物资-材料设备列表 */
|
/** 查询物资-材料设备列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
if (!queryParams.value.batchNumber) return;
|
||||||
|
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await listCailiaoshebei(queryParams.value);
|
const res = await listCailiaoshebei(queryParams.value);
|
||||||
cailiaoshebeiList.value = res.rows;
|
cailiaoshebeiList.value = res.rows;
|
||||||
@ -335,6 +344,7 @@ const getBatchList = async () => {
|
|||||||
batchOptions.value = res.rows;
|
batchOptions.value = res.rows;
|
||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
try {
|
try {
|
||||||
|
queryParams.value.batchNumber = res.rows[0].batchNumber;
|
||||||
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
batchTreeRef.value.setCurrentKey(res.rows[0].batchNumber);
|
||||||
form.value.batchNumber = res.rows[0].batchNumber;
|
form.value.batchNumber = res.rows[0].batchNumber;
|
||||||
form.value.approvalPlan = res.rows[0].approvalPlan;
|
form.value.approvalPlan = res.rows[0].approvalPlan;
|
||||||
@ -351,7 +361,6 @@ const handleNodeClick = (data: any) => {
|
|||||||
queryParams.value.batchNumber = data.batchNumber;
|
queryParams.value.batchNumber = data.batchNumber;
|
||||||
form.value.batchNumber = data.batchNumber;
|
form.value.batchNumber = data.batchNumber;
|
||||||
form.value.approvalPlan = data.approvalPlan;
|
form.value.approvalPlan = data.approvalPlan;
|
||||||
|
|
||||||
console.log('🚀 ~ handleNodeClick ~ form.value:', form.value);
|
console.log('🚀 ~ handleNodeClick ~ form.value:', form.value);
|
||||||
if (data.batchNumber === '0') {
|
if (data.batchNumber === '0') {
|
||||||
queryParams.value.batchNumber = '';
|
queryParams.value.batchNumber = '';
|
||||||
@ -399,7 +408,6 @@ const handleUpdate = async (row?: CailiaoshebeiVO) => {
|
|||||||
const res = await getCailiaoshebei(_id);
|
const res = await getCailiaoshebei(_id);
|
||||||
Object.assign(form.value, res.data);
|
Object.assign(form.value, res.data);
|
||||||
selectValue.value = (form.value.supplier as string).split(',');
|
selectValue.value = (form.value.supplier as string).split(',');
|
||||||
|
|
||||||
if (!form.value.listOfMaterialInventory.length) {
|
if (!form.value.listOfMaterialInventory.length) {
|
||||||
form.value.listOfMaterialInventory = selectValue.value.map((item) => {
|
form.value.listOfMaterialInventory = selectValue.value.map((item) => {
|
||||||
return {
|
return {
|
||||||
@ -452,14 +460,16 @@ const handleDelete = async (row?: CailiaoshebeiVO) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** 审核按钮操作 */
|
/** 审核按钮操作 */
|
||||||
const handleAudit = async (row?: CailiaoshebeiVO) => {
|
const handleAudit = async () => {
|
||||||
const data = {
|
if (!form.value.batchNumber) {
|
||||||
...row,
|
proxy?.$modal.msgError('请选择批次');
|
||||||
approvalPlan: form.value.approvalPlan
|
return;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
proxy?.$tab.closePage(proxy.$route);
|
||||||
proxy?.$tab.openPage('/materials-management/suppliesprice/indexEdit', '审核物资供应总计划', {
|
proxy?.$tab.openPage('/materials-management/suppliesprice/indexEdit', '审核物资供应总计划', {
|
||||||
id: row?.id,
|
id: form.value.batchNumber,
|
||||||
data: JSON.stringify(data),
|
approvalPlan: form.value.approvalPlan + '_materialsPlans',
|
||||||
type: 'update'
|
type: 'update'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -16,58 +16,34 @@
|
|||||||
<!-- 表单区域 -->
|
<!-- 表单区域 -->
|
||||||
<el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
|
<el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
|
||||||
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
|
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
|
||||||
<h3 class="text-lg font-semibold text-gray-800">施工产值</h3>
|
<h3 class="text-lg font-semibold text-gray-800">物资供应总计划</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<el-form
|
<el-table v-loading="loading" :data="cailiaoshebeiList">
|
||||||
ref="leaveFormRef"
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
v-loading="loading"
|
<el-table-column label="供货商" align="center" prop="supplier" />
|
||||||
:disabled="routeParams.type === 'view'"
|
<el-table-column label="设备材料名称" align="center" prop="name" />
|
||||||
:model="form"
|
<el-table-column label="供货来源" align="center" prop="supply">
|
||||||
:rules="rules"
|
<template #default="scope">
|
||||||
label-width="120px"
|
<dict-tag :options="supply" :value="scope.row.supply" />
|
||||||
class="space-y-4"
|
</template>
|
||||||
>
|
</el-table-column>
|
||||||
<el-row :gutter="20" justify="center">
|
<el-table-column label="规格型号" align="center" prop="specification" />
|
||||||
<el-col :span="12" :offset="0">
|
<el-table-column label="特征描述" align="center" prop="signalment" />
|
||||||
<el-form-item label="计划到场时间" prop="arrivalTime">
|
<el-table-column label="物料编码" align="center" prop="materialCode" width="200" />
|
||||||
<el-date-picker
|
<el-table-column label="计划到场时间" align="center" prop="arrivalTime" width="180">
|
||||||
clearable
|
<template #default="scope">
|
||||||
v-model="form.arrivalTime"
|
<span>{{ parseTime(scope.row.arrivalTime, '{y}-{m}-{d}') }}</span>
|
||||||
disabled
|
</template>
|
||||||
type="date"
|
</el-table-column>
|
||||||
value-format="YYYY-MM-DD"
|
<el-table-column label="计划完成时间" align="center" prop="finishTime" width="180">
|
||||||
placeholder="请选择计划到场时间"
|
<template #default="scope">
|
||||||
>
|
<span>{{ parseTime(scope.row.finishTime, '{y}-{m}-{d}') }}</span>
|
||||||
</el-date-picker>
|
</template>
|
||||||
</el-form-item>
|
</el-table-column>
|
||||||
<el-form-item label="计划完成时间" prop="finishTime">
|
<el-table-column label="计量单位" align="center" prop="unit" />
|
||||||
<el-date-picker clearable v-model="form.finishTime" disabled type="date" value-format="YYYY-MM-DD" placeholder="请选择计划完成时间">
|
<el-table-column label="计划数量" align="center" prop="plan" />
|
||||||
</el-date-picker>
|
</el-table>
|
||||||
</el-form-item>
|
|
||||||
<div v-for="(item, index) in selectValue" :key="index">
|
|
||||||
<el-divider content-position="center"
|
|
||||||
><el-text tag="b">{{ item }}</el-text></el-divider
|
|
||||||
>
|
|
||||||
<el-form-item label="单价" prop="unitPrice">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].unitPrice" type="number" disabled placeholder="请输入单价" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="数量" prop="num">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].num" type="number" disabled placeholder="请输入数量" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="合同号" prop="contractNum">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].contractNum" disabled placeholder="请输入合同号" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="预估供应周期" prop="estimatedCycle">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].estimatedCycle" disabled type="number" placeholder="请输入预估供应周期" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="供货公司" prop="supplierCompany">
|
|
||||||
<el-input v-model="form.listOfMaterialInventory[index].supplierCompany" disabled placeholder="请输入供货公司" />
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<!-- 提交组件 -->
|
<!-- 提交组件 -->
|
||||||
@ -116,7 +92,7 @@ const { design_change_reason_type } = toRefs<any>(proxy?.useDict('design_change_
|
|||||||
import { getKnowledgeDocument } from '@/api/design/technicalStandard';
|
import { getKnowledgeDocument } from '@/api/design/technicalStandard';
|
||||||
import { getConstructionValue } from '@/api/out/constructionValue';
|
import { getConstructionValue } from '@/api/out/constructionValue';
|
||||||
import { workScheduleListDetail } from '@/api/progress/plan';
|
import { workScheduleListDetail } from '@/api/progress/plan';
|
||||||
import { getCailiaoshebei } from '@/api/materials/suppliesprice';
|
import { getCailiaoshebei, getPcDetail, listCailiaoshebei } from '@/api/materials/suppliesprice';
|
||||||
// 获取用户 store
|
// 获取用户 store
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
// 从 store 中获取项目列表和当前选中的项目
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
@ -139,9 +115,10 @@ const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
|
|||||||
const flowCodeOptions = [
|
const flowCodeOptions = [
|
||||||
{
|
{
|
||||||
value: currentProject.value?.id + '_materialsPlans',
|
value: currentProject.value?.id + '_materialsPlans',
|
||||||
label: '批次需求计划审批'
|
label: '材料总计划审批'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
const { supply } = toRefs<any>(proxy?.useDict('supply'));
|
||||||
|
|
||||||
const leaveFormRef = ref<ElFormInstance>();
|
const leaveFormRef = ref<ElFormInstance>();
|
||||||
const dialog = reactive({
|
const dialog = reactive({
|
||||||
@ -156,25 +133,11 @@ const submitFormData = ref<StartProcessBo>({
|
|||||||
});
|
});
|
||||||
const taskVariables = ref<Record<string, any>>({});
|
const taskVariables = ref<Record<string, any>>({});
|
||||||
const selectValue = ref<string[]>([]);
|
const selectValue = ref<string[]>([]);
|
||||||
|
const cailiaoshebeiList = ref([]);
|
||||||
|
|
||||||
const initFormData = {
|
const initFormData = {
|
||||||
id: undefined,
|
approvalPlan: undefined,
|
||||||
batchNumber: undefined,
|
id: undefined
|
||||||
supplierId: undefined,
|
|
||||||
supplier: undefined,
|
|
||||||
name: undefined,
|
|
||||||
supply: undefined,
|
|
||||||
specification: undefined,
|
|
||||||
signalment: undefined,
|
|
||||||
materialCode: undefined,
|
|
||||||
arrivalTime: undefined,
|
|
||||||
finishTime: undefined,
|
|
||||||
unit: undefined,
|
|
||||||
plan: undefined,
|
|
||||||
realQuantity: undefined,
|
|
||||||
projectId: currentProject.value.id,
|
|
||||||
listOfMaterialInventory: [],
|
|
||||||
remark: undefined
|
|
||||||
};
|
};
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
@ -199,20 +162,18 @@ const getInfo = () => {
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
nextTick(async () => {
|
nextTick(async () => {
|
||||||
const res = JSON.parse(routeParams.value.data);
|
const id = routeParams.value.id.split('_')[0];
|
||||||
Object.assign(form.value, res.data);
|
const res = await listCailiaoshebei({ pageNum: 1, pageSize: 10, batchNumber: id });
|
||||||
selectValue.value = (form.value.supplier as string).split(',');
|
cailiaoshebeiList.value = res.rows;
|
||||||
if (!form.value.listOfMaterialInventory.length) {
|
if (!form.value.approvalPlan) {
|
||||||
form.value.listOfMaterialInventory = selectValue.value.map((item) => {
|
const res = await getPcDetail(id);
|
||||||
return {
|
form.value.approvalPlan = res.data.approvalPlan;
|
||||||
supplierCompany: item,
|
} else {
|
||||||
estimatedCycle: '',
|
form.value.approvalPlan = routeParams.value.approvalPlan;
|
||||||
contractNum: '',
|
|
||||||
num: '',
|
|
||||||
unitPrice: ''
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
console.log('🚀 ~ getInfo ~ form.value.approvalDesign:', form.value.approvalPlan);
|
||||||
|
form.value.id = routeParams.value.id;
|
||||||
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
buttonLoading.value = false;
|
buttonLoading.value = false;
|
||||||
});
|
});
|
||||||
|
@ -26,6 +26,9 @@
|
|||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
|
||||||
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -86,7 +89,7 @@
|
|||||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
<el-form ref="progressCategoryFormRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="progressCategoryFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="类别名称" prop="name">
|
<el-form-item label="类别名称" prop="name">
|
||||||
<el-input v-model="form.name" placeholder="请输入类别名称" disabled />
|
<el-input v-model="form.name" placeholder="请输入类别名称" :disabled="form.id != null" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="计量单位" prop="unit">
|
<el-form-item label="计量单位" prop="unit">
|
||||||
<el-input v-model="form.unit" placeholder="请输入计量单位" />
|
<el-input v-model="form.unit" placeholder="请输入计量单位" />
|
||||||
@ -312,7 +315,7 @@ const toggleExpandAll = (data: ProgressCategoryVO[], status: boolean) => {
|
|||||||
const isDisabled = ref<boolean>(false);
|
const isDisabled = ref<boolean>(false);
|
||||||
const handleUpdate = async (row: ProgressCategoryVO) => {
|
const handleUpdate = async (row: ProgressCategoryVO) => {
|
||||||
reset();
|
reset();
|
||||||
if (row.unitType == '2') {
|
if (!row.unitType) {
|
||||||
isDisabled.value = true;
|
isDisabled.value = true;
|
||||||
}
|
}
|
||||||
await getTreeselect();
|
await getTreeselect();
|
||||||
|
310
src/views/progress/progressCategorySystemTemplate/index.vue
Normal file
310
src/views/progress/progressCategorySystemTemplate/index.vue
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||||
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="类别名称" prop="name">
|
||||||
|
<el-input v-model="queryParams.name" placeholder="请输入类别名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="施工类型" prop="constructionType">
|
||||||
|
<el-select v-model="queryParams.constructionType" placeholder="请选择施工类型" clearable @change="getList">
|
||||||
|
<el-option v-for="dict in project_category_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['progress:progressCategoryTemplate:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
<el-table
|
||||||
|
ref="progressCategoryTemplateTableRef"
|
||||||
|
v-loading="loading"
|
||||||
|
:data="progressCategoryTemplateList"
|
||||||
|
row-key="id"
|
||||||
|
:default-expand-all="isExpandAll"
|
||||||
|
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
||||||
|
>
|
||||||
|
<el-table-column label="类别名称" prop="name" />
|
||||||
|
<el-table-column label="计量方式" align="center" prop="unitType" width="100">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<dict-tag :options="progress_unit_type" :value="row.unitType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="关联数据" align="center" prop="workType">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<dict-tag :options="progress_work_type" :value="row.workType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['progress:progressCategoryTemplate:edit']" />
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="新增" placement="top">
|
||||||
|
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['progress:progressCategoryTemplate:add']" />
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
icon="Delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['progress:progressCategoryTemplate:remove']"
|
||||||
|
/>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改进度类别模版对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="progressCategoryTemplateFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="父类别id" prop="parentId">
|
||||||
|
<el-tree-select
|
||||||
|
v-model="form.parentId"
|
||||||
|
:data="progressCategoryTemplateOptions"
|
||||||
|
:props="{ value: 'id', label: 'name', children: 'children' }"
|
||||||
|
value-key="id"
|
||||||
|
placeholder="请选择父类别id"
|
||||||
|
check-strictly
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="施工类型" prop="constructionType">
|
||||||
|
<el-select v-model="form.constructionType" placeholder="请选择施工类型" disabled>
|
||||||
|
<el-option v-for="dict in project_category_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="计量方式" prop="unitType">
|
||||||
|
<el-select v-model="form.unitType" placeholder="请选择关联数据">
|
||||||
|
<el-option v-for="dict in progress_unit_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="类别名称" prop="name">
|
||||||
|
<el-input v-model="form.name" placeholder="请输入类别名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="关联数据" prop="workType">
|
||||||
|
<el-select v-model="form.workType" placeholder="请选择关联数据">
|
||||||
|
<el-option v-for="dict in progress_work_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="ProgressCategoryTemplate" lang="ts">
|
||||||
|
import {
|
||||||
|
addProgressCategoryTemplate,
|
||||||
|
delProgressCategoryTemplate,
|
||||||
|
getProgressCategoryTemplate,
|
||||||
|
listProgressCategoryTemplate,
|
||||||
|
updateProgressCategoryTemplate
|
||||||
|
} from '@/api/progress/progressCategoryTemplate';
|
||||||
|
import {
|
||||||
|
ProgressCategoryTemplateForm,
|
||||||
|
ProgressCategoryTemplateQuery,
|
||||||
|
ProgressCategoryTemplateVO
|
||||||
|
} from '@/api/progress/progressCategoryTemplate/types';
|
||||||
|
|
||||||
|
type ProgressCategoryTemplateOption = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
children?: ProgressCategoryTemplateOption[];
|
||||||
|
};
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const { progress_work_type, progress_unit_type, project_category_type } = toRefs<any>(
|
||||||
|
proxy?.useDict('progress_work_type', 'progress_unit_type', 'project_category_type')
|
||||||
|
);
|
||||||
|
const progressCategoryTemplateList = ref<ProgressCategoryTemplateVO[]>([]);
|
||||||
|
const progressCategoryTemplateOptions = ref<ProgressCategoryTemplateOption[]>([]);
|
||||||
|
const buttonLoading = ref(false);
|
||||||
|
const showSearch = ref(true);
|
||||||
|
const isExpandAll = ref(true);
|
||||||
|
const loading = ref(false);
|
||||||
|
|
||||||
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
|
const progressCategoryTemplateFormRef = ref<ElFormInstance>();
|
||||||
|
const progressCategoryTemplateTableRef = ref<ElTableInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: ProgressCategoryTemplateForm = {
|
||||||
|
id: undefined,
|
||||||
|
parentId: undefined,
|
||||||
|
name: undefined,
|
||||||
|
unitType: undefined,
|
||||||
|
workType: undefined,
|
||||||
|
constructionType: undefined,
|
||||||
|
projectId: 0,
|
||||||
|
remark: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = reactive<PageData<ProgressCategoryTemplateForm, ProgressCategoryTemplateQuery>>({
|
||||||
|
form: { ...initFormData },
|
||||||
|
queryParams: {
|
||||||
|
parentId: undefined,
|
||||||
|
name: undefined,
|
||||||
|
unitType: undefined,
|
||||||
|
workType: undefined,
|
||||||
|
constructionType: '1',
|
||||||
|
projectId: 0,
|
||||||
|
params: {}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [{ required: true, message: '主键id不能为空', trigger: 'blur' }],
|
||||||
|
parentId: [{ required: true, message: '父类别id不能为空', trigger: 'blur' }],
|
||||||
|
name: [{ required: true, message: '类别名称不能为空', trigger: 'blur' }],
|
||||||
|
unitType: [{ required: true, message: '计量方式不能为空', trigger: 'change' }],
|
||||||
|
projectId: [{ required: true, message: '项目id不能为空', trigger: 'blur' }],
|
||||||
|
constructionType: [{ required: true, message: '施工类型不能为空', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询进度类别模版列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listProgressCategoryTemplate(queryParams.value);
|
||||||
|
const data = proxy?.handleTree<ProgressCategoryTemplateVO>(res.data, 'id', 'parentId');
|
||||||
|
if (data) {
|
||||||
|
progressCategoryTemplateList.value = data;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 查询进度类别模版下拉树结构 */
|
||||||
|
const getTreeselect = async () => {
|
||||||
|
const res = await listProgressCategoryTemplate();
|
||||||
|
progressCategoryTemplateOptions.value = [];
|
||||||
|
const data: ProgressCategoryTemplateOption = { id: 0, name: '顶级节点', children: [] };
|
||||||
|
data.children = proxy?.handleTree<ProgressCategoryTemplateOption>(res.data, 'id', 'parentId');
|
||||||
|
progressCategoryTemplateOptions.value.push(data);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 取消按钮
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 表单重置
|
||||||
|
const reset = () => {
|
||||||
|
form.value = { ...initFormData };
|
||||||
|
progressCategoryTemplateFormRef.value?.resetFields();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = (row?: ProgressCategoryTemplateVO) => {
|
||||||
|
reset();
|
||||||
|
form.value.constructionType = queryParams.value.constructionType;
|
||||||
|
getTreeselect();
|
||||||
|
if (row != null && row.id) {
|
||||||
|
form.value.parentId = row.id;
|
||||||
|
} else {
|
||||||
|
form.value.parentId = 0;
|
||||||
|
}
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = '添加进度类别模版';
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 展开/折叠操作 */
|
||||||
|
const handleToggleExpandAll = () => {
|
||||||
|
isExpandAll.value = !isExpandAll.value;
|
||||||
|
toggleExpandAll(progressCategoryTemplateList.value, isExpandAll.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 展开/折叠操作 */
|
||||||
|
const toggleExpandAll = (data: ProgressCategoryTemplateVO[], status: boolean) => {
|
||||||
|
data.forEach((item) => {
|
||||||
|
progressCategoryTemplateTableRef.value?.toggleRowExpansion(item, status);
|
||||||
|
if (item.children && item.children.length > 0) toggleExpandAll(item.children, status);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row: ProgressCategoryTemplateVO) => {
|
||||||
|
reset();
|
||||||
|
await getTreeselect();
|
||||||
|
if (row != null) {
|
||||||
|
form.value.parentId = row.parentId;
|
||||||
|
}
|
||||||
|
const res = await getProgressCategoryTemplate(row.id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = '修改进度类别模版';
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
progressCategoryTemplateFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateProgressCategoryTemplate(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
} else {
|
||||||
|
await addProgressCategoryTemplate(form.value).finally(() => (buttonLoading.value = false));
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess('操作成功');
|
||||||
|
dialog.visible = false;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row: ProgressCategoryTemplateVO) => {
|
||||||
|
await proxy?.$modal.confirm('是否确认删除进度类别模版编号为"' + row.id + '"的数据项?');
|
||||||
|
loading.value = true;
|
||||||
|
await delProgressCategoryTemplate(row.id).finally(() => (loading.value = false));
|
||||||
|
await getList();
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
@ -4,15 +4,14 @@
|
|||||||
<div v-show="showSearch" class="mb-[10px]">
|
<div v-show="showSearch" class="mb-[10px]">
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
<el-form-item label="父类别id" prop="pid">
|
<el-form-item label="选择项目" prop="projectId" width="100">
|
||||||
<el-input v-model="queryParams.pid" placeholder="请输入父类别id" clearable @keyup.enter="handleQuery" />
|
<el-select v-model="queryParams.projectId" @change="getList">
|
||||||
|
<el-option v-for="item in projectSon" :label="item.projectName" :value="item.id" :key="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="类别名称" prop="name">
|
<el-form-item label="类别名称" prop="name">
|
||||||
<el-input v-model="queryParams.name" placeholder="请输入类别名称" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="queryParams.name" placeholder="请输入类别名称" clearable @keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目id" prop="projectId">
|
|
||||||
<el-input v-model="queryParams.projectId" placeholder="请输入项目id" clearable @keyup.enter="handleQuery" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
@ -42,10 +41,17 @@
|
|||||||
:default-expand-all="isExpandAll"
|
:default-expand-all="isExpandAll"
|
||||||
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
||||||
>
|
>
|
||||||
<el-table-column label="类别名称" align="center" prop="name" />
|
<el-table-column label="类别名称" prop="name" />
|
||||||
<el-table-column label="计量方式" align="center" prop="unitType" />
|
<el-table-column label="计量方式" align="center" prop="unitType" width="100">
|
||||||
<el-table-column label="工作类型" align="center" prop="workType" />
|
<template #default="{ row }">
|
||||||
<el-table-column label="项目id" align="center" prop="projectId" />
|
<dict-tag :options="progress_unit_type" :value="row.unitType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="关联数据" align="center" prop="workType">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<dict-tag :options="progress_work_type" :value="row.workType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@ -56,7 +62,13 @@
|
|||||||
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['progress:progressCategoryTemplate:add']" />
|
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['progress:progressCategoryTemplate:add']" />
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<el-tooltip content="删除" placement="top">
|
<el-tooltip content="删除" placement="top">
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['progress:progressCategoryTemplate:remove']" />
|
<el-button
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
icon="Delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['progress:progressCategoryTemplate:remove']"
|
||||||
|
/>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -65,9 +77,9 @@
|
|||||||
<!-- 添加或修改进度类别模版对话框 -->
|
<!-- 添加或修改进度类别模版对话框 -->
|
||||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
<el-form ref="progressCategoryTemplateFormRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="progressCategoryTemplateFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="父类别id" prop="pid">
|
<el-form-item label="父类别id" prop="parentId">
|
||||||
<el-tree-select
|
<el-tree-select
|
||||||
v-model="form.pid"
|
v-model="form.parentId"
|
||||||
:data="progressCategoryTemplateOptions"
|
:data="progressCategoryTemplateOptions"
|
||||||
:props="{ value: 'id', label: 'name', children: 'children' }"
|
:props="{ value: 'id', label: 'name', children: 'children' }"
|
||||||
value-key="id"
|
value-key="id"
|
||||||
@ -75,11 +87,18 @@
|
|||||||
check-strictly
|
check-strictly
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="计量方式" prop="unitType">
|
||||||
|
<el-select v-model="form.unitType" placeholder="请选择关联数据">
|
||||||
|
<el-option v-for="dict in progress_unit_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="类别名称" prop="name">
|
<el-form-item label="类别名称" prop="name">
|
||||||
<el-input v-model="form.name" placeholder="请输入类别名称" />
|
<el-input v-model="form.name" placeholder="请输入类别名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目id" prop="projectId">
|
<el-form-item label="关联数据" prop="workType">
|
||||||
<el-input v-model="form.projectId" placeholder="请输入项目id" />
|
<el-select v-model="form.workType" placeholder="请选择关联数据">
|
||||||
|
<el-option v-for="dict in progress_work_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
@ -96,18 +115,36 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="ProgressCategoryTemplate" lang="ts">
|
<script setup name="ProgressCategoryTemplate" lang="ts">
|
||||||
import { listProgressCategoryTemplate, getProgressCategoryTemplate, delProgressCategoryTemplate, addProgressCategoryTemplate, updateProgressCategoryTemplate } from "@/api/progress/progressCategoryTemplate";
|
import {
|
||||||
import { ProgressCategoryTemplateVO, ProgressCategoryTemplateQuery, ProgressCategoryTemplateForm } from '@/api/progress/progressCategoryTemplate/types';
|
addProgressCategoryTemplate,
|
||||||
|
delProgressCategoryTemplate,
|
||||||
|
getProgressCategoryTemplate,
|
||||||
|
listProgressCategoryTemplate,
|
||||||
|
updateProgressCategoryTemplate
|
||||||
|
} from '@/api/progress/progressCategoryTemplate';
|
||||||
|
import {
|
||||||
|
ProgressCategoryTemplateForm,
|
||||||
|
ProgressCategoryTemplateQuery,
|
||||||
|
ProgressCategoryTemplateVO
|
||||||
|
} from '@/api/progress/progressCategoryTemplate/types';
|
||||||
|
import { useUserStoreHook } from '@/store/modules/user';
|
||||||
|
import { getChildProject } from '@/api/project/project';
|
||||||
|
|
||||||
type ProgressCategoryTemplateOption = {
|
type ProgressCategoryTemplateOption = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
children?: ProgressCategoryTemplateOption[];
|
children?: ProgressCategoryTemplateOption[];
|
||||||
}
|
};
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;;
|
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const { progress_work_type, progress_unit_type, project_category_type } = toRefs<any>(
|
||||||
|
proxy?.useDict('progress_work_type', 'progress_unit_type', 'project_category_type')
|
||||||
|
);
|
||||||
|
// 获取用户 store
|
||||||
|
const userStore = useUserStoreHook();
|
||||||
|
// 从 store 中获取项目列表和当前选中的项目
|
||||||
|
const currentProject = computed(() => userStore.selectedProject);
|
||||||
const progressCategoryTemplateList = ref<ProgressCategoryTemplateVO[]>([]);
|
const progressCategoryTemplateList = ref<ProgressCategoryTemplateVO[]>([]);
|
||||||
const progressCategoryTemplateOptions = ref<ProgressCategoryTemplateOption[]>([]);
|
const progressCategoryTemplateOptions = ref<ProgressCategoryTemplateOption[]>([]);
|
||||||
const buttonLoading = ref(false);
|
const buttonLoading = ref(false);
|
||||||
@ -117,51 +154,41 @@ const loading = ref(false);
|
|||||||
|
|
||||||
const queryFormRef = ref<ElFormInstance>();
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
const progressCategoryTemplateFormRef = ref<ElFormInstance>();
|
const progressCategoryTemplateFormRef = ref<ElFormInstance>();
|
||||||
const progressCategoryTemplateTableRef = ref<ElTableInstance>()
|
const progressCategoryTemplateTableRef = ref<ElTableInstance>();
|
||||||
|
const projectSon = ref<any>([]);
|
||||||
const dialog = reactive<DialogOption>({
|
const dialog = reactive<DialogOption>({
|
||||||
visible: false,
|
visible: false,
|
||||||
title: ''
|
title: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const initFormData: ProgressCategoryTemplateForm = {
|
const initFormData: ProgressCategoryTemplateForm = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
pid: undefined,
|
parentId: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
unitType: undefined,
|
unitType: undefined,
|
||||||
workType: undefined,
|
workType: undefined,
|
||||||
projectId: undefined,
|
projectId: undefined,
|
||||||
remark: undefined,
|
constructionType: undefined,
|
||||||
}
|
remark: undefined
|
||||||
|
};
|
||||||
|
|
||||||
const data = reactive<PageData<ProgressCategoryTemplateForm, ProgressCategoryTemplateQuery>>({
|
const data = reactive<PageData<ProgressCategoryTemplateForm, ProgressCategoryTemplateQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pid: undefined,
|
parentId: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
unitType: undefined,
|
unitType: undefined,
|
||||||
workType: undefined,
|
workType: undefined,
|
||||||
projectId: undefined,
|
projectId: undefined,
|
||||||
params: {
|
constructionType: undefined,
|
||||||
}
|
params: {}
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
id: [
|
id: [{ required: true, message: '主键id不能为空', trigger: 'blur' }],
|
||||||
{ required: true, message: "主键id不能为空", trigger: "blur" }
|
parentId: [{ required: true, message: '父类别id不能为空', trigger: 'blur' }],
|
||||||
],
|
name: [{ required: true, message: '类别名称不能为空', trigger: 'blur' }],
|
||||||
pid: [
|
unitType: [{ required: true, message: '计量方式不能为空', trigger: 'change' }],
|
||||||
{ required: true, message: "父类别id不能为空", trigger: "blur" }
|
projectId: [{ required: true, message: '项目id不能为空', trigger: 'blur' }]
|
||||||
],
|
|
||||||
name: [
|
|
||||||
{ required: true, message: "类别名称不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
unitType: [
|
|
||||||
{ required: true, message: "计量方式不能为空", trigger: "change" }
|
|
||||||
],
|
|
||||||
projectId: [
|
|
||||||
{ required: true, message: "项目id不能为空", trigger: "blur" }
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -171,112 +198,124 @@ const { queryParams, form, rules } = toRefs(data);
|
|||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await listProgressCategoryTemplate(queryParams.value);
|
const res = await listProgressCategoryTemplate(queryParams.value);
|
||||||
const data = proxy?.handleTree<ProgressCategoryTemplateVO>(res.data, "id", "pid");
|
const data = proxy?.handleTree<ProgressCategoryTemplateVO>(res.data, 'id', 'parentId');
|
||||||
if (data) {
|
if (data) {
|
||||||
progressCategoryTemplateList.value = data;
|
progressCategoryTemplateList.value = data;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 查询进度类别模版下拉树结构 */
|
/** 查询进度类别模版下拉树结构 */
|
||||||
const getTreeselect = async () => {
|
const getTreeselect = async () => {
|
||||||
const res = await listProgressCategoryTemplate();
|
const res = await listProgressCategoryTemplate();
|
||||||
progressCategoryTemplateOptions.value = [];
|
progressCategoryTemplateOptions.value = [];
|
||||||
const data: ProgressCategoryTemplateOption = { id: 0, name: '顶级节点', children: [] };
|
const data: ProgressCategoryTemplateOption = { id: 0, name: '顶级节点', children: [] };
|
||||||
data.children = proxy?.handleTree<ProgressCategoryTemplateOption>(res.data, "id", "pid");
|
data.children = proxy?.handleTree<ProgressCategoryTemplateOption>(res.data, 'id', 'parentId');
|
||||||
progressCategoryTemplateOptions.value.push(data);
|
progressCategoryTemplateOptions.value.push(data);
|
||||||
}
|
};
|
||||||
|
|
||||||
// 取消按钮
|
// 取消按钮
|
||||||
const cancel = () => {
|
const cancel = () => {
|
||||||
reset();
|
reset();
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
}
|
};
|
||||||
|
|
||||||
// 表单重置
|
// 表单重置
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
form.value = {...initFormData}
|
form.value = { ...initFormData };
|
||||||
progressCategoryTemplateFormRef.value?.resetFields();
|
progressCategoryTemplateFormRef.value?.resetFields();
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
getList();
|
getList();
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 重置按钮操作 */
|
/** 重置按钮操作 */
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryFormRef.value?.resetFields();
|
queryFormRef.value?.resetFields();
|
||||||
|
queryParams.value.projectId = projectSon.value[0]?.id;
|
||||||
handleQuery();
|
handleQuery();
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
const handleAdd = (row?: ProgressCategoryTemplateVO) => {
|
const handleAdd = (row?: ProgressCategoryTemplateVO) => {
|
||||||
reset();
|
reset();
|
||||||
getTreeselect();
|
getTreeselect();
|
||||||
if (row != null && row.id) {
|
if (row != null && row.id) {
|
||||||
form.value.pid = row.id;
|
form.value.parentId = row.id;
|
||||||
} else {
|
} else {
|
||||||
form.value.pid = 0;
|
form.value.parentId = 0;
|
||||||
}
|
}
|
||||||
dialog.visible = true;
|
dialog.visible = true;
|
||||||
dialog.title = "添加进度类别模版";
|
dialog.title = '添加进度类别模版';
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 展开/折叠操作 */
|
/** 展开/折叠操作 */
|
||||||
const handleToggleExpandAll = () => {
|
const handleToggleExpandAll = () => {
|
||||||
isExpandAll.value = !isExpandAll.value;
|
isExpandAll.value = !isExpandAll.value;
|
||||||
toggleExpandAll(progressCategoryTemplateList.value, isExpandAll.value)
|
toggleExpandAll(progressCategoryTemplateList.value, isExpandAll.value);
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 展开/折叠操作 */
|
/** 展开/折叠操作 */
|
||||||
const toggleExpandAll = (data: ProgressCategoryTemplateVO[], status: boolean) => {
|
const toggleExpandAll = (data: ProgressCategoryTemplateVO[], status: boolean) => {
|
||||||
data.forEach((item) => {
|
data.forEach((item) => {
|
||||||
progressCategoryTemplateTableRef.value?.toggleRowExpansion(item, status)
|
progressCategoryTemplateTableRef.value?.toggleRowExpansion(item, status);
|
||||||
if (item.children && item.children.length > 0) toggleExpandAll(item.children, status)
|
if (item.children && item.children.length > 0) toggleExpandAll(item.children, status);
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
const handleUpdate = async (row: ProgressCategoryTemplateVO) => {
|
const handleUpdate = async (row: ProgressCategoryTemplateVO) => {
|
||||||
reset();
|
reset();
|
||||||
await getTreeselect();
|
await getTreeselect();
|
||||||
if (row != null) {
|
if (row != null) {
|
||||||
form.value.pid = row.pid;
|
form.value.parentId = row.parentId;
|
||||||
}
|
}
|
||||||
const res = await getProgressCategoryTemplate(row.id);
|
const res = await getProgressCategoryTemplate(row.id);
|
||||||
Object.assign(form.value, res.data);
|
Object.assign(form.value, res.data);
|
||||||
dialog.visible = true;
|
dialog.visible = true;
|
||||||
dialog.title = "修改进度类别模版";
|
dialog.title = '修改进度类别模版';
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
progressCategoryTemplateFormRef.value?.validate(async (valid: boolean) => {
|
progressCategoryTemplateFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
buttonLoading.value = true;
|
buttonLoading.value = true;
|
||||||
|
form.value.projectId = queryParams.value.projectId;
|
||||||
if (form.value.id) {
|
if (form.value.id) {
|
||||||
await updateProgressCategoryTemplate(form.value).finally(() => buttonLoading.value = false);
|
await updateProgressCategoryTemplate(form.value).finally(() => (buttonLoading.value = false));
|
||||||
} else {
|
} else {
|
||||||
await addProgressCategoryTemplate(form.value).finally(() => buttonLoading.value = false);
|
await addProgressCategoryTemplate(form.value).finally(() => (buttonLoading.value = false));
|
||||||
}
|
}
|
||||||
proxy?.$modal.msgSuccess("操作成功");
|
proxy?.$modal.msgSuccess('操作成功');
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
getList();
|
getList();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row: ProgressCategoryTemplateVO) => {
|
const handleDelete = async (row: ProgressCategoryTemplateVO) => {
|
||||||
await proxy?.$modal.confirm('是否确认删除进度类别模版编号为"' + row.id + '"的数据项?');
|
await proxy?.$modal.confirm('是否确认删除进度类别模版编号为"' + row.id + '"的数据项?');
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
await delProgressCategoryTemplate(row.id).finally(() => loading.value = false);
|
await delProgressCategoryTemplate(row.id).finally(() => (loading.value = false));
|
||||||
await getList();
|
await getList();
|
||||||
proxy?.$modal.msgSuccess("删除成功");
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
}
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取子项目列表
|
||||||
|
*/
|
||||||
|
const getSubProjectList = async () => {
|
||||||
|
const res = await getChildProject(currentProject.value.id);
|
||||||
|
projectSon.value = res.data;
|
||||||
|
queryParams.value.projectId = projectSon.value[0]?.id;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getSubProjectList();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -122,6 +122,11 @@
|
|||||||
<el-form-item label="巡检结果" prop="inspectionResult">
|
<el-form-item label="巡检结果" prop="inspectionResult">
|
||||||
<el-input v-model="form.inspectionResult" placeholder="请输入巡检结果" />
|
<el-input v-model="form.inspectionResult" placeholder="请输入巡检结果" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="工单整改单位" prop="rectificationUnit">
|
||||||
|
<el-select v-model="form.rectificationUnit" placeholder="请选择整改单位类型">
|
||||||
|
<el-option v-for="dict in rectification_unit_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="整改班组" prop="teamId">
|
<el-form-item label="整改班组" prop="teamId">
|
||||||
<el-select v-model="form.teamId" placeholder="请选择整改班组">
|
<el-select v-model="form.teamId" placeholder="请选择整改班组">
|
||||||
<el-option v-for="item in teamOpt" :key="item.value" :label="item.label" :value="item.value" @click="changeForeman(item.value)" />
|
<el-option v-for="item in teamOpt" :key="item.value" :label="item.label" :value="item.value" @click="changeForeman(item.value)" />
|
||||||
@ -179,8 +184,14 @@ import { listProjectTeamForeman } from '@/api/project/projectTeam';
|
|||||||
import { foremanQuery, ProjectTeamForemanResp } from '@/api/project/projectTeam/types';
|
import { foremanQuery, ProjectTeamForemanResp } from '@/api/project/projectTeam/types';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
const { safety_inspection_violation_type, review_type, safety_inspection_type, safety_inspection_check_type } = toRefs<any>(
|
const { rectification_unit_type, safety_inspection_violation_type, review_type, safety_inspection_type, safety_inspection_check_type } = toRefs<any>(
|
||||||
proxy?.useDict('safety_inspection_violation_type', 'review_type', 'safety_inspection_type', 'safety_inspection_check_type')
|
proxy?.useDict(
|
||||||
|
'rectification_unit_type',
|
||||||
|
'safety_inspection_violation_type',
|
||||||
|
'review_type',
|
||||||
|
'safety_inspection_type',
|
||||||
|
'safety_inspection_check_type'
|
||||||
|
)
|
||||||
);
|
);
|
||||||
// 获取用户 store
|
// 获取用户 store
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
@ -222,6 +233,8 @@ const initFormData: SafetyInspectionForm = {
|
|||||||
reviewType: undefined,
|
reviewType: undefined,
|
||||||
checkTime: undefined,
|
checkTime: undefined,
|
||||||
rectificationTime: undefined,
|
rectificationTime: undefined,
|
||||||
|
rectificationUnit: undefined,
|
||||||
|
|
||||||
reviewTime: undefined,
|
reviewTime: undefined,
|
||||||
checkFile: undefined,
|
checkFile: undefined,
|
||||||
rectificationFile: undefined,
|
rectificationFile: undefined,
|
||||||
|
Reference in New Issue
Block a user