243 lines
6.3 KiB
Vue
243 lines
6.3 KiB
Vue
<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>
|