Files
2023-06-19 17:25:50 +08:00

243 lines
6.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup>
import { ref } from "vue";
import FileUpload from "@/components/FileUpload/index.vue";
import {
getTechnologyDemandUpdateStatus,
updateDemandProcess,
} from "@/api/admin/agent/service/technology-demand";
import { useRoute, useRouter } from "vue-router";
import { ElMessage } from "element-plus";
const active = ref(0); /*active step index*/
const updateStatusList = ref([]); /*update status list*/
const route = useRoute();
const router = useRouter();
const cooperationMemoUrl = ref(""); // 合作备忘录
const technicalSolutionUrl = ref(""); // 客户确认技术解决方案
const contractUrl = ref(""); // 签署服务合同(合同额)
const conclusionUrl = ref(""); // 结题
//未结题原因描述
const reason = ref("");
// steps title, description, id
const steps = [
{
title: "合作备忘录",
description: "合作备忘录",
id: 1,
},
{
title: "客户确认技术解决方案",
description: "客户确认技术解决方案",
id: 2,
},
{
title: "签署服务合同(合同额)",
description: "签署服务合同(合同额)",
id: 3,
},
{
title: "结题",
description: "结题",
id: 4,
},
{
title: "未结题",
description: "未结题",
id: 5,
},
];
const getUpdateStatus = async (demandId) => {
const resp = await getTechnologyDemandUpdateStatus({
demandId,
});
updateStatusList.value = resp.data.sort((a, b) => a.sort - b.sort);
const reverseIndex = updateStatusList.value.findLastIndex(
(item) => item.status === "1"
);
console.log(updateStatusList.value.length, reverseIndex);
active.value = reverseIndex === -1 ? 0 : reverseIndex;
};
const goToStep = (index) => {
// if (index <= active.value) {
// active.value = index;
// }
if (
(active.value === 3 && index === 4) ||
(active.value === 4 && index === 3)
) {
} else {
active.value = index;
}
};
const close = () => {
router.go(-1);
};
const submit = () => {
console.log(updateStatusList.value[active.value]);
updateDemandProcess({
...updateStatusList.value[active.value],
status: "1",
})
.then((resp) => {
ElMessage.success("操作成功");
})
.catch(() => {})
.finally(() => {
getUpdateStatus(route.query.id);
// active.value = updateStatusList.value.findIndex((item) => item.status === "1") + 1;
// 反向从列表中查找index
});
};
if (route.query.id) {
getUpdateStatus(route.query.id);
} else {
router.go(-1);
}
</script>
<template>
<div class="app-container">
<h2 class="page-title">需求状态</h2>
<div style="width: 80%; margin: 0 auto">
<el-steps :active="active" finish-status="finish" process-status="finish">
<el-step
v-for="(item, index) in steps"
:key="item.id"
:status="active === 4 && index === 3 ? 'wait' : ''"
:style="`cursor: ${
(active === 4 && index === 3) || (active === 3 && index === 4)
? 'not-allowed'
: 'pointer'
}`"
:title="item.title"
@click="goToStep(index)"
>
<!-- :status="active === 4 ? 'error' : ''"-->
</el-step>
</el-steps>
<div v-if="updateStatusList.length" class="steps-content">
<template
v-for="(item, index) in steps.slice(0, active + 1)"
:key="item.id"
>
<div
v-if="
!(index === 3 && updateStatusList[4].status !== '0') &&
!(index === 4 && updateStatusList[3].status !== '0')
"
:class="`step-item ${active === index ? 'active' : ''}`"
>
<h3 class="title">{{ index + 1 }}.{{ item.title }}</h3>
<div class="form-wrap">
<el-form :model="updateStatusList[0]" label-position="top">
<el-row v-if="index !== 4" justify="space-between">
<el-col :span="12">
<el-form-item :label="`上传文件`">
<file-upload v-model="updateStatusList[index].files" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
v-if="index === 2 || index === 3"
label="金额"
>
<el-input-number
v-model="updateStatusList[index].remark"
:controls="false"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item v-else label="未结题原因描述">
<el-input
v-model="updateStatusList[index].remark"
:rows="5"
type="textarea"
/>
</el-form-item>
</el-form>
</div>
<div v-if="updateStatusList[index].updateTime" class="upload-time">
<span>上传时间</span>
<span>{{ updateStatusList[index].updateTime }}</span>
</div>
</div>
</template>
</div>
<div class="steps-action">
<el-button @click="close">关闭</el-button>
<el-button
v-if="
updateStatusList.length &&
updateStatusList[3]?.status === '0' &&
updateStatusList[4]?.status === '0'
"
type="primary"
@click="submit"
>提交
</el-button>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.page-title {
text-align: center;
}
.steps-content {
margin-top: 36px;
.step-item {
border-radius: 12px;
//min-height: 240px;
border-bottom: 1px solid #ebeef5;
padding: 12px 24px;
&.active {
background-color: rgba(0, 255, 127, 0.03);
}
.title {
margin: 0;
text-align: end;
font-size: 22px;
font-weight: 700;
color: #169bd5;
}
.form-wrap {
display: flex;
justify-content: space-between;
align-items: end;
:deep(.el-form) {
width: 100%;
}
:deep(.el-form-item__label) {
font-size: 24px;
font-weight: 700;
}
}
.upload-time {
text-align: end;
font-size: 14px;
color: #909399;
}
}
}
.steps-action {
margin-top: 20px;
display: flex;
justify-content: end;
}
</style>