合并
This commit is contained in:
@ -6,7 +6,7 @@ VITE_APP_ENV = 'development'
|
||||
|
||||
# 开发环境
|
||||
# 李陈杰 209
|
||||
VITE_APP_BASE_API = 'http://192.168.110.180:8899'
|
||||
VITE_APP_BASE_API = 'http://192.168.110.188:8899'
|
||||
# 曾涛
|
||||
# VITE_APP_BASE_API = 'http://192.168.110.180:8899'
|
||||
# 罗成
|
||||
|
BIN
public/daolu.xlsx
Normal file
BIN
public/daolu.xlsx
Normal file
Binary file not shown.
BIN
public/dikuai.xlsx
Normal file
BIN
public/dikuai.xlsx
Normal file
Binary file not shown.
@ -546,7 +546,7 @@ const handleTerminationTask = async () => {
|
||||
if (isDrawing.value) {
|
||||
isShowTermination.value = true;
|
||||
nextTick(() => {
|
||||
detailFormTeRef.value.getInfo(props.businessId);
|
||||
detailFormTeRef.value.getInfo(props.businessId1);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
@ -165,7 +165,8 @@ const getTableData = async () => {
|
||||
loading.value = true;
|
||||
const params = {
|
||||
projectId: currentProject.value?.id,
|
||||
sheet: queryForm.value.sheet
|
||||
sheet: queryForm.value.sheet,
|
||||
versions: queryForm.value.versions
|
||||
};
|
||||
const res = await getTreeLimit(params);
|
||||
loading.value = false;
|
||||
|
@ -165,7 +165,7 @@
|
||||
</el-row>
|
||||
<template #footer>
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm(formRef)">确定</el-button>
|
||||
<el-button type="primary" @click="submitForm(formRef)" :loading="loadingBtn">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-dialog title="详情" v-model="detailDialog" width="75%" draggable>
|
||||
@ -228,7 +228,7 @@ const rules = ref({
|
||||
content: [{ required: true, message: '请输入内容', trigger: 'blur' }]
|
||||
});
|
||||
const loading = ref(false);
|
||||
|
||||
const loadingBtn = ref();
|
||||
//字典获取数据
|
||||
const getTabsList = async () => {
|
||||
const res = await getDicts('subcontracting_type');
|
||||
@ -457,6 +457,7 @@ const submitForm = async (formEl: FormInstance | undefined) => {
|
||||
});
|
||||
return;
|
||||
}
|
||||
loadingBtn.value = true;
|
||||
const newSelectionData = selectionData.value.filter((item) => item.quantity != '' && item.quantity != null);
|
||||
if (newSelectionData.some((item) => item.selectNum == '' || item.selectNum == null)) {
|
||||
ElMessage.error('存在未填写数量的工程或费用名称,请检查');
|
||||
@ -488,6 +489,8 @@ const submitForm = async (formEl: FormInstance | undefined) => {
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
} finally {
|
||||
loadingBtn.value = false;
|
||||
}
|
||||
} else {
|
||||
console.log('error submit!', fields);
|
||||
@ -544,7 +547,7 @@ const handleDetail = (row: any) => {
|
||||
getDetails(row);
|
||||
};
|
||||
const getDetails = (row: any) => {
|
||||
getDetailsList({ id: row.id, type: '1' }).then((res) => {
|
||||
getDetailsList({ id: row.id, type: '1', projectId: currentProject.value?.id }).then((res) => {
|
||||
if (res.code == 200) {
|
||||
detailData.value = res.data;
|
||||
}
|
||||
|
@ -35,7 +35,13 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" v-if="reviewStatus && reviewStatus == 'draft'" @click="clickApprovalSheet()">审核</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
v-if="reviewStatus && reviewStatus == 'draft'"
|
||||
@click="clickApprovalSheet()"
|
||||
v-hasPermi="['tender:tenderPlanLimitList:getVersionDetail']"
|
||||
>审核</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="content-box">
|
||||
<el-table :data="data" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="index" label="序号" width="55" align="center" />
|
||||
<el-table-column align="center" prop="projectName" label="工程名称" />
|
||||
<el-table-column align="center" prop="serialNumber" label="编号" />
|
||||
<el-table-column align="center" prop="to" label="致" />
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="content-box">
|
||||
<el-table :data="data" style="width: 100%" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="index" width="55" label="序号" align="center" />
|
||||
<el-table-column align="center" prop="projectName" label="工程名称" />
|
||||
<el-table-column align="center" prop="submitUnit" label="提出单位" />
|
||||
<el-table-column align="center" prop="specialty" label="专业">
|
||||
@ -30,7 +30,7 @@
|
||||
</el-button>
|
||||
<el-button link type="primary" icon="View" @click="handleViewInfo(scope.row)" class="ml-3"> 查看流程 </el-button>
|
||||
<el-button link type="success" icon="View" @click="handleDetail(scope.row)" class="ml-3"> 详情 </el-button>
|
||||
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)"> 删除 </el-button>
|
||||
<!-- <el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)"> 删除 </el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
@ -36,12 +36,42 @@
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程名称">
|
||||
<el-input v-model="form.projectName" />
|
||||
<el-input disabled v-model="form.projectName" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提出单位">
|
||||
<el-input v-model="form.submitUnit" />
|
||||
<el-input v-model="form.submitUnit" placeholder="请输入提出单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!-- 卷册名称 & 附图 -->
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="卷册号">
|
||||
<!-- <el-input v-model="form.volumeName" /> -->
|
||||
<el-select
|
||||
id="projectSelect"
|
||||
v-model="form.volumeNumber"
|
||||
placeholder="请选择原卷册号"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleSelect"
|
||||
style="width: 150px; margin-right: 20px"
|
||||
>
|
||||
<el-option
|
||||
v-for="project in volumeCatalogList"
|
||||
:key="project.volumeNumber"
|
||||
:label="project.volumeNumber"
|
||||
:value="project.volumeNumber"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<!-- 卷册号 -->
|
||||
<el-form-item label="卷册名称">
|
||||
<el-input disabled v-model="form.volumeName" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -50,7 +80,7 @@
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="专业">
|
||||
<el-select v-model="form.specialty" placeholder="">
|
||||
<el-select disabled v-model="form.specialty" placeholder="请选择专业">
|
||||
<el-option v-for="item in des_user_major" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -62,27 +92,11 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 卷册名称 & 附图 -->
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="卷册名称">
|
||||
<el-input v-model="form.volumeName" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="附图">
|
||||
<file-Upload v-model="form.attachmentsImg" :file-type="['pdf', 'png', 'jpg', 'jpeg', 'gif', 'bmp']">
|
||||
<el-button type="primary">上传附件</el-button>
|
||||
</file-Upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 卷册号 -->
|
||||
<el-form-item label="卷册号">
|
||||
<el-input v-model="form.volumeNumber" />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 变更原因 -->
|
||||
<el-form-item label="变更原因">
|
||||
<el-checkbox-group v-model="form.changeReasons">
|
||||
@ -103,7 +117,7 @@
|
||||
<file-upload v-model="form.attachments" :limit="1" :file-type="['pdf']"></file-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更费用估算" prop="costEstimation">
|
||||
<el-input v-model="form.costEstimation" :rows="6" placeholder="请输入变更费用估算" />
|
||||
<el-input v-model="form.costEstimation" :rows="6" type="number" placeholder="请输入变更费用估算" />
|
||||
</el-form-item>
|
||||
<el-divider class="mb-10! mt-10!">施工项目部</el-divider>
|
||||
<el-form-item label="项目负责人" prop="contractorLeader">
|
||||
@ -177,6 +191,7 @@ import { useUserStoreHook } from '@/store/modules/user';
|
||||
import { listByIds } from '@/api/system/oss';
|
||||
import { addContactnotice, getContactnotice, updateContactnotice } from '@/api/cory/contactnotice';
|
||||
const { des_user_major } = toRefs(proxy?.useDict('des_user_major'));
|
||||
import { catalogList } from '@/api/design/designChange';
|
||||
|
||||
// 获取用户 store
|
||||
const userStore = useUserStoreHook();
|
||||
@ -221,11 +236,11 @@ const initFormData = {
|
||||
id: undefined,
|
||||
projectId: currentProject.value?.id,
|
||||
projectType: '',
|
||||
projectName: '',
|
||||
projectName: currentProject.value?.name,
|
||||
serialNumber: '',
|
||||
to: '',
|
||||
subject: '',
|
||||
costEstimation: '',
|
||||
costEstimation: 0,
|
||||
content: '',
|
||||
attachments: '',
|
||||
contractorLeader: '',
|
||||
@ -275,13 +290,27 @@ const handleClose = () => {
|
||||
buttonLoading.value = false;
|
||||
};
|
||||
const { form, rules } = toRefs(data);
|
||||
|
||||
const volumeCatalogList = ref([]);
|
||||
let volumeMap = new Map();
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
leaveFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
// 获取卷册号列表
|
||||
const getJuance = async () => {
|
||||
const res = await catalogList(currentProject.value?.id);
|
||||
volumeCatalogList.value = res.data;
|
||||
volumeCatalogList.value.forEach((e) => {
|
||||
volumeMap.set(e.volumeNumber, e);
|
||||
});
|
||||
};
|
||||
const handleSelect = (val) => {
|
||||
let obj = volumeMap.get(val);
|
||||
console.log(obj);
|
||||
form.value.volumeName = obj.documentName;
|
||||
form.value.specialty = obj.specialty;
|
||||
};
|
||||
/** 获取详情 */
|
||||
const getInfo = () => {
|
||||
loading.value = true;
|
||||
@ -345,7 +374,8 @@ const handleStartWorkFlow = async (data: LeaveForm) => {
|
||||
//流程变量
|
||||
taskVariables.value = {
|
||||
// leave4/5 使用的流程变量
|
||||
userList: ['1', '3', '4']
|
||||
userList: ['1', '3', '4'],
|
||||
costEstimation: form.value.costEstimation
|
||||
};
|
||||
submitFormData.value.variables = taskVariables.value;
|
||||
const resp = await startWorkFlow(submitFormData.value);
|
||||
@ -402,6 +432,7 @@ onMounted(() => {
|
||||
routeParams.value = proxy.$route.query;
|
||||
thumbnailUrl.value = proxy.$route.query.thumbnailUrl;
|
||||
reset();
|
||||
getJuance();
|
||||
loading.value = false;
|
||||
if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') {
|
||||
getInfo();
|
||||
|
@ -5,7 +5,7 @@
|
||||
<el-table-column label="序号" type="index" width="60" align="center" />
|
||||
<el-table-column label="处理状态" align="center" prop="status">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="safety_inspection_type" :value="scope.row.status" />
|
||||
<dict-tag :options="wf_business_status" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="检查人" align="center" prop="correctorName" />
|
||||
@ -46,13 +46,16 @@
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="220">
|
||||
<template #default="scope">
|
||||
<el-space>
|
||||
<el-button link type="primary" icon="View" @click="handleDetail(scope.row)" v-hasPermi="['safety:safetyInspection:query']">
|
||||
详情
|
||||
<el-button link type="primary" icon="View" @click="handleDetail(scope.row)"> 详情 </el-button>
|
||||
<el-button link type="primary" icon="Edit" @click="handleAddApp(scope.row)" v-if="scope.row.status && scope.row.status == 'draft'"
|
||||
>审批
|
||||
</el-button>
|
||||
<!-- <el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['safety:safetyInspection:edit']">修改 </el-button> -->
|
||||
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['safety:safetyInspection:remove']">
|
||||
<el-button link type="primary" icon="View" @click="handleAddApp(scope.row)" v-if="scope.row.status && scope.row.status != 'draft'"
|
||||
>查看流程
|
||||
</el-button>
|
||||
<!-- <el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['safety:safetyInspection:remove']">
|
||||
删除
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
</el-space>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -191,9 +194,10 @@ const userStore = useUserStoreHook();
|
||||
// 从 store 中获取项目列表和当前选中的项目
|
||||
const currentProject = computed(() => userStore.selectedProject);
|
||||
|
||||
const { safety_inspection_violation_type, safety_inspection_check_type, review_type, safety_inspection_type } = toRefs<any>(
|
||||
useDict('safety_inspection_violation_type', 'safety_inspection_check_type', 'review_type', 'safety_inspection_type')
|
||||
const { safety_inspection_violation_type, safety_inspection_check_type, review_type, safety_inspection_type, wf_business_status } = toRefs<any>(
|
||||
useDict('safety_inspection_violation_type', 'safety_inspection_check_type', 'review_type', 'safety_inspection_type', 'wf_business_status')
|
||||
);
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const safetyInspectionDetail = ref<SafetyInspectionVO>();
|
||||
|
||||
const form = reactive({
|
||||
@ -236,6 +240,18 @@ const handleDetail = async (row) => {
|
||||
rectificationFileList.value = rectificationFileRes.data;
|
||||
}
|
||||
};
|
||||
const handleAddApp = (row) => {
|
||||
// 添加审批
|
||||
proxy.$tab.closePage(proxy.$route);
|
||||
proxy.$router.push({
|
||||
path: `/approval/workMessage/indexEdit`,
|
||||
query: {
|
||||
id: row.id,
|
||||
|
||||
type: 'update'
|
||||
}
|
||||
});
|
||||
};
|
||||
const getList = (row) => {};
|
||||
const handleDelete = (row) => {};
|
||||
</script>
|
||||
|
@ -1,15 +1,12 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
|
||||
:leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<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="projectType">
|
||||
<el-select v-model="queryParams.projectType" placeholder="请选择模板类型" clearable filterable
|
||||
@change="selectType">
|
||||
<el-option v-for="item in projectTypeOptions" :key="item.name" :label="item.name" :value="item.name">
|
||||
</el-option>
|
||||
<el-select v-model="queryParams.projectType" placeholder="请选择模板类型" clearable filterable @change="selectType">
|
||||
<el-option v-for="item in projectTypeOptions" :key="item.name" :label="item.name" :value="item.name"> </el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item>
|
||||
@ -24,8 +21,9 @@
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" :disabled="addSingle" @click="handleAdd"
|
||||
v-hasPermi="['quality:qualityInspection:add']">新增</el-button>
|
||||
<el-button type="primary" plain icon="Plus" :disabled="addSingle" @click="handleAdd" v-hasPermi="['cory:contactnotice:add']"
|
||||
>新增</el-button
|
||||
>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['quality:qualityInspection:edit']"
|
||||
@ -33,8 +31,9 @@
|
||||
>
|
||||
</el-col> -->
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
|
||||
v-hasPermi="['quality:qualityInspection:remove']">删除</el-button>
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['cory:contactnotice:remove']"
|
||||
>删除</el-button
|
||||
>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['quality:qualityInspection:export']">导出</el-button>
|
||||
@ -44,8 +43,7 @@
|
||||
</template>
|
||||
<!-- card body -->
|
||||
<Notice @selection-change="handleSelectionChange" :data="tableData"></Notice>
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
|
||||
<el-dialog title="新增模板" v-model="dialogVisible" width="800">
|
||||
@ -56,14 +54,12 @@
|
||||
<div>
|
||||
<el-form-item label="检查类型" prop="checkType">
|
||||
<el-select v-model="form.checkType" placeholder="请选择检查类型">
|
||||
<el-option v-for="dict in safety_inspection_check_type" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value"></el-option>
|
||||
<el-option v-for="dict in safety_inspection_check_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="违章类型" prop="violationType">
|
||||
<el-select v-model="form.violationType" placeholder="请选择违章类型">
|
||||
<el-option v-for="dict in safety_inspection_violation_type" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value"></el-option>
|
||||
<el-option v-for="dict in safety_inspection_violation_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="巡检结果" prop="inspectionResult">
|
||||
@ -71,8 +67,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="整改班组" prop="teamId">
|
||||
<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)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="整改人" prop="correctorId">
|
||||
@ -87,16 +82,13 @@
|
||||
<el-input v-model="form.measure" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="要求整改期限" prop="rectificationDeadline">
|
||||
<el-date-picker clearable v-model="form.rectificationDeadline" type="date" value-format="YYYY-MM-DD"
|
||||
placeholder="选择要求整改期限" />
|
||||
<el-date-picker clearable v-model="form.rectificationDeadline" type="date" value-format="YYYY-MM-DD" placeholder="选择要求整改期限" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查附件" prop="checkFile">
|
||||
<file-upload v-model="form.checkFile" :file-size="20"
|
||||
:file-type="['doc', 'docx', 'pdf', 'png', 'jpg', 'jpeg']" />
|
||||
<file-upload v-model="form.checkFile" :file-size="20" :file-type="['doc', 'docx', 'pdf', 'png', 'jpg', 'jpeg']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="整改附件" prop="rectificationFile">
|
||||
<file-upload v-model="form.rectificationFile" :file-size="20"
|
||||
:file-type="['doc', 'docx', 'pdf', 'png', 'jpg', 'jpeg']" />
|
||||
<file-upload v-model="form.rectificationFile" :file-size="20" :file-type="['doc', 'docx', 'pdf', 'png', 'jpg', 'jpeg']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
@ -308,6 +300,7 @@ const selectType = (value: string) => {
|
||||
const resetForm = () => {
|
||||
formRef.value?.resetFields();
|
||||
};
|
||||
|
||||
//监听项目id刷新数据
|
||||
const listeningProject = watch(
|
||||
() => currentProject.value?.id,
|
||||
|
482
src/views/cory/workMessage/indexEdit.vue
Normal file
482
src/views/cory/workMessage/indexEdit.vue
Normal file
@ -0,0 +1,482 @@
|
||||
<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.status"
|
||||
: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">
|
||||
<div class="w80% ma">
|
||||
<h2 style="text-align: center; margin-top: 5px; font-weight: bold">通知单</h2>
|
||||
<el-row>
|
||||
<el-col :span="12" style="text-align: left">填报人:{{ safetyInspectionDetail?.creatorName }}</el-col>
|
||||
<el-col :span="12" style="text-align: right">填报时间:{{ safetyInspectionDetail?.createTime }}</el-col>
|
||||
</el-row>
|
||||
<el-descriptions :column="2" border style="margin-top: 8px" label-width="160px" size="large">
|
||||
<el-descriptions-item label-align="center" label="检查项目" :span="2" class-name="zebra"
|
||||
>{{ currentProject?.name }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="检查类型" label-class-name="white">
|
||||
<dict-tag :options="safety_inspection_check_type" :value="safetyInspectionDetail?.checkType" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="违章类型" label-class-name="white">
|
||||
<dict-tag :options="safety_inspection_violation_type" :value="safetyInspectionDetail?.violationType" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="检查时间" class-name="zebra"
|
||||
>{{ safetyInspectionDetail?.checkTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="检查人" class-name="zebra"
|
||||
>{{ safetyInspectionDetail?.creatorName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="整改人" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.correctorName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="要求整改期限" label-class-name="white">
|
||||
{{ dayjs(safetyInspectionDetail?.rectificationDeadline).format('YYYY 年 MM 月 DD 日') }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions border direction="vertical" size="large">
|
||||
<el-descriptions-item label-align="center" label="巡检结果" class-name="none"></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="2" border label-width="160px" size="large">
|
||||
<el-descriptions-item label-align="center" label="内容" :span="2" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.hiddenDanger }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="检查附件" :span="2" label-class-name="white">
|
||||
<el-space wrap>
|
||||
<div v-for="item in checkFileList" :key="item.ossId">
|
||||
<span v-if="['.png', '.jpg', '.jpeg'].includes(item.fileSuffix)">
|
||||
<image-preview :src="item.url" width="200px" />
|
||||
</span>
|
||||
<span v-else>
|
||||
<el-link :href="`${item.url}`" type="primary" :underline="false" target="_blank">
|
||||
<span> {{ item.originalName }} </span>
|
||||
</el-link>
|
||||
</span>
|
||||
</div>
|
||||
</el-space>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="检查状态" :span="2" label-class-name="white">
|
||||
<el-steps style="max-width: 200px" :active="Number(safetyInspectionDetail?.status)" finish-status="finish">
|
||||
<el-step v-for="item in safety_inspection_type" :key="item.value" :title="item.label" />
|
||||
</el-steps>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions border direction="vertical" size="large">
|
||||
<el-descriptions-item label-align="center" label="整改情况" class-name="none"></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="2" border label-width="160px" size="large">
|
||||
<el-descriptions-item label-align="center" label="班组" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.teamName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="整改日期" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.rectificationTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="整改措施及完成情况" :span="2" label-class-name="white">
|
||||
{{ safetyInspectionDetail?.measure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="整改附件" :span="2" label-class-name="white">
|
||||
<el-space wrap>
|
||||
<div v-for="item in rectificationFileList" :key="item.ossId">
|
||||
<span v-if="['.png', '.jpg', '.jpeg'].includes(item.fileSuffix)">
|
||||
<image-preview :src="item.url" width="200px" />
|
||||
</span>
|
||||
<span v-else>
|
||||
<el-link :href="`${item.url}`" :underline="false" target="_blank">
|
||||
<span> {{ item.originalName }} </span>
|
||||
</el-link>
|
||||
</span>
|
||||
</div>
|
||||
</el-space>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions border direction="vertical" size="large">
|
||||
<el-descriptions-item label-align="center" label="复查结果" class-name="none"></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="2" border label-width="160px" size="large">
|
||||
<el-descriptions-item label-align="center" label="复查人" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.creatorName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="复查日期" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.reviewTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-align="center" label="复查情况" :span="2" label-class-name="white"
|
||||
>{{ safetyInspectionDetail?.review }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</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 { listByIds } from '@/api/system/oss';
|
||||
import { dayjs } from 'element-plus';
|
||||
import { useDict } from '@/utils/dict';
|
||||
import { SafetyInspectionVO } from '@/api/safety/safetyInspection/types';
|
||||
// const { des_user_major } = toRefs(proxy?.useDict('des_user_major'));
|
||||
import { getContactnotice } from '@/api/cory/contactnotice';
|
||||
const { safety_inspection_violation_type, safety_inspection_check_type, review_type, safety_inspection_type, wf_business_status } = toRefs<any>(
|
||||
useDict('safety_inspection_violation_type', 'safety_inspection_check_type', 'review_type', 'safety_inspection_type', 'wf_business_status')
|
||||
);
|
||||
|
||||
// 获取用户 store
|
||||
const userStore = useUserStoreHook();
|
||||
// 从 store 中获取项目列表和当前选中的项目
|
||||
const currentProject = computed(() => userStore.selectedProject);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const thumbnailUrl = ref('');
|
||||
//路由参数
|
||||
const routeParams = ref<Record<string, any>>({});
|
||||
const flowCodeOptions = [
|
||||
{
|
||||
value: currentProject.value?.id + '_contactForm',
|
||||
label: '工作联系单审批'
|
||||
}
|
||||
];
|
||||
|
||||
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 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 initFormData = {
|
||||
id: undefined,
|
||||
projectId: currentProject.value?.id,
|
||||
projectType: '',
|
||||
projectName: '',
|
||||
serialNumber: '',
|
||||
to: '',
|
||||
subject: '',
|
||||
costEstimation: '',
|
||||
content: '',
|
||||
attachments: '',
|
||||
contractorLeader: '',
|
||||
contractorDate: '',
|
||||
supervisorLeader: '',
|
||||
supervisorDate: '',
|
||||
ownerRep: '',
|
||||
ownerDate: '',
|
||||
unitName: '',
|
||||
profession: '',
|
||||
applyDate: '',
|
||||
bookName: '',
|
||||
bookNo: '',
|
||||
hasAttachment: '',
|
||||
changeReasons: [],
|
||||
changeContent: '',
|
||||
costEstimate: '',
|
||||
status: ''
|
||||
};
|
||||
const data = reactive({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
projectId: currentProject.value?.id,
|
||||
fileName: undefined,
|
||||
fileType: undefined,
|
||||
fileSuffix: undefined,
|
||||
fileStatus: undefined,
|
||||
originalName: undefined,
|
||||
newest: undefined,
|
||||
params: {}
|
||||
}
|
||||
});
|
||||
const safetyInspectionDetail = ref<SafetyInspectionVO>();
|
||||
const handleClose = () => {
|
||||
dialogVisible.visible = false;
|
||||
flowCode.value = '';
|
||||
buttonLoading.value = false;
|
||||
};
|
||||
const { form } = toRefs(data);
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
leaveFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
const checkFileList: any = ref([]);
|
||||
const rectificationFileList: any = ref([]);
|
||||
/** 获取详情 */
|
||||
const getInfo = () => {
|
||||
loading.value = true;
|
||||
buttonLoading.value = false;
|
||||
nextTick(async () => {
|
||||
const res = await getContactnotice(routeParams.value.id);
|
||||
console.log(res.data);
|
||||
const detail = res.data.detail ? JSON.parse(res.data.detail) : {};
|
||||
safetyInspectionDetail.value = { ...res.data, ...detail };
|
||||
if (safetyInspectionDetail.value.checkFile) {
|
||||
const checkFileRes = await listByIds(safetyInspectionDetail.value.checkFile.split(','));
|
||||
checkFileList.value = checkFileRes.data;
|
||||
}
|
||||
if (safetyInspectionDetail.value.rectificationFile) {
|
||||
const rectificationFileRes = await listByIds(safetyInspectionDetail.value.rectificationFile.split(','));
|
||||
rectificationFileList.value = rectificationFileRes.data;
|
||||
}
|
||||
|
||||
Object.assign(form.value, safetyInspectionDetail.value);
|
||||
loading.value = false;
|
||||
buttonLoading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const submitFlow = async () => {
|
||||
console.log('form.value', form.value);
|
||||
|
||||
handleStartWorkFlow(form.value);
|
||||
dialogVisible.visible = false;
|
||||
};
|
||||
//提交申请
|
||||
const handleStartWorkFlow = async (data: LeaveForm) => {
|
||||
console.log('data', data);
|
||||
|
||||
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 submitForm = (status1: string) => {
|
||||
status.value = status1;
|
||||
submit(status.value, form.value);
|
||||
};
|
||||
//审批记录
|
||||
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.status === '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';
|
||||
}
|
||||
console.log('data', data);
|
||||
await handleStartWorkFlow(data);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(async () => {
|
||||
routeParams.value = 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>
|
@ -67,7 +67,7 @@
|
||||
<el-form-item label="招标计划" prop="tenderId">
|
||||
<!-- <el-input v-model="form.tenderId" placeholder="请输入招标Id" /> -->
|
||||
<el-input v-model="form.name" placeholder="请选择招标计划" disabled />
|
||||
<el-button type="primary" @click="handleChoose">选择招标</el-button>
|
||||
<el-button type="primary" @click="handleChoose" v-hasPermi="['ctr:expensesContract:tenderList']">选择招标</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="供应商" prop="contractSupplier">
|
||||
<el-input v-model="form.contractSupplier" placeholder="请输入供应商" disabled />
|
||||
@ -313,7 +313,7 @@ const submitForm = async () => {
|
||||
}
|
||||
resetForm();
|
||||
ElMessage.success('合同提交成功');
|
||||
// active.value = 0; // 重置步骤
|
||||
active.value = 0; // 重置步骤
|
||||
if (contract_type.value === 'income') {
|
||||
proxy.$router.push('/ctr/incomeContract');
|
||||
} else {
|
||||
|
@ -476,7 +476,7 @@ const designUser = async () => {
|
||||
form.reviewers = [];
|
||||
form.approved = [];
|
||||
form.auditor = [];
|
||||
|
||||
disabledForm.value = false;
|
||||
if (res.code == 200 && Array.isArray(res.rows) && res.rows.length > 0) {
|
||||
disabledForm.value = true;
|
||||
// 1. 按用户类型分类数据(明确类型)
|
||||
|
@ -113,7 +113,7 @@ const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
|
||||
//按钮组件
|
||||
const flowCodeOptions = [
|
||||
{
|
||||
value: currentProject.value?.id + '_equipmentList',
|
||||
value: currentProject.value?.id + '_materialsPlans',
|
||||
label: '物资设备清单审核'
|
||||
}
|
||||
];
|
||||
|
@ -314,14 +314,14 @@ let volumeMap = new Map();
|
||||
|
||||
const handleSelect = (val) => {
|
||||
let obj = volumeMap.get(val);
|
||||
console.log('🚀 ~ handleSelect ~ obj:', obj);
|
||||
|
||||
fileVoList.value = obj.fileVoList;
|
||||
designId.value = obj.design;
|
||||
form.value.volumeName = obj.volumeName;
|
||||
form.value.specialty = obj.specialty;
|
||||
form.value.specialtyName = obj.specialtyName;
|
||||
form.value.extendDetail.subName = obj.designSubitem;
|
||||
form.value.saveFile = [];
|
||||
getBlueprintList();
|
||||
};
|
||||
// 获取图纸列表
|
||||
const blueprintListAll = ref([]);
|
||||
@ -331,9 +331,6 @@ const getBlueprintList = async () => {
|
||||
};
|
||||
const handleRadio = (val) => {
|
||||
form.value.saveFile = [];
|
||||
if (val == 2) {
|
||||
getBlueprintList();
|
||||
}
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
@ -351,8 +348,15 @@ const getInfo = () => {
|
||||
let id = routeParams.value.id.split('_')[0];
|
||||
const res = await getDesignChange(id);
|
||||
Object.assign(form.value, res.data);
|
||||
console.log(form.value);
|
||||
|
||||
if (form.value.status != 'draft') {
|
||||
form.value.id = id + '_audit';
|
||||
}
|
||||
if (form.value.extendDetail.designDisposal == 2) {
|
||||
let obj = volumeMap.get(form.value.volumeNo);
|
||||
designId.value = obj.design;
|
||||
form.value.saveFile = form.value.saveFile.split(',');
|
||||
getBlueprintList();
|
||||
}
|
||||
if (form.value.changeReason.length > 0) {
|
||||
form.value.changeReason = form.value.changeReason.split(',');
|
||||
}
|
||||
@ -381,8 +385,11 @@ const submitForm = (status1: string) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
var res;
|
||||
delete form.value.id;
|
||||
res = await addDesignChange({ ...form.value, changeReason, saveFile }).finally(() => (buttonLoading.value = false));
|
||||
if (res.code == 200) {
|
||||
routeParams.value.type = 'update';
|
||||
form.value = res.data;
|
||||
if (form.value.costEstimation == '0') {
|
||||
ElMessage.success('通知成功');
|
||||
goBack();
|
||||
@ -425,6 +432,9 @@ const handleStartWorkFlow = async (data: LeaveForm) => {
|
||||
};
|
||||
//审批记录
|
||||
const handleApprovalRecord = () => {
|
||||
if (form.value.id.indexOf('_audit') == -1) {
|
||||
form.value.id = form.value.id + '_audit';
|
||||
}
|
||||
approvalRecordRef.value.init(form.value.id);
|
||||
};
|
||||
//提交回调
|
||||
|
@ -49,7 +49,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button v-hasPermi="['design:subcontract:add']" :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -109,7 +109,12 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="设计人员" prop="principal">
|
||||
<el-select :disabled="!form.specialty" v-model="form.principal" placeholder="请选择设计人员" class="transition-all duration-300 border-gray-300">
|
||||
<el-select
|
||||
:disabled="!form.specialty"
|
||||
v-model="form.principal"
|
||||
placeholder="请选择设计人员"
|
||||
class="transition-all duration-300 border-gray-300"
|
||||
>
|
||||
<el-option v-for="item in userAppList" :key="item.userId" :label="item.userName" :value="item.userId.toString()" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -146,12 +151,16 @@
|
||||
/></el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="uploadForm.type == '3'" label="蓝图" prop="fileIds">
|
||||
<<<<<<< HEAD
|
||||
<file-upload
|
||||
:fileType="['pdf']"
|
||||
:isShowTip="false"
|
||||
:fileSize="100"
|
||||
. v-model="uploadForm.fileIds"
|
||||
></file-upload>
|
||||
=======
|
||||
<file-upload :fileType="['pdf']" :isShowTip="false" :fileSize="100" v-model="uploadForm.fileIds"></file-upload>
|
||||
>>>>>>> 8a3f338e2734575bcb743e917b1232bedc76f105
|
||||
</el-form-item>
|
||||
<el-form-item v-if="uploadForm.type == '1'" label="过程图纸" prop="cancellationIds">
|
||||
<file-upload :fileType="['pdf']" :isShowTip="false" :fileSize="100" v-model="uploadForm.cancellationIds"></file-upload>
|
||||
@ -252,7 +261,8 @@ import {
|
||||
delVolumeCatalog,
|
||||
addVolumeCatalog,
|
||||
updateVolumeCatalog,
|
||||
uploadVolumeFile,majorList,
|
||||
uploadVolumeFile,
|
||||
majorList,
|
||||
getVolumeCatafileList,
|
||||
volumeFileList
|
||||
} from '@/api/design/volumeCatalog';
|
||||
@ -263,7 +273,7 @@ import TableContent from './comm/tableContent.vue';
|
||||
const fileList = ref([]);
|
||||
import { designUserList } from '@/api/design/appointment';
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { design_state, wf_business_status, } = toRefs(proxy?.useDict('design_state', 'wf_business_status'));
|
||||
const { design_state, wf_business_status } = toRefs(proxy?.useDict('design_state', 'wf_business_status'));
|
||||
import { drawingreviewReceiptsDetail, drawingreviewReceiptsList } from '@/api/design/drawingreview';
|
||||
const volumeCatalogList = ref<VolumeCatalogVO[]>([]);
|
||||
const des_user_major = ref([]);
|
||||
@ -361,7 +371,7 @@ const data = reactive({
|
||||
documentName: [{ required: true, message: '资料名称不能为空', trigger: 'blur' }],
|
||||
plannedCompletion: [{ required: true, message: '计划出图事件不能为空', trigger: 'blur' }],
|
||||
principal: [{ required: true, message: '设计人员不能为空', trigger: 'blur' }],
|
||||
specialty: [{ required: true, message: '专业不能为空', trigger: 'blur' }],
|
||||
specialty: [{ required: true, message: '专业不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
@ -369,7 +379,7 @@ const { queryParams, form, rules } = toRefs(data);
|
||||
const changeSpecialty = (val) => {
|
||||
form.value.principal = ''; //清空
|
||||
getUserAppList(val);
|
||||
}
|
||||
};
|
||||
// 获取专业列表
|
||||
const getSpecialtyList = async () => {
|
||||
const res = await majorList({ projectId: currentProject.value?.id, userType: 2 });
|
||||
|
@ -47,16 +47,16 @@
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['formalities:listOfFormalities:add']">新增</el-button>
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['formalities:formalitiesAreConsolidated:getTree']"
|
||||
>新增</el-button
|
||||
>
|
||||
<span style="margin-left: 10px"
|
||||
><el-tooltip class="box-item" effect="dark" content="从原有模板列表选择新增" placement="top">
|
||||
<el-icon color="#409efc"><WarningFilled /></el-icon> </el-tooltip
|
||||
></span>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="addTemplate()" v-hasPermi="['formalities:formalitiesAreConsolidated:addFormalities']"
|
||||
>新增数据</el-button
|
||||
>
|
||||
<el-col :span="1.5" v-hasPermi="['formalities:listOfFormalities:list']">
|
||||
<el-button type="primary" plain icon="Plus" @click="addTemplate()">新增数据</el-button>
|
||||
<span style="margin-left: 10px">
|
||||
<el-tooltip class="box-item" effect="dark" content="创建新模板并添加数据" placement="top">
|
||||
<el-icon color="#409efc"><WarningFilled /></el-icon>
|
||||
|
@ -202,28 +202,25 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合格证文件" prop="certCountFileId">
|
||||
<file-upload :isShowTip="false" v-model="form.certCountFileId" />
|
||||
<file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg']" v-model="form.certCountFileId" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="出厂报告文件" prop="reportCountFileId">
|
||||
<file-upload :isShowTip="false" v-model="form.reportCountFileId" />
|
||||
<file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg']" v-model="form.reportCountFileId" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="技术资料文件" prop="techDocCountFileId">
|
||||
<file-upload :isShowTip="false" v-model="form.techDocCountFileId" />
|
||||
<file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg']" v-model="form.techDocCountFileId" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="厂家资质文件" prop="licenseCountFileId">
|
||||
<file-upload :isShowTip="false" v-model="form.licenseCountFileId" />
|
||||
<file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg']" v-model="form.licenseCountFileId" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<span style="color: #ff0000ab; margin-bottom: 10px; display: block"
|
||||
>注意:请上传doc/xls/ppt/txt/pdf/png/jpg/jpeg/zip格式文件</span
|
||||
> </el-col
|
||||
<el-col :span="24"> <span style="color: #ff0000ab; margin-bottom: 10px; display: block">注意:pdf/png/jpg/jpeg格式文件</span> </el-col
|
||||
><el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
|
@ -8,6 +8,7 @@
|
||||
<right-toolbar @queryTable="refreshData"></right-toolbar>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="bg-white rounded-lg shadow-sm overflow-hidden transition-all duration-300 hover:shadow-md">
|
||||
<el-table
|
||||
|
@ -58,7 +58,19 @@
|
||||
<!-- 添加或修改施工产值对话框 -->
|
||||
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="constructionValueFormRef" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="方阵" prop="matrixId" v-if="!form.id">
|
||||
<el-form-item label="对应项目结构" prop="progressCategoryId">
|
||||
<el-tree-select
|
||||
v-model="form.progressCategoryId"
|
||||
:data="ProjectStructureList"
|
||||
@node-click="handleCheckChange"
|
||||
:props="{ value: 'id', label: 'name', children: 'children' }"
|
||||
value-key="id"
|
||||
@change="selectTime"
|
||||
placeholder="请选择项目结构"
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="方阵" prop="matrixId" v-if="!form.id">
|
||||
<el-cascader
|
||||
:options="matrixOptions"
|
||||
placeholder="请选择"
|
||||
@ -81,7 +93,7 @@
|
||||
clearable
|
||||
>
|
||||
</el-cascader>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="计划日期" prop="reportDateId" v-if="!form.id">
|
||||
<el-cascader
|
||||
:options="progressTimeList"
|
||||
@ -129,6 +141,7 @@ import {
|
||||
updateConstructionValue
|
||||
} from '@/api/out/constructionValue';
|
||||
import { ConstructionValueVO, ConstructionValueQuery, ConstructionValueForm } from '@/api/out/constructionValue/types';
|
||||
import { getProjectStructure } from '@/api/progress/constructionSchedulePlan';
|
||||
import { getProjectSquare, listProgressCategory, workScheduleList, workScheduleListDetail, workScheduleListPosition } from '@/api/progress/plan';
|
||||
import { ProgressCategoryVO } from '@/api/progress/plan/types';
|
||||
|
||||
@ -216,7 +229,7 @@ const data = reactive<PageData<ConstructionValueForm, ConstructionValueQuery>>({
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const ProjectStructureList = ref([]);
|
||||
/** 查询施工产值列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
@ -260,19 +273,19 @@ const handleSelectionChange = (selection: ConstructionValueVO[]) => {
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = async () => {
|
||||
reset();
|
||||
const res = await getProjectSquare(currentProject.value?.id);
|
||||
if (res.data.length === 0) return proxy?.$modal.msgWarning('当前项目下没有方阵,请先创建方阵');
|
||||
const isFangzhen = res.data.some((item) => item.children && item.children.length);
|
||||
console.log('🚀 ~ handleAdd ~ isFangzhen:', isFangzhen);
|
||||
// const res = await getProjectSquare(currentProject.value?.id);
|
||||
// if (res.data.length === 0) return proxy?.$modal.msgWarning('当前项目下没有方阵,请先创建方阵');
|
||||
// const isFangzhen = res.data.some((item) => item.children && item.children.length);
|
||||
// console.log('🚀 ~ handleAdd ~ isFangzhen:', isFangzhen);
|
||||
|
||||
if (!isFangzhen) return proxy?.$modal.msgWarning('当前项目下没有方阵,请先创建方阵');
|
||||
let matrixList = res.data.map((item) => {
|
||||
return {
|
||||
...item,
|
||||
matrixId: item?.projectId
|
||||
};
|
||||
});
|
||||
matrixOptions.value = matrixList;
|
||||
// if (!isFangzhen) return proxy?.$modal.msgWarning('当前项目下没有方阵,请先创建方阵');
|
||||
// let matrixList = res.data.map((item) => {
|
||||
// return {
|
||||
// ...item,
|
||||
// matrixId: item?.projectId
|
||||
// };
|
||||
// });
|
||||
// matrixOptions.value = matrixList;
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加施工产值';
|
||||
};
|
||||
@ -304,6 +317,18 @@ const submitTime = async (value: string) => {
|
||||
form.value.artificialNum = data?.finishedNumber;
|
||||
};
|
||||
|
||||
/** 查询施工进度计划列表 */
|
||||
const getProjectStructureList = async () => {
|
||||
const res = await getProjectStructure(currentProject.value?.id);
|
||||
ProjectStructureList.value = [res.data];
|
||||
console.log(ProjectStructureList.value);
|
||||
};
|
||||
|
||||
/** 查询施工进度计划列表 */
|
||||
const handleCheckChange = (val) => {
|
||||
form.value.projectStructureName = val.name;
|
||||
};
|
||||
|
||||
/** 重置选择器 */
|
||||
const resetCascader = (index?: number) => {
|
||||
if (index) {
|
||||
@ -370,6 +395,7 @@ const handleExport = () => {
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getProjectStructureList();
|
||||
getList();
|
||||
});
|
||||
|
||||
|
@ -24,8 +24,8 @@
|
||||
<!-- 添加或修改月度产值计划对话框 -->
|
||||
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="monthPlanFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="金额" prop="unitPrice">
|
||||
<el-input v-model="form.unitPrice" placeholder="请输入金额" type="number" />
|
||||
<el-form-item label="接收数量" prop="acceptedQuantity">
|
||||
<el-input v-model="form.acceptedQuantity" placeholder="请输入接收数量" type="number" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
@ -76,7 +76,8 @@ const initFormData = {
|
||||
valueType: undefined,
|
||||
planAuditStatus: undefined,
|
||||
completeAuditStatus: undefined,
|
||||
unitPrice: undefined
|
||||
unitPrice: undefined,
|
||||
acceptedQuantity: undefined
|
||||
};
|
||||
const data = reactive({
|
||||
form: { ...initFormData },
|
||||
|
@ -1,7 +1,6 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
|
||||
:leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<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">
|
||||
@ -10,8 +9,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
|
||||
<el-option v-for="dict in project_construction_status" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
<el-option v-for="dict in project_construction_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@ -27,8 +25,7 @@
|
||||
<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:constructionSchedulePlan:add']">新增</el-button>
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['progress:constructionSchedulePlan:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
||||
@ -36,9 +33,14 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
<el-table ref="constructionSchedulePlanTableRef" v-loading="loading" :data="constructionSchedulePlanList"
|
||||
row-key="id" :default-expand-all="isExpandAll"
|
||||
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
|
||||
<el-table
|
||||
ref="constructionSchedulePlanTableRef"
|
||||
v-loading="loading"
|
||||
:data="constructionSchedulePlanList"
|
||||
row-key="id"
|
||||
:default-expand-all="isExpandAll"
|
||||
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
||||
>
|
||||
<!-- <el-table-column label="序号" type="id" /> -->
|
||||
<el-table-column label="节点名称" prop="nodeName" />
|
||||
<el-table-column label="对应项目结构" align="center" prop="projectStructureName" />
|
||||
@ -71,16 +73,19 @@
|
||||
<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:constructionSchedulePlan:edit']" />
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['progress:constructionSchedulePlan:edit']" />
|
||||
</el-tooltip>
|
||||
<el-tooltip content="新增" placement="top">
|
||||
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)"
|
||||
v-hasPermi="['progress:constructionSchedulePlan:add']" />
|
||||
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['progress:constructionSchedulePlan:add']" />
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||
v-hasPermi="['progress:constructionSchedulePlan:remove']" />
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['progress:constructionSchedulePlan:remove']"
|
||||
/>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -90,39 +95,57 @@
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="constructionSchedulePlanFormRef" :model="form" :rules="rules" label-width="110px">
|
||||
<el-form-item label="父节点" prop="parentId">
|
||||
<el-tree-select v-model="form.parentId" :data="constructionSchedulePlanOptions"
|
||||
:props="{ value: 'id', label: 'nodeName', children: 'children' }" value-key="id" placeholder="请选择父节点"
|
||||
check-strictly />
|
||||
<el-tree-select
|
||||
v-model="form.parentId"
|
||||
:data="constructionSchedulePlanOptions"
|
||||
:props="{ value: 'id', label: 'nodeName', children: 'children' }"
|
||||
value-key="id"
|
||||
placeholder="请选择父节点"
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="节点名称" prop="nodeName">
|
||||
<el-input v-model="form.nodeName" placeholder="请输入节点名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="对应项目结构" prop="projectStructure">
|
||||
<el-tree-select v-model="form.projectStructure" :data="ProjectStructureList" @node-click="handleCheckChange"
|
||||
:props="{ value: 'id', label: 'name', children: 'children' }" value-key="id" placeholder="请选择项目结构"
|
||||
check-strictly />
|
||||
<el-tree-select
|
||||
v-model="form.projectStructure"
|
||||
:data="ProjectStructureList"
|
||||
@node-click="handleCheckChange"
|
||||
:props="{ value: 'id', label: 'name', children: 'children' }"
|
||||
value-key="id"
|
||||
placeholder="请选择项目结构"
|
||||
check-strictly
|
||||
/>
|
||||
<!-- <el-input v-model="form.projectStructure" placeholder="请输入对应项目结构" /> -->
|
||||
</el-form-item>
|
||||
<el-form-item label="预计开始时间" prop="planStartDate">
|
||||
<el-date-picker clearable v-model="form.planStartDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="选择预计开始时间" />
|
||||
<el-date-picker clearable v-model="form.planStartDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择预计开始时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="预计结束时间" prop="planEndDate">
|
||||
<el-date-picker clearable v-model="form.planEndDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="选择预计结束时间" />
|
||||
<el-date-picker clearable v-model="form.planEndDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择预计结束时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际开始时间" prop="practicalStartDate">
|
||||
<el-date-picker clearable v-model="form.practicalStartDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="选择实际开始时间" />
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-model="form.practicalStartDate"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="选择实际开始时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际结束时间" prop="practicalEndDate">
|
||||
<el-date-picker clearable v-model="form.practicalEndDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="选择实际结束时间" />
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-model="form.practicalEndDate"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="选择实际结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="form.status" placeholder="请选择状态">
|
||||
<el-option v-for="dict in project_construction_status" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
<el-option v-for="dict in project_construction_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
@ -145,7 +168,8 @@ import {
|
||||
getConstructionSchedulePlan,
|
||||
delConstructionSchedulePlan,
|
||||
addConstructionSchedulePlan,
|
||||
updateConstructionSchedulePlan, getProjectStructure
|
||||
updateConstructionSchedulePlan,
|
||||
getProjectStructure
|
||||
} from '@/api/progress/constructionSchedulePlan';
|
||||
import {
|
||||
ConstructionSchedulePlanVO,
|
||||
@ -196,7 +220,6 @@ const initFormData = {
|
||||
status: undefined,
|
||||
remark: undefined,
|
||||
projectStructureName: undefined
|
||||
|
||||
};
|
||||
|
||||
const data = reactive<PageData<ConstructionSchedulePlanForm, ConstructionSchedulePlanQuery>>({
|
||||
@ -243,7 +266,7 @@ const handleCheckChange = (val) => {
|
||||
|
||||
/** 查询施工进度计划下拉树结构 */
|
||||
const getTreeselect = async () => {
|
||||
const res = await listConstructionSchedulePlan();
|
||||
const res = await listConstructionSchedulePlan({ projectId: currentProject.value?.id });
|
||||
constructionSchedulePlanOptions.value = [];
|
||||
const data: ConstructionSchedulePlanOption = { id: 0, nodeName: '顶级节点', children: [] };
|
||||
data.children = proxy?.handleTree<ConstructionSchedulePlanOption>(res.data, 'id', 'parentId');
|
||||
|
@ -345,7 +345,6 @@ const getWorkList = (bool = false) => {
|
||||
if (res.code === 200) {
|
||||
state.tableData = res.rows.map((item: any, i: number) => {
|
||||
item.index = i + 1;
|
||||
item.aiFill = item.detailList?.reduce((sum: number, child: any) => sum + child.aiFill, 0) || 0;
|
||||
return item;
|
||||
});
|
||||
state.total = res.total;
|
||||
|
@ -34,7 +34,7 @@
|
||||
:file-type="['xls', 'xlsx']"
|
||||
:on-upload-success="handleSuccess"
|
||||
>
|
||||
<el-button type="primary" plain icon="Compass">导入</el-button>
|
||||
<el-button type="primary" plain icon="upload">导入</el-button>
|
||||
</file-upload>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
@ -140,10 +140,10 @@
|
||||
<el-input v-model="form.unit" placeholder="请输入计量单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="综合单价(业主)" prop="ownerPrice" v-if="form.unitType != '0'">
|
||||
<el-input v-model="form.ownerPrice" placeholder="请输入综合单价(业主)" />
|
||||
<el-input v-model="form.ownerPrice" type="number" min="0" placeholder="请输入综合单价(业主)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="综合单价(分包)" prop="constructionPrice" v-if="form.unitType != '0'">
|
||||
<el-input v-model="form.constructionPrice" placeholder="请输入综合单价(分包)" />
|
||||
<el-input v-model="form.constructionPrice" type="number" min="0" placeholder="请输入综合单价(分包)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数量" prop="total" v-if="!form.workType && form.unitType != '0'">
|
||||
<el-input v-model="form.total" placeholder="请输入数量" />
|
||||
@ -249,6 +249,7 @@ const initFormData: ProgressCategoryForm = {
|
||||
status: undefined,
|
||||
remark: undefined
|
||||
};
|
||||
const labelTitle = ref('测试方阵');
|
||||
|
||||
const data = reactive<PageData<ProgressCategoryForm, ProgressCategoryQuery>>({
|
||||
form: { ...initFormData },
|
||||
@ -323,7 +324,8 @@ const getList = async () => {
|
||||
if (data) {
|
||||
progressCategoryList.value = data;
|
||||
progressCategoryOptions.value = [];
|
||||
const datas: ProgressCategoryOption = { id: 0, name: '顶级节点', children: [...data] };
|
||||
const datas: ProgressCategoryOption = { id: 0, name: '顶级节点', children: [{ id: id, children: [...data], name: labelTitle.value }] };
|
||||
// form.value.parentId = id;
|
||||
progressCategoryOptions.value.push(datas);
|
||||
console.log('🚀 ~ getList ~ progressCategoryOptions.value:', progressCategoryOptions.value);
|
||||
loading.value = false;
|
||||
@ -336,6 +338,7 @@ const getList = async () => {
|
||||
const handleSuccess = () => {
|
||||
console.log(111);
|
||||
proxy.$modal.msgSuccess('操作成功');
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 查询分项工程单价下拉树结构 */
|
||||
@ -355,6 +358,8 @@ const cancel = () => {
|
||||
};
|
||||
|
||||
const handleTabClick = (tab: any) => {
|
||||
console.log(tab);
|
||||
labelTitle.value = tab.props.label;
|
||||
const id = tab.props.name; // 实际上就是 item.id
|
||||
const current = tabList.value.find((item) => item.id === id);
|
||||
if (current.matrixStructureList && current.matrixStructureList.length > 0) {
|
||||
|
@ -106,7 +106,7 @@
|
||||
<el-input v-model="form.name" placeholder="请输入类别名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="关联数据" prop="workType">
|
||||
<el-select v-model="form.workType" placeholder="请选择关联数据">
|
||||
<el-select v-model="form.workType" clearable filterable placeholder="请选择关联数据">
|
||||
<el-option v-for="dict in progress_work_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -87,11 +87,11 @@
|
||||
<el-table-column label="迟到(次)" align="center" prop="lateDays" />
|
||||
<el-table-column label="早退(次)" align="center" prop="leaveEarlyDays" />
|
||||
<el-table-column label="缺卡(次)" align="center" prop="unClockDays" />
|
||||
<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">
|
||||
<el-button link type="primary" icon="View" @click="handleDetails(scope.row)" v-hasPermi="['project:attendance:edit']">详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
@ -347,10 +347,10 @@ const getList = async () => {
|
||||
/** 查询近两周考勤列表 */
|
||||
const getListTwoWeek = async () => {
|
||||
loading.value = true;
|
||||
const res = await listAttendanceTwoWeek(queryParams.value);
|
||||
attendanceTwoWeekList.value = res.data;
|
||||
echartsOption.value = { ...option(attendanceTwoWeekList.value) };
|
||||
commandstatsIntance.value.setOption(echartsOption.value);
|
||||
// const res = await listAttendanceTwoWeek(queryParams.value);
|
||||
// attendanceTwoWeekList.value = res.data;
|
||||
// echartsOption.value = { ...option(attendanceTwoWeekList.value) };
|
||||
// commandstatsIntance.value.setOption(echartsOption.value);
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
|
@ -31,16 +31,20 @@
|
||||
<el-button type="success" plain icon="Plus" @click="downloadTemplate" v-hasPermi="['land:enterRoad:import']">模板下载</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-upload ref="uploadRef" class="upload-demo" :http-request="handleImport" :show-file-list="false">
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
v-hasPermi="['land:enterRoad:upload']"
|
||||
class="upload-demo"
|
||||
:http-request="handleImport"
|
||||
:show-file-list="false"
|
||||
>
|
||||
<template #trigger>
|
||||
<el-button plain type="primary">导入excel</el-button>
|
||||
<el-button plain type="primary" icon="upload">导入excel</el-button>
|
||||
</template>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['land:enterRoad:remove']"
|
||||
>删除</el-button
|
||||
>
|
||||
<el-button type="success" plain icon="Download" @click="exportFile">导出模版</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
@ -93,7 +97,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button :loading="buttonLoading" type="primary" v-hasPermi="['land:enterRoad:add']" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -204,7 +208,24 @@ const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
const exportFile = () => {
|
||||
// 导出模版文件
|
||||
try {
|
||||
// 创建a标签
|
||||
const link = document.createElement('a');
|
||||
// 设置PDF文件路径 - 相对于public目录
|
||||
link.href = '/daolu.xlsx';
|
||||
// 设置下载后的文件名
|
||||
link.download = '道路信息导入模版.xlsx';
|
||||
// 触发点击
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 清理
|
||||
document.body.removeChild(link);
|
||||
} catch (error) {
|
||||
alert('下载失败,请重试');
|
||||
}
|
||||
};
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: EnterRoadVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
@ -270,15 +291,18 @@ const handleImport = (options: any) => {
|
||||
loading.value = true;
|
||||
let formData = new FormData();
|
||||
formData.append('file', options.file);
|
||||
importEnterRoad(currentProject.value?.id,formData).then((res) => {
|
||||
importEnterRoad(currentProject.value?.id, formData)
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess(res.msg || '导入成功');
|
||||
getListLand();
|
||||
getList();
|
||||
}
|
||||
}).catch((err) => {
|
||||
})
|
||||
.catch((err) => {
|
||||
proxy.$modal.msgError(err.msg || '导入失败');
|
||||
}).finally(() => {
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
@ -42,10 +42,13 @@
|
||||
<el-col :span="1.5">
|
||||
<el-upload ref="uploadRef" class="upload-demo" :http-request="handleImport" :show-file-list="false">
|
||||
<template #trigger>
|
||||
<el-button plain type="primary">导入excel</el-button>
|
||||
<el-button plain type="primary" icon="upload">导入excel</el-button>
|
||||
</template>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Download" @click="exportFile">导出模版</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
@ -99,7 +102,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm" v-hasPermi="['land:landBlock:add']">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -521,7 +524,24 @@ const handleImport = (options: { file: File }) => {
|
||||
loading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const exportFile = () => {
|
||||
// 导出模版文件
|
||||
try {
|
||||
// 创建a标签
|
||||
const link = document.createElement('a');
|
||||
// 设置PDF文件路径 - 相对于public目录
|
||||
link.href = '/dikuai.xlsx';
|
||||
// 设置下载后的文件名
|
||||
link.download = '地块信息导入模版.xlsx';
|
||||
// 触发点击
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
// 清理
|
||||
document.body.removeChild(link);
|
||||
} catch (error) {
|
||||
alert('下载失败,请重试');
|
||||
}
|
||||
};
|
||||
/** 下载导入模板 */
|
||||
const downloadTemplate = () => {
|
||||
try {
|
||||
|
@ -208,7 +208,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button v-hasPermi="['land:landTransferLedger:add']" :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -142,7 +142,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button v-hasPermi="['land:landTransferLedger:add']" :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -145,7 +145,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button :loading="buttonLoading" type="primary" v-hasPermi="['land:landTransferLedger:add']" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -119,7 +119,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button v-hasPermi="['design:subcontract:add']" :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="招标文件" prop="name">
|
||||
<el-form-item label="中标文件" prop="name">
|
||||
<file-upload
|
||||
v-model="form.costEstimationFile"
|
||||
:fileSize="100"
|
||||
|
@ -665,7 +665,7 @@ const handleDetail = (row: any) => {
|
||||
getDetails(row);
|
||||
};
|
||||
const getDetails = (row: any) => {
|
||||
getTenderPlanDetail({ id: row.id }).then((res) => {
|
||||
getTenderPlanDetail({ id: row.id, projectId: currentProject.value?.id }).then((res) => {
|
||||
if (res.code == 200) {
|
||||
detailData.value = res.data;
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
<!-- 表单区域 -->
|
||||
<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>
|
||||
<h3 class="text-lg font-semibold text-gray-800">供应商入库</h3>
|
||||
</div>
|
||||
<div class="p-6">
|
||||
<el-form ref="leaveFormRef" v-loading="loading" disabled :model="form" :rules="rules" label-width="150px" class="space-y-4">
|
||||
@ -333,6 +333,17 @@ const getInfo = () => {
|
||||
nextTick(async () => {
|
||||
const res = await getSupplierInput(routeParams.value.id);
|
||||
Object.assign(form.value, res.data);
|
||||
form.value.registeredNumber = form.value.registeredNumber?.split(',');
|
||||
form.value.build1 = form.value.registeredNumber[0] || '';
|
||||
form.value.build2 = form.value.registeredNumber[1] || '';
|
||||
form.value.build3 = form.value.registeredNumber[2] || '';
|
||||
form.value.build4 = form.value.registeredNumber[3] || '';
|
||||
form.value.personnelNumber = form.value.personnelNumber?.split(',');
|
||||
form.value.personnelNumber1 = form.value.personnelNumber[0] || '';
|
||||
form.value.personnelNumber2 = form.value.personnelNumber[1] || '';
|
||||
form.value.personnelNumber3 = form.value.personnelNumber[2] || '';
|
||||
form.value.personnelNumber4 = form.value.personnelNumber[3] || '';
|
||||
|
||||
loading.value = false;
|
||||
buttonLoading.value = false;
|
||||
});
|
||||
@ -437,7 +448,9 @@ onMounted(() => {
|
||||
.el-input__inner,
|
||||
.el-select .el-input__inner {
|
||||
border-radius: 4px;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
transition:
|
||||
border-color 0.2s,
|
||||
box-shadow 0.2s;
|
||||
|
||||
&:focus {
|
||||
border-color: var(--primary-light);
|
||||
@ -447,7 +460,9 @@ onMounted(() => {
|
||||
|
||||
.el-textarea__inner {
|
||||
border-radius: 4px;
|
||||
transition: border-color 0.2s, box-shadow 0.2s;
|
||||
transition:
|
||||
border-color 0.2s,
|
||||
box-shadow 0.2s;
|
||||
|
||||
&:focus {
|
||||
border-color: var(--primary-light);
|
||||
|
230
vite.config.ts.timestamp-1756496937860-efea843310722.mjs
Normal file
230
vite.config.ts.timestamp-1756496937860-efea843310722.mjs
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user