From 5e89a1759a2d20e549587fc01cf6b57a3e82950a Mon Sep 17 00:00:00 2001 From: haoxuan <haoxuan> Date: 星期四, 24 八月 2023 17:26:43 +0800 Subject: [PATCH] 采购管理的 前端页面开发 2023-8-24 --- src/views/purchaseManage/quality/DetailSupplier.vue | 338 +++++++ src/views/purchaseManage/returned/DetailSupplier.vue | 352 ++++++++ src/components/makepager/SearchCommonView.vue | 12 src/views/purchaseManage/purchase/index.vue | 209 ++++ src/components/makepager/TableCommonView.vue | 5 src/views/purchaseManage/warehouse/DetailSupplier.vue | 345 ++++++++ src/views/purchaseManage/warehouse/index.vue | 210 ++++ src/views/purchaseManage/returned/index.vue | 207 ++++ src/components/layout/components/appsidebar/index.vue | 8 src/views/purchaseManage/quality/index.vue | 205 ++++ src/router/purchase/index.js | 78 src/components/layout/components/AppMain.vue | 2 src/views/purchaseManage/purchase/DetailSupplier.vue | 569 +++++++++++++ 13 files changed, 2,494 insertions(+), 46 deletions(-) diff --git a/src/components/layout/components/AppMain.vue b/src/components/layout/components/AppMain.vue index 7cdbb3d..e0694e9 100644 --- a/src/components/layout/components/AppMain.vue +++ b/src/components/layout/components/AppMain.vue @@ -30,7 +30,7 @@ flex: 1; flex-direction: column; // height: 100%; - width: 100%; + width: calc(100% - 210px); .app-main-content { width: 100%; overflow-y: auto; diff --git a/src/components/layout/components/appsidebar/index.vue b/src/components/layout/components/appsidebar/index.vue index 8ffc890..afdf9be 100644 --- a/src/components/layout/components/appsidebar/index.vue +++ b/src/components/layout/components/appsidebar/index.vue @@ -25,10 +25,10 @@ <i class="el-icon-phone-outline icon"></i> <span>閲囪喘绠$悊</span> </template> - <el-menu-item index="/sales/salesOpportunity">閲囪喘璁㈠崟</el-menu-item> - <el-menu-item index="/sales/quotation">閲囪喘璐ㄦ鍗�</el-menu-item> - <el-menu-item index="/sales/masterOrder">閲囪喘鍏ュ簱鍗�</el-menu-item> - <el-menu-item index="/sales/subOrder">閲囪喘閫�璐у崟</el-menu-item> + <el-menu-item index="/purchaseManage/purchase">閲囪喘璁㈠崟</el-menu-item> + <el-menu-item index="/purchaseManage/quality">閲囪喘璐ㄦ鍗�</el-menu-item> + <el-menu-item index="/purchaseManage/warehouse">閲囪喘鍏ュ簱鍗�</el-menu-item> + <el-menu-item index="/purchaseManage/returned">閲囪喘閫�璐у崟</el-menu-item> </el-submenu> <el-submenu index="3"> <template slot="title"> diff --git a/src/components/makepager/SearchCommonView.vue b/src/components/makepager/SearchCommonView.vue index 98a11d2..277f5d8 100644 --- a/src/components/makepager/SearchCommonView.vue +++ b/src/components/makepager/SearchCommonView.vue @@ -2,11 +2,13 @@ <div class="search-list"> <div class="search-top"> <div class="search"> - <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="searchInput" class="input-with-select" clearable> + <el-input v-if="inputSelect" :placeholder="placeholder" v-model="searchInput" class="input-with-select" clearable> <el-select v-model="searchSelValue" slot="prepend" placeholder="璇烽�夋嫨" class="search-sel"> <el-option v-for="item in searchOptions" :key="item.value" :label="item.label" :value="item"> </el-option> </el-select> <!-- <i slot="suffix" class="el-icon-search" style="cursor: pointer" @click="searchClick"></i> --> + </el-input> + <el-input v-else :placeholder="placeholder" v-model="searchInput" class="input-with-select" clearable> </el-input> </div> <div class="btn"> @@ -24,6 +26,14 @@ name: "SearchCommonView", components: {}, props: { + placeholder:{ + type:String, + default:'璇疯緭鍏ュ唴瀹�', + }, + inputSelect:{ + type:Boolean, + default:true, + }, queryClass: { type: String, default: "1" diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue index d130723..bb3f2c3 100644 --- a/src/components/makepager/TableCommonView.vue +++ b/src/components/makepager/TableCommonView.vue @@ -118,7 +118,8 @@ return { show: false, sumProp: [], - mergeNumber: 1 + mergeNumber: 1, + totalName:'鏈〉鎬昏' } } } @@ -159,7 +160,7 @@ const sums = [] columns.forEach((column, index) => { if (index === this.showSummary.mergeNumber) { - sums[index] = "鏈〉鎬昏" + sums[index] = this.showSummary.totalName } const values = data.map((item) => Number(item[column.property])) if (this.showSummary.sumProp.includes(column.property)) { diff --git a/src/router/purchase/index.js b/src/router/purchase/index.js index ed2f6fa..c8459f6 100644 --- a/src/router/purchase/index.js +++ b/src/router/purchase/index.js @@ -1,43 +1,45 @@ -// const type from '@/router/deployCode' -// const salesOpportunity = (resolve) => require(["@/views/sales/salesOpportunity/index"], resolve) // 閿�鍞満浼� -// const quotation = (resolve) => require(["@/views/sales/quotation/index"], resolve) // 鎶ヤ环鍗� -// const masterOrder = (resolve) => require(["@/views/sales/masterOrder/index"], resolve) // 閿�鍞�诲崟 -// const subOrder = (resolve) => require(["@/views/sales/subOrder/index"], resolve) // 閿�鍞瓙鍗� - +const purchase = (resolve) => require(["@/views/purchaseManage/purchase/index"], resolve) // 閲囪喘鍗� +const quality = (resolve) => require(["@/views/purchaseManage/quality/index"], resolve) // 閲囪喘璐ㄦ鍗� +const warehouse = (resolve) => require(["@/views/purchaseManage/warehouse/index"], resolve) // 閲囪喘鍏ュ簱鍗� +const returned= (resolve) => require(["@/views/purchaseManage/returned/index"], resolve) // 閲囪喘閫�璐у崟 const appconfig = [ - // { - // path: "/sales/salesOpportunity", - // name: "salesOpportunity", - // component: salesOpportunity, - // meta: { - // title: "閿�鍞満浼�" - // } - // }, - // { - // path: "/sales/quotation", - // name: "quotation", - // component: quotation, - // meta: { - // title: "鎶ヤ环鍗�" - // } - // }, - // { - // path: "/sales/masterOrder", - // name: "masterOrder", - // component: masterOrder, - // meta: { - // title: "閿�鍞�诲崟" - // } - // }, - // { - // path: "/sales/subOrder", - // name: "subOrder", - // component: subOrder, - // meta: { - // title: "閿�鍞瓙鍗�" - // } - // } + { + path: "/purchaseManage/purchase", + name: "purchase", + component: purchase, + meta: { + title: "閲囪喘绠$悊", + requireAuth: true + } + }, + { + path: "/purchaseManage/quality", + name: "quality", + component: quality, + meta: { + title: "閲囪喘璐ㄦ鍗�", + requireAuth: true + } + }, + { + path: "/purchaseManage/warehouse", + name: "warehouse", + component: warehouse, + meta: { + title: "閲囪喘鍏ュ簱鍗�", + requireAuth: true + } + }, + { + path: "/purchaseManage/returned", + name: "returned", + component: returned, + meta: { + title: "閲囪喘閫�璐у崟", + requireAuth: true + } + } ] export default appconfig diff --git a/src/views/purchaseManage/purchase/DetailSupplier.vue b/src/views/purchaseManage/purchase/DetailSupplier.vue new file mode 100644 index 0000000..c3f9e39 --- /dev/null +++ b/src/views/purchaseManage/purchase/DetailSupplier.vue @@ -0,0 +1,569 @@ +<template> + <div class="detail-view"> + <el-drawer + :visible.sync="detailConfig.visible" + size="80%" + :before-close="handleClose" + :wrapperClosable="false" + > + <template slot="title"> + <div class="header"> + <span class="header-label">閲囪喘璇︽儏</span> + <span class="header-title">{{ detailConfig.infomation.name }}</span> + </div> + <div class="btn" style="float: right; margin-right: 30px"> + <el-button type="primary" size="mini" style="margin-right: 5px" + >鎵撳嵃</el-button + > + <el-button type="primary" size="mini" @click="emailClick" + >Email閫氱煡涓嬪崟</el-button + > + + <el-button + type="primary" + size="mini" + @click="deleteClick" + style="margin-right: 5px" + >鍒犻櫎</el-button + > + </div> + </template> + <div class="content"> + <div class="info"> + <ul> + <li v-for="(list, i) in formInfoList" :key="i"> + <span class="content-title">{{ list.str + "锛�" }}</span> + <span class="content-data">{{ + list.value ? list.value : "--" + }}</span> + </li> + </ul> + </div> + <div class="tab-view"> + <el-tabs v-model="activeName" @tab-click="tabsClick"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + </el-tabs> + </div> + <div v-if="activeName === 'first'" class="detail"> + <!-- 鍩烘湰淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('basic')"> + <i v-if="isBasicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">鍩烘湰淇℃伅</span> + </div> + <div v-show="isBasicExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in basicInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data"> + {{ item.leftValue ? item.leftValue : "--" }} + </div> + </div> + <div + v-if="item.rightStr && item.rightStr.length > 0" + class="right" + > + <div class="content-title">{{ item.rightStr + "锛�" }}</div> + <div class="content-data"> + {{ item.rightValue ? item.rightValue : "--" }} + </div> + </div> + </li> + </ul> + <div class="business_scope"> + <div class="content-title">{{ "澶囨敞淇℃伅锛�" }}</div> + <div class="content-data">{{ record ? record : "--" }}</div> + </div> + </div> + </div> + <!-- 璐㈠姟淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('dynamic')"> + <i v-if="isDynamicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">璐㈠姟淇℃伅</span> + </div> + <div v-show="isDynamicExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in dynamicInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data"> + {{ item.leftValue ? item.leftValue : "--" }} + </div> + </div> + <div + v-if="item.rightStr && item.rightStr.length > 0" + class="right" + > + <div class="content-title">{{ item.rightStr + "锛�" }}</div> + <div class="content-data"> + {{ item.rightValue ? item.rightValue : "--" }} + </div> + </div> + </li> + </ul> + </div> + </div> + <!-- 浜у搧淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('three')"> + <i v-if="isExpandThree" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">浜у搧淇℃伅</span> + </div> + <div v-show="isExpandThree" class="basic-info-content"> + <TableCommonView + style="margin-top: 2px" + class="content-table" + ref="tableListRef" + :showSummary="showSummary" + :table-list="tableList" + > + </TableCommonView> + <div class="table-bottom"> + <div class="table-bottom-item"> + <div class="table-bottom-l"> + 鏁村崟鎶樻墸锛氱洿鎺ラ檷浠� + </div> + <div class="table-bottom-r">0.00</div> + </div> + <div class="table-bottom-item"> + <div class="table-bottom-l"> + 璋冩暣锛氬鍔� + </div> + <div class="table-bottom-r">0.00</div> + </div> + <div class="table-bottom-item"> + <div class="table-bottom-l"> + 鍚堣 + </div> + <div class="table-bottom-r">26000.00</div> + </div> + </div> + </div> + </div> + </div> + </div> + </el-drawer> + </div> +</template> + +<script> +import { getDeleteSalesLeads } from "@/api/client/salesLead"; +export default { + name: "DetailSupplier", + props: { + commonDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {}, + tableList: [], + }; + }, + }, + }, + components: {}, + data() { + return { + detailConfig: this.commonDetail, + activeName: "first", + formInfoList: [], //淇℃伅 + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isDynamicExpand: true, // 璐︽埛淇℃伅 + dynamicInfoList: [], + addConfig: {}, + record: "", // 鏈�鏂拌繘灞� + noContactDays: 0, + newContactDays: "", + isExpandThree: true, //浜у搧淇℃伅 + tableList: {}, + showSummary:{ + show: true, + sumProp: ["number", "total"], + mergeNumber: 4, + totalName:'灏忚' + }, + }; + }, + created() { + this.setData(this.detailConfig.infomation); + this.addConfig = { + id_name: "sales_leads_id", + id: this.detailConfig.infomation.id, + common_name: this.detailConfig.infomation.id, + sales_leads_name: this.detailConfig.infomation.name, + sales_leads_id: this.detailConfig.infomation.id, + }; + }, + mounted() {}, + computed: {}, + methods: { + // email 閫氱煡涓嬪崟 + emailClick() {}, + // 鍒犻櫎 + deleteClick() { + this.$confirm("鏄惁鍒犻櫎?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + getDeleteSalesLeads({ ids: this.selValueList }).then((response) => { + if (response.code === 200) { + this.$message.success("鍒犻櫎鎴愬姛"); + this.getData(); + } else { + this.$message.warning("鍒犻櫎澶辫触"); + } + }); + }) + .catch(() => {}); + }, + setData(item) { + if (item.FollowRecord && item.FollowRecord.length > 0) { + this.record = item.FollowRecord[0].record; + console.log(item.FollowRecord[0].follow_time); + let follow_time = item.FollowRecord[0].follow_time; + this.newContactDays = follow_time.substring(0, 10); + this.noContactDays = this.getDiffDay(Date.now(), this.newContactDays); + } + this.formInfoList = [ + { + str: "渚涘簲鍟嗗悕绉�", + value: "", + }, + { + str: "鍚堣", + value: "", + }, + { + str: "宸叉敹绁ㄩ噾棰�", + value: "", + }, + { + str: "宸蹭粯閲戦", + value: "", + }, + { + str: "绛剧害鏃ユ湡", + value: "", + }, + { + str: "閲囪喘璐熻矗浜�", + value: "", + }, + { + str: "鏈敹绁ㄩ噾棰�", + value: "", + }, + { + str: "搴斾粯閲戦", + value: "", + }, + ]; + this.basicInfoList = [ + { + leftStr: "閲囪喘璁㈠崟缂栧彿", + leftValue: item.number, + rightStr: "渚涘簲鍟嗗悕绉�", + rightValue: item.name, + }, + { + leftStr: "閲囪喘鍗曠姸鎬�", + leftValue: item.contact_name, + rightStr: "閲囪喘璐熻矗浜�", + rightValue: item.contact_position, + }, + { + leftStr: "閲囪喘鑱旂郴浜�", + leftValue: item.contact_phone, + rightStr: "鑱旂郴鐢佃瘽", + rightValue: "18513375588", + }, + { + leftStr: "绛剧害鏃ユ湡", + leftValue: item.sales_resources, + rightStr: "浜や粯鏃ユ湡", + rightValue: item.member_name, + }, + { + leftStr: "鍒拌揣浠撳簱", + leftValue: item.sales_resources, + rightStr: "", + rightValue: "", + }, + ]; + this.dynamicInfoList = [ + { + leftStr: "鍚堣", + leftValue: this.noContactDays, + rightStr: "宸叉敹绁ㄩ噾棰�", + rightValue: this.newContactDays, + }, + { + leftStr: "宸蹭粯鎬婚", + leftValue: "", + rightStr: "鏈敹绁ㄩ噾棰�", + rightValue: "", + }, + { + leftStr: "搴斾粯閲戦", + leftValue: "", + rightStr: "", + rightValue: "", + }, + ]; + this.tableList = { + tableInfomation: [ + { + number:1, + total:1, + } + ], + selectIndex: true, + tableColumn: [ + { label: "浜у搧鍚嶇О", prop: "number", min: 190, isCommonClick: true }, + { label: "浜у搧缂栫爜", prop: "total", min: 130, isCommonClick: true }, + { label: "璁¢噺鍗曚綅", prop: "contact_name", min: 130 }, + { label: "瑙勬牸鍨嬪彿", prop: "contact_phone", min: 130 }, + { label: "鏁伴噺", prop: "contact_phone", min: 130 }, + { label: "閿�鍞崟浠�", prop: "sales_resources", min: 130 }, + { label: "浠风◣鍚堣", prop: "province", min: 130 }, + { label: "鎻忚堪", prop: "province", min: 130 }, + ], + }; + }, + handleClose() { + this.detailConfig.visible = false; + }, + // tab鍒囨崲 + tabsClick(tab, event) { + console.log(tab, event); + }, + // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢 + expandClick(value) { + console.log(value); + if (value === "basic") { + this.isBasicExpand = !this.isBasicExpand; + } else if (value === "dynamic") { + this.isDynamicExpand = !this.isDynamicExpand; + } else { + this.isExpandThree = !this.isExpandThree; + } + }, + // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫樊鍊� + getDiffDay(date_1, date_2) { + let totalDays, diffDate; + let myDate_1 = date_1; + let myDate_2 = Date.parse(date_2); + // 灏嗕袱涓棩鏈熼兘杞崲涓烘绉掓牸寮忥紝鐒跺悗鍋氬樊 + diffDate = Math.abs(myDate_1 - myDate_2); // 鍙栫浉宸绉掓暟鐨勭粷瀵瑰�� + + totalDays = Math.floor(diffDate / (1000 * 3600 * 24)); // 鍚戜笅鍙栨暣 + // console.log(totalDays) + + return totalDays; // 鐩稿樊鐨勫ぉ鏁� + }, + }, +}; +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.detail-view { + .header { + height: 56px; + display: flex; + align-items: center; + padding-left: 10px; + .header-label { + padding: 5px; + border-radius: 4px; + background-color: #ff6600; + color: #fff; + font-size: 12px; + } + .header-title { + color: #323232; + font-size: 15px; + margin-left: 10px; + font-weight: inherit; + } + } + .content { + height: 100%; + background-color: rgb(230, 233, 240); + padding: 8px; + .tab-view { + background: #fff; + // .tab-view-pane { + // position: relative; + .item { + position: absolute; + top: 0px; + right: 0px; + } + // } + } + .info { + width: 100%; + height: auto; + background: #fff; + margin-bottom:10px; + ul { + width: 100%; + height: auto; + overflow: hidden; + li { + width: 25%; + float: left; + height: 40px; + line-height: 40px; + font-size: 14px; + font-family: PingFangSC; + border-bottom: 1px solid #f9f9fb; + .content-title { + width: 180px; + display: inline-block; + text-align: right; + color: #555; + } + .content-data { + width: calc(100% - 180px - 25px); + display: inline-block; + text-align: left; + margin-left: 25px; + color: #333; + } + } + } + } + .detail { + height: calc(100% - 40px - 92px); + background: #fff; + overflow: auto; + + .basic-info { + .basic-info-label { + padding-left: 10px; + height: 42px; + line-height: 42px; + background: #f4f8fe; + color: #333; + font-size: 14px; + } + .basic-info-content { + background: #fff; + overflow:hidden; + ul { + padding-inline-start: 0; + } + li { + display: flex; + font-size: 14px; + font-family: PingFangSC; + border-bottom: 1px solid #f9f9fb; + .left, + .right { + width: 50%; + display: flex; + align-items: center; + height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + .business_scope { + display: flex; + align-items: center; + font-size: 14px; + min-height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + flex: 1; + padding: 5px; + text-align: left; + margin-left: 25px; + color: #333; + } + } + .table-bottom{ + width:300px; + float:right; + margin-right:180px; + margin-top:10px; + height:auto; + line-height:30px; + font-size:14px; + font-weight: 700; + color:#333; + .table-bottom-item{ + width:100%; + text-align:right; + .table-bottom-l{ + width:180px; + float:left; + } + .table-bottom-r{ + width:calc(100% - 180px); + float:right; + } + } + } + } + } + } + .second { + background: #fff; + .followup-records { + .table-view { + margin-top: 0 !important; + margin-bottom: 0; + } + } + } + } +} +::v-deep { + .el-drawer__header { + padding: 0; + margin-bottom: 0px; + } + .el-tabs--top .el-tabs__item.is-top:nth-child(2) { + padding-left: 20px; + } + .el-tabs__item.is-active { + color: $color-primary; + } + .el-tabs__item:hover { + color: $color-primary; + } + .el-tabs__active-bar { + background-color: $color-primary; + } + .el-tabs__header { + margin: 0; + } +} +</style> diff --git a/src/views/purchaseManage/purchase/index.vue b/src/views/purchaseManage/purchase/index.vue new file mode 100644 index 0000000..52a58c6 --- /dev/null +++ b/src/views/purchaseManage/purchase/index.vue @@ -0,0 +1,209 @@ +<template> + <div class="rightContent"> + <div class="content-box"> + <div class="supplier-search"> + <SearchCommonView + ref="searchCommonView" + :inputSelect="false" + placeholder="鍙緭鍏ヤ緵搴斿晢,鐗╂枡,閲囪喘鍗曠瓑鎼滅储" + @searchClick="searchClick" + @resetClick="resetClick" + /> + <div class="add-view"> + <el-button type="primary" size="mini" @click="addBtnClick">鏂板缓</el-button> + </div> + </div> + <template> + <TableCommonView + class="content-table" + ref="tableListRef" + :table-list="tableList" + @selCommonClick="selCommonClick" + > + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="120" fixed="right"> + <template slot-scope="scope"> + <el-button type="text" size="small" @click="editClick" style="margin-right: 5px" + >缂栬緫</el-button + > + <el-button @click="submitClick(scope.row)" type="text" size="small">鎻愪氦</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </template> + </div> + + <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> + <!-- <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-rightContent-config="editSalesLeadConfig" /> --> + <!-- 璇︽儏 --> + <DetailSupplier v-if="commonDetail.visible" :common-detail="commonDetail" @submitClick="submitClick" /> + </div> +</template> + +<script> +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead" +import DetailSupplier from "@/views/purchaseManage/purchase/DetailSupplier" + +export default { + name: "SupplierManage", + props: {}, + components: { DetailSupplier }, + mixins: [pageMixin], + computed: {}, + data() { + return { + tableList: {}, // 鍒楄〃 + selValueList: [], + commonDetail: { + visible: false, + infomation: {} + }, + search_map: {} + } + }, + created() { + this.setTable() + this.getData() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "閲囪喘鍗曞彿", prop: "number", min: 150, isCommonClick: true }, + { label: "閲囪喘鍗曞悕绉�", prop: "name", min: 130,}, + { label: "鍗曟嵁绫诲瀷", prop: "contact_name", min: 130 }, + { label: "渚涘簲鍟嗗悕绉�", prop: "contact_phone", min: 130 }, + { label: "閲囪喘鏁伴噺", prop: "sales_resources", min: 130 }, + { label: "鏀惰揣浠撳簱", prop: "province", min: 130 }, + { label: "缁忓姙浜�", prop: "city", min: 130 }, + { label: "鍒跺崟浜�", prop: "member_name", min: 130 }, + { label: "鐘舵��", prop: "member_name", min: 130 }, + ] + } + }, + // 璇锋眰鏁版嵁 + async getData() { + await getSalesLeadsList({ + search_map: this.search_map, + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize + }) + .then((res) => { + const list = res.data.list.map((item) => { + return { + ...item, + province: item.Province.name, + city: item.City.name, + sales_resources: item.sales_sources.name, + member_name: item.member.username + } + }) + this.tableList.tableInfomation = list || [] + this.pagerOptions.totalCount = res.data.count + }) + .catch((err) => { + console.log(err) + }) + }, + // 鎼滅储 + searchClick(val, content) { + console.log(val, content) + this.search_map = { + [val.value]: content + } + this.getData() + }, + resetClick() { + this.search_map = {} + this.getData() + }, + // 鏂板缓 + addBtnClick() {}, + // 缂栬緫 + editClick(){ + + }, + // 纭鍙戣揣 + submitClick() { + this.$confirm("鏄惁鎻愪氦?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }) + .then(() => { + console.log("dddd") + getDeleteSalesLeads({ ids: this.selValueList }).then((response) => { + if (response.code === 200) { + this.$message.success("鎻愪氦鎴愬姛") + this.getData() + } else { + this.$message.warning("鎻愪氦澶辫触") + } + }) + }) + .catch(() => {}) + }, + + // 璇︽儏 + selCommonClick(row) { + console.log(row) + this.commonDetail.visible = true + this.commonDetail.infomation = { ...row } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.rightContent { + width:100%; + height:calc(100% - 10px); + .content-box { + height:100%; + .supplier-search { + display: flex; + align-items: center; + .add-view { + margin-left: auto; + margin-right: 20px; + } + } + .content-table{ + // height:calc(100% - 60px - 42px); + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .bottom { + .product-search { + display: flex; + align-items: center; + .search { + margin-left: auto; + } + .add-view { + margin-left: 20px; + margin-right: 20px; + } + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } +} +</style> diff --git a/src/views/purchaseManage/quality/DetailSupplier.vue b/src/views/purchaseManage/quality/DetailSupplier.vue new file mode 100644 index 0000000..054e824 --- /dev/null +++ b/src/views/purchaseManage/quality/DetailSupplier.vue @@ -0,0 +1,338 @@ +<template> + <div class="detail-view"> + <el-drawer :visible.sync="detailConfig.visible" size="80%" :before-close="handleClose" :wrapperClosable="false"> + <template slot="title"> + <div class="header"> + <span class="header-label">璐ㄦ鍗曡鎯�</span> + <span class="header-title">{{ detailConfig.infomation.name }}</span> + </div> + <div class="btn" style="float:right;margin-right:30px;"> + <el-button type="primary" size="mini" @click="qualityClick" icon="el-icon-search" style="margin-right: 5px" + >鎵撳嵃</el-button + > + <el-button type="primary" size="mini" icon="el-icon-refresh-left" @click="qualityClick">鍘昏川妫�</el-button> + </div> + </template> + <div class="content"> + <div class="tab-view"> + <el-tabs v-model="activeName"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + + </el-tabs> + </div> + <div v-if="activeName === 'first'" class="detail"> + <!-- 鍩烘湰淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('basic')"> + <i v-if="isBasicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">鍩烘湰淇℃伅</span> + </div> + <div v-show="isBasicExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in basicInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> + </div> + <div v-if="item.rightStr && item.rightStr.length > 0" class="right"> + <div class="content-title">{{ item.rightStr + "锛�" }}</div> + <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> + </div> + </li> + </ul> + <div class="business_scope"> + <div class="content-title">{{ "澶囨敞淇℃伅锛�" }}</div> + <div class="content-data">{{ record ? record : "--" }}</div> + </div> + </div> + </div> + <!-- 璐︽埛淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('dynamic')"> + <i v-if="isDynamicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">浜у搧淇℃伅</span> + </div> + <div v-show="isDynamicExpand" class="basic-info-content"> + <TableCommonView + style='margin-top:2px;' + class="content-table" + ref="tableListRef" + :table-list="tableList" + > + </TableCommonView> + </div> + </div> + </div> + + </div> + </el-drawer> + </div> +</template> + +<script> +export default { + name: "DetailSupplier", + props: { + commonDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {}, + tableList:[], + } + } + } + }, + components: {}, + computed: {}, + data() { + return { + detailConfig: this.commonDetail, + activeName: "first", + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isDynamicExpand: true, // 浜у搧淇℃伅 + tableList: [], + addConfig: {}, + record: "", // 鏈�鏂拌繘灞� + } + }, + created() { + this.setData(this.detailConfig.infomation) + this.addConfig = { + id_name: "sales_leads_id", + id: this.detailConfig.infomation.id, + common_name: this.detailConfig.infomation.id, + sales_leads_name: this.detailConfig.infomation.name, + sales_leads_id: this.detailConfig.infomation.id + } + }, + mounted() {}, + methods: { + // 鍘昏川妫� + qualityClick(){ + this.$emit('qualityClick') + }, + setData(item) { + if (item.FollowRecord && item.FollowRecord.length > 0) { + this.record = item.FollowRecord[0].record + console.log(item.FollowRecord[0].follow_time) + } + this.basicInfoList = [ + { + leftStr: "閲囪喘璐ㄦ鍗曠紪鍙�", + leftValue: item.number, + rightStr: "璐ㄦ鐘舵��", + rightValue: item.name + }, + { + leftStr: "閲囪喘鍗曠紪鍙�", + leftValue: item.contact_name, + rightStr: "璐ㄦ鍛�", + rightValue: item.contact_position + }, + { + leftStr: "渚涘簲鍟嗗悕绉�", + leftValue: item.contact_phone, + rightStr: "鍒拌揣浠撳簱", + rightValue: "18513375588" + }, + { + leftStr: "鐗╂祦鍏徃", + leftValue: item.sales_resources, + rightStr: "鍒涘缓鏃堕棿", + rightValue: item.member_name + }, + { + leftStr: "鐗╂祦鍗曞彿", + leftValue: item.sales_resources, + rightStr: "", + rightValue: "" + } + ] + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "浜у搧鍚嶇О", prop: "number", min: 190, isCommonClick: true }, + { label: "浜у搧缂栫爜", prop: "name", min: 130, isCommonClick: true}, + { label: "璁¢噺鍗曚綅", prop: "contact_name", min: 130 }, + { label: "瑙勬牸鍨嬪彿", prop: "contact_phone", min: 130 }, + { label: "鍒拌揣鏁伴噺", prop: "contact_phone", min: 130 }, + { label: "鍚堟牸鏁伴噺", prop: "sales_resources", min: 130 }, + { label: "涓嶅悎鏍兼暟閲�", prop: "province", min: 130 }, + ] + } + }, + handleClose() { + this.detailConfig.visible = false + }, + + // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢 + expandClick(value) { + console.log(value) + if (value === "basic") { + this.isBasicExpand = !this.isBasicExpand + } else if (value === "dynamic") { + this.isDynamicExpand = !this.isDynamicExpand + } + }, + // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫樊鍊� + getDiffDay(date_1, date_2) { + let totalDays, diffDate + let myDate_1 = date_1 + let myDate_2 = Date.parse(date_2) + // 灏嗕袱涓棩鏈熼兘杞崲涓烘绉掓牸寮忥紝鐒跺悗鍋氬樊 + diffDate = Math.abs(myDate_1 - myDate_2) // 鍙栫浉宸绉掓暟鐨勭粷瀵瑰�� + + totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 鍚戜笅鍙栨暣 + // console.log(totalDays) + + return totalDays // 鐩稿樊鐨勫ぉ鏁� + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.detail-view { + .header { + height: 56px; + display: flex; + align-items: center; + padding-left: 10px; + .header-label { + padding: 5px; + border-radius: 4px; + background-color: #ff6600; + color: #fff; + font-size: 12px; + } + .header-title { + color: #323232; + font-size: 15px; + margin-left: 10px; + font-weight: inherit; + } + } + .content { + height:100%; + background-color: rgb(230, 233, 240); + padding: 8px; + .tab-view { + background: #fff; + // .tab-view-pane { + // position: relative; + .item { + position: absolute; + top: 0px; + right: 0px; + } + // } + } + .detail { + height:calc(100% - 40px); + background:#fff; + overflow:auto; + .basic-info { + .basic-info-label { + padding-left: 10px; + height: 42px; + line-height: 42px; + background: #f4f8fe; + color: #333; + font-size: 14px; + } + .basic-info-content { + background: #fff; + ul { + padding-inline-start: 0; + } + li { + display: flex; + font-size: 14px; + font-family: PingFangSC; + border-bottom: 1px solid #f9f9fb; + .left, + .right { + width: 50%; + display: flex; + align-items: center; + height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + .business_scope { + display: flex; + align-items: center; + font-size: 14px; + min-height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + flex: 1; + padding: 5px; + text-align: left; + margin-left: 25px; + color: #333; + } + } + } + } + } + .second { + background: #fff; + .followup-records { + .table-view { + margin-top: 0 !important; + margin-bottom: 0; + } + } + } + } +} +::v-deep .el-drawer__body{ + height:calc(100% - 60px)!important; + } +::v-deep { + .el-drawer__header { + padding: 0; + margin-bottom: 0px; + } + + .el-tabs--top .el-tabs__item.is-top:nth-child(2) { + padding-left: 20px; + } + .el-tabs__item.is-active { + color: $color-primary; + } + .el-tabs__item:hover { + color: $color-primary; + } + .el-tabs__active-bar { + background-color: $color-primary; + } + .el-tabs__header { + margin: 0; + } +} +</style> diff --git a/src/views/purchaseManage/quality/index.vue b/src/views/purchaseManage/quality/index.vue new file mode 100644 index 0000000..9a987ef --- /dev/null +++ b/src/views/purchaseManage/quality/index.vue @@ -0,0 +1,205 @@ +<template> + <div class="rightContent"> + <div class="content-box"> + <div class="supplier-search"> + <SearchCommonView + ref="searchCommonView" + :inputSelect="false" + placeholder="鍙緭鍏ヤ緵搴斿晢,鐗╂枡,閲囪喘鍗曠瓑鎼滅储" + @searchClick="searchClick" + @resetClick="resetClick" + /> + </div> + <template> + <TableCommonView + class="content-table" + ref="tableListRef" + :table-list="tableList" + @selCommonClick="selCommonClick" + @getSelectArray="getSelectArray" + > + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="120" fixed="right"> + <template slot-scope="scope"> + <el-button @click="qualityClick(scope.row)" type="text" size="small">鍘昏川妫�</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </template> + </div> + + <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> + <!-- <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-rightContent-config="editSalesLeadConfig" /> --> + <!-- 璇︽儏 --> + <DetailSupplier v-if="commonDetail.visible" :common-detail="commonDetail" @qualityClick="qualityClick" /> + </div> +</template> + +<script> +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead" +import DetailSupplier from "@/views/purchaseManage/quality/DetailSupplier" + +export default { + name: "SupplierManage", + props: {}, + components: { DetailSupplier }, + mixins: [pageMixin], + computed: {}, + data() { + return { + tableList: {}, // 鍒楄〃 + selValueList: [], + commonDetail: { + visible: false, + infomation: {} + }, + search_map: {} + } + }, + created() { + this.setTable() + this.getData() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "璐ㄦ鍗曠紪鍙�", prop: "number", min: 190, isCommonClick: true }, + { label: "閲囪喘鍗曠紪鍙�", prop: "name", min: 130, isCommonClick: true}, + { label: "鍗曟嵁绫诲瀷", prop: "contact_name", min: 130 }, + { label: "渚涘簲鍟嗗悕绉�", prop: "contact_phone", min: 130 }, + { label: "鍒拌揣浠撳簱", prop: "sales_resources", min: 130 }, + { label: "璐ㄦ鏁伴噺", prop: "province", min: 130 }, + { label: "妫�楠屽憳", prop: "city", min: 130 }, + { label: "鐘舵��", prop: "member_name", min: 110 }, + { label: "璐ㄦ鏃堕棿", prop: "member_name", min: 150 }, + ] + } + }, + // 璇锋眰鏁版嵁 + async getData() { + await getSalesLeadsList({ + search_map: this.search_map, + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize + }) + .then((res) => { + const list = res.data.list.map((item) => { + return { + ...item, + province: item.Province.name, + city: item.City.name, + sales_resources: item.sales_sources.name, + member_name: item.member.username + } + }) + this.tableList.tableInfomation = list || [] + this.pagerOptions.totalCount = res.data.count + }) + .catch((err) => { + console.log(err) + }) + }, + // 鎼滅储 + searchClick(val, content) { + console.log(val, content) + this.search_map = { + [val.value]: content + } + this.getData() + }, + resetClick() { + this.search_map = {} + this.getData() + }, + + // 纭鍙戣揣 + qualityClick() { + this.$confirm("鏄惁璐ㄦ?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }) + .then(() => { + console.log("dddd") + getDeleteSalesLeads({ ids: this.selValueList }).then((response) => { + if (response.code === 200) { + this.$message.success("纭鍙戣揣鎴愬姛") + this.getData() + } else { + this.$message.warning("纭鍙戣揣澶辫触") + } + }) + }) + .catch(() => {}) + }, + getSelectArray(val) { + this.selValueList = [] + const list = val.map((item) => { + return item.id + }) + this.selValueList = list + }, + // 璇︽儏 + selCommonClick(row) { + console.log(row) + this.commonDetail.visible = true + this.commonDetail.infomation = { ...row } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.rightContent { + width:100%; + height:calc(100% - 10px); + .content-box { + height:100%; + .supplier-search { + display: flex; + align-items: center; + .add-view { + margin-left: auto; + margin-right: 20px; + } + } + .content-table{ + // height:calc(100% - 60px - 42px); + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .bottom { + .product-search { + display: flex; + align-items: center; + .search { + margin-left: auto; + } + .add-view { + margin-left: 20px; + margin-right: 20px; + } + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } +} +</style> diff --git a/src/views/purchaseManage/returned/DetailSupplier.vue b/src/views/purchaseManage/returned/DetailSupplier.vue new file mode 100644 index 0000000..5db62d2 --- /dev/null +++ b/src/views/purchaseManage/returned/DetailSupplier.vue @@ -0,0 +1,352 @@ +<template> + <div class="detail-view"> + <el-drawer :visible.sync="detailConfig.visible" size="80%" :before-close="handleClose" :wrapperClosable="false"> + <template slot="title"> + <div class="header"> + <span class="header-label">閲囪喘閫�璐у崟</span> + <span class="header-title">{{ detailConfig.infomation.name }}</span> + </div> + </template> + <div class="content"> + <div class="tab-view"> + <el-tabs v-model="activeName"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + + </el-tabs> + </div> + <div v-if="activeName === 'first'" class="detail"> + <!-- 鍩烘湰淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('basic')"> + <i v-if="isBasicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">鍩烘湰淇℃伅</span> + </div> + <div v-show="isBasicExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in basicInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> + </div> + <div v-if="item.rightStr && item.rightStr.length > 0" class="right"> + <div class="content-title">{{ item.rightStr + "锛�" }}</div> + <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> + </div> + </li> + </ul> + <div class="business_scope"> + <div class="content-title">{{ "閫�璐у娉細" }}</div> + <div class="content-data">{{ record ? record : "--" }}</div> + </div> + </div> + </div> + <!-- 璐︽埛淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('dynamic')"> + <i v-if="isDynamicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">浜у搧淇℃伅</span> + </div> + <div v-show="isDynamicExpand" class="basic-info-content"> + <TableCommonView + style='margin-top:2px;' + class="content-table" + ref="tableListRef" + :table-list="tableList" + :showSummary="showSummary" + > + </TableCommonView> + </div> + </div> + </div> + + </div> + </el-drawer> + </div> +</template> + +<script> +export default { + name: "DetailSupplier", + props: { + commonDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {}, + tableList:{}, + showSummary:{ + show: true, + sumProp: ["number", "total"], + mergeNumber: 4, + totalName:'灏忚' + }, + } + } + } + }, + components: {}, + computed: {}, + data() { + return { + detailConfig: this.commonDetail, + activeName: "first", + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isDynamicExpand: true, // 浜у搧淇℃伅 + tableList: [], + addConfig: {}, + record: "", // 鏈�鏂拌繘灞� + } + }, + created() { + this.setData(this.detailConfig.infomation) + this.addConfig = { + id_name: "sales_leads_id", + id: this.detailConfig.infomation.id, + common_name: this.detailConfig.infomation.id, + sales_leads_name: this.detailConfig.infomation.name, + sales_leads_id: this.detailConfig.infomation.id + } + }, + mounted() {}, + methods: { + setData(item) { + if (item.FollowRecord && item.FollowRecord.length > 0) { + this.record = item.FollowRecord[0].record + console.log(item.FollowRecord[0].follow_time) + } + this.basicInfoList = [ + { + leftStr: "閲囪喘閫�璐у崟缂栧彿", + leftValue: item.number, + rightStr: "渚涘簲鍟嗗悕绉�", + rightValue: item.name + }, + { + leftStr: "璐ㄦ鍗曠紪鍙�", + leftValue: item.contact_name, + rightStr: "璐ㄦ鍛�", + rightValue: item.contact_position + }, + { + leftStr: "閫�璐у崟鐘舵��", + leftValue: item.contact_phone, + rightStr: "閫�璐ф棩鏈�", + rightValue: "18513375588" + }, + { + leftStr: "閫�璐т粨搴�", + leftValue: item.sales_resources, + rightStr: "缁忓姙浜�", + rightValue: item.member_name + }, + { + leftStr: "鍒跺崟浜�", + leftValue: item.sales_resources, + rightStr: "璐ц繍鍏徃", + rightValue: "" + }, + { + leftStr: "璐ㄦ鏃ユ湡", + leftValue: item.sales_resources, + rightStr: "鐗╂祦鍗曞彿", + rightValue: "" + }, + { + leftStr: "閫�璐у師鍥�", + leftValue: item.sales_resources, + rightStr: "閫�璐у湴鍧�", + rightValue: "" + }, + { + leftStr: "閫�璐ц仈绯讳汉", + leftValue: item.sales_resources, + rightStr: "", + rightValue: "" + } + ] + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "浜у搧鍚嶇О", prop: "number", min: 190, isCommonClick: true }, + { label: "浜у搧缂栫爜", prop: "name", min: 130, isCommonClick: true}, + { label: "璁¢噺鍗曚綅", prop: "contact_name", min: 130 }, + { label: "瑙勬牸鍨嬪彿", prop: "contact_phone", min: 130 }, + { label: "閲囪喘鏁伴噺", prop: "sales_resources", min: 130 }, + { label: "閫�璐ф暟閲�", prop: "province", min: 130 }, + ] + } + }, + handleClose() { + this.detailConfig.visible = false + }, + + // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢 + expandClick(value) { + console.log(value) + if (value === "basic") { + this.isBasicExpand = !this.isBasicExpand + } else if (value === "dynamic") { + this.isDynamicExpand = !this.isDynamicExpand + } + }, + // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫樊鍊� + getDiffDay(date_1, date_2) { + let totalDays, diffDate + let myDate_1 = date_1 + let myDate_2 = Date.parse(date_2) + // 灏嗕袱涓棩鏈熼兘杞崲涓烘绉掓牸寮忥紝鐒跺悗鍋氬樊 + diffDate = Math.abs(myDate_1 - myDate_2) // 鍙栫浉宸绉掓暟鐨勭粷瀵瑰�� + + totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 鍚戜笅鍙栨暣 + // console.log(totalDays) + + return totalDays // 鐩稿樊鐨勫ぉ鏁� + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.detail-view { + .header { + height: 56px; + display: flex; + align-items: center; + padding-left: 10px; + .header-label { + padding: 5px; + border-radius: 4px; + background-color: #ff6600; + color: #fff; + font-size: 12px; + } + .header-title { + color: #323232; + font-size: 15px; + margin-left: 10px; + font-weight: inherit; + } + } + .content { + height:100%; + background-color: rgb(230, 233, 240); + padding: 8px; + .tab-view { + background: #fff; + // .tab-view-pane { + // position: relative; + .item { + position: absolute; + top: 0px; + right: 0px; + } + // } + } + .detail { + height:calc(100% - 40px); + background:#fff; + overflow:auto; + .basic-info { + .basic-info-label { + padding-left: 10px; + height: 42px; + line-height: 42px; + background: #f4f8fe; + color: #333; + font-size: 14px; + } + .basic-info-content { + background: #fff; + ul { + padding-inline-start: 0; + } + li { + display: flex; + font-size: 14px; + font-family: PingFangSC; + border-bottom: 1px solid #f9f9fb; + .left, + .right { + width: 50%; + display: flex; + align-items: center; + height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + .business_scope { + display: flex; + align-items: center; + font-size: 14px; + min-height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + flex: 1; + padding: 5px; + text-align: left; + margin-left: 25px; + color: #333; + } + } + } + } + } + .second { + background: #fff; + .followup-records { + .table-view { + margin-top: 0 !important; + margin-bottom: 0; + } + } + } + } +} +::v-deep .el-drawer__body{ + height:calc(100% - 60px)!important; + } +::v-deep { + .el-drawer__header { + padding: 0; + margin-bottom: 0px; + } + + .el-tabs--top .el-tabs__item.is-top:nth-child(2) { + padding-left: 20px; + } + .el-tabs__item.is-active { + color: $color-primary; + } + .el-tabs__item:hover { + color: $color-primary; + } + .el-tabs__active-bar { + background-color: $color-primary; + } + .el-tabs__header { + margin: 0; + } +} +</style> diff --git a/src/views/purchaseManage/returned/index.vue b/src/views/purchaseManage/returned/index.vue new file mode 100644 index 0000000..f5d798d --- /dev/null +++ b/src/views/purchaseManage/returned/index.vue @@ -0,0 +1,207 @@ +<template> + <div class="rightContent"> + <div class="content-box"> + <div class="supplier-search"> + <SearchCommonView + ref="searchCommonView" + :inputSelect="false" + placeholder="鍙緭鍏ラ噰璐崟,渚涘簲鍟嗗悕绉扮瓑鎼滅储" + @searchClick="searchClick" + @resetClick="resetClick" + /> + + </div> + <template> + <TableCommonView + class="content-table" + ref="tableListRef" + :table-list="tableList" + @selCommonClick="selCommonClick" + @getSelectArray="getSelectArray" + > + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="120"> + <template slot-scope="scope"> + <el-button @click="confirmClick(scope.row)" type="text" size="small">纭鍙戣揣</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </template> + </div> + + <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> + <!-- <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-rightContent-config="editSalesLeadConfig" /> --> + <!-- 璇︽儏 --> + <DetailSupplier v-if="commonDetail.visible" :common-detail="commonDetail" /> + </div> +</template> + +<script> +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead" +import DetailSupplier from "@/views/purchaseManage/returned/DetailSupplier" + +export default { + name: "SupplierManage", + props: {}, + components: { DetailSupplier }, + mixins: [pageMixin], + computed: {}, + data() { + return { + tableList: {}, // 鍒楄〃 + selValueList: [], + commonDetail: { + visible: false, + infomation: {} + }, + search_map: {} + } + }, + created() { + this.setTable() + this.getData() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "閫�璐у崟缂栧彿", prop: "number", min: 190, isCommonClick: true }, + { label: "閲囪喘鍗曠紪鍙�", prop: "name", min: 130, isCommonClick: true}, + { label: "鍗曟嵁绫诲瀷", prop: "contact_name", min: 130 }, + { label: "渚涘簲鍟嗗悕绉�", prop: "contact_phone", min: 130 }, + { label: "閫�璐т粨搴�", prop: "sales_resources", min: 130 }, + { label: "閫�璐х悊鐢�", prop: "province", min: 180 }, + { label: "缁忓姙浜�", prop: "city", min: 130 }, + { label: "鍒跺崟浜�", prop: "member_name", min: 130 }, + { label: "閫�璐ф棩鏈�", prop: "member_name", min: 150 }, + { label: "鐘舵��", prop: "member_name", min: 110 } + ] + } + }, + // 璇锋眰鏁版嵁 + async getData() { + await getSalesLeadsList({ + search_map: this.search_map, + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize + }) + .then((res) => { + const list = res.data.list.map((item) => { + return { + ...item, + province: item.Province.name, + city: item.City.name, + sales_resources: item.sales_sources.name, + member_name: item.member.username + } + }) + this.tableList.tableInfomation = list || [] + this.pagerOptions.totalCount = res.data.count + }) + .catch((err) => { + console.log(err) + }) + }, + // 鎼滅储 + searchClick(val, content) { + console.log(val, content) + this.search_map = { + [val.value]: content + } + this.getData() + }, + resetClick() { + this.search_map = {} + this.getData() + }, + + // 纭鍙戣揣 + confirmClick() { + this.$confirm("鏄惁纭鍙戣揣?", "璀﹀憡", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }) + .then(() => { + console.log("dddd") + getDeleteSalesLeads({ ids: this.selValueList }).then((response) => { + if (response.code === 200) { + this.$message.success("纭鍙戣揣鎴愬姛") + this.getData() + } else { + this.$message.warning("纭鍙戣揣澶辫触") + } + }) + }) + .catch(() => {}) + }, + getSelectArray(val) { + this.selValueList = [] + const list = val.map((item) => { + return item.id + }) + this.selValueList = list + }, + // 璇︽儏 + selCommonClick(row) { + console.log(row) + this.commonDetail.visible = true + this.commonDetail.infomation = { ...row } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.rightContent { + width:100%; + height:calc(100% - 10px); + .content-box { + height:100%; + .supplier-search { + display: flex; + align-items: center; + .add-view { + margin-left: auto; + margin-right: 20px; + } + } + .content-table{ + // height:calc(100% - 60px - 42px); + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .bottom { + .product-search { + display: flex; + align-items: center; + .search { + margin-left: auto; + } + .add-view { + margin-left: 20px; + margin-right: 20px; + } + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } +} +</style> diff --git a/src/views/purchaseManage/warehouse/DetailSupplier.vue b/src/views/purchaseManage/warehouse/DetailSupplier.vue new file mode 100644 index 0000000..343aa87 --- /dev/null +++ b/src/views/purchaseManage/warehouse/DetailSupplier.vue @@ -0,0 +1,345 @@ +<template> + <div class="detail-view"> + <el-drawer :visible.sync="detailConfig.visible" size="80%" :before-close="handleClose" :wrapperClosable="false"> + <template slot="title"> + <div class="header"> + <span class="header-label">鍏ュ簱鍗曡鎯�</span> + <span class="header-title">{{ detailConfig.infomation.name }}</span> + </div> + </template> + <div class="content"> + <div class="tab-view"> + <el-tabs v-model="activeName"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + + </el-tabs> + </div> + <div v-if="activeName === 'first'" class="detail"> + <!-- 鍩烘湰淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('basic')"> + <i v-if="isBasicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">鍩烘湰淇℃伅</span> + </div> + <div v-show="isBasicExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in basicInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> + </div> + <div v-if="item.rightStr && item.rightStr.length > 0" class="right"> + <div class="content-title">{{ item.rightStr + "锛�" }}</div> + <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> + </div> + </li> + </ul> + <div class="business_scope"> + <div class="content-title">{{ "澶囨敞淇℃伅锛�" }}</div> + <div class="content-data">{{ record ? record : "--" }}</div> + </div> + </div> + </div> + <!-- 璐︽埛淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('dynamic')"> + <i v-if="isDynamicExpand" class="el-icon-arrow-down"></i> + <i v-else class="el-icon-arrow-up"></i> + <span style="margin-left: 10px">浜у搧淇℃伅</span> + </div> + <div v-show="isDynamicExpand" class="basic-info-content"> + <TableCommonView + style='margin-top:2px;' + class="content-table" + ref="tableListRef" + :table-list="tableList" + > + </TableCommonView> + </div> + </div> + </div> + + </div> + </el-drawer> + </div> +</template> + +<script> +export default { + name: "DetailSupplier", + props: { + commonDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {}, + tableList:[], + } + } + } + }, + components: {}, + computed: {}, + data() { + return { + detailConfig: this.commonDetail, + activeName: "first", + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isDynamicExpand: true, // 浜у搧淇℃伅 + tableList: [], + addConfig: {}, + record: "", // 鏈�鏂拌繘灞� + noContactDays: 0, + newContactDays: "" + } + }, + created() { + this.setData(this.detailConfig.infomation) + this.addConfig = { + id_name: "sales_leads_id", + id: this.detailConfig.infomation.id, + common_name: this.detailConfig.infomation.id, + sales_leads_name: this.detailConfig.infomation.name, + sales_leads_id: this.detailConfig.infomation.id + } + }, + mounted() {}, + methods: { + setData(item) { + if (item.FollowRecord && item.FollowRecord.length > 0) { + this.record = item.FollowRecord[0].record + console.log(item.FollowRecord[0].follow_time) + let follow_time = item.FollowRecord[0].follow_time + this.newContactDays = follow_time.substring(0, 10) + this.noContactDays = this.getDiffDay(Date.now(), this.newContactDays) + } + this.basicInfoList = [ + { + leftStr: "閲囪喘鍏ュ簱鍗曠紪鍙�", + leftValue: item.number, + rightStr: "鍏ュ簱鍗曠姸鎬�", + rightValue: item.name + }, + { + leftStr: "璐ㄦ鍗曠紪鍙�", + leftValue: item.contact_name, + rightStr: "渚涘簲鍟嗗悕绉�", + rightValue: item.contact_position + }, + { + leftStr: "鍒拌揣浠撳簱", + leftValue: item.contact_phone, + rightStr: "閲囪喘璐熻矗浜�", + rightValue: "18513375588" + }, + { + leftStr: "璐ㄦ鍛�", + leftValue: item.sales_resources, + rightStr: "浠撳簱鍛�", + rightValue: item.member_name + }, + { + leftStr: "璐ㄦ鏃ユ湡", + leftValue: item.sales_resources, + rightStr: "鍏ュ簱瀹屾垚鏃堕棿", + rightValue: "" + }, + { + leftStr: "鐗╂祦鍏徃", + leftValue: item.sales_resources, + rightStr: "鍒涘缓鏃堕棿", + rightValue: "" + }, + { + leftStr: "鐗╂枡鍗曞彿", + leftValue: item.sales_resources, + rightStr: "", + rightValue: "" + } + ] + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "浜у搧鍚嶇О", prop: "number", min: 190, isCommonClick: true }, + { label: "浜у搧缂栫爜", prop: "name", min: 130, isCommonClick: true}, + { label: "璁¢噺鍗曚綅", prop: "contact_name", min: 130 }, + { label: "瑙勬牸鍨嬪彿", prop: "contact_phone", min: 130 }, + { label: "渚涘簲鍟嗗彂璐ф暟閲�", prop: "sales_resources", min: 160 }, + { label: "璐ㄦ鍚堟牸鏁伴噺", prop: "province", min: 180 }, + { label: "鍏ュ簱鏁伴噺", prop: "city", min: 130 }, + ] + } + }, + handleClose() { + this.detailConfig.visible = false + }, + + // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢 + expandClick(value) { + console.log(value) + if (value === "basic") { + this.isBasicExpand = !this.isBasicExpand + } else if (value === "dynamic") { + this.isDynamicExpand = !this.isDynamicExpand + } + }, + // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫樊鍊� + getDiffDay(date_1, date_2) { + let totalDays, diffDate + let myDate_1 = date_1 + let myDate_2 = Date.parse(date_2) + // 灏嗕袱涓棩鏈熼兘杞崲涓烘绉掓牸寮忥紝鐒跺悗鍋氬樊 + diffDate = Math.abs(myDate_1 - myDate_2) // 鍙栫浉宸绉掓暟鐨勭粷瀵瑰�� + + totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 鍚戜笅鍙栨暣 + // console.log(totalDays) + + return totalDays // 鐩稿樊鐨勫ぉ鏁� + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.detail-view { + .header { + height: 56px; + display: flex; + align-items: center; + padding-left: 10px; + .header-label { + padding: 5px; + border-radius: 4px; + background-color: #ff6600; + color: #fff; + font-size: 12px; + } + .header-title { + color: #323232; + font-size: 15px; + margin-left: 10px; + font-weight: inherit; + } + } + .content { + height:100%; + background-color: rgb(230, 233, 240); + padding: 8px; + .tab-view { + background: #fff; + // .tab-view-pane { + // position: relative; + .item { + position: absolute; + top: 0px; + right: 0px; + } + // } + } + .detail { + height:calc(100% - 40px); + background:#fff; + overflow:auto; + .basic-info { + .basic-info-label { + padding-left: 10px; + height: 42px; + line-height: 42px; + background: #f4f8fe; + color: #333; + font-size: 14px; + } + .basic-info-content { + background: #fff; + ul { + padding-inline-start: 0; + } + li { + display: flex; + font-size: 14px; + font-family: PingFangSC; + border-bottom: 1px solid #f9f9fb; + .left, + .right { + width: 50%; + display: flex; + align-items: center; + height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + .business_scope { + display: flex; + align-items: center; + font-size: 14px; + min-height: 40px; + .content-title { + width: 180px; + text-align: right; + color: #555; + } + .content-data { + flex: 1; + padding: 5px; + text-align: left; + margin-left: 25px; + color: #333; + } + } + } + } + } + .second { + background: #fff; + .followup-records { + .table-view { + margin-top: 0 !important; + margin-bottom: 0; + } + } + } + } +} +::v-deep .el-drawer__body{ + height:calc(100% - 60px)!important; + } +::v-deep { + .el-drawer__header { + padding: 0; + margin-bottom: 0px; + } + + .el-tabs--top .el-tabs__item.is-top:nth-child(2) { + padding-left: 20px; + } + .el-tabs__item.is-active { + color: $color-primary; + } + .el-tabs__item:hover { + color: $color-primary; + } + .el-tabs__active-bar { + background-color: $color-primary; + } + .el-tabs__header { + margin: 0; + } +} +</style> diff --git a/src/views/purchaseManage/warehouse/index.vue b/src/views/purchaseManage/warehouse/index.vue new file mode 100644 index 0000000..016f319 --- /dev/null +++ b/src/views/purchaseManage/warehouse/index.vue @@ -0,0 +1,210 @@ +<template> + <div class="rightContent"> + <div class="content-box"> + <div class="supplier-search"> + <SearchCommonView + ref="searchCommonView" + :inputSelect="false" + placeholder="鍙緭鍏ュ叆搴撳崟鍙�,渚涘簲鍟嗗悕绉扮瓑鎼滅储" + @searchClick="searchClick" + @resetClick="resetClick" + /> + + </div> + <template> + <TableCommonView + class="content-table" + ref="tableListRef" + :table-list="tableList" + @selCommonClick="selCommonClick" + @getSelectArray="getSelectArray" + > + <!-- <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="120"> + <template slot-scope="scope"> + + </template> + </el-table-column> + </template> --> + </TableCommonView> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </template> + </div> + + <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> + <!-- <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-rightContent-config="editSalesLeadConfig" /> --> + <!-- 璇︽儏 --> + <DetailSupplier v-if="commonDetail.visible" :common-detail="commonDetail" /> + </div> +</template> + +<script> +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead" +import DetailSupplier from "@/views/purchaseManage/warehouse/DetailSupplier" + +export default { + name: "SupplierManage", + props: {}, + components: { DetailSupplier }, + mixins: [pageMixin], + computed: {}, + data() { + return { + tableList: {}, // 鍒楄〃 + selValueList: [], + commonDetail: { + visible: false, + infomation: {} + }, + search_map: {} + } + }, + created() { + this.setTable() + this.getData() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [], + selectIndex: true, + tableColumn: [ + { label: "鍏ュ簱鍗曞彿", prop: "number", min: 190, isCommonClick: true }, + { label: "閲囪喘缂栧彿", prop: "name", min: 130, isCommonClick: true}, + { label: "鍗曟嵁绫诲瀷", prop: "contact_name", min: 130 }, + { label: "渚涘簲鍟�", prop: "contact_phone", min: 130 }, + { label: "鏀惰揣浠撳簱", prop: "sales_resources", min: 130 }, + { label: "鍏ュ簱鏃堕棿", prop: "province", min: 180 }, + { label: "缁忓姙浜�", prop: "city", min: 130 }, + { label: "鍒跺崟浜�", prop: "member_name", min: 130 }, + { label: "鐘舵��", prop: "member_name", min: 110 } + ] + } + }, + // 璇锋眰鏁版嵁 + async getData() { + await getSalesLeadsList({ + search_map: this.search_map, + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize + }) + .then((res) => { + const list = res.data.list.map((item) => { + return { + ...item, + province: item.Province.name, + city: item.City.name, + sales_resources: item.sales_sources.name, + member_name: item.member.username + } + }) + this.tableList.tableInfomation = list || [] + this.pagerOptions.totalCount = res.data.count + }) + .catch((err) => { + console.log(err) + }) + }, + // 鎼滅储 + searchClick(val, content) { + console.log(val, content) + this.search_map = { + [val.value]: content + } + this.getData() + }, + resetClick() { + this.search_map = {} + this.getData() + }, + + // 鍒犻櫎 + delClick() { + if (this.selValueList && this.selValueList.length > 0) { + this.$confirm("鏄惁纭鍒犻櫎?", "璀﹀憡", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }) + .then(() => { + console.log("dddd") + getDeleteSalesLeads({ ids: this.selValueList }).then((response) => { + if (response.code === 200) { + this.$message.success("鍒犻櫎鎴愬姛") + this.getData() + } else { + this.$message.warning("鍒犻櫎澶辫触") + } + }) + }) + .catch(() => {}) + } else { + this.$message.warning("璇疯嚦灏戦�夋嫨涓�鏉¤褰�") + } + }, + getSelectArray(val) { + this.selValueList = [] + const list = val.map((item) => { + return item.id + }) + this.selValueList = list + }, + // 璇︽儏 + selCommonClick(row) { + console.log(row) + this.commonDetail.visible = true + this.commonDetail.infomation = { ...row } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.rightContent { + width:100%; + height:calc(100% - 10px); + .content-box { + height:100%; + .supplier-search { + display: flex; + align-items: center; + .add-view { + margin-left: auto; + margin-right: 20px; + } + } + .content-table{ + // height:calc(100% - 60px - 42px); + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .bottom { + .product-search { + display: flex; + align-items: center; + .search { + margin-left: auto; + } + .add-view { + margin-left: 20px; + margin-right: 20px; + } + } + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } +} +</style> -- Gitblit v1.8.0