فهرست منبع

合同类型接口对接

duy 2 سال پیش
والد
کامیت
b5e5b4381b

+ 44 - 0
src/api/modules/project/project-contract.js

@@ -0,0 +1,44 @@
+import {httpApi} from "../../request/httpApi";
+
+export default {
+    //获取分页
+    async getPage(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-control/contractInfo/getPage',
+            method: 'get',
+            params: form
+        }, msg);
+    },
+    //获取详情
+    async getContractInfoById(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-control/contractInfo/getContractInfoById',
+            method: 'get',
+            params: form
+        }, msg);
+    },
+    //获取合同类型字典
+    async getContractTypeDict(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-control/contractInfo/getContractTypeDict',
+            method: 'get',
+            params: form
+        }, msg);
+    },
+    //获取未被关联的任务
+    async getNoConnectionProject(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-control/contractInfo/getNoConnectionProject',
+            method: 'get',
+            params: form
+        }, msg);
+    },
+    //获取合同回款里程碑
+    async getListByContractId(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-control/contractReturnedInfo/getListByContractId',
+            method: 'get',
+            params: form
+        }, msg);
+    },
+}

+ 68 - 31
src/views/project/contract/components/base.vue

@@ -12,40 +12,39 @@
                              size="large"
                     >
                         <el-form-item label="合同编号:">
-                            <el-input v-model="formInvoiceModel.key1"/>
+                            <el-input v-model="formBaseModel.number"/>
                         </el-form-item>
-                        <el-form-item label="合同名称:" prop="key2">
-                            <el-input v-model="formInvoiceModel.key2"/>
+                        <el-form-item label="合同名称:" prop="name">
+                            <el-input v-model="formBaseModel.name"/>
                         </el-form-item>
-                        <el-form-item label="合同类型:" prop="key2">
-                            <el-select block v-model="formInvoiceModel.key3">
-                                <el-option label="选项1" value="选项1"/>
-                                <el-option label="选项2" value="选项2"/>
-                            </el-select>
+                  
+                        <el-form-item label="合同类型:" prop="contractType">
+                                    <el-select v-model="formBaseModel.contractType" block clearable placeholder="合同类型:">
+                                        <el-option v-for="item in contractType" :label="item.dictName" :value="item.dictValue"/>
+                                    </el-select>
                         </el-form-item>
-                        <el-form-item label="所属项目:" prop="key2">
-                            <el-select block v-model="formInvoiceModel.key4">
-                                <el-option label="选项1" value="选项1"/>
-                                <el-option label="选项2" value="选项2"/>
+                        <el-form-item label="所属项目:" prop="projectId" block clearable placeholder="所属项目:">
+                            <el-select block v-model="formBaseModel.projectId">
+                                <el-option v-for="item in projectList" :label="item.name" :value="item.id"/>
                             </el-select>
                         </el-form-item>
-                        <el-form-item label="签订时间:" prop="key2">
-                            <el-date-picker class="block" v-model="formInvoiceModel.key5" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD"/>
+                        <el-form-item label="签订时间:" prop="contractSignTime">
+                            <el-date-picker class="block" v-model="formBaseModel.contractSignTime" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
-                        <el-form-item label="合同起止日期:" prop="key2">
+                        <el-form-item label="合同起止日期:" >
                             <HcDatePicker :dates="betweenTime" clearable :disabled="isDisabled" @change="betweenTimeUpdate"/>
                         </el-form-item>
                         <el-form-item label="对方单位回款联系人名称:">
-                            <el-input v-model="formInvoiceModel.key1"/>
+                            <el-input v-model="formBaseModel.returnedUserName"/>
                         </el-form-item>
                         <el-form-item label="对方单位回款联系人电话:">
-                            <el-input v-model="formInvoiceModel.key1"/>
+                            <el-input v-model="formBaseModel.returnedUserPhone"/>
                         </el-form-item>
                         <el-form-item label="合同已履约回款:">
-                            <el-input v-model="formInvoiceModel.key1"/>
+                            <el-input v-model="formBaseModel.returnedMoney"/>
                         </el-form-item>
                         <el-form-item label="合同未履约回款:">
-                            <el-input v-model="formInvoiceModel.key1"/>
+                            <el-input v-model="formBaseModel.unreturnedMoney"/>
                         </el-form-item>
                     </el-form>
                 </el-scrollbar>
@@ -55,7 +54,7 @@
                     <div class="title">开票相关信息</div>
                     <div class="invoice-form">
                         <el-form ref="formInvoiceRef"
-                                 :model="formInvoiceModel"
+                                 :model="formBaseModel"
                                  :rules="formInvoiceRules"
                                  :disabled="isDisabled"
                                  label-position="left"
@@ -63,25 +62,25 @@
                                  size="large"
                         >
                             <el-form-item label="发票抬头:">
-                                <el-input v-model="formInvoiceModel.key1"/>
+                                <el-input v-model="formBaseModel.invoiceHead"/>
                             </el-form-item>
                             <el-form-item label="纳税人识别号:">
-                                <el-input v-model="formInvoiceModel.key1"/>
+                                <el-input v-model="formBaseModel.taxpayerNumber"/>
                             </el-form-item>
                             <el-form-item label="开户银行:">
-                                <el-input v-model="formInvoiceModel.key1"/>
+                                <el-input v-model="formBaseModel.openAccountBank"/>
                             </el-form-item>
                             <el-form-item label="银行账户:">
-                                <el-input v-model="formInvoiceModel.key1"/>
+                                <el-input v-model="formBaseModel.bankAccount"/>
                             </el-form-item>
                             <el-form-item label="收件人:">
-                                <el-input v-model="formInvoiceModel.key1"/>
+                                <el-input v-model="formBaseModel.addresseeUserName"/>
                             </el-form-item>
                             <el-form-item label="联系电话:">
-                                <el-input v-model="formInvoiceModel.key1"/>
+                                <el-input v-model="formBaseModel.addresseePhone"/>
                             </el-form-item>
                             <el-form-item label="邮寄地址:">
-                                <el-input v-model="formInvoiceModel.key1"
+                                <el-input v-model="formBaseModel.mailingAddress"
                                     :autosize="{ minRows: 5, maxRows: 8 }"
                                     type="textarea"
                                 />
@@ -106,11 +105,14 @@
 </template>
 
 <script setup>
-import {ref, watch} from "vue";
-import {useRouter} from 'vue-router'
+import {ref, watch,onActivated} from "vue";
+import {useRouter,useRoute} from 'vue-router'
+import contractApi from '~api/project/project-contract.js';
+import {getArrValue} from "js-fast-way"
 
 const router = useRouter()
-
+const useRoutes = useRoute()
+const dataType = ref(useRoutes?.query?.type ?? '')
 //参数
 const props = defineProps({
     datas: {
@@ -131,6 +133,9 @@ watch(() => [
     props.datas,
 ], ([datas]) => {
     infoData.value = datas
+    formBaseModel.value=datas
+    betweenTime.value[0]=datas['startTime']
+    betweenTime.value[1]=datas['endTime']
 }, {deep: true})
 
 //监听
@@ -139,7 +144,18 @@ watch(() => [
 ], ([disabled]) => {
     isDisabled.value = disabled
 })
+onActivated(()=>{
+    dataType.value = useRoutes?.query?.type ?? ''
+    getContractType()
+    if( dataType.value=='add'){
+        getProjectList(1)
+    }else{
+        getProjectList(2)
+    }
+   
+    
 
+})
 //基础表单
 const formBaseRef = ref(null)
 const formBaseModel = ref({})
@@ -150,7 +166,7 @@ const formBaseRules = {
 }
 
 //日期时间被选择
-const betweenTime = ref(null)
+const betweenTime = ref([])
 const betweenTimeUpdate = ({arr, query}) => {
     betweenTime.value = arr
 }
@@ -169,8 +185,29 @@ const goBackClick = () => {
 
 //提交保存
 const saveClick = () => {
+    console.log(formBaseModel.value,'formBaseModel');
 
 }
+//获取合同类型
+const contractType=ref([])
+const getContractType=async()=>{
+    const {error, code, data} = await contractApi.getContractTypeDict()
+    if (!error && code === 200) {
+        contractType.value=getArrValue(data)
+    } else {
+        contractType.value=[]
+    }
+}
+//所属项目projectList
+const projectList=ref([])
+const getProjectList=async(type)=>{
+    const {error, code, data} = await contractApi.getNoConnectionProject({type})
+    if (!error && code === 200) {
+        projectList.value=getArrValue(data)
+    } else {
+        projectList.value=[]
+    }
+}
 </script>
 
 <style scoped lang="scss">

+ 34 - 3
src/views/project/contract/form.vue

@@ -4,10 +4,10 @@
             <baseTabCard :datas="infoData" :disabled="dataType === 'view'" v-if="tabsKey === 'base'"/>
         </template>
         <template #tab-file>
-            <fileTabCard :datas="infoData" :disabled="dataType === 'view'" v-if="tabsKey === 'file'"/>
+            <fileTabCard :datas="infoDataFile" :disabled="dataType === 'view'" v-if="tabsKey === 'file'"/>
         </template>
         <template #tab-milestone>
-            <milestoneTab :datas="infoData" :disabled="dataType === 'view'" v-if="tabsKey === 'milestone'"/>
+            <milestoneTab :datas="milestoneData" :disabled="dataType === 'view'" v-if="tabsKey === 'milestone'"/>
         </template>
         <template #tab-record>
             <recordTabCard :datas="infoData" v-if="tabsKey === 'record'"/>
@@ -22,7 +22,8 @@ import baseTabCard from "./components/base.vue";
 import fileTabCard from "./components/file.vue";
 import milestoneTab from "./components/milestone.vue";
 import recordTabCard from "./components/record.vue";
-import {arrIndex} from "js-fast-way";
+import {arrIndex,getObjValue} from "js-fast-way";
+import contractApi from '~api/project/project-contract.js';
 
 //初始变量
 const router = useRouter()
@@ -35,8 +36,24 @@ onActivated(() => {
     dataId.value = useRoutes?.query?.id ?? ''
     dataType.value = useRoutes?.query?.type ?? ''
     setTabsData()
+    if(dataType.value!=='add'){
+        getContractInfoById()
+    }else{
+        infoData.value={}
+    }
 })
+const infoDataFile=ref({pdfUrl:''})
+//获取详情
+const getContractInfoById=async()=>{
+    const {error, code, data} = await contractApi.getContractInfoById({id: dataId.value})
+    if (!error && code === 200) {
+        infoData.value=getObjValue(data)
+        infoDataFile.value.pdfUrl=infoData.contractAccessory
 
+    } else {
+        infoData.value={}
+    }
+}
 //设置选项卡数据
 const setTabsData = () => {
     const index = arrIndex(tabsData.value, 'key', 'record')
@@ -66,10 +83,24 @@ const tabsData = ref([
 ])
 const tabsClick = (key) => {
     tabsKey.value = key
+    if(key=='milestone'){
+        getListByContractId()
+    }
 }
 
 const infoData = ref({})
 const isNoDropShadow = ref(false)
+//合同里程碑
+const milestoneData=ref([])
+const getListByContractId=async()=>{
+    const {error, code, data} = await contractApi.getListByContractId({id: dataId.value})
+    if (!error && code === 200) {
+        milestoneData.value=getObjValue(data)
+       
 
+    } else {
+        milestoneData.value=[]
+    }
+}
 
 </script>

+ 32 - 21
src/views/project/contract/index.vue

@@ -39,8 +39,11 @@
         </template>
 
         <HcTable :isIndex="false" :column="tableColumn" :datas="tableData" :loading="tableLoading">
-            <template #key1="{row}">
-                <span class="text-blue" @click="rowNameTap(row)">{{row.key1}}</span>
+            <template #name="{row}">
+                <span class="text-blue" @click="rowNameTap(row)">{{row.name}}</span>
+            </template>
+            <template #key4="{row}">
+                <span class="text-blue text-hover">{{row.startTime+'~'+row.endTime}}</span>
             </template>
             <template #action="{row,index}">
                 <el-button plain size="small" type="primary" @click="editRowClick(row)">编辑</el-button>
@@ -55,10 +58,16 @@
 </template>
 
 <script setup>
-import {ref} from "vue";
+import {ref,onMounted} from "vue";
 import {useRouter} from 'vue-router'
+import contractApi from '~api/project/project-contract.js';
+import {getArrValue} from "js-fast-way"
 
 const router = useRouter()
+onMounted(()=>{
+    getTableData()
+  
+})
 
 //项目类型
 const projectType = ref([
@@ -95,26 +104,28 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableColumn = [
-    {key: 'key', name: '合同编号', width: '120', align: 'center'},
-    {key: 'key1', name: '合同名称'},
-    {key: 'key2', name: '合同类型', width: '140', align: 'center'},
-    {key: 'key3', name: '签订时间', width: '160', align: 'center'},
+    {key: 'number', name: '合同编号', width: '120', align: 'center'},
+    {key: 'name', name: '合同名称'},
+    {key: 'contractTypeValue', name: '合同类型', width: '140', align: 'center'},
+    {key: 'contractSignTime', name: '签订时间', width: '160', align: 'center'},
     {key: 'key4', name: '合同起止日期', width: '220', align: 'center'},
-    {key: 'key5', name: '合同已履约回款', width: '140', align: 'center'},
-    {key: 'key6', name: '合同未履约回款', width: '140', align: 'center'},
+    {key: 'returnedMoney', name: '合同已履约回款', width: '140', align: 'center'},
+    {key: 'unreturnedMoney', name: '合同未履约回款', width: '140', align: 'center'},
     {key: 'action', name: '操作', width: '130', align: 'center'},
 ]
-const tableData = ref([
-    {id: 1, key: 'YS-01', key1: 'xxxx', key2: 'xxxx', key3: '65632', key4: '35654', key5: '12312', key6: 'xxxx'},
-    {id: 2, key: 'YS-01', key1: 'xxxx', key2: 'xxxx', key3: '65632', key4: '35654', key5: '12312', key6: 'xxxx'},
-    {id: 3, key: 'YS-01', key1: 'xxxx', key2: 'xxxx', key3: '65632', key4: '35654', key5: '12312', key6: 'xxxx'},
-    {id: 4, key: 'YS-01', key1: 'xxxx', key2: 'xxxx', key3: '65632', key4: '35654', key5: '12312', key6: 'xxxx'},
-    {id: 5, key: 'YS-01', key1: 'xxxx', key2: 'xxxx', key3: '65632', key4: '35654', key5: '12312', key6: 'xxxx'},
-    {id: 6, key: 'YS-01', key1: 'xxxx', key2: 'xxxx', key3: '65632', key4: '35654', key5: '12312', key6: 'xxxx'},
-])
-
-const getTableData = () => {
-
+const tableData = ref([])
+
+const getTableData = async() => {
+    tableLoading.value = true
+    const {error, code, data} = await contractApi.getPage(searchForm.value)
+    tableLoading.value = false
+    if (!error && code === 200) {
+        tableData.value = getArrValue(data)
+        searchForm.value.total = data['total'] || 0
+    } else {
+        tableData.value = []
+        searchForm.value.total = 0
+    }
 }
 
 //预览
@@ -132,7 +143,7 @@ const rowNameTap = (row) => {
 const addRowClick = () => {
     router.push({
         name: 'project-contract-form',
-        query: {type: 'edit'}
+        query: {type: 'add'}
     })
 }
 

+ 0 - 1
src/views/project/cost/index.vue

@@ -44,7 +44,6 @@
 <script setup>
 import {ref,onMounted} from "vue";
 import {useRouter} from 'vue-router'
-import projectApi from '~api/project/project-list.js';
 import costApi from '~api/project/cost.js';
 import {getArrValue} from "js-fast-way"