From a419991b619f505427a0ce1d0a122e9675f8ccce Mon Sep 17 00:00:00 2001 From: weipengfei <2187978347@qq.com> Date: Sat, 2 Sep 2023 13:15:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=89=E8=BD=AE=E8=BD=A6?= =?UTF-8?q?=E5=90=88=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/contract.ts | 18 ++ src/views/contract/vehicle_detail.vue | 364 ++++++++++++++++++++++++++ src/views/contract/vehicle_list.vue | 221 ++++++++++++++++ 3 files changed, 603 insertions(+) create mode 100644 src/views/contract/vehicle_detail.vue create mode 100644 src/views/contract/vehicle_list.vue diff --git a/src/api/contract.ts b/src/api/contract.ts index 043e417..28a01de 100644 --- a/src/api/contract.ts +++ b/src/api/contract.ts @@ -23,4 +23,22 @@ export function apiContractDelete(params: any) { // 合同详情 export function apiContractDetail(params: any) { return request.get({ url: '/contract.contract/detail', params }) +} + +// 三轮车合同列表 +export function leaseContractList(params: any) { + return request.get({ url: "/contract.VehicleContract/lists", params }); +} + +//租赁详情 +export function leaseContractDetail(params: any) { + return request.get({ url: "/contract.VehicleContract/detail", params }); +} + +//上传合同 +export function leaseUpContract(params: any) { + return request.post({ + url: "/contract.VehicleContract/uploadContract", + params, + }); } \ No newline at end of file diff --git a/src/views/contract/vehicle_detail.vue b/src/views/contract/vehicle_detail.vue new file mode 100644 index 0000000..6956cd2 --- /dev/null +++ b/src/views/contract/vehicle_detail.vue @@ -0,0 +1,364 @@ +<template> + <div class="edit-popup"> + <el-form + ref="formRef" + :model="formData" + label-width="90px" + :rules="formRules" + :disabled="true" + > + <el-col :span="24" class="el-card pt-6"> + <div class="tit">甲方信息</div> + <el-row> + <el-col :span="8"> + <el-form-item label="公司名称" prop="company_name"> + <el-input + v-model="formData.company_a_name" + placeholder="请输入公司名称" + clearable + :disabled="isDisabled" + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="社会代码" prop="organization_code"> + <el-input + :disabled="isDisabled" + v-model="formData.company_a_code" + placeholder="请输入社会代码" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-col> + <el-col :span="24" class="el-card pt-6"> + <div class="tit">主要联系人</div> + <el-row> + <div style="display: flex; justify-content: left"> + <div class="right"> + <el-row> + <el-col :span="8"> + <el-form-item label="姓名" prop="master_name"> + <el-input + :disabled="isDisabled" + v-model="formData.company_a_user" + placeholder="请输入姓名" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + + <el-col :span="8"> + <el-form-item label="手机" prop="master_phone"> + <el-input + :disabled="isDisabled" + v-model="formData.company_a_phone" + placeholder="请输入手机" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="邮箱"> + <el-input + :disabled="isDisabled" + v-model="formData.company_a_email" + placeholder="请输入邮箱" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </div> + </el-row> + </el-col> + <el-col :span="24" class="el-card pt-6"> + <div class="tit">乙方信息</div> + <el-row> + <el-col :span="8"> + <el-form-item label="公司名称" prop="company_name"> + <el-input + v-model="formData.company_b_name" + placeholder="请输入公司名称" + clearable + :disabled="isDisabled" + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="社会代码" prop="organization_code"> + <el-input + :disabled="isDisabled" + v-model="formData.company_b_code" + placeholder="请输入社会代码" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-col> + <el-col :span="24" class="el-card pt-6"> + <div class="tit">主要联系人</div> + <el-row> + <div style="display: flex; justify-content: left"> + <div class="right"> + <el-row> + <el-col :span="8"> + <el-form-item label="姓名" prop="master_name"> + <el-input + :disabled="isDisabled" + v-model="formData.company_b_user" + placeholder="请输入姓名" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + + <el-col :span="8"> + <el-form-item label="手机" prop="master_phone"> + <el-input + :disabled="isDisabled" + v-model="formData.company_b_phone" + placeholder="请输入手机" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="邮箱"> + <el-input + :disabled="isDisabled" + v-model="formData.company_b_email" + placeholder="请输入邮箱" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + </div> + </el-row> + </el-col> + + <el-col :span="24" class="el-card pt-6"> + <div class="tit">租赁信息</div> + <el-row v-for="(item, index) in formData.cars_info"> + <el-col :span="4"> + <el-form-item label-width="120px" label="车牌号" + ><el-input + v-model="item.license" + placeholder="请输入车牌号" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + + <el-col :span="4"> + <el-form-item label-width="120px" label="车辆类型"> + <el-input + v-model="formData.type" + placeholder="请输入车辆类型" + clearable + :style="{ width: '100%' }" + ></el-input + ></el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label-width="120px" label="使用公司" + ><el-input + v-model="formData.company_b_name" + placeholder="请输入使用公司" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label-width="120px" label="签约时间"> + <el-input + v-model="formData.update_time" + placeholder="请输入签约时间" + clearable + :style="{ width: '100%' }" + ></el-input + ></el-form-item> + </el-col> + </el-row> + </el-col> + </el-form> + <el-upload + v-if="formData.status == 0" + :disabled="isDisabled" + v-model:file-list="fileList" + :headers="{ Token: userStore.token }" + class="upload-demo" + action="https://worker-task.lihaink.cn/adminapi/upload/file" + multiple + :limit="1" + :on-success="handleAvatarSuccess_three" + > + <el-button :disabled="isDisabled" type="primary">上传合同</el-button> + </el-upload> + </div> +</template> +<script setup> +import { reactive, ref } from "vue"; +import { leaseUpContract, leaseContractDetail } from "@/api/contract"; +import useUserStore from "@/stores/modules/user"; +const userStore = useUserStore(); +const router = useRouter(); +const route = useRoute(); +const formData = reactive({ + contract_logistic_id: "", + contract_no: "", + company_a_id: "", + company_a_name: "", + company_a_code: "", + company_a_user: "", + company_a_phone: "", + company_a_email: "@service.ebaoquan.org", + company_b_id: "", + company_b_name: "", + company_b_user: "", + company_b_phone: "", + company_b_code: "", + company_b_email: "@service.ebaoquan.org", + num: "", + cars_info: { + id: "", + license: "", + }, + type: 0, + status: 0, + file: "", + contract_url: "", + signing_timer: 0, + url: null, + create_time: "2023-08-31 14:26:42", + update_time: "2023-08-31 14:26:49", + reject_message: "", +}); +// route.query.flag +// console.log(route.query.id); +// leaseContractDetail({ id: route.query.id }).then((res) => { +// console.log(res); +// }); +leaseContractDetail({ id: route.query.id }).then((res) => { + for (let key in formData) { + formData[key] = res[key]; + } + if (formData.company_a_id) { + formData.cars_info = [formData.cars_info]; + } + formData.type + ? (formData.type = "自有车辆合同") + : (formData.type = "租赁合同"); + console.log(formData); +}); + +const handleAvatarSuccess_three = (response, uploadFile) => { + leaseUpContract({ + id: route.query.id, + file: response.data.uri, + }).then((res) => { + // console.log(res); + formData.status = 1; + }); +}; +</script> + +<style lang="scss"> +.tit { + font-size: 1.2rem; + translate: 1vw -1vw; +} + +.avatar-uploader .el-upload { + width: 10vw; + height: 6.3vw; + background-color: #fff; + border: 1px dashed var(--el-border-color); + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + transition: var(--el-transition-duration-fast); +} + +.headimg { + margin-left: 18px; + margin-bottom: 18px; + width: 120px; + height: 140px; + overflow: hidden; + border: 1px dashed var(--el-border-color); + border-radius: 6px; + flex-shrink: 0; +} + +.avatar-uploader-head .el-upload { + width: 120px; + height: 140px; + background-color: #fff; + cursor: pointer; + position: relative; + overflow: hidden; + transition: var(--el-transition-duration-fast); +} + +.avatar-uploader .el-upload:hover { + border-color: var(--el-color-primary); +} + +.el-icon.avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 178px; + height: 178px; + text-align: center; +} + +.el-icon.avatar-uploader-icon { + font-size: 28px; + color: #8c939d; + width: 178px; + height: 178px; + text-align: center; +} + +.otherimg { + img { + width: 10vw; + height: 6.3vw; + border-radius: 5px; + margin-left: 12px; + margin-bottom: 12px; + } +} + +.el-card { + margin-bottom: 10px; + background-color: #fff; +} + +.tit { + margin-top: 15px; +} + +.others { + width: 100% !important; +} +</style> diff --git a/src/views/contract/vehicle_list.vue b/src/views/contract/vehicle_list.vue new file mode 100644 index 0000000..8d91c71 --- /dev/null +++ b/src/views/contract/vehicle_list.vue @@ -0,0 +1,221 @@ +<template> + <div> + <el-card class="!border-none" v-loading="pager.loading" shadow="never"> + <el-form class="mb-[-16px]" inline> + <el-form-item label="公司名称" prop="company_name"> + <el-input + class="w-[280px]" + v-model="queryParams.company_name" + clearable + placeholder="请输入公司名称" + /> + </el-form-item> + <el-form-item label="合同编号" prop="contract_no"> + <el-input + class="w-[280px]" + v-model="queryParams.contract_no" + clearable + placeholder="请输入合同编号" + /> </el-form-item + ><el-form-item label="合同状态" prop="status"> + <el-select + v-model="queryParams.status" + placeholder="请选择合同类型" + clearable + class="w-[280px]" + > + <el-option label="未上传" :value="0"></el-option> + <el-option label="已上传" :value="1"></el-option> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="resetPage">查询</el-button> + <el-button @click="resetParams">重置</el-button> + </el-form-item> + </el-form> + <div class="mt-4"> + <el-table + :data="pager.lists" + :default-sort="{ prop: 'create_time', order: 'descending' }" + @selection-change="handleSelectionChange" + > + <el-table-column label="id" prop="id" /> + <el-table-column label="合同类型" align="center"> + <template #default="{ row }"> + {{ statusFn(row.type) }} + </template> + </el-table-column> + <el-table-column + label="合同编号" + prop="contract_no" + align="center" + show-overflow-tooltip + /> + <el-table-column + label="甲方" + prop="company_a_name" + align="center" + show-overflow-tooltip + /> + <el-table-column + label="乙方" + prop="company_b_name" + align="center" + show-overflow-tooltip + /> + <el-table-column + label="类型" + prop="product_count" + align="center" + show-overflow-tooltip + > + <template #default="{ row }"> 公司 </template> + </el-table-column> + <el-table-column + label="状态" + prop="product_count" + align="center" + show-overflow-tooltip + > + <template #default="{ row }"> + {{ row.status ? "已上传" : "待上传" }} + </template> + </el-table-column> + <el-table-column + label="操作" + align="center" + width="auto" + fixed="right" + > + <template #default="{ row }"> + <el-button type="primary" link> + <router-link + :to="{ + path: 'contract.contract/vehicle_detail', + query: { + id: row.id, + }, + }" + >详情</router-link + > + </el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="flex mt-4 justify-end"> + <pagination v-model="pager" @change="getLists" /> + </div> + </el-card> + <edit-popup + v-if="showEdit" + ref="editRef" + @success="getLists" + @close="showEdit = false" + /> + </div> +</template> + +<script lang="ts" setup name="flowTypeLists"> +import { usePaging } from "@/hooks/usePaging"; +import { useDictData } from "@/hooks/useDictOptions"; +// import { contractList, sendContract } from "@/api/contract"; +import { leaseContractList } from "@/api/contract"; + +// import EditPopup from "./edit.vue"; +// let obj = [ +// { +// cunid: 1, +// zhgn: [ +// { +// zhengid: 1, +// dui: [1, 2, 3], +// }, + +// { +// zhengid: 2, +// dui: [1, 2, 3], +// }, +// ], +// }, +// { +// cunid: 3, +// zhgn: [ +// { +// zhengid: 1, +// dui: [1, 2, 3], +// }, + +// { +// zhengid: 2, +// dui: [1, 2, 3], +// }, +// ], +// }, +// ]; +interface User { + date: string; + name: string; + address: string; + tag: string; +} +// const sendContractFn = (id: number) => { +// sendContract({ id }).then((res) => { +// console.log(res); +// }); +// }; +const editRef = shallowRef<InstanceType<typeof EditPopup>>(); +// 是否显示编辑框 +const showEdit = ref(false); +// 查询条件 +// 'order_sn' =>订单编号,'shop_name'=> 商家名称,'shop_phone' => 商家电话,'shop_address' => 商家地址,'user_name' => 收件人名称,'user_address' => 收件人地址,'user_phone' =>收件人电话 +const queryParams = reactive({ + company_name: "", + contract_no: "", + status: "", +}); +const statusFn = (status: number) => { + switch (status) { + case 0: + return "租赁合同"; + break; + case 1: + return "自由车辆合同"; + break; + case 2: + return "解除合同"; + break; + case 3: + return "签约成功"; + break; + case 4: + return "被驳回"; + break; + default: + break; + } +}; +// 选中数据 +const selectData = ref<any[]>([]); + +// 表格选择后回调事件 +const handleSelectionChange = (val: any[]) => { + selectData.value = val.map(({ id }) => id); +}; +const filterHandler = (value: string, row: any, column: any) => { + return row.status == value; +}; +// 获取字典数据 +const { dictData } = useDictData(""); +// 分页相关 +const { pager, getLists, resetParams, resetPage } = usePaging({ + fetchFun: leaseContractList, + params: queryParams, +}); +const handleView = async (data: any) => { + showEdit.value = true; + await nextTick(); + editRef.value?.open(data.id); +}; +getLists(); +</script>