Browse Source

feat: "合同管理"

master
xuesinan 4 years ago
parent
commit
6cc4ff8a57
  1. 211
      src/components/tall/task/ContractManagement.vue

211
src/components/tall/task/ContractManagement.vue

@ -1,75 +1,96 @@
<template> <template>
<div class="task-form bg-white border-radius-10"> <div class="task-form bg-white border-radius-10">
<a-form ref="formRef" :model="topicContractFormData"> <a-form>
<a-form-item> <div v-for="(item, index) in questionList" :key="index">
<label class="color-3">合同名称</label> <template v-if="item.type === 1">
<a-input v-model:value="topicContractFormData.name" placeholder="合同名称" /> <a-form-item>
</a-form-item> <label class="color-3">{{ item.question }}</label>
<a-input v-model:value="item.con" :placeholder="item.question" />
<a-form-item> </a-form-item>
<label class="color-3">合同编号</label> </template>
<a-input v-model:value="topicContractFormData.number" placeholder="合同编号" />
</a-form-item> <template v-if="item.type === 2">
<a-form-item>
<a-form-item> <label class="color-3">{{ item.question }}</label>
<label class="color-3">合同甲方/委托方</label> <a-textarea v-model:value="item.con" :placeholder="item.question" />
<a-input v-model:value="topicContractFormData.firstParty" placeholder="合同甲方/委托方" /> </a-form-item>
</a-form-item> </template>
<a-form-item> <template v-if="item.type === 3"> </template>
<label class="color-3">合同扫描</label>
<a-upload-dragger <template v-if="item.type === 4"> </template>
v-model:fileList="fileList"
name="files" <template v-if="item.type === 5"> </template>
:multiple="true"
:action="action" <template v-if="item.type === 6">
:headers="headers" <a-form-item>
:accept="'.pdf'" <label class="color-3">{{ item.question }}</label>
@change="handleChange" <a-date-picker v-model:value="item.date" />
> </a-form-item>
<p class="ant-upload-drag-icon"> </template>
<inbox-outlined></inbox-outlined>
</p> <template v-if="item.type === 7">
<p class="ant-upload-text color-3 font-14">点击或拖拽文件到区域内上传交付物</p> <a-form-item>
<p class="ant-upload-hint color-c">格式pdf</p> <label class="color-3">{{ item.question }}</label>
</a-upload-dragger> <a-upload-dragger
</a-form-item> v-model:fileList="item.files"
name="files"
:multiple="true"
:action="action"
:headers="headers"
:accept="'.pdf'"
:before-upload="beforeUpload(index)"
@change="handleChange"
>
<p class="ant-upload-drag-icon">
<inbox-outlined></inbox-outlined>
</p>
<p class="ant-upload-text color-3 font-14">点击或拖拽文件到区域内上传交付物</p>
<p class="ant-upload-hint color-c">格式pdf</p>
</a-upload-dragger>
</a-form-item>
</template>
</div>
<a-form-item class="text-right"> <a-form-item class="text-right">
<a-button type="primary" html-type="submit" @click="onSubmit">上传合同扫描件</a-button> <a-button type="primary" html-type="submit" @click="onSubmit">上传中期检查报告</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, computed, toRaw } from 'vue'; import { ref, computed } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import dayjs from 'dayjs';
import { InboxOutlined } from '@ant-design/icons-vue'; import { InboxOutlined } from '@ant-design/icons-vue';
import { uploadImg } from 'apis'; import { uploadImg } from 'apis';
const store = useStore(); const store = useStore();
const formRef = ref(null); //
const sessionProject = sessionStorage.getItem('project'); const sessionProject = sessionStorage.getItem('project');
const projectId = computed(() => store.getters['projects/projectId']); //
const token = computed(() => store.getters['user/token']); const token = computed(() => store.getters['user/token']);
const headers = { Authorization: `Bearer ${token.value}` }; const headers = { Authorization: `Bearer ${token.value}` };
const action = uploadImg; const action = uploadImg;
const fileList = ref([]); //
const projectId = computed(() => store.getters['projects/projectId']); // ID
const code = computed(() => store.state.task.label); // code
const questionList = ref([]);
//
const currIndex = ref(null);
// ID
if (sessionProject) { if (sessionProject) {
const project = JSON.parse(sessionProject); const project = JSON.parse(sessionProject);
store.commit('projects/setProject', project); store.commit('projects/setProject', project);
} }
const topicContractFormData = ref({ getDataByCode();
projectId: projectId.value,
code: '', const beforeUpload = index => {
name: '', currIndex.value = index;
number: '', };
firstParty: '',
fileIdList: [],
});
const handleChange = info => { const handleChange = info => {
const resFileList = [...info.fileList]; const resFileList = [...info.fileList];
@ -101,26 +122,92 @@ const handleChange = info => {
return file; return file;
}); });
fileList.value = arr.value; questionList.value[currIndex.value].files = arr.value;
}; };
const onSubmit = () => { const onSubmit = async () => {
fileList.value.forEach(item => { const params = {
// let obj = { param: {
// fileId: item.id, code: code.value,
// fileName: item.name, projectId: projectId.value,
// filePathL: item.url questionAndAnswerList: [],
// } },
};
const arr = [];
questionList.value.forEach(item => {
const obj = {
questionId: item.questionId,
answerList: [],
};
if (item.type === 1 || item.type === 2) {
obj.answerList.push(item.con);
}
// topicContractFormData.value.fileList.push(obj); if (item.type === 6) {
topicContractFormData.value.fileIdList.push(item.id); obj.answerList.push(dayjs(item.date).format('x'));
}); }
// const params = { param: topicContractFormData.value }; if (item.type === 7) {
item.files.forEach(val => {
const file = {
id: val.id,
name: val.name,
url: val.url,
};
obj.answerList.push(JSON.stringify(file));
});
}
arr.push(obj);
});
// saveSubExperiment(params); params.param.questionAndAnswerList = arr;
console.log('submit!', toRaw(topicContractFormData.value)); await store.dispatch('task/submitAnswer', params);
getDataByCode();
}; };
async function getDataByCode() {
const params = {
param: {
code: code.value,
projectId: projectId.value,
intellectualId: null,
},
};
const data = await store.dispatch('task/getByCode', params);
data.forEach(item => {
if (item.type === 1 || item.type === 2) {
item.con = '';
if (item.answerList.length > 0) {
item.con = item.answerList[0].answer;
}
}
if (item.type === 6) {
item.date = null;
if (item.answerList.length > 0) {
item.date = dayjs(Number(item.answerList[0].answer)).format('YYYY-MM-DD');
item.date = dayjs(item.date, 'YYYY-MM-DD');
}
}
if (item.type === 7) {
item.files = [];
if (item.answerList.length > 0) {
item.answerList.forEach(val => {
val.answer = JSON.parse(val.answer);
item.files.push(val.answer);
});
}
}
});
questionList.value = data;
}
</script> </script>
<style scoped> <style scoped>

Loading…
Cancel
Save