From 624e812b40ac87bf8d7a17b83b4a3bc3bbd901fb Mon Sep 17 00:00:00 2001 From: yangfeng <wanwan926_4@163.com> Date: 星期四, 03 八月 2023 18:38:58 +0800 Subject: [PATCH] 增加客户服务单(删除工单管理、消费服务单)和客户管理模块详情页 --- src/components/index.js | 3 src/views/client/followupRecords/AddFollowupRecordsDialog.vue | 86 + src/views/sales/masterOrder/index.vue | 36 src/components/makepager/TableCommonView.vue | 37 src/views/service/orderManage/AddOrderManageDialog.vue | 458 ++++++++- src/views/client/salesLead/index.vue | 45 src/views/sales/salesReturn/index.vue | 25 src/views/client/followupRecords/index.vue | 79 + src/components/layout/components/appsidebar/index.vue | 4 src/views/client/contacts/DetailContacts.vue | 363 ++++++++ src/views/service/serviceContract/index.vue | 36 src/views/service/serviceFollowup/index.vue | 25 src/views/sales/contractManage/index.vue | 39 src/views/sales/salesDetails/index.vue | 36 src/components/makepager/pager/PagerView.vue | 2 src/views/client/client/index.vue | 77 + src/views/sales/subOrder/index.vue | 36 src/components/makepager/PublicFunctionBtnView.vue | 4 src/views/client/client/DetailClientManage.vue | 528 ++++++++++++ src/components/makepager/DetailListCommonBtn.vue | 73 + src/views/sales/refundForm/index.vue | 25 src/views/client/contacts/index.vue | 74 + src/views/client/salesLead/DetailSalesLead.vue | 365 ++++++++ src/assets/style/index.scss | 10 src/views/service/orderManage/index.vue | 55 src/main.js | 5 src/views/sales/salesOpportunity/index.vue | 44 src/router/service/index.js | 2 src/views/sales/generatePlan/index.vue | 25 src/views/sales/quotation/index.vue | 42 30 files changed, 2,351 insertions(+), 288 deletions(-) diff --git a/src/assets/style/index.scss b/src/assets/style/index.scss index 555ade6..361de82 100644 --- a/src/assets/style/index.scss +++ b/src/assets/style/index.scss @@ -1,3 +1,13 @@ @import "element-ui/lib/theme-chalk/index.css"; @import "./variable.scss"; @import "./reset-element.scss"; + +ul, +ol, +li { + list-style: none; + padding: 0; + margin: 0; + border: 0; + outline: 0; +} diff --git a/src/components/index.js b/src/components/index.js index 57970cb..14771f4 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -3,8 +3,9 @@ import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" import PagerView from "@/components/makepager/pager/PagerView" import TableCommonView from "@/components/makepager/TableCommonView" +import DetailListCommonBtn from "@/components/makepager/DetailListCommonBtn" -const components = [SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView] +const components = [SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView, DetailListCommonBtn] components.forEach((component) => { Vue.component(component.name, component) }) diff --git a/src/components/layout/components/appsidebar/index.vue b/src/components/layout/components/appsidebar/index.vue index 57830b9..a4964d2 100644 --- a/src/components/layout/components/appsidebar/index.vue +++ b/src/components/layout/components/appsidebar/index.vue @@ -44,9 +44,9 @@ <span>鏈嶅姟绠$悊</span> </template> <el-menu-item index="/service/serviceContract">鏈嶅姟鍚堝悓</el-menu-item> - <el-menu-item index="/service/orderManage">宸ュ崟绠$悊</el-menu-item> + <el-menu-item index="/service/orderManage">瀹㈡埛鏈嶅姟鍗�</el-menu-item> <el-menu-item index="/service/serviceFollowup">鏈嶅姟鍥炶鍗�</el-menu-item> - <el-menu-item index="/service/serviceFeeManage">鏈嶅姟鏀惰垂绠$悊</el-menu-item> + <!-- <el-menu-item index="/service/serviceFeeManage">鏈嶅姟鏀惰垂绠$悊</el-menu-item> --> </el-submenu> <!-- <el-submenu index="4"> <template slot="title"> diff --git a/src/components/makepager/DetailListCommonBtn.vue b/src/components/makepager/DetailListCommonBtn.vue new file mode 100644 index 0000000..5e3f4c1 --- /dev/null +++ b/src/components/makepager/DetailListCommonBtn.vue @@ -0,0 +1,73 @@ +<template> + <div class="detail-list"> + <div class="add" @click="addBtnClick"> + <i class="el-icon-circle-plus-outline" style="font-size: 15px; margin-right: 5px"></i> + <span>鏂板缓</span> + </div> + <div class="query-class"> + <div class="query-class-title">鏌ヨ鍒嗙被</div> + <el-select v-model="queryClassValue" placeholder="璇烽�夋嫨" class="query-class-sel" size="mini"> + <el-option v-for="item in queryClassOptions" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> +</template> + +<script> +export default { + name: "DetailListCommonBtn", + components: {}, + props: { + queryClass: { + type: String, + default: "1" + }, + queryClassOptions: { + type: Array, + default: () => [] + } + }, + data() { + return { + queryClassValue: this.queryClass + } + }, + methods: { + addBtnClick() { + this.$parent.addBtnClick() + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.detail-list { + display: flex; + align-items: center; + font-size: 12px; + .add { + color: #2a304d; + height: 36px; + line-height: 36px; + width: 60px; + text-align: center; + margin-left: 10px; + cursor: pointer; + } + .query-class { + display: flex; + height: 50px; + line-height: 50px; + .query-class-title { + margin-left: 10px; + color: #666; + } + .query-class-sel { + width: 165px; + margin-left: 10px; + } + } +} +</style> diff --git a/src/components/makepager/PublicFunctionBtnView.vue b/src/components/makepager/PublicFunctionBtnView.vue index af31de2..e7d3b84 100644 --- a/src/components/makepager/PublicFunctionBtnView.vue +++ b/src/components/makepager/PublicFunctionBtnView.vue @@ -8,9 +8,9 @@ <!-- <el-button v-if="submitApproval" size="small" type="text" class="gray width64" @click="submitApprovalBtnClick" >鎻愪氦瀹℃壒 </el-button> --> - <!-- <el-button v-if="duplicateCheck" size="small" type="text" class="gray" @click="duplicateCheckBtnClick" + <el-button v-if="duplicateCheck" size="small" type="text" class="gray" @click="duplicateCheckBtnClick" >鏌ラ噸</el-button - > --> + > <!-- <el-button v-if="importButton" size="small" type="text" class="gray" @click="importBtnClick">瀵煎叆</el-button> <el-button v-if="departmentSet" size="small" type="text" class="gray" @click="departmentSetClick" >閮ㄩ棬璁剧疆</el-button diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue index 129ae2b..80b1e97 100644 --- a/src/components/makepager/TableCommonView.vue +++ b/src/components/makepager/TableCommonView.vue @@ -1,5 +1,5 @@ <template> - <div class="page-view"> + <div class="table-view"> <el-table ref="table" border @@ -32,9 +32,27 @@ ? "--" : dateFormat("YYYY-mm-dd HH:MM:SS", scope.row[item.prop]) }}</span> - <span v-else-if="item.isClick" class="sel-name" @click="selNameClick(scope.row)">{{ + <span v-else-if="item.isClick && scope.row[item.prop]" class="sel-name" @click="selNameClick(scope.row)">{{ scope.row[item.prop] }}</span> + <span + v-else-if="item.isSalesLeadClick && scope.row[item.prop]" + class="sel-name" + @click="selSalesLeadClick(scope.row)" + >{{ scope.row[item.prop] }}</span + > + <span + v-else-if="item.isClientClick && scope.row[item.prop]" + class="sel-name" + @click="selClientClick(scope.row)" + >{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span + > + <span + v-else-if="item.isContactClick && scope.row[item.prop]" + class="sel-name" + @click="selContactsClick(scope.row)" + >{{ scope.row[item.prop] }}</span + > <span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span> </template> </el-table-column> @@ -184,6 +202,15 @@ }, selNameClick(row) { this.$emit("selCommonClick", row) + }, + selSalesLeadClick(row) { + this.$emit("selSalesLeadClick", row) + }, + selClientClick(row) { + this.$emit("selClientClick", row) + }, + selContactsClick(row) { + this.$emit("selContactsClick", row) } } } @@ -191,10 +218,10 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.page-view { - margin-top: 20px; +.table-view { + // margin-top: 20px; margin-right: 10px; - margin-bottom: 40px; + // margin-bottom: 40px; .blue { width: 70px; text-align: center; diff --git a/src/components/makepager/pager/PagerView.vue b/src/components/makepager/pager/PagerView.vue index 6160f1c..df8eae2 100644 --- a/src/components/makepager/pager/PagerView.vue +++ b/src/components/makepager/pager/PagerView.vue @@ -18,7 +18,7 @@ props: { pageSizes: { type: Array, - default: () => [10, 20, 30, 40] + default: () => [5, 10, 20, 30, 40] }, layout: { type: String, diff --git a/src/main.js b/src/main.js index 6b8ee12..8acc4e8 100644 --- a/src/main.js +++ b/src/main.js @@ -8,6 +8,11 @@ import "@/components" Vue.use(ElementUI) +// 淇敼榛樿鐐瑰嚮閬僵灞備负涓嶅叧闂� +ElementUI.MessageBox.setDefaults({ + closeOnClickModal: false +}) +ElementUI.Dialog.props.closeOnClickModal.default = false Vue.config.productionTip = false diff --git a/src/router/service/index.js b/src/router/service/index.js index a4b6ab2..821c23a 100644 --- a/src/router/service/index.js +++ b/src/router/service/index.js @@ -19,7 +19,7 @@ name: "orderManage", component: orderManage, meta: { - title: "宸ュ崟绠$悊" + title: "瀹㈡埛鏈嶅姟鍗�" } }, { diff --git a/src/views/client/client/DetailClientManage.vue b/src/views/client/client/DetailClientManage.vue new file mode 100644 index 0000000..e1c0423 --- /dev/null +++ b/src/views/client/client/DetailClientManage.vue @@ -0,0 +1,528 @@ +<template> + <div class="detail-view"> + <el-drawer + :visible.sync="detailConfig.visible" + size="80%" + :before-close="handleClose" + :wrapperClosable="false" + :append-to-body="true" + > + <template slot="title"> + <div class="header"> + <span class="header-label">瀹㈡埛鍚嶇О</span> + <span class="header-title">{{ detailConfig.infomation.client_name }}</span> + </div> + </template> + <div class="content"> + <div class="tab-view"> + <el-tabs v-model="activeName" @tab-click="tabsClick"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + <el-tab-pane label="鑱旂郴浜�" name="contact"></el-tab-pane> + <el-tab-pane label="璺熻繘璁板綍" name="second"> + <!-- <template slot="label"> + <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div> + </template> --> + </el-tab-pane> + <el-tab-pane label="閿�鍞満浼�" name="salesOpportunity"></el-tab-pane> + <el-tab-pane label="鎶ヤ环鍗�" name="quotation"></el-tab-pane> + <el-tab-pane label="閿�鍞�诲崟" name="master"></el-tab-pane> + <el-tab-pane label="閿�鍞瓙鍗�" name="sub"></el-tab-pane> + <el-tab-pane label="閿�鍞槑缁嗗崟" name="detail"></el-tab-pane> + <el-tab-pane label="鏀舵鍗�" name="plan"></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 }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 瀹㈡埛棣栬鑱旂郴浜� --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('contact')"> + <i v-if="isContactExpand" 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="isContactExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in contactList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </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 }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 宸ュ晢淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('business')"> + <i v-if="isBusinessExpand" 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="isBusinessExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in businessInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 鍦板潃淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('address')"> + <i v-if="isAddressExpand" 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="isAddressExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in addressInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 澶囨敞淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('remark')"> + <i v-if="isRemarkExpand" 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="isRemarkExpand" class="basic-info-content"> + <ul> + <li> + <div class="left remark"> + <div class="content-title">{{ "澶囨敞锛�" }}</div> + <div class="content-data">{{ "澶囨敞鍐呭" }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 闄勪欢淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('annex')"> + <i v-if="isAnnexExpand" 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="isAnnexExpand" class="basic-info-content"> + <ul> + <li> + <div class="left remark"> + <div class="content-title">{{ "闄勪欢锛�" }}</div> + <div class="content-data">{{ "" }}</div> + </div> + </li> + </ul> + </div> + </div> + </div> + <div v-if="activeName === 'contact'" class="second"> + <Contacts :isDetail="true" /> + </div> + <div v-if="activeName === 'second'" class="second"> + <FollowupRecords :isDetail="true" /> + </div> + <div v-if="activeName === 'salesOpportunity'" class="second"> + <SalesOpportunity :isDetail="true" /> + </div> + <div v-if="activeName === 'quotation'" class="second"> + <Quotation :isDetail="true" /> + </div> + <div v-if="activeName === 'master'" class="second"> + <MasterOrder :isDetail="true" /> + </div> + <div v-if="activeName === 'sub'" class="second"> + <SubOrder :isDetail="true" /> + </div> + <div v-if="activeName === 'detail'" class="second"> + <SalesDetails :isDetail="true" /> + </div> + </div> + </el-drawer> + </div> +</template> + +<script> +import FollowupRecords from "@/views/client/followupRecords" +import Contacts from "@/views/client/contacts" +import SalesOpportunity from "@/views/sales/salesOpportunity" +import Quotation from "@/views/sales/quotation" +import MasterOrder from "@/views/sales/masterOrder" +import SubOrder from "@/views/sales/subOrder" +import SalesDetails from "@/views/sales/salesDetails" +export default { + name: "DetailClientManage", + props: { + clientManageDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {} + } + } + } + }, + components: { FollowupRecords, Contacts, SalesOpportunity, Quotation, MasterOrder, SubOrder, SalesDetails }, + computed: {}, + data() { + return { + detailConfig: this.clientManageDetail, + activeName: "first", + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isContactExpand: true, // 棣栬鑱旂郴浜� + contactList: [], + isDynamicExpand: true, // 鍔ㄦ�佷俊鎭� + dynamicInfoList: [], + isBusinessExpand: true, // 宸ュ晢淇℃伅 + businessInfoList: [], + isAddressExpand: true, // 鍦板潃淇℃伅 + addressInfoList: [], + isRemarkExpand: true, // 澶囨敞淇℃伅 + isAnnexExpand: true // 闄勪欢淇℃伅 + } + }, + created() { + this.setData() + }, + mounted() {}, + methods: { + setData() { + this.basicInfoList = [ + { + leftStr: "瀹㈡埛鍚嶇О", + leftValue: this.detailConfig.infomation.client_name, + rightStr: "瀹㈡埛缂栧彿", + rightValue: this.detailConfig.infomation.number + }, + { + leftStr: "瀹㈡埛鐘舵��", + leftValue: this.detailConfig.infomation.contact_name, + rightStr: "閿�鍞礋璐d汉", + rightValue: this.detailConfig.infomation.contact_position + }, + { + leftStr: "瀹㈡埛绫诲瀷", + leftValue: this.detailConfig.infomation.contact_phone, + rightStr: "瀹㈡埛鏉ユ簮", + rightValue: "鏂板缓" + }, + { + leftStr: "閲嶈绾у埆", + leftValue: this.detailConfig.infomation.sales_sources_id, + rightStr: "鍏捣鐘舵��", + rightValue: this.detailConfig.infomation.member_id + }, + { + leftStr: "鎵�灞炲叕娴�", + leftValue: "", + rightStr: "鏈嶅姟浠h〃", + rightValue: "" + }, + { + leftStr: "绛惧埌", + leftValue: "", + rightStr: "涓嬫鍥炶鏃ユ湡", + rightValue: "" + }, + { + leftStr: "鍒涘缓鏃堕棿", + leftValue: "", + rightStr: "鏈�鏅氭湇鍔″埌鏈熸棩", + rightValue: "" + }, + { + leftStr: "鍒涘缓浜�", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + this.contactList = [ + { + leftStr: "鑱旂郴浜哄鍚�", + leftValue: "", + rightStr: "鑱旂郴浜烘墜鏈�", + rightValue: "" + }, + { + leftStr: "鑱旂郴浜鸿亴鍔�", + leftValue: "", + rightStr: "鑱旂郴浜哄井淇�", + rightValue: "" + }, + { + leftStr: "鑱旂郴浜篍mail", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + this.dynamicInfoList = [ + { + leftStr: "鏈�鏂拌仈绯绘棩鏈�", + leftValue: "", + rightStr: "鏈仈绯诲ぉ鏁�", + rightValue: "" + }, + { + leftStr: "鏈�鏂版帹杩涙椂闂�", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + this.businessInfoList = [ + { + leftStr: "鎵�灞炶涓�", + leftValue: "", + rightStr: "娉曞畾浠h〃浜�", + rightValue: "" + }, + { + leftStr: "娉ㄥ唽鏃堕棿", + leftValue: "", + rightStr: "娉ㄥ唽璧勯噾", + rightValue: "" + }, + { + leftStr: "鍏徃鎬ц川", + leftValue: "", + rightStr: "瀹㈡埛瑙勬ā", + rightValue: "" + }, + { + leftStr: "缁忚惀鑼冨洿", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + this.addressInfoList = [ + { + leftStr: "鍥藉", + leftValue: "", + rightStr: "鐪佷唤", + rightValue: "" + }, + { + leftStr: "鍩庡競", + leftValue: "", + rightStr: "鍖哄煙", + rightValue: "" + }, + { + leftStr: "璇︾粏鍦板潃", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + }, + 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 === "contact") { + this.isContactExpand = !this.isContactExpand + } else if (value === "business") { + this.isBusinessExpand = !this.isBusinessExpand + } else if (value === "dynamic") { + this.isDynamicExpand = !this.isDynamicExpand + } else if (value === "address") { + this.isAddressExpand = !this.isAddressExpand + } else if (value === "remark") { + this.isRemarkExpand = !this.isRemarkExpand + } else if (value === "annex") { + this.isAnnexExpand = !this.isAnnexExpand + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +::v-deep { + .el-drawer__header { + padding: 0; + margin-bottom: 0px; + .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; + } + } + } + .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; + } + .el-drawer__body { + .content { + 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 { + .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: 220px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + } + } + } + .second { + background: #fff; + .followup-records { + .table-view { + margin-top: 0 !important; + margin-bottom: 0; + } + } + } + } + } +} +</style> diff --git a/src/views/client/client/index.vue b/src/views/client/client/index.vue index 6b3fe15..c6688f2 100644 --- a/src/views/client/client/index.vue +++ b/src/views/client/client/index.vue @@ -18,18 +18,30 @@ </div> </div> </div> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView - :duplicate-check="true" - :list-button="true" - :map-button="true" - :statistics="true" - :operates-list="operatesList" + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="btn-pager"> + <PublicFunctionBtnView + :duplicate-check="true" + :list-button="true" + :map-button="true" + :statistics="true" + :operates-list="operatesList" + /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> - <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList"> + <TableCommonView + ref="tableListRef" + v-loading="loading" + :table-list="tableList" + @selClientClick="selClientClick" + @selContactsClick="selContactsClick" + > <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="180"> <template slot-scope="scope"> @@ -43,11 +55,15 @@ </TableCommonView> <!-- 鏂板缓/缂栬緫瀹㈡埛绠$悊 --> <AddClientManageDialog v-if="editConfig.visible" :edit-client-manage-config="editConfig" /> + <!-- 瀹㈡埛璇︽儏 --> + <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" /> + <!-- 鑱旂郴浜鸿鎯� --> + <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" /> </div> </template> <script> -import AddClientManageDialog from "@/views/client/client/AddClientManageDialog.vue" +import AddClientManageDialog from "@/views/client/client/AddClientManageDialog" import { getClientList, getDeleteClient } from "@/api/client/client" import pageMixin from "@/components/makepager/pager/mixin/pageMixin" @@ -56,7 +72,9 @@ props: {}, mixins: [pageMixin], components: { - AddClientManageDialog + AddClientManageDialog, + DetailContacts: () => import("@/views/client/contacts/DetailContacts"), + DetailClientManage: () => import("@/views/client/client/DetailClientManage") }, computed: { searchCommonHeight() { @@ -93,6 +111,14 @@ visible: false, title: "鏂板缓", infomation: {} + }, + contactsDeail: { + visible: false, + infomation: {} + }, + clientDeail: { + visible: false, + infomation: {} } } }, @@ -105,13 +131,13 @@ this.tableList = { tableInfomation: [], tableColumn: [ - { label: "瀹㈡埛鍚嶇О", prop: "name", min: 100 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛鍚嶇О", prop: "name", min: 100, isClientClick: true }, // 瀹㈡埛鍚嶇О { label: "閿�鍞礋璐d汉", prop: "member_id" }, // 閿�鍞礋璐d汉 { label: "閲嶈绾у埆", prop: "client_level_id" }, // 閲嶈绾у埆 { label: "涓嬫鍥炶鏃ユ湡", prop: "next_visit_time", isTime: true, min: 90 }, // 涓嬫鍥炶鏃ユ湡 { label: "璇︾粏鍦板潃", prop: "detail_address", min: 200 }, // 璇︾粏鍦板潃 { label: "瀹㈡埛鐘舵��", prop: "client_status_id" }, // 瀹㈡埛鐘舵�� - { label: "鑱旂郴浜哄鍚�", prop: "contact_name" }, // 鑱旂郴浜哄鍚� + { label: "鑱旂郴浜哄鍚�", prop: "contact_name", isContactClick: true }, // 鑱旂郴浜哄鍚� { label: "鎵嬫満鍙风爜", prop: "contact_phone" } // 鎵嬫満鍙风爜 ] } @@ -217,6 +243,18 @@ }, getSelectArray(val) { console.log(val) + }, + // 瀹㈡埛鍚嶇О璇︽儏 + selClientClick(row) { + console.log(row) + this.clientDeail.visible = true + this.clientDeail.infomation = { ...row, client_name: row.name } + }, + // 鑱旂郴浜鸿鎯� + selContactsClick(row) { + console.log(row) + this.contactsDeail.visible = true + this.contactsDeail.infomation = { ...row } } } } @@ -245,10 +283,13 @@ } } } - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/client/contacts/DetailContacts.vue b/src/views/client/contacts/DetailContacts.vue new file mode 100644 index 0000000..97e078c --- /dev/null +++ b/src/views/client/contacts/DetailContacts.vue @@ -0,0 +1,363 @@ +<template> + <div class="detail-view"> + <el-drawer + :visible.sync="detailConfig.visible" + size="80%" + :before-close="handleClose" + :wrapperClosable="false" + :append-to-body="true" + > + <template slot="title"> + <div class="header"> + <span class="header-label">鑱旂郴浜哄鍚�</span> + <span class="header-title">{{ detailConfig.infomation.contact_name }}</span> + </div> + </template> + <div class="content"> + <div class="tab-view"> + <el-tabs v-model="activeName" @tab-click="tabsClick"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + <el-tab-pane label="璺熻繘璁板綍" name="second"> + <!-- <template slot="label"> + <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div> + </template> --> + </el-tab-pane> + <el-tab-pane label="閿�鍞槑缁嗗崟" name="detail"></el-tab-pane> + <el-tab-pane label="鏈嶅姟鍚堝悓" name="serviceContract"></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 }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 鍦板潃淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('address')"> + <i v-if="isAddressExpand" 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="isAddressExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in addressInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 澶囨敞淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('remark')"> + <i v-if="isRemarkExpand" 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="isRemarkExpand" class="basic-info-content"> + <ul> + <li> + <div class="left remark"> + <div class="content-title">{{ "澶囨敞锛�" }}</div> + <div class="content-data">{{ "澶囨敞鍐呭" }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 闄勪欢淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('annex')"> + <i v-if="isAnnexExpand" 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="isAnnexExpand" class="basic-info-content"> + <ul> + <li> + <div class="left remark"> + <div class="content-title">{{ "闄勪欢锛�" }}</div> + <div class="content-data">{{ "" }}</div> + </div> + </li> + </ul> + </div> + </div> + </div> + <div v-if="activeName === 'second'" class="second"> + <FollowupRecords :isDetail="true" /> + </div> + <div v-if="activeName === 'detail'" class="second"> + <SalesDetails :isDetail="true" /> + </div> + <div v-if="activeName === 'serviceContract'" class="second"> + <ServiceContract :isDetail="true" /> + </div> + </div> + </el-drawer> + </div> +</template> + +<script> +import FollowupRecords from "@/views/client/followupRecords" +import SalesDetails from "@/views/sales/salesDetails" +import ServiceContract from "@/views/service/serviceContract" +export default { + name: "DetailContacts", + props: { + contactsDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {} + } + } + } + }, + components: { FollowupRecords, ServiceContract, SalesDetails }, + computed: {}, + data() { + return { + detailConfig: this.contactsDetail, + activeName: "first", + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isAddressExpand: true, // 鍦板潃淇℃伅 + addressInfoList: [], + isRemarkExpand: true, // 澶囨敞淇℃伅 + isAnnexExpand: true // 闄勪欢淇℃伅 + } + }, + created() { + this.setData() + }, + mounted() {}, + methods: { + setData() { + this.basicInfoList = [ + { + leftStr: "鑱旂郴浜哄鍚�", + leftValue: "", + rightStr: "鑱旂郴浜虹紪鍙�", + rightValue: "" + }, + { + leftStr: "瀹㈡埛鍚嶇О", + leftValue: "", + rightStr: "鎵嬫満", + rightValue: "" + }, + { + leftStr: "鑱屽姟", + leftValue: "", + rightStr: "閿�鍞礋璐d汉", + rightValue: "" + }, + { + leftStr: "棣栬鑱旂郴浜�", + leftValue: "", + rightStr: "寰俊鍙�", + rightValue: "" + }, + { + leftStr: "鐢熸棩", + leftValue: "", + rightStr: "鑱旂郴浜篍mail", + rightValue: "" + }, + { + leftStr: "绛惧埌", + leftValue: "", + rightStr: "涓嬫鍥炶鏃ユ湡", + rightValue: "" + }, + { + leftStr: "鏈�鏂拌仈绯绘棩鏈�", + leftValue: "", + rightStr: "鏈仈绯诲ぉ鏁�", + rightValue: "" + } + ] + this.addressInfoList = [ + { + leftStr: "鍥藉", + leftValue: "", + rightStr: "鐪佷唤", + rightValue: "" + }, + { + leftStr: "鍩庡競", + leftValue: "", + rightStr: "鍖哄煙", + rightValue: "" + }, + { + leftStr: "閭紪", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + }, + 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 === "remark") { + this.isRemarkExpand = !this.isRemarkExpand + } else if (value === "address") { + this.isAddressExpand = !this.isAddressExpand + } else if (value === "annex") { + this.isAnnexExpand = !this.isAnnexExpand + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +::v-deep { + .el-drawer__header { + padding: 0; + margin-bottom: 0px; + .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; + } + } + } + .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; + } + .el-drawer__body { + .content { + 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 { + .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: 220px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + } + } + } + .second { + background: #fff; + .followup-records { + .table-view { + margin-top: 0 !important; + margin-bottom: 0; + } + } + } + } + } +} +</style> diff --git a/src/views/client/contacts/index.vue b/src/views/client/contacts/index.vue index 6d2325e..ec669d5 100644 --- a/src/views/client/contacts/index.vue +++ b/src/views/client/contacts/index.vue @@ -1,11 +1,27 @@ <template> <div class="contacts-view"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :operates-list="operatesList" :allocation="false" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView + ref="tableListRef" + v-loading="loading" + :table-list="tableList" + @selContactsClick="selContactsClick" + @selClientClick="selClientClick" + > <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="120" fixed="right"> <template slot-scope="scope"> @@ -18,6 +34,10 @@ </TableCommonView> <!-- 鏂板缓/缂栬緫鑱旂郴浜� --> <AddContactsDialog v-if="editConfig.visible" :edit-contacts-config="editConfig" /> + <!-- 鑱旂郴浜鸿鎯� --> + <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" /> + <!-- 瀹㈡埛璇︽儏 --> + <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" /> </div> </template> @@ -27,10 +47,17 @@ import pageMixin from "@/components/makepager/pager/mixin/pageMixin" export default { name: "ContactsView", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { - AddContactsDialog + AddContactsDialog, + DetailContacts: () => import("@/views/client/contacts/DetailContacts"), + DetailClientManage: () => import("@/views/client/client/DetailClientManage") }, computed: {}, data() { @@ -59,6 +86,14 @@ visible: false, title: "鏂板缓", infomation: {} + }, + contactsDeail: { + visible: false, + infomation: {} + }, + clientDeail: { + visible: false, + infomation: {} } } }, @@ -71,8 +106,8 @@ this.tableList = { tableInfomation: [], tableColumn: [ - { label: "鑱旂郴浜哄鍚�", prop: "name", min: 100 }, // 鑱旂郴浜哄鍚� - { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190 }, // 瀹㈡埛鍚嶇О + { label: "鑱旂郴浜哄鍚�", prop: "name", min: 100, isContactClick: true }, // 鑱旂郴浜哄鍚� + { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190, isClientClick: true }, // 瀹㈡埛鍚嶇О { label: "鑱旂郴浜虹紪鍙�", prop: "number", min: 100 }, // 鑱旂郴浜虹紪鍙� { label: "鑱屽姟", prop: "position", min: 120 }, // 鑱屽姟 { label: "鎵嬫満", prop: "phone", min: 100 }, // 鎵嬫満鍙风爜 @@ -156,6 +191,18 @@ }, getSelectArray(val) { console.log(val) + }, + // 鑱旂郴浜鸿鎯� + selContactsClick(row) { + console.log(row) + this.contactsDeail.visible = true + this.contactsDeail.infomation = { ...row, contact_name: row.name } + }, + // 瀹㈡埛鍚嶇О璇︽儏 + selClientClick(row) { + console.log(row) + this.clientDeail.visible = true + this.clientDeail.infomation = { ...row, client_name: row.Client.name } } } } @@ -164,7 +211,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .contacts-view { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/client/followupRecords/AddFollowupRecordsDialog.vue b/src/views/client/followupRecords/AddFollowupRecordsDialog.vue index 007f860..457eb0b 100644 --- a/src/views/client/followupRecords/AddFollowupRecordsDialog.vue +++ b/src/views/client/followupRecords/AddFollowupRecordsDialog.vue @@ -5,6 +5,8 @@ :visible.sync="editConfig.visible" :width="dialogWidth" :before-close="handleClose" + append-to-body + custom-class="iframe-dialog" > <el-form ref="form" @@ -553,54 +555,56 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.add-followup-records { - .basic-info { - .basic-info-title { - background-color: #f4f8fe; - padding-left: 10px; - font-size: 15px; - font-weight: bold; - color: #666; - height: 42px; - line-height: 42px; - } - .basic-info-view { - margin-top: 10px; - padding-right: 40px; - .custom-name, - .common-select { +::v-deep { + .iframe-dialog .el-dialog__body { + .basic-info { + .basic-info-title { + background-color: #f4f8fe; + padding-left: 10px; + font-size: 15px; + font-weight: bold; + color: #666; + height: 42px; + line-height: 42px; + } + .basic-info-view { + margin-top: 10px; + padding-right: 40px; + .custom-name, + .common-select { + display: flex; + .common-select-btn { + margin-left: 5px; + font-size: 18px; + cursor: pointer; + } + } + .common-select { + .common-select-sel { + width: 270px; + } + } + } + .annex-view { display: flex; - .common-select-btn { - margin-left: 5px; - font-size: 18px; - cursor: pointer; - } - } - .common-select { - .common-select-sel { - width: 270px; + color: #6166d3; + .setFormat { + margin-left: 10px; } } } - .annex-view { + .unflod-collapse { display: flex; + height: 30px; + justify-content: center; + align-items: center; color: #6166d3; - .setFormat { - margin-left: 10px; - } } - } - .unflod-collapse { - display: flex; - height: 30px; - justify-content: center; - align-items: center; - color: #6166d3; - } - .dialog-footer { - background-color: #f5f5f5; - height: 55px; - line-height: 55px; + .dialog-footer { + background-color: #f5f5f5; + height: 55px; + line-height: 55px; + } } } </style> diff --git a/src/views/client/followupRecords/index.vue b/src/views/client/followupRecords/index.vue index 63e2a72..24a3a97 100644 --- a/src/views/client/followupRecords/index.vue +++ b/src/views/client/followupRecords/index.vue @@ -1,11 +1,28 @@ <template> <div class="followup-records"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :statistics="true" :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :statistics="true" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView + ref="tableListRef" + v-loading="loading" + :table-list="tableList" + :select-box="!isDetail" + @selContactsClick="selContactsClick" + @selClientClick="selClientClick" + > <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="120" fixed="right"> <template slot-scope="scope"> @@ -17,6 +34,10 @@ </TableCommonView> <!-- 鏂板缓/缂栬緫璺熻繘璁板綍 --> <AddFollowupRecordsDialog v-if="editConfig.visible" :edit-contacts-config="editConfig" /> + <!-- 鑱旂郴浜鸿鎯� --> + <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" /> + <!-- 瀹㈡埛璇︽儏 --> + <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" /> </div> </template> @@ -27,10 +48,17 @@ export default { name: "FollowupRecords", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { - AddFollowupRecordsDialog + AddFollowupRecordsDialog, + DetailContacts: () => import("@/views/client/contacts/DetailContacts"), + DetailClientManage: () => import("@/views/client/client/DetailClientManage") }, computed: { searchCommonHeight() { @@ -42,6 +70,7 @@ tableList: {}, loading: false, activeName: "second", + queryClassValue: "1", queryClassOptions: [ { value: "1", label: "鍏ㄩ儴" }, { value: "2", label: "浠婃棩鑱旂郴" }, @@ -64,7 +93,15 @@ title: "鏂板缓", infomation: {} }, - saleChanceName: "" + saleChanceName: "", + contactsDeail: { + visible: false, + infomation: {} + }, + clientDeail: { + visible: false, + infomation: {} + } } }, created() { @@ -77,8 +114,8 @@ tableInfomation: [], tableColumn: [ { label: "涓婚", prop: "topic", min: 120 }, // 涓婚 - { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190 }, // 瀹㈡埛鍚嶇О - { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100 }, // 鑱旂郴浜哄鍚� + { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190, isClientClick: true }, // 瀹㈡埛鍚嶇О + { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100, isContactClick: true }, // 鑱旂郴浜哄鍚� { label: "瀹㈡埛鐘舵��", prop: "client_status_id", min: 100 }, // 瀹㈡埛鐘舵�� { label: "鑱旂郴鏂瑰紡", prop: "phone", min: 100 }, // 鑱旂郴鏂瑰紡 { label: "鑱旂郴浜烘棩鏈�", prop: "follow_time", isTime: true, min: 130 }, // 鑱旂郴浜烘棩鏈� @@ -93,7 +130,6 @@ this.searchOptions.push({ value: (i + 1).toString(), label: label }) } }, - // 璇锋眰鏁版嵁 // 璇锋眰鏁版嵁 async getData() { this.loading = true @@ -166,6 +202,18 @@ }, getSelectArray(val) { console.log(val) + }, + // 鑱旂郴浜鸿鎯� + selContactsClick(row) { + console.log(row) + this.contactsDeail.visible = true + this.contactsDeail.infomation = { ...row } + }, + // 瀹㈡埛鍚嶇О璇︽儏 + selClientClick(row) { + console.log(row) + this.clientDeail.visible = true + this.clientDeail.infomation = { ...row } } } } @@ -174,7 +222,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .followup-records { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/client/salesLead/DetailSalesLead.vue b/src/views/client/salesLead/DetailSalesLead.vue new file mode 100644 index 0000000..b5b4d88 --- /dev/null +++ b/src/views/client/salesLead/DetailSalesLead.vue @@ -0,0 +1,365 @@ +<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" @tab-click="tabsClick"> + <el-tab-pane label="璇︽儏" name="first"></el-tab-pane> + <el-tab-pane label="璺熻繘璁板綍" name="second"> + <!-- <template slot="label"> + <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div> + </template> --> + </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 }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </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 }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 鍦板潃淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('address')"> + <i v-if="isAddressExpand" 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="isAddressExpand" class="basic-info-content"> + <ul> + <li v-for="(item, i) in addressInfoList" :key="i"> + <div class="left"> + <div class="content-title">{{ item.leftStr + "锛�" }}</div> + <div class="content-data">{{ item.leftValue }}</div> + </div> + <div class="right"> + <div class="content-title">{{ item.rightStr }}</div> + <div class="content-data">{{ item.rightValue }}</div> + </div> + </li> + </ul> + </div> + </div> + <!-- 澶囨敞淇℃伅 --> + <div class="basic-info"> + <div class="basic-info-label" @click="expandClick('remark')"> + <i v-if="isRemarkExpand" 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="isRemarkExpand" class="basic-info-content"> + <ul> + <li> + <div class="left remark"> + <div class="content-title">{{ "澶囨敞锛�" }}</div> + <div class="content-data">{{ "澶囨敞鍐呭" }}</div> + </div> + </li> + </ul> + </div> + </div> + </div> + <div v-if="activeName === 'second'" class="second"> + <FollowupRecords :isDetail="true" /> + </div> + </div> + </el-drawer> + </div> +</template> + +<script> +import FollowupRecords from "@/views/client/followupRecords" +export default { + name: "DetailSalesLead", + props: { + salesLeadDetail: { + type: Object, + default: () => { + return { + visible: false, + infomation: {} + } + } + } + }, + components: { FollowupRecords }, + computed: {}, + data() { + return { + detailConfig: this.salesLeadDetail, + activeName: "first", + isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑 + basicInfoList: [], + isDynamicExpand: true, // 鍔ㄦ�佷俊鎭� + dynamicInfoList: [], + isAddressExpand: true, // 鍦板潃淇℃伅 + addressInfoList: [], + isRemarkExpand: true, // 澶囨敞淇℃伅 + remarkInfoList: [] + } + }, + created() { + this.setData() + }, + mounted() {}, + methods: { + setData() { + this.basicInfoList = [ + { + leftStr: "瀹㈡埛鍚嶇О", + leftValue: this.detailConfig.infomation.name, + rightStr: "閿�鍞嚎绱㈢紪鍙�", + rightValue: this.detailConfig.infomation.number + }, + { + leftStr: "鑱旂郴浜哄鍚�", + leftValue: this.detailConfig.infomation.contact_name, + rightStr: "鑱旂郴浜鸿亴鍔�", + rightValue: this.detailConfig.infomation.contact_position + }, + { + leftStr: "鎵嬫満鍙风爜", + leftValue: this.detailConfig.infomation.contact_phone, + rightStr: "鍟嗘満鐘舵��", + rightValue: "鏂板缓" + }, + { + leftStr: "鍟嗘満鏉ユ簮", + leftValue: this.detailConfig.infomation.sales_sources_id, + rightStr: "璐熻矗浜�", + rightValue: this.detailConfig.infomation.member_id + }, + { + leftStr: "鍒嗛厤鏃ユ湡", + leftValue: "", + rightStr: "鍏捣鐘舵��", + rightValue: "" + }, + { + leftStr: "鍒涘缓鏃堕棿", + leftValue: "", + rightStr: "鍒涘缓浜�", + rightValue: "" + }, + { + leftStr: "鍏抽棴鍘熷洜", + leftValue: "", + rightStr: "绛惧埌", + rightValue: "" + } + ] + this.dynamicInfoList = [ + { + leftStr: "鏈仈绯诲ぉ鏁�", + leftValue: "", + rightStr: "鏈�鏂版帹杩涙椂闂�", + rightValue: "" + }, + { + leftStr: "鏈�鏂拌繘灞�", + leftValue: "", + rightStr: "鏈�鏂拌仈绯绘棩鏈�", + rightValue: "" + } + ] + this.addressInfoList = [ + { + leftStr: "鍥藉", + leftValue: "", + rightStr: "鐪佷唤", + rightValue: "" + }, + { + leftStr: "鍩庡競", + leftValue: "", + rightStr: "鍖哄煙", + rightValue: "" + }, + { + leftStr: "鍦板潃", + leftValue: "", + rightStr: "", + rightValue: "" + } + ] + }, + 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 if (value === "address") { + this.isAddressExpand = !this.isAddressExpand + } + } + } +} +</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 { + 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 { + .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: 220px; + text-align: right; + color: #555; + } + .content-data { + text-align: left; + margin-left: 25px; + color: #333; + } + } + .remark { + width: 100%; + } + } + } + } + } + .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/client/salesLead/index.vue b/src/views/client/salesLead/index.vue index 0602878..565eae5 100644 --- a/src/views/client/salesLead/index.vue +++ b/src/views/client/salesLead/index.vue @@ -1,11 +1,17 @@ <template> <div class="sales-lead"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :operates-list="operatesList" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> - <TableCommonView ref="tableListRef" :table-list="tableList"> + <TableCommonView ref="tableListRef" :table-list="tableList" @selSalesLeadClick="selSalesLeadClick"> <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="160"> <template slot-scope="scope"> @@ -21,6 +27,8 @@ <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> <!-- 瀵煎叆鏂囦欢 --> <ImportFileDialog v-if="importConfig.visible" :import-file-config="importConfig" /> + <!-- 璇︽儏 --> + <DetailSalesLead v-if="salesLeadDeail.visible" :sales-lead-detail="salesLeadDeail" /> </div> </template> @@ -29,13 +37,15 @@ import pageMixin from "@/components/makepager/pager/mixin/pageMixin" import ImportFileDialog from "@/views/other/commonDialog/ImportFileDialog" import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead" +import DetailSalesLead from "@/views/client/salesLead/DetailSalesLead" export default { name: "SalesLead", props: {}, components: { AddSalesLeadDialog, - ImportFileDialog + ImportFileDialog, + DetailSalesLead }, mixins: [pageMixin], computed: {}, @@ -68,6 +78,10 @@ visible: false, title: "鏂板缓", infomation: {} + }, + salesLeadDeail: { + visible: false, + infomation: {} } } }, @@ -80,7 +94,7 @@ this.tableList = { tableInfomation: [], tableColumn: [ - { label: "瀹㈡埛鍚嶇О", prop: "name", min: 190 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛鍚嶇О", prop: "name", min: 190, isSalesLeadClick: true }, // 瀹㈡埛鍚嶇О { label: "閿�鍞嚎绱㈢紪鍙�", prop: "number", min: 130 }, // 閿�鍞嚎绱㈢紪鍙� { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 130 }, // 鑱旂郴浜哄鍚� { label: "鎵嬫満鍙风爜", prop: "contact_phone", min: 130 }, // 鎵嬫満鍙风爜 @@ -158,6 +172,12 @@ }, getSelectArray(val) { console.log(val) + }, + // 璇︽儏 + selSalesLeadClick(row) { + console.log(row) + this.salesLeadDeail.visible = true + this.salesLeadDeail.infomation = { ...row } } } } @@ -166,10 +186,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sales-lead { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/sales/contractManage/index.vue b/src/views/sales/contractManage/index.vue index cf408b5..ff11738 100644 --- a/src/views/sales/contractManage/index.vue +++ b/src/views/sales/contractManage/index.vue @@ -1,19 +1,21 @@ <template> <div class="contract-manage"> - <SearchCommonView - ref="searchCommonView" - :label-search="true" - :query-class-options="queryClassOptions" - :search-options="searchOptions" - /> - <div class="btn-pager"> - <PublicFunctionBtnView - :receive="false" - :submit-approval="true" - ::statistics="true" - :operates-list="operatesList" + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :label-search="true" + :query-class-options="queryClassOptions" + :search-options="searchOptions" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="btn-pager"> + <PublicFunctionBtnView + :receive="false" + :submit-approval="true" + ::statistics="true" + :operates-list="operatesList" + /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -174,10 +176,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .contract-manage { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/sales/generatePlan/index.vue b/src/views/sales/generatePlan/index.vue index 7357f52..abf5576 100644 --- a/src/views/sales/generatePlan/index.vue +++ b/src/views/sales/generatePlan/index.vue @@ -1,9 +1,15 @@ <template> <div class="generate-plan"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :operates-list="operatesList" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -164,10 +170,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .generate-plan { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/sales/masterOrder/index.vue b/src/views/sales/masterOrder/index.vue index 510d1bb..7c748bf 100644 --- a/src/views/sales/masterOrder/index.vue +++ b/src/views/sales/masterOrder/index.vue @@ -1,11 +1,21 @@ <template> <div class="master-order"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail"> <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="90"> <template slot-scope="scope"> @@ -27,7 +37,12 @@ export default { name: "MasterOrder", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { AddMasterOrderDialog @@ -168,7 +183,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .master-order { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/sales/quotation/index.vue b/src/views/sales/quotation/index.vue index f583aa4..3a4d5a4 100644 --- a/src/views/sales/quotation/index.vue +++ b/src/views/sales/quotation/index.vue @@ -1,16 +1,22 @@ <template> <div class="quotation"> - <SearchCommonView - ref="searchCommonView" - :label-search="true" - :query-class-options="queryClassOptions" - :search-options="searchOptions" - /> - <div class="btn-pager"> - <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :label-search="true" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="!isDetail"> <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="90"> <template slot-scope="scope"> @@ -32,7 +38,12 @@ export default { name: "QuotationView", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { AddQuotationDialog @@ -174,7 +185,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .quotation { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/sales/refundForm/index.vue b/src/views/sales/refundForm/index.vue index bff2637..01da30f 100644 --- a/src/views/sales/refundForm/index.vue +++ b/src/views/sales/refundForm/index.vue @@ -1,9 +1,15 @@ <template> <div class="refund-form"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :receive="false" :submit-approval="true" :operates-list="operatesList" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :receive="false" :submit-approval="true" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -166,10 +172,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .refund-form { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/sales/salesDetails/index.vue b/src/views/sales/salesDetails/index.vue index 5cb8aab..52c6d40 100644 --- a/src/views/sales/salesDetails/index.vue +++ b/src/views/sales/salesDetails/index.vue @@ -1,11 +1,21 @@ <template> <div class="sales-details"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail"> <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="90"> <template slot-scope="scope"> @@ -27,7 +37,12 @@ export default { name: "SalesDetails", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { AddSalesDetailsDialog @@ -188,7 +203,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sales-details { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/sales/salesOpportunity/index.vue b/src/views/sales/salesOpportunity/index.vue index e3bb315..7885fd1 100644 --- a/src/views/sales/salesOpportunity/index.vue +++ b/src/views/sales/salesOpportunity/index.vue @@ -1,14 +1,24 @@ <template> <div class="sales-opportunity"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView - :duplicate-check="true" - :statistics="true" - :custom-funnel="true" - :operates-list="operatesList" - /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView + :duplicate-check="true" + :statistics="true" + :custom-funnel="true" + :operates-list="operatesList" + /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -33,7 +43,12 @@ export default { name: "SalesOpportunity", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { AddSalesOpportunityDialog @@ -184,7 +199,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sales-opportunity { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/sales/salesReturn/index.vue b/src/views/sales/salesReturn/index.vue index 09c24fa..87060d6 100644 --- a/src/views/sales/salesReturn/index.vue +++ b/src/views/sales/salesReturn/index.vue @@ -1,9 +1,15 @@ <template> <div class="sales-return"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :receive="false" :import-button="false" receive:operates-list="operatesList" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :receive="false" :import-button="false" receive:operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -167,10 +173,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sales-return { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/sales/subOrder/index.vue b/src/views/sales/subOrder/index.vue index 886cb82..54c3e39 100644 --- a/src/views/sales/subOrder/index.vue +++ b/src/views/sales/subOrder/index.vue @@ -1,11 +1,21 @@ <template> <div class="sub-order"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail"> <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="90"> <template slot-scope="scope"> @@ -27,7 +37,12 @@ export default { name: "SubOrder", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { AddSubOrderDialog @@ -172,7 +187,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sub-order { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/service/orderManage/AddOrderManageDialog.vue b/src/views/service/orderManage/AddOrderManageDialog.vue index 27c15f6..685e1d5 100644 --- a/src/views/service/orderManage/AddOrderManageDialog.vue +++ b/src/views/service/orderManage/AddOrderManageDialog.vue @@ -1,7 +1,7 @@ <template> <div class="order-manage"> <el-dialog - :title="editCommonConfig.title + '宸ュ崟绠$悊'" + :title="editCommonConfig.title + '瀹㈡埛鏈嶅姟鍗�'" :visible.sync="editConfig.visible" :width="dialogWidth" :before-close="handleClose" @@ -40,17 +40,30 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="宸ュ崟缂栧彿" prop="number"> + <el-form-item label="鏈嶅姟鍗曠紪鍙�" prop="number"> <el-input v-model="editConfig.infomation.number"></el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="宸ュ崟鍚嶇О" prop="name"> - <el-input v-model="editConfig.infomation.name"></el-input> + <el-form-item label="鏈嶅姟鍚堝悓" prop="name"> + <div class="custom-name"> + <el-autocomplete + v-model="editConfig.infomation.client_name" + :fetch-suggestions="querySearchAsync" + value-key="name" + @select="handleSelectClient" + ></el-autocomplete> + <div class="common-select-btn" @click="selClientClick"> + <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i> + </div> + <div class="common-select-btn" @click="clearupClient"> + <i class="el-icon-edit-outline" title="娓呴櫎"></i> + </div> + </div> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="宸ュ崟绫诲瀷" prop="orderType"> + <el-form-item label="鏁呴殰绫诲埆" prop="orderType"> <div class="common-select"> <el-select v-model="editConfig.infomation.orderType" @@ -66,16 +79,113 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鑱旂郴浜哄鍚�" prop="contactId"> + <el-form-item label="涓婚" prop="contactId"> + <el-input v-model="editConfig.infomation.contactId"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍚堝悓璁㈠崟" prop="name"> <div class="custom-name"> - <el-input v-model="editConfig.infomation.contactId"></el-input> - <div class="common-select-btn"><i class="el-icon-circle-plus-outline" title="閫夋嫨"></i></div> - <div class="common-select-btn"><i class="el-icon-edit" title="缂栬緫"></i></div> + <el-autocomplete + v-model="editConfig.infomation.client_name" + :fetch-suggestions="querySearchAsync" + value-key="name" + @select="handleSelectClient" + ></el-autocomplete> + <div class="common-select-btn" @click="selClientClick"> + <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i> + </div> + <div class="common-select-btn" @click="clearupClient"> + <i class="el-icon-edit-outline" title="娓呴櫎"></i> + </div> </div> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鎶ヤ慨鏉ユ簮" prop="reportSourceId"> + <el-form-item label="浜у搧绫诲埆" prop="orderType"> + <div class="common-select"> + <el-select + v-model="editConfig.infomation.orderType" + placeholder="璇烽�夋嫨" + class="common-select-sel" + size="mini" + > + <el-option v-for="item in orderTypeOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + <div class="common-select-btn"><i class="el-icon-setting"></i></div> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="浜у搧鍚嶇О" prop="name"> + <div class="custom-name"> + <el-autocomplete + v-model="editConfig.infomation.client_name" + :fetch-suggestions="querySearchAsync" + value-key="name" + @select="handleSelectClient" + ></el-autocomplete> + <div class="common-select-btn" @click="selClientClick"> + <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i> + </div> + <div class="common-select-btn" @click="clearupClient"> + <i class="el-icon-edit-outline" title="娓呴櫎"></i> + </div> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏈嶅姟鏂瑰紡" prop="orderType"> + <div class="common-select"> + <el-select + v-model="editConfig.infomation.orderType" + placeholder="璇烽�夋嫨" + class="common-select-sel" + size="mini" + > + <el-option v-for="item in orderTypeOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + <div class="common-select-btn"><i class="el-icon-setting"></i></div> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏈嶅姟浜哄憳" prop="orderType"> + <div class="common-select"> + <el-select + v-model="editConfig.infomation.orderType" + placeholder="璇烽�夋嫨" + class="common-select-sel" + size="mini" + > + <el-option v-for="item in orderTypeOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鑱旂郴浜哄鍚�" prop="client_name"> + <div class="custom-name"> + <el-autocomplete + v-model="editConfig.infomation.client_name" + :fetch-suggestions="querySearchAsync" + value-key="name" + @select="handleSelectClient" + ></el-autocomplete> + <div class="common-select-btn" @click="selClientClick"> + <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i> + </div> + <div class="common-select-btn" @click="clearupClient"> + <i class="el-icon-edit-outline" title="娓呴櫎"></i> + </div> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="涓ラ噸绋嬪害" prop="reportSourceId"> <div class="common-select"> <el-select v-model="editConfig.infomation.reportSourceId" @@ -90,27 +200,192 @@ </div> </el-form-item> </el-col> - <!-- <el-col :span="12"> - <el-form-item label="閫夋嫨婧愬崟" prop="sourceSheet"> - <el-select v-model="editConfig.infomation.sourceSheet" size="mini"> - <el-option - v-for="item in sourceSheetOptions" - :key="item.value" - :label="item.label" - :value="item.value" - > - </el-option> - </el-select> + <el-col :span="24"> + <el-form-item label="涓婇棬鍦板潃" prop="problemDescription"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.problemDescription" + ></el-input> </el-form-item> - </el-col> --> + </el-col> + <el-col :span="12"> + <el-form-item label="浼樺厛绾у埆" prop="reportSourceId"> + <div class="common-select"> + <el-select + v-model="editConfig.infomation.reportSourceId" + placeholder="璇烽�夋嫨" + class="common-select-sel" + size="mini" + > + <el-option v-for="item in reportSourceOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + <div class="common-select-btn"><i class="el-icon-setting"></i></div> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="棰勭害涓婇棬鏃堕棿" prop="startTime"> + <el-date-picker v-model="editConfig.infomation.startTime" type="datetime" placeholder="閫夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="閿�鍞満浼�" prop="client_name"> + <div class="custom-name"> + <el-autocomplete + v-model="editConfig.infomation.client_name" + :fetch-suggestions="querySearchAsync" + value-key="name" + @select="handleSelectClient" + ></el-autocomplete> + <div class="common-select-btn" @click="selClientClick"> + <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i> + </div> + <div class="common-select-btn" @click="clearupClient"> + <i class="el-icon-edit-outline" title="娓呴櫎"></i> + </div> + </div> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 鍔ㄦ�佷俊鎭� --> + <div class="basic-info-title">鍔ㄦ�佷俊鎭�</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="甯屾湜澶勭悊鏃堕棿" prop="startTime"> + <el-date-picker v-model="editConfig.infomation.startTime" type="datetime" placeholder="閫夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀹為檯澶勭悊鏃堕棿" prop="startTime"> + <el-date-picker v-model="editConfig.infomation.startTime" type="datetime" placeholder="閫夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="浜ら�氳垂" prop="reportSourceId"> + <el-input v-model="editConfig.infomation.problemDescription"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏀惰垂閲戦" prop="reportSourceId"> + <el-input v-model="editConfig.infomation.problemDescription"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鑺辫垂鏃堕棿" prop="reportSourceId"> + <div class="common-select"> + <el-select + v-model="editConfig.infomation.reportSourceId" + placeholder="璇烽�夋嫨" + class="common-select-sel" + size="mini" + > + <el-option v-for="item in reportSourceOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + <div class="common-select-btn"><i class="el-icon-setting"></i></div> + </div> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 鏃堕棿/閲戦 --> + <div class="basic-info-title">鏃堕棿/閲戦</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="甯歌闂" prop="problemDescription"> + <el-input v-model="editConfig.infomation.problemDescription"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="闂鎻忚堪" prop="problemDescription"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.problemDescription" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 瀹氫綅鍦板潃 --> + <div class="basic-info-title">瀹氫綅鍦板潃</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="24"> + <el-form-item label="瀹氫綅" prop="position"> + <el-input v-model="editConfig.infomation.position"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鍦板浘" prop="map"> + <div style="height: 100px"></div> + </el-form-item> + </el-col> </el-row> </div> <!-- 闂鎻忚堪 --> <div class="basic-info-title">闂鎻忚堪</div> <div class="basic-info-view"> <el-row> + <el-col :span="12"> + <el-form-item label="甯歌闂" prop="problemDescription"> + <el-input v-model="editConfig.infomation.problemDescription"></el-input> + </el-form-item> + </el-col> <el-col :span="24"> <el-form-item label="闂鎻忚堪" prop="problemDescription"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.problemDescription" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 瑙e喅鏂规硶 --> + <div class="basic-info-title">瑙e喅鏂规硶</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="24"> + <el-form-item label="瑙e喅鏂规硶" prop="problemDescription"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.problemDescription" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鍐呴儴澶囨敞" prop="problemDescription"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.problemDescription" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 澶囨敞 --> + <div class="basic-info-title">澶囨敞</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="24"> + <el-form-item label="澶囨敞" prop="problemDescription"> <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4 }" @@ -148,46 +423,40 @@ </el-col> </el-row> </div> - <!-- 閫夋嫨瀹℃壒娴佺▼ --> - <!-- <div class="basic-info-title">閫夋嫨瀹℃壒娴佺▼</div> - <div class="basic-info-view"> - <el-row> - <el-col :span="20"> - <el-form-item label="瀹℃壒娴佺▼" prop="approvalWorkflow"> - <el-select - v-model="editConfig.infomation.approvalWorkflow" - placeholder="璇烽�夋嫨" - size="mini" - style="width: 100%" - > - <el-option - v-for="item in approvalWorkflowOptions" - :key="item.value" - :label="item.label" - :value="item.value" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="20"> - <el-form-item label="瀹℃壒姝ラ" prop="approvalSteps"> - <el-input v-model="editConfig.infomation.approvalSteps"></el-input> - </el-form-item> - </el-col> - \ - <el-col :span="20"> - <el-form-item label="瀹℃壒浜�" prop="approvalPerson"> - <el-input v-model="editConfig.infomation.approvalPerson"></el-input> - </el-form-item> - </el-col> - <el-col :span="20"> - <el-form-item label="瀹℃壒鎰忚" prop="approvalOpinion"> - <el-input v-model="editConfig.infomation.approvalOpinion" type="textarea" :rows="2"></el-input> - </el-form-item> - </el-col> - </el-row> - </div> --> + <!-- 瀹㈡埛鏈嶅姟鍗曞巻鍙茶褰� --> + <div v-if="editConfig.title === '缂栬緫'" class="basic-info"> + <div class="basic-info-label" @click="expandClick('record')"> + <i v-if="isRecordExpand" 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="isRecordExpand" class="basic-info-content"> + <div class="list" v-if="recordTableList.length > 0"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <TableCommonView + ref="recordTableListRef" + :select-box="false" + :table-list="recordTableList" + ></TableCommonView> + </div> + <div class="no-data" v-else>娌℃湁鎵惧埌浠讳綍璁板綍</div> + </div> + </div> + <!-- 鏈嶅姟鍚堝悓淇℃伅 --> + <div v-if="editConfig.title === '缂栬緫'" class="basic-info"> + <div class="basic-info-label" @click="expandClick('contract')"> + <i v-if="isConttractExpand" 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="isConttractExpand" class="basic-info-content"> + <div class="list" v-if="recordTableList.length > 0"> + <PagerView class="page" :pager-options="pagerOptions1" v-on="pagerEvents" /> + <TableCommonView ref="tableListRef" :select-box="false" :table-list="tableList"></TableCommonView> + </div> + <div class="no-data" v-else>娌℃湁鎵惧埌浠讳綍璁板綍</div> + </div> + </div> </div> </el-form> <div slot="footer" class="dialog-footer"> @@ -209,8 +478,10 @@ import { getAllData } from "@/api/client/client" import { getAddOrderManage, getUpdateOrderManage } from "@/api/serviceManage/orderManage" import SelectClientDialog from "@/views/other/commonDialog/SelectClientDialog" +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" export default { name: "AddOrderManageDialog", + mixins: [pageMixin], props: { editCommonConfig: { type: Object, @@ -253,14 +524,43 @@ editVisible: false, title: "", infomation: {} + }, + isRecordExpand: true, + recordTableList: {}, + pagerOptions: { + currPage: 1, + pageSize: 5, + totalCount: 0 + }, + isConttractExpand: true, + tableList: {}, + pagerOptions1: { + currPage: 1, + pageSize: 5, + totalCount: 0 } } }, created() { this.$store.dispatch("geClient") this.getCommonData() + this.setTable() }, methods: { + setTable() { + this.recordTableList = { + tableInfomation: [], + tableColumn: [ + { label: "鏈嶅姟鍗曠紪鍙�", prop: "number", min: 100 }, + { label: "涓婚", prop: "name" }, + { label: "鏈嶅姟浜哄憳", prop: "clientId", min: 130 }, + { label: "鏈嶅姟鏂瑰紡", prop: "contactName" }, + { label: "浜у搧绫诲埆", prop: "name" }, + { label: "浜у搧鍚嶇О", prop: "orderType" }, + { label: "淇敼鏃堕棿", prop: "reportSourceId" } + ] + } + }, getCommonData() { getAllData() .then((res) => { @@ -367,7 +667,16 @@ // 娣诲姞闄勪欢 addAnnexClick() {}, // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡 - setFormatClick() {} + setFormatClick() {}, + // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢 + expandClick(value) { + console.log(value) + if (value === "record") { + this.isRecordExpand = !this.isRecordExpand + } else if (value === "contract") { + this.isConttractExpand = !this.isConttractExpand + } + } } } </script> @@ -408,6 +717,29 @@ margin-left: 10px; } } + .basic-info { + .basic-info-label { + padding-left: 10px; + height: 42px; + line-height: 42px; + background: #f4f8fe; + color: #333; + font-size: 14px; + } + .basic-info-content { + .list { + .page { + text-align: right; + margin-bottom: 5px; + } + } + .no-data { + height: 40px; + line-height: 40px; + margin-left: 10px; + } + } + } } .dialog-footer { background-color: #f5f5f5; diff --git a/src/views/service/orderManage/index.vue b/src/views/service/orderManage/index.vue index e76d7f3..c1f2eac 100644 --- a/src/views/service/orderManage/index.vue +++ b/src/views/service/orderManage/index.vue @@ -1,18 +1,17 @@ <template> <div class="sales-lead"> - <div class="tab-view"> - <el-tabs v-model="activeName" @tab-click="tabsClick"> - <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane> - <el-tab-pane label="寰呭垎閰�" name="second"></el-tab-pane> - <el-tab-pane label="宸插偓鍗�" name="third"></el-tab-pane> - <el-tab-pane label="澶勭悊涓�" name="fourth"></el-tab-pane> - <el-tab-pane label="宸茬粨鍗�" name="aaa"></el-tab-pane> - </el-tabs> - </div> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :receive="true" :submit-approval="true" :operates-list="operatesList" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <!-- <div class="detail-top"> + </div> --> + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :receive="true" :submit-approval="true" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -50,13 +49,7 @@ return { activeName: "first", tableList: {}, - queryClassOptions: [ - { value: "1", label: "鍏ㄩ儴" }, - { value: "2", label: "灏忕▼搴忔姤淇�" }, - { value: "3", label: "闈㈣鎶ヤ慨" }, - { value: "4", label: "浠婃棩鍐呭垱寤�" }, - { value: "5", label: "涓夊ぉ鍐呭垱寤�" } - ], + queryClassOptions: [{ value: "1", label: "鏈湀涓婇棬" }], searchOptions: [], operatesList: [ { id: "1", name: "鍏变韩" }, @@ -84,13 +77,14 @@ this.tableList = { tableInfomation: [], tableColumn: [ - { label: "宸ュ崟缂栧彿", prop: "number", min: 100 }, // 宸ュ崟缂栧彿 + { label: "鏈嶅姟鍗曠紪鍙�", prop: "number", min: 100 }, // 鏈嶅姟鍗曠紪鍙� + { label: "涓婚", prop: "name" }, // 涓婚 { label: "瀹㈡埛鍚嶇О", prop: "clientId", min: 130 }, // 瀹㈡埛鍚嶇О - { label: "鑱旂郴浜哄鍚�", prop: "contactName" }, // 鑱旂郴浜哄鍚� + { label: "瀹為檯澶勭悊鏃堕棿", prop: "contactName" }, // 瀹為檯澶勭悊鏃堕棿 { label: "鏈嶅姟浜哄憳", prop: "name" }, // 鏈嶅姟浜哄憳 - { label: "宸ュ崟鐘舵��", prop: "orderType" }, // 宸ュ崟鐘舵�� - { label: "鎶ヤ慨鏉ユ簮", prop: "reportSourceId" }, // 鎶ヤ慨鏉ユ簮 - { label: "宸ュ崟绫诲瀷", prop: "orderType" } // 宸ュ崟绫诲瀷 + { label: "鏈嶅姟鏂瑰紡", prop: "orderType" }, // 鏈嶅姟鏂瑰紡 + { label: "浜у搧绫诲埆", prop: "reportSourceId" }, // 浜у搧绫诲埆 + { label: "鏁呴殰绫诲埆", prop: "orderType" } // 鏁呴殰绫诲埆 ] } this.searchOptions = [] @@ -179,10 +173,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sales-lead { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } diff --git a/src/views/service/serviceContract/index.vue b/src/views/service/serviceContract/index.vue index 0655c35..bd59092 100644 --- a/src/views/service/serviceContract/index.vue +++ b/src/views/service/serviceContract/index.vue @@ -1,11 +1,21 @@ <template> <div class="service-contract"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" /> + <div v-if="isDetail" class="detail-top"> + <DetailListCommonBtn :query-class-options="queryClassOptions" /> <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> - <TableCommonView ref="tableListRef" :table-list="tableList"> + <div v-else class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="!isDetail"> <template slot="tableButton"> <el-table-column label="鎿嶄綔" width="90"> <template slot-scope="scope"> @@ -27,7 +37,12 @@ export default { name: "ServiceContract", - props: {}, + props: { + isDetail: { + type: Boolean, + default: false + } + }, mixins: [pageMixin], components: { AddServiceContractDialog @@ -169,7 +184,16 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .service-contract { - .btn-pager { + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } + } + .detail-top { display: flex; .page { margin-left: auto; diff --git a/src/views/service/serviceFollowup/index.vue b/src/views/service/serviceFollowup/index.vue index 767f241..b406a5d 100644 --- a/src/views/service/serviceFollowup/index.vue +++ b/src/views/service/serviceFollowup/index.vue @@ -1,9 +1,15 @@ <template> <div class="sales-lead"> - <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> - <div class="btn-pager"> - <PublicFunctionBtnView :import-button="false" :operates-list="operatesList" /> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="top"> + <SearchCommonView + ref="searchCommonView" + :query-class-options="queryClassOptions" + :search-options="searchOptions" + /> + <div class="btn-pager"> + <PublicFunctionBtnView :import-button="false" :operates-list="operatesList" /> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> </div> <TableCommonView ref="tableListRef" :table-list="tableList"> <template slot="tableButton"> @@ -159,10 +165,13 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> .sales-lead { - .btn-pager { - display: flex; - .page { - margin-left: auto; + .top { + margin-bottom: 20px; + .btn-pager { + display: flex; + .page { + margin-left: auto; + } } } } -- Gitblit v1.8.0