From 5cc1ac83a9cc0aa10acffb54a1c4d62b73b595d5 Mon Sep 17 00:00:00 2001 From: yangfeng <wanwan926_4@163.com> Date: 星期三, 05 七月 2023 16:30:48 +0800 Subject: [PATCH] 服务管理模块和销售管理模块新增及路由配置 --- src/views/service/serviceFollowup/AddServiceFollowupDialog.vue | 288 +++++ src/views/service/serviceFeeManage/index.vue | 91 + src/views/sales/masterOrder/index.vue | 178 +++ src/components/makepager/TableCommonView.vue | 2 src/views/service/orderManage/AddOrderManageDialog.vue | 290 +++++ src/views/sales/salesReturn/index.vue | 178 +++ src/views/custom/contacts/index.vue | 6 src/views/custom/followupRecords/AddFollowupRecordsDialog.vue | 11 src/components/layout/components/appsidebar/index.vue | 9 src/views/service/serviceContract/index.vue | 72 src/views/service/serviceFollowup/index.vue | 72 src/views/sales/contractManage/index.vue | 178 +++ src/views/service/serviceFeeManage/AddServiceFeeManageDialog.vue | 462 ++++++++ src/views/sales/salesDetails/index.vue | 178 +++ src/views/service/serviceContract/AddServiceContractDialog.vue | 74 - src/views/sales/productPlan/index.vue | 178 +++ src/views/sales/subOrder/index.vue | 178 +++ src/components/makepager/CommonFormTableView.vue | 120 ++ src/views/custom/contacts/AddContactsDialog.vue | 6 src/router/index.js | 24 src/views/sales/refundForm/index.vue | 178 +++ src/views/custom/customManage/AddCustomManageDialog.vue | 14 src/views/custom/customManage/index.vue | 4 src/views/service/orderManage/index.vue | 100 + src/router/sales/index.js | 85 + src/components/layout/components/AppMain.vue | 4 src/views/sales/quotation/index.vue | 178 +++ 27 files changed, 2,876 insertions(+), 282 deletions(-) diff --git a/src/components/layout/components/AppMain.vue b/src/components/layout/components/AppMain.vue index 4facd3d..7223e79 100644 --- a/src/components/layout/components/AppMain.vue +++ b/src/components/layout/components/AppMain.vue @@ -1,9 +1,7 @@ <template> <div class="app-main"> <AppHeader :headerTitle="$route.meta.title" /> - <transition> - <router-view :key="key" /> - </transition> + <router-view :key="key" /> </div> </template> diff --git a/src/components/layout/components/appsidebar/index.vue b/src/components/layout/components/appsidebar/index.vue index 8c38700..db1ae8b 100644 --- a/src/components/layout/components/appsidebar/index.vue +++ b/src/components/layout/components/appsidebar/index.vue @@ -27,6 +27,15 @@ <i class="el-icon-location"></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="/sales/salesDetails">閿�鍞槑缁嗗崟</el-menu-item> + <el-menu-item index="/sales/salesReturn">閿�鍞��璐у崟</el-menu-item> + <el-menu-item index="/sales/refundForm">閿�鍞��娆惧崟</el-menu-item> + <el-menu-item index="/sales/contractManage">鍚堝悓绠$悊</el-menu-item> + <el-menu-item index="/sales/productPlan">鐢熶骇璁″垝</el-menu-item> </el-submenu> <el-submenu index="3"> <template slot="title"> diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue new file mode 100644 index 0000000..125520c --- /dev/null +++ b/src/components/makepager/CommonFormTableView.vue @@ -0,0 +1,120 @@ +<template> + <div class="page-view"> + <el-form ref="form" :model="productTableList" :show-message="false" label-position="right"> + <el-table :data="productTableList.tableData" style="width: 100%"> + <el-table-column prop="id" label="#" width="30"></el-table-column> + <el-table-column prop="productName" label="浜у搧鍚嶇О"> + <template slot-scope="scope"> + <el-form-item + label=" " + :prop="'tableData.' + scope.$index + '.productName'" + :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]" + > + <el-input v-model.trim="scope.row.productName" maxlength="50" size="mini" style="width: 70px"></el-input> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="productNumber" label="浜у搧缂栧彿"></el-table-column> + <el-table-column prop="startDate" label="鏈嶅姟寮�濮嬫棩" width="140"> + <template slot-scope="scope"> + <el-form-item + label=" " + :prop="'tableData.' + scope.$index + '.startDate'" + :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]" + > + <el-date-picker + v-model="scope.row.startDate" + size="mini" + type="date" + placeholder="閫夋嫨鏃ユ湡" + style="width: 90px" + > + </el-date-picker> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="endDate" label="鏈嶅姟鍒版湡鏃�" width="140"> + <template slot-scope="scope"> + <el-form-item + label=" " + :prop="'tableData.' + scope.$index + '.endDate'" + :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]" + > + <el-date-picker + v-model="scope.row.endDate" + size="mini" + type="date" + placeholder="閫夋嫨鏃ユ湡" + style="width: 90px" + > + </el-date-picker> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="number" label="鏁伴噺"></el-table-column> + <el-table-column prop="" label="鍚◣鍗曚环"> </el-table-column> + <el-table-column prop="" label="涓嶅惈绋庡崟浠�"> </el-table-column> + <el-table-column prop="" label="鎶樻墸鐜�(%)"></el-table-column> + <el-table-column prop="" label="鎶樻墸棰�"> </el-table-column> + <el-table-column prop="" label="绋�(閿�鍞�)"> </el-table-column> + <el-table-column prop="" label="瀹為檯鍚◣鍗曚环"></el-table-column> + <el-table-column prop="" label="浠风◣鍚堣"> </el-table-column> + <el-table-column prop="" label="鎻忚堪"> </el-table-column> + </el-table> + </el-form> + <div style="margin: 10px"> + <el-button size="small" type="primary">鏂板</el-button> + <el-button size="small" type="primary">瀵煎叆鏄庣粏</el-button> + <el-button size="small" type="primary">娓呯┖</el-button> + <el-button size="small" type="primary">閲嶇畻</el-button> + </div> + </div> +</template> + +<script> +export default { + name: "CommmonFormTableView", + props: { + productTableList: { + type: Object, + default: () => { + return { + tableData: [], // 鎺ュ彛杩斿洖鏁版嵁 + tableColumn: [ + // table琛ㄥ崟 + { label: "", prop: "", min: 200, tooltip: true } + ] + } + } + } + }, + data() { + return {} + }, + computed: { + maxHeight() { + if (this.productTableList.height) { + return `calc(100vh - ${this.productTableList.height})` + } + return undefined + } + }, + methods: { + handleReserve(row) { + return row._id ? row._id : row.id + }, + handleSelectionChange(val) { + this.$emit("getSelectArray", val) + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.page-view { + .el-form-item { + margin-bottom: 0; + } +} +</style> diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue index 904f826..d85e3b9 100644 --- a/src/components/makepager/TableCommonView.vue +++ b/src/components/makepager/TableCommonView.vue @@ -28,7 +28,7 @@ <script> export default { - name: "PagerView", + name: "TableCommonView", props: { tableList: { type: Object, diff --git a/src/router/index.js b/src/router/index.js index 8050c91..f634154 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -3,13 +3,13 @@ // import type from "@/router/deployCode" import customRouter from "./custom/index.js" -// import salesRouter from "./sales/index.js" +import salesRouter from "./sales/index.js" import serviceRouter from "./service/index.js" Vue.use(Router) const login = (resolve) => require(["@/views/login/index"], resolve) const custom = (resolve) => require(["@/views/custom/index"], resolve) -// const sales = (resolve) => require(["@/views/sales/index"], resolve) +const sales = (resolve) => require(["@/views/sales/index"], resolve) const service = (resolve) => require(["@/views/service/index"], resolve) export const routes = [ @@ -23,16 +23,16 @@ isAllways: true } }, - // { - // path: "sales", // 閿�鍞鐞� - // name: "sales", - // component: sales, - // children: salesRouter, - // meta: { - // title: "閿�鍞鐞�", - // isAllways: true - // } - // }, + { + path: "sales", // 閿�鍞鐞� + name: "sales", + component: sales, + children: salesRouter, + meta: { + title: "閿�鍞鐞�", + isAllways: true + } + }, { path: "service", // 鏈嶅姟绠$悊 name: "service", diff --git a/src/router/sales/index.js b/src/router/sales/index.js index 19b9909..f21c624 100644 --- a/src/router/sales/index.js +++ b/src/router/sales/index.js @@ -1,41 +1,86 @@ // const type from '@/router/deployCode' -const salesLead = (resolve) => require(["@/views/custom/salesLead/index"], resolve) // 閿�鍞嚎绱� -const customManage = (resolve) => require(["@/views/custom/customManage/index"], resolve) // 閿�鍞嚎绱� -const contacts = (resolve) => require(["@/views/custom/contacts/index"], resolve) // 鑱旂郴浜� -const followupRecords = (resolve) => require(["@/views/custom/followupRecords/index"], resolve) // 璺熻繘璁板綍 +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 salesDetails = (resolve) => require(["@/views/sales/salesDetails/index"], resolve) // 閿�鍞槑缁嗗崟 +const salesReturn = (resolve) => require(["@/views/sales/salesReturn/index"], resolve) // 閿�鍞��璐у崟 +const refundForm = (resolve) => require(["@/views/sales/refundForm/index"], resolve) // 閿�鍞��娆惧崟 +const contractManage = (resolve) => require(["@/views/sales/contractManage/index"], resolve) // 鍚堝悓绠$悊 +const productPlan = (resolve) => require(["@/views/sales/productPlan/index"], resolve) // 鐢熶骇璁″垝 const appconfig = [ { - path: "/custom/salesLead", - name: "salesLead", - component: salesLead, + path: "/sales/salesOpportunity", + name: "salesOpportunity", + component: salesOpportunity, meta: { - title: "閿�鍞嚎绱�" + title: "閿�鍞満浼�" } }, { - path: "/custom/customManage", - name: "customManage", - component: customManage, + path: "/sales/quotation", + name: "quotation", + component: quotation, meta: { - title: "瀹㈡埛绠$悊" + title: "鎶ヤ环鍗�" } }, { - path: "/custom/contacts", - name: "contacts", - component: contacts, + path: "/sales/masterOrder", + name: "masterOrder", + component: masterOrder, meta: { - title: "鑱旂郴浜�" + title: "閿�鍞�诲崟" } }, { - path: "/custom/followupRecords", - name: "followupRecords", - component: followupRecords, + path: "/sales/subOrder", + name: "subOrder", + component: subOrder, meta: { - title: "璺熻繘璁板綍" + title: "閿�鍞瓙鍗�" + } + }, + { + path: "/sales/salesDetails", + name: "salesDetails", + component: salesDetails, + meta: { + title: "閿�鍞槑缁嗗崟" + } + }, + { + path: "/sales/salesReturn", + name: "salesReturn", + component: salesReturn, + meta: { + title: "閿�鍞��璐у崟" + } + }, + { + path: "/sales/refundForm", + name: "refundForm", + component: refundForm, + meta: { + title: "閿�鍞��娆惧崟" + } + }, + { + path: "/sales/contractManage", + name: "contractManage", + component: contractManage, + meta: { + title: "鍚堝悓绠$悊" + } + }, + { + path: "/sales/productPlan", + name: "productPlan", + component: productPlan, + meta: { + title: "鐢熶骇璁″垝" } } ] diff --git a/src/views/custom/contacts/AddContactsDialog.vue b/src/views/custom/contacts/AddContactsDialog.vue index 25a2f78..f1efe13 100644 --- a/src/views/custom/contacts/AddContactsDialog.vue +++ b/src/views/custom/contacts/AddContactsDialog.vue @@ -208,11 +208,7 @@ } }, components: { CommonSelectView }, - computed: { - searchCommonHeight() { - return this.$refs.searchCommonView.offsetHeight - } - }, + computed: {}, data() { return { dialogWidth: "80%", diff --git a/src/views/custom/contacts/index.vue b/src/views/custom/contacts/index.vue index 90ca065..04cea97 100644 --- a/src/views/custom/contacts/index.vue +++ b/src/views/custom/contacts/index.vue @@ -36,11 +36,7 @@ TableCommonView, AddContactsDialog }, - computed: { - searchCommonHeight() { - return this.$refs.searchCommonView.offsetHeight - } - }, + computed: {}, data() { return { tableList: {}, diff --git a/src/views/custom/customManage/AddCustomManageDialog.vue b/src/views/custom/customManage/AddCustomManageDialog.vue index 46bf7c4..034e261 100644 --- a/src/views/custom/customManage/AddCustomManageDialog.vue +++ b/src/views/custom/customManage/AddCustomManageDialog.vue @@ -1,7 +1,7 @@ <template> <div class="add-custom-manage"> <el-dialog - :title="editContactsConfig.title + '瀹㈡埛绠$悊'" + :title="editCuntomManageConfig.title + '瀹㈡埛绠$悊'" :visible.sync="editConfig.visible" :width="dialogWidth" :before-close="handleClose" @@ -25,12 +25,8 @@ <el-form-item label="瀹㈡埛鍚嶇О" prop="customName"> <div class="custom-name"> <el-input v-model="editConfig.infomation.customName"></el-input> - <div class="common-select-btn"> - <i class="el-icon-brush" title="宸ュ晢鏌ヨ"></i> - </div> - <div class="common-select-btn"> - <i class="el-icon-search" title="鏌ラ噸"></i> - </div> + <div class="common-select-btn"><i class="el-icon-house" title="宸ュ晢鏌ヨ"></i></div> + <div class="common-select-btn"><i class="el-icon-search" title="鏌ラ噸"></i></div> </div> </el-form-item> </el-col> @@ -345,7 +341,7 @@ export default { name: "AddCustomManageDialog", props: { - editContactsConfig: { + editCuntomManageConfig: { type: Object, default: () => { return { @@ -400,7 +396,7 @@ data() { return { dialogWidth: "80%", - editConfig: this.editContactsConfig, + editConfig: this.editCuntomManageConfig, rules: { customName: [{ required: true, message: "璇疯緭鍏ュ鎴峰悕绉�", trigger: "blur" }], customStatus: [{ required: true, message: "璇烽�夋嫨瀹㈡埛鐘舵��", trigger: "change" }], diff --git a/src/views/custom/customManage/index.vue b/src/views/custom/customManage/index.vue index f61e50b..629d3b7 100644 --- a/src/views/custom/customManage/index.vue +++ b/src/views/custom/customManage/index.vue @@ -41,7 +41,7 @@ </template> </TableCommonView> <!-- 鏂板缓/缂栬緫瀹㈡埛绠$悊 --> - <AddCustomManageDialog v-if="editConfig.visible" :edit-contacts-config="editConfig" /> + <AddCustomManageDialog v-if="editConfig.visible" :edit-cuntom-manage-config="editConfig" /> </div> </template> @@ -69,7 +69,7 @@ data() { return { tableList: {}, - activeName: "second", + activeName: "first", gonghaiValue: "", gonghaiOptions: [], queryClassOptions: [ diff --git a/src/views/custom/followupRecords/AddFollowupRecordsDialog.vue b/src/views/custom/followupRecords/AddFollowupRecordsDialog.vue index 3cf8d0a..c3a0965 100644 --- a/src/views/custom/followupRecords/AddFollowupRecordsDialog.vue +++ b/src/views/custom/followupRecords/AddFollowupRecordsDialog.vue @@ -212,16 +212,7 @@ owner: [{ required: true, message: "璇烽�夋嫨璐熻矗浜�", trigger: "change" }], followupRecords: [{ required: true, message: "璇疯緭鍏ヨ窡杩涜褰�", trigger: "blur" }] }, - businessSourceOptions: [ - { value: "1", label: "鍚庡彴娉ㄥ唽" }, - { value: "2", label: "浠g悊鍟嗗鎴�" }, - { value: "3", label: "鐢佃瘽闄岀敓鎷滆" }, - { value: "4", label: "鐩存帴璁块棶" }, - { value: "5", label: "椤圭洰鍚堜綔" }, - { value: "6", label: "涓汉鑷壘" }, - { value: "7", label: "浜屾閿�鍞�" }, - { value: "8", label: "鍏徃鐢佃瘽" } - ], + customStatusOptions: [], // 瀹㈡埛鐘舵�� ownerOptions: [ { value: "1", label: "BOSS" }, { value: "2", label: "Mia" }, diff --git a/src/views/sales/contractManage/index.vue b/src/views/sales/contractManage/index.vue new file mode 100644 index 0000000..147fea7 --- /dev/null +++ b/src/views/sales/contractManage/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="contract-manage"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "ContractManage ", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.contract-manage { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/masterOrder/index.vue b/src/views/sales/masterOrder/index.vue new file mode 100644 index 0000000..55e93d7 --- /dev/null +++ b/src/views/sales/masterOrder/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="master-order"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "MasterOrder", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.master-order { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/productPlan/index.vue b/src/views/sales/productPlan/index.vue new file mode 100644 index 0000000..b764104 --- /dev/null +++ b/src/views/sales/productPlan/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="product-plan"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫--> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "ProductPlan ", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.product-plan { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/quotation/index.vue b/src/views/sales/quotation/index.vue new file mode 100644 index 0000000..d3a1cad --- /dev/null +++ b/src/views/sales/quotation/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="quotation"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "QuotationView", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.quotation { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/refundForm/index.vue b/src/views/sales/refundForm/index.vue new file mode 100644 index 0000000..46a0efe --- /dev/null +++ b/src/views/sales/refundForm/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="refund-form"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "RefundForm", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.refund-form { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/salesDetails/index.vue b/src/views/sales/salesDetails/index.vue new file mode 100644 index 0000000..e82b948 --- /dev/null +++ b/src/views/sales/salesDetails/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="sales-details"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "SalesDetails", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.sales-details { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/salesReturn/index.vue b/src/views/sales/salesReturn/index.vue new file mode 100644 index 0000000..e78644d --- /dev/null +++ b/src/views/sales/salesReturn/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="sales-return"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "SalesReturn", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.sales-return { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/sales/subOrder/index.vue b/src/views/sales/subOrder/index.vue new file mode 100644 index 0000000..eae75a9 --- /dev/null +++ b/src/views/sales/subOrder/index.vue @@ -0,0 +1,178 @@ +<template> + <div class="sub-order"> + <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" + /> + <PagerView class="page" /> + </div> + <TableCommonView ref="tableListRef" :table-list="tableList"> + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="100"> + <template slot-scope="scope"> + <el-button @click="handleClick(scope.row)" type="text" size="small">缂栬緫</el-button> + <el-button type="text" size="small">璺熻繘</el-button> + </template> + </el-table-column> + </template> + </TableCommonView> + <!-- 鏂板缓/缂栬緫 --> + <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + </div> +</template> + +<script> +import SearchCommonView from "@/components/makepager/SearchCommonView" +import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" +import PagerView from "@/components/makepager/PagerView" +import TableCommonView from "@/components/makepager/TableCommonView" +import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" + +export default { + name: "SubOrder", + props: {}, + components: { + SearchCommonView, + PublicFunctionBtnView, + PagerView, + TableCommonView, + AddSalesLeadDialog + }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + tableList: {}, + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "骞垮憡瀹d紶" }, + { value: "3", label: "璺熻繘涓�" }, + { value: "4", label: "澶辫触鍏抽棴" } + ], + searchOptions: [], + operatesList: [ + { id: "1", name: "鍏变韩" }, + { id: "2", name: "鎵归噺缂栬緫" }, + { id: "3", name: "瀵煎嚭" }, + { id: "4", name: "涓嬭浇鍏ㄩ儴闄勪欢" }, + { id: "5", name: "鏇存敼鍒涘缓浜�" }, + { id: "6", name: "鏍戠粨鏋勮缃�" }, + { id: "7", name: "瀹℃壒璁剧疆" }, + { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + ], + editSalesLeadConfig: { + visible: false, + title: "鏂板缓", + infomation: {} + } + } + }, + created() { + this.setTable() + }, + methods: { + setTable() { + this.tableList = { + tableInfomation: [ + { + customName: "123123", + customType: "鏅�氬鎴�", + salesHead: "绯荤粺绠$悊鍛�", + modifyTime: "2023-0703 11:22:12", + customerSize: "499浠ヤ笂", + importantLevel: "A绫诲鎴�", + customNumber: "AC651", + customStatus: "娼滃湪瀹㈡埛", + productName: "鑷姩鎵撳嵃鏈�", + startDate: "2023-06-27", + endDate: "2024-07-15" + } + ], + tableColumn: [ + { label: "瀹㈡埛鍚嶇О", prop: "customName", min: 120 }, // 瀹㈡埛鍚嶇О + { label: "瀹㈡埛绫诲瀷", prop: "customType", min: 90 }, // 瀹㈡埛绫诲瀷 + { label: "閿�鍞礋璐d汉", prop: "salesHead" }, // 閿�鍞礋璐d汉 + { label: "淇敼鏃堕棿", prop: "modifyTime", min: 100 }, // 淇敼鏃堕棿 + { label: "瀹㈡埛瑙勬ā", prop: "customerSize" }, // 瀹㈡埛瑙勬ā + { label: "閲嶈绾у埆", prop: "importantLevel" }, // 閲嶈绾у埆 + { label: "瀹㈡埛缂栧彿", prop: "customNumber" }, // 瀹㈡埛缂栧彿 + { label: "瀹㈡埛鐘舵��", prop: "customStatus" }, // 瀹㈡埛鐘舵�� + { label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О + { label: "鏈嶅姟寮�濮嬫棩鏈�", prop: "startDate" }, // 鏈嶅姟寮�濮嬫棩鏈� + { label: "鏈嶅姟鍒版湡鏃�", prop: "endDate" } // 鏈嶅姟鍒版湡鏃� + ] + } + this.searchOptions = [] + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + this.searchOptions.push({ value: (i + 1).toString(), label: label }) + } + }, + // 鏂板缓 + addBtnClick() { + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "鏂板缓" + this.editSalesLeadConfig.infomation = { + customName: "", + saleLeadNumber: "LEA50", + contactName: "", + contactDuties: "", + phoneNumber: "", + businessStatus: "鏂板缓", + businessSource: "1", + owner: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + }, + // 缂栬緫 + handleClick(row) { + console.log(row) + this.editSalesLeadConfig.visible = true + this.editSalesLeadConfig.title = "缂栬緫" + this.editSalesLeadConfig.infomation = { + customName: row.customName, + saleLeadNumber: row.saleLeadNumber, + contactName: row.contactName, + contactDuties: row.contactDuties, + phoneNumber: row.phoneNumber, + businessStatus: "鏂板缓", + businessSource: row.businessSource, + owner: row.owner, + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "" + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.sub-order { + .btn-pager { + display: flex; + .page { + margin-left: auto; + } + } +} +</style> diff --git a/src/views/service/orderManage/AddOrderManageDialog.vue b/src/views/service/orderManage/AddOrderManageDialog.vue new file mode 100644 index 0000000..048a9a7 --- /dev/null +++ b/src/views/service/orderManage/AddOrderManageDialog.vue @@ -0,0 +1,290 @@ +<template> + <div class="order-manage"> + <el-dialog + :title="editCommonConfig.title + '宸ュ崟绠$悊'" + :visible.sync="editConfig.visible" + :width="dialogWidth" + :before-close="handleClose" + > + <el-form + ref="form" + :model="editConfig.infomation" + :rules="rules" + label-position="right" + label-width="308px" + size="mini" + style="height: 60vh; overflow-x: hidden" + > + <!-- 淇℃伅 --> + <div class="basic-info"> + <!-- 鍩烘湰淇℃伅 --> + <div class="basic-info-title">鍩烘湰淇℃伅</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="瀹㈡埛鍚嶇О" prop="customName"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.customName"></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> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="宸ュ崟缂栧彿" prop="orderNumber"> + <el-input v-model="editConfig.infomation.orderNumber"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="宸ュ崟鍚嶇О" prop="orderName"> + <el-input v-model="editConfig.infomation.orderName"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="宸ュ崟绫诲瀷" prop="orderType"> + <CommonSelectView + :common-value="editConfig.infomation.orderType" + :common-options="orderTypeOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鑱旂郴浜哄鍚�" prop="contactName"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.contactName"></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> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎶ヤ慨鏉ユ簮" prop="repairSource"> + <CommonSelectView + :common-value="editConfig.infomation.repairSource" + :common-options="repairSourceOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="閫夋嫨婧愬崟" prop="selSourceOrder"> + <el-select v-model="editConfig.infomation.selSourceOrder" size="mini"> + <el-option + v-for="item in selSourceOrderOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </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="problemDesc"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.problemDesc" + ></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="12"> + <el-form-item label="闄勪欢" prop=""> + <div class="annex-view"> + <div @click="addAnnexClick">娣诲姞</div> + <div class="setFormat" @click="setFormatClick">璁剧疆鍏佽涓婁紶鐨勬枃浠舵牸寮�</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="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> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆苟鎻愪氦瀹℃壒</el-button> + <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆瓨</el-button> + <el-button size="small" @click="editConfig.visible = false">鍙栨秷</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import CommonSelectView from "@/components/makepager/CommonSelectView" +export default { + name: "AddOrderManageDialog", + props: { + editCommonConfig: { + type: Object, + default: () => { + return { + visible: false, + title: "鏂板缓", + infomation: { + customName: "", + orderNumber: "AC6521", + orderName: "", + orderType: "", + contactName: "", + repairSource: "", + selSourceOrder: "", + problemDesc: "", + approvalWorkflow: "", + approvalSteps: "", + approvalPerson: "", + approvalOpinion: "" + } + } + } + } + }, + components: { CommonSelectView }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + dialogWidth: "80%", + editConfig: this.editCommonConfig, + rules: { + customName: [{ required: true, message: "璇疯緭鍏ュ鎴峰悕绉�", trigger: "blur" }], + orderNumber: [{ required: true, message: "璇疯緭鍏ュ伐鍗曠紪鍙�", trigger: "blur" }], + orderType: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }], + problemDesc: [{ required: true, message: "璇疯緭鍏ラ棶棰樻弿杩�", trigger: "blur" }] + }, + orderTypeOptions: [], // 宸ュ崟绫诲瀷 + repairSourceOptions: [], // 鎶ヤ慨鏉ユ簮 + selSourceOrderOptions: [ + { value: "1", label: "閿�鍞槑缁嗗崟" }, + { value: "2", label: "鏈嶅姟鍚堝悓" } + ], + approvalWorkflowOptions: [] // 瀹℃壒娴佺▼ + } + }, + created() {}, + methods: { + handleClose() { + this.editConfig.visible = false + }, + // 娣诲姞闄勪欢 + addAnnexClick() {}, + // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡 + setFormatClick() {} + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.order-manage { + .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 { + display: flex; + .common-select-btn { + margin-left: 5px; + font-size: 18px; + } + } + } + .annex-view { + display: flex; + color: #6166d3; + .setFormat { + margin-left: 10px; + } + } + } + .dialog-footer { + background-color: #f5f5f5; + height: 55px; + line-height: 55px; + } +} +::v-deep { + .el-dialog__header { + padding: 12.5px 10px; + border-bottom: 1px solid #e5e5e5; + .el-dialog__title { + font-size: 15px; + color: #323232; + font-weight: bold; + } + } + .el-dialog__body { + padding: 0px; + } + .el-dialog__footer { + padding: 0px; + text-align: center; + box-sizing: border-box; + border-top: 1px solid #dadee5; + } +} +</style> diff --git a/src/views/service/orderManage/index.vue b/src/views/service/orderManage/index.vue index 5054603..8624f48 100644 --- a/src/views/service/orderManage/index.vue +++ b/src/views/service/orderManage/index.vue @@ -1,5 +1,14 @@ <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" /> @@ -14,8 +23,8 @@ </el-table-column> </template> </TableCommonView> - <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> - <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + <!-- 鏂板缓/缂栬緫 --> + <AddOrderManageDialog v-if="editConfig.visible" :edit-common-config="editConfig" /> </div> </template> @@ -24,7 +33,7 @@ import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" import PagerView from "@/components/makepager/PagerView" import TableCommonView from "@/components/makepager/TableCommonView" -import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" +import AddOrderManageDialog from "@/views/service/orderManage/AddOrderManageDialog" export default { name: "SalesLead", @@ -34,7 +43,7 @@ PublicFunctionBtnView, PagerView, TableCommonView, - AddSalesLeadDialog + AddOrderManageDialog }, computed: { searchCommonHeight() { @@ -43,8 +52,15 @@ }, data() { return { + activeName: "first", tableList: {}, - queryClassOptions: [{ value: "1", label: "鍏ㄩ儴" }], + queryClassOptions: [ + { value: "1", label: "鍏ㄩ儴" }, + { value: "2", label: "灏忕▼搴忔姤淇�" }, + { value: "3", label: "闈㈣鎶ヤ慨" }, + { value: "4", label: "浠婃棩鍐呭垱寤�" }, + { value: "5", label: "涓夊ぉ鍐呭垱寤�" } + ], searchOptions: [], operatesList: [ { id: "1", name: "鍏变韩" }, @@ -56,7 +72,7 @@ { id: "7", name: "瀹℃壒璁剧疆" }, { id: "8", name: "鎭㈠棰勮鍒楀" } ], - editSalesLeadConfig: { + editConfig: { visible: false, title: "鏂板缓", infomation: {} @@ -96,49 +112,46 @@ this.searchOptions.push({ value: (i + 1).toString(), label: label }) } }, + // tab鍒囨崲 + tabsClick(tab, event) { + console.log(tab, event) + }, // 鏂板缓 addBtnClick() { - this.editSalesLeadConfig.visible = true - this.editSalesLeadConfig.title = "鏂板缓" - this.editSalesLeadConfig.infomation = { + this.editConfig.visible = true + this.editConfig.title = "鏂板缓" + this.editConfig.infomation = { customName: "", - saleLeadNumber: "LEA50", + orderNumber: "CS21", + orderName: "", + orderType: "", contactName: "", - contactDuties: "", - phoneNumber: "", - businessStatus: "鏂板缓", - businessSource: "1", - owner: "", - position: "", - map: "", - country: "1", - province: "1", - city: "1", - region: "1", - address: "" + repairSource: "", + selSourceOrder: "", + problemDesc: "", + approvalWorkflow: "", + approvalSteps: "", + approvalPerson: "", + approvalOpinion: "" } }, // 缂栬緫 handleClick(row) { console.log(row) - this.editSalesLeadConfig.visible = true - this.editSalesLeadConfig.title = "缂栬緫" - this.editSalesLeadConfig.infomation = { - customName: row.customName, - saleLeadNumber: row.saleLeadNumber, + this.editConfig.visible = true + this.editConfig.title = "缂栬緫" + this.editConfig.infomation = { + orderNumber: row.orderNumber, + orderName: row.orderName, + orderType: row.orderType, contactName: row.contactName, - contactDuties: row.contactDuties, - phoneNumber: row.phoneNumber, - businessStatus: "鏂板缓", - businessSource: row.businessSource, - owner: row.owner, - position: "", - map: "", - country: "1", - province: "1", - city: "1", - region: "1", - address: "" + repairSource: row.repairSource, + selSourceOrder: row.selSourceOrder, + problemDesc: row.problemDesc, + approvalWorkflow: "", + approvalSteps: "", + approvalPerson: "", + approvalOpinion: "" } } } @@ -155,4 +168,13 @@ } } } +::v-deep { + .el-tabs--top .el-tabs__item.is-top:nth-child(2) { + padding-left: 25px; + } + .el-tabs__item { + padding: 0 25px; + height: 45px; + } +} </style> diff --git a/src/views/service/serviceContract/AddServiceContractDialog.vue b/src/views/service/serviceContract/AddServiceContractDialog.vue index bd8c2ef..26b0b60 100644 --- a/src/views/service/serviceContract/AddServiceContractDialog.vue +++ b/src/views/service/serviceContract/AddServiceContractDialog.vue @@ -1,7 +1,7 @@ <template> <div class="service-contract"> <el-dialog - :title="editCommonConfig.title + '瀹㈡埛绠$悊'" + :title="editCommonConfig.title + '鏈嶅姟鍚堝悓'" :visible.sync="editConfig.visible" :width="dialogWidth" :before-close="handleClose" @@ -183,50 +183,9 @@ </el-select> </div> </div> - <div class="basic-info-view"> - <el-form ref="form" :model="productTableList" :show-message="false" label-position="right"> - <el-table :data="productTableList.tableData" style="width: 100%"> - <el-table-column prop="id" label="#" width="30"></el-table-column> - <el-table-column prop="productName" label="浜у搧鍚嶇О"> - <template slot-scope="scope"> - <el-form-item - label=" " - :prop="'productTableList.tableData.' + scope.$index + '.productName'" - :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]" - > - <el-input - v-model.trim="scope.row.productName" - maxlength="50" - size="mini" - style="width: 60px" - ></el-input> - </el-form-item> - </template> - </el-table-column> - <el-table-column prop="productNumber" label="浜у搧缂栧彿"></el-table-column> - <el-table-column prop="startDate" label="鏈嶅姟寮�濮嬫棩"> - <el-form-item - label=" " - prop="'productTableList.tableData.' + scope.$index + '.startDate'" - :rules="[{ required: true, message: '杈撳叆涓嶈兘涓虹┖' }]" - > - <el-date-picker v-model="scope.row.startDate" type="date" placeholder="閫夋嫨鏃ユ湡"> </el-date-picker> - </el-form-item> - </el-table-column> - <el-table-column prop="address" label="鏈嶅姟鍒版湡鏃�"> </el-table-column> - <el-table-column prop="productNumber" label="鏁伴噺"></el-table-column> - <el-table-column prop="name" label="鍚◣鍗曚环"> </el-table-column> - <el-table-column prop="address" label="涓嶅惈绋庡崟浠�"> </el-table-column> - <el-table-column prop="productNumber" label="鎶樻墸鐜�(%)"></el-table-column> - <el-table-column prop="name" label="鎶樻墸棰�"> </el-table-column> - <el-table-column prop="address" label="绋�(閿�鍞�)"> </el-table-column> - <el-table-column prop="productNumber" label="瀹為檯鍚◣鍗曚环"></el-table-column> - <el-table-column prop="name" label="浠风◣鍚堣"> </el-table-column> - <el-table-column prop="address" label="鎻忚堪"> </el-table-column> - </el-table> - </el-form> + <div class="product-view"> + <CommonFormTableView :product-table-list="productTableList" /> </div> - <!-- 閫夋嫨瀹℃壒娴佺▼ --> <div class="basic-info-title">閫夋嫨瀹℃壒娴佺▼</div> <div class="basic-info-view"> @@ -254,6 +213,7 @@ <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> @@ -280,6 +240,7 @@ <script> import CommonSelectView from "@/components/makepager/CommonSelectView" +import CommonFormTableView from "@/components/makepager/CommonFormTableView" export default { name: "AddServiceContractDialog", props: { @@ -314,7 +275,7 @@ } } }, - components: { CommonSelectView }, + components: { CommonSelectView, CommonFormTableView }, computed: { searchCommonHeight() { return this.$refs.searchCommonView.offsetHeight @@ -330,16 +291,6 @@ owner: [{ required: true, message: "璇烽�夋嫨璐熻矗浜�", trigger: "change" }], approvalOpinion: [{ required: true, message: "璇疯緭鍏ュ鎵规剰瑙�", trigger: "blur" }] }, - businessSourceOptions: [ - { value: "1", label: "鍚庡彴娉ㄥ唽" }, - { value: "2", label: "浠g悊鍟嗗鎴�" }, - { value: "3", label: "鐢佃瘽闄岀敓鎷滆" }, - { value: "4", label: "鐩存帴璁块棶" }, - { value: "5", label: "椤圭洰鍚堜綔" }, - { value: "6", label: "涓汉鑷壘" }, - { value: "7", label: "浜屾閿�鍞�" }, - { value: "8", label: "鍏徃鐢佃瘽" } - ], ownerOptions: [ // 璐熻矗浜� { value: "1", label: "BOSS" }, @@ -363,9 +314,11 @@ { id: "1", productNumber: "123", - date: "2016-05-02", - name: "鐜嬪皬铏�", - address: "涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�" + productName: "", + startDate: "", + endDate: "2016-05-02", + number: "", + address: "" } ] } @@ -452,5 +405,10 @@ box-sizing: border-box; border-top: 1px solid #dadee5; } + .product-view { + .el-form-item__label { + padding: 0; + } + } } </style> diff --git a/src/views/service/serviceContract/index.vue b/src/views/service/serviceContract/index.vue index 03d7e7c..07704e8 100644 --- a/src/views/service/serviceContract/index.vue +++ b/src/views/service/serviceContract/index.vue @@ -1,5 +1,5 @@ <template> - <div class="sales-lead"> + <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" /> @@ -14,7 +14,7 @@ </el-table-column> </template> </TableCommonView> - <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> + <!-- 鏂板缓/缂栬緫 --> <AddServiceContractDialog v-if="editConfig.visible" :edit-common-config="editConfig" /> </div> </template> @@ -27,7 +27,7 @@ import AddServiceContractDialog from "@/views/service/serviceContract/AddServiceContractDialog" export default { - name: "SalesLead", + name: "ServiceContract", props: {}, components: { SearchCommonView, @@ -125,37 +125,13 @@ signDate: "", startDate: "", endDate: "", - - customType: "", - customSource: "", - importantLevel: "", - serviceAgent: "", - nextFollowupDate: "", - latestServiceDate: "", - - customStatus: "", - phoneNumber: "", - duties: "", - wechat: "1", - contactsEmail: "", - industry: "", - legalPerson: "", - registerTime: "", - registerCapital: "", - companyNature: "", - customerSize: "", - operateRange: "", - position: "", - map: "", - country: "1", - province: "1", - city: "1", - region: "1", + contractStatus: "", + serviceNumber: "", + termsTreaty: "", notes: "", approvalWorkflow: "", approvalSteps: "", approvalPerson: "", - approvalUrgent: "", approvalOpinion: "" } }, @@ -165,21 +141,25 @@ this.editSalesLeadConfig.visible = true this.editSalesLeadConfig.title = "缂栬緫" this.editSalesLeadConfig.infomation = { - customName: row.customName, - saleLeadNumber: row.saleLeadNumber, - contactName: row.contactName, - contactDuties: row.contactDuties, - phoneNumber: row.phoneNumber, - businessStatus: "鏂板缓", - businessSource: row.businessSource, - owner: row.owner, - position: "", - map: "", - country: "1", - province: "1", - city: "1", - region: "1", - address: "" + customName: "", + serviceContractNumber: "AC6521", + owner: "5", + contactName: "", + salesOpportunity: "", + contractOrder: "", + quotation: "", + contractType: "", + signDate: "", + startDate: "", + endDate: "", + contractStatus: "", + serviceNumber: "", + termsTreaty: "", + notes: "", + approvalWorkflow: "", + approvalSteps: "", + approvalPerson: "", + approvalOpinion: "" } } } @@ -188,7 +168,7 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.sales-lead { +.service-contract { .btn-pager { display: flex; .page { diff --git a/src/views/service/serviceFeeManage/AddServiceFeeManageDialog.vue b/src/views/service/serviceFeeManage/AddServiceFeeManageDialog.vue new file mode 100644 index 0000000..b42379d --- /dev/null +++ b/src/views/service/serviceFeeManage/AddServiceFeeManageDialog.vue @@ -0,0 +1,462 @@ +<template> + <div class="service-fee-manage"> + <el-dialog + :title="editCommonConfig.title + '鏈嶅姟鏀惰垂绠$悊'" + :visible.sync="editConfig.visible" + :width="dialogWidth" + :before-close="handleClose" + > + <el-form + ref="form" + :model="editConfig.infomation" + :rules="rules" + label-position="right" + label-width="308px" + size="mini" + :style="isUnflod ? { height: '60vh', 'overflow-x': 'hidden' } : ''" + > + <!-- 淇℃伅 --> + <div class="basic-info"> + <!-- 鍩烘湰淇℃伅 --> + <div v-if="isUnflod" class="basic-info-title">鍩烘湰淇℃伅</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="瀹㈡埛鍚嶇О" prop="customName"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.customName"></el-input> + <div class="common-select-btn"><i class="el-icon-house" title="宸ュ晢鏌ヨ"></i></div> + <div class="common-select-btn"><i class="el-icon-search" title="鏌ラ噸"></i></div> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏈嶅姟鏀惰垂浜�" prop="serviceCharger"> + <el-select + v-model="editConfig.infomation.serviceCharger" + placeholder="璇烽�夋嫨" + size="mini" + style="width: 63%" + > + <el-option + v-for="item in serviceCharger" + :key="item.value" + :label="item.label" + :value="item.value" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="瀹㈡埛缂栧彿" prop="customNumber"> + <el-input v-model="editConfig.infomation.customNumber"></el-input> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="瀹㈡埛瑙勬ā" prop="customerSize"> + <CommonSelectView + :common-value="editConfig.infomation.customerSize" + :common-options="customerSizeOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀹㈡埛鐘舵��" prop="customStatus"> + <CommonSelectView + :common-value="editConfig.infomation.customStatus" + :common-options="customStatusOptions" + /> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="閲嶈绾у埆" prop="importantLevel"> + <CommonSelectView + :common-value="editConfig.infomation.importantLevel" + :common-options="importantLevelOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀹㈡埛鏉ユ簮" prop="customSource"> + <CommonSelectView + :common-value="editConfig.infomation.customSource" + :common-options="customSourceOptions" + /> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="瀹㈡埛绫诲瀷" prop="customType"> + <CommonSelectView + :common-value="editConfig.infomation.customType" + :common-options="customTypeOptions" + /> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="鏈嶅姟浠h〃" prop="serviceAgent"> + <el-select + v-model="editConfig.infomation.serviceAgent" + placeholder="璇烽�夋嫨" + size="mini" + style="width: 63%" + > + <el-option + v-for="item in serviceAgentOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 鍔ㄦ�佷俊鎭� --> + <div v-if="isUnflod" class="basic-info-title">鍔ㄦ�佷俊鎭�</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="鏈�鏅氭湇鍔″埌鏈熸棩" prop="latestServiceDate"> + <el-date-picker v-model="editConfig.infomation.latestServiceDate" type="date" placeholder="閫夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 瀹㈡埛棣栬鑱旂郴浜� --> + <div v-if="isUnflod" class="basic-info-title">瀹㈡埛棣栬鑱旂郴浜�</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="鑱旂郴浜哄鍚�" prop="contactName"> + <el-input v-model="editConfig.infomation.contactName"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鑱旂郴浜鸿亴鍔�" prop="duties"> + <el-input v-model="editConfig.infomation.duties"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鑱旂郴浜烘墜鏈�" prop="phoneNumber"> + <el-input v-model="editConfig.infomation.phoneNumber"></el-input> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="鑱旂郴浜篍mail" prop="contactsEmail"> + <el-input v-model="editConfig.infomation.contactsEmail"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 鍦板潃淇℃伅 --> + <div v-if="isUnflod" class="basic-info-title">鍦板潃淇℃伅</div> + <div class="address-view"> + <el-row> + <el-col v-if="isUnflod" :span="24"> + <el-form-item label="瀹氫綅" prop="position"> + <el-input + v-model="editConfig.infomation.position" + placeholder="瀹氫綅鍦板潃涓繀椤诲寘鍚渷浠藉拰鍩庡競,璇疯緭鍏ュ噯纭殑鍦板潃!" + ></el-input> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="24"> + <el-form-item label="鍦板浘" prop="map"> + <div style="height: 100px"></div> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="鍥藉" prop="country"> + <CommonSelectView :common-value="editConfig.infomation.country" :common-options="countryOptions" /> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="鐪佷唤" prop="province"> + <CommonSelectView :common-value="editConfig.infomation.province" :common-options="provinceOptions" /> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="鍩庡競" prop="city"> + <CommonSelectView :common-value="editConfig.infomation.city" :common-options="cityOptions" /> + </el-form-item> + </el-col> + <el-col v-if="isUnflod" :span="12"> + <el-form-item label="鍖哄煙" prop="region"> + <CommonSelectView :common-value="editConfig.infomation.region" :common-options="regionOptions" /> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="璇︾粏鍦板潃" prop="address"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.address" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 宸ュ晢淇℃伅 --> + <div v-if="isUnflod" class="basic-info-title">宸ュ晢淇℃伅</div> + <div v-if="isUnflod" class="address-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="鎵�灞炶涓�" prop="industry"> + <CommonSelectView :common-value="editConfig.infomation.industry" :common-options="industryOptions" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍏徃鎬ц川" prop="companyNature"> + <CommonSelectView + :common-value="editConfig.infomation.companyNature" + :common-options="companyNatureOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍏徃缃戝潃" prop="companyWeb"> + <el-input v-model="editConfig.infomation.companyWeb"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 澶囨敞淇℃伅 --> + <div v-if="isUnflod" class="basic-info-title">澶囨敞淇℃伅</div> + <div v-if="isUnflod" class="basic-info-view"> + <el-row> + <el-col :span="24"> + <el-form-item label="澶囨敞" prop="notes"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.notes" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <!-- 闄勪欢淇℃伅 --> + <div v-if="isUnflod" class="basic-info-title">闄勪欢淇℃伅</div> + <div v-if="isUnflod" class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="闄勪欢" prop=""> + <div class="annex-view"> + <div @click="addAnnexClick">娣诲姞</div> + <div class="setFormat" @click="setFormatClick">璁剧疆鍏佽涓婁紶鐨勬枃浠舵牸寮�</div> + </div> + </el-form-item> + </el-col> + </el-row> + </div> + </div> + <!-- 灞曞紑鏀惰捣 --> + <div v-if="editConfig.title === '鏂板缓'" class="unflod-collapse" @click="unflodCollapseClick"> + <div>{{ unflodCollapseStr }}</div> + <div v-if="isUnflod"><i class="el-icon-arrow-up"></i></div> + <div v-else><i class="el-icon-arrow-down"></i></div> + </div> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆苟鎻愪氦瀹℃壒</el-button> + <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆瓨</el-button> + <el-button size="small" @click="editConfig.visible = false">鍙栨秷</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import CommonSelectView from "@/components/makepager/CommonSelectView" +export default { + name: "AddServiceFeeManageDialog", + props: { + editCommonConfig: { + type: Object, + default: () => { + return { + visible: false, + title: "鏂板缓", + infomation: { + customName: "", + serviceCharger: "", + customNumber: "", + customerSize: "", + customStatus: "", + importantLevel: "", + customType: "", + customSource: "", + serviceAgent: "", + latestServiceDate: "", + contactName: "", + duties: "", + phoneNumber: "", + contactsEmail: "", + operateRange: "", + position: "", + map: "", + country: "1", + province: "1", + city: "1", + region: "1", + address: "", + industry: "", + companyNature: "", + companyWeb: "", + notes: "" + } + } + } + } + }, + components: { CommonSelectView }, + computed: {}, + data() { + return { + dialogWidth: "80%", + editConfig: this.editCommonConfig, + rules: { + customName: [{ required: true, message: "璇疯緭鍏ュ鎴峰悕绉�", trigger: "blur" }], + serviceCharger: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }], + customStatus: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }] + }, + serviceChargerOptions: [ + // 鏈嶅姟鏀惰垂浜� + { value: "1", label: "BOSS" }, + { value: "2", label: "Mia" }, + { value: "3", label: "璐㈠姟" }, + { value: "4", label: "甯傚満" }, + { value: "5", label: "绯荤粺绠$悊鍛�" }, + { value: "6", label: "閿�鍞�" }, + { value: "7", label: "閿�鍞�荤洃" } + ], + customerSizeOptions: [], // 瀹㈡埛瑙勬ā + customStatusOptions: [], // 瀹㈡埛鐘舵�� + importantLevelOptions: [], // 閲嶈绾у埆 + customSourceOptions: [], // 瀹㈡埛鏉ユ簮 + customTypeOptions: [], // 瀹㈡埛绫诲瀷 + serviceAgentOptions: [], // 鏈嶅姟浠h〃 + + industryOptions: [], // 鎵�灞炶涓� + companyNatureOptions: [], // 鍏徃鎬ц川 + + countryOptions: [{ value: "1", label: "涓浗" }], // 鍥藉 + provinceOptions: [ + { value: "1", label: "鍖椾含甯�" }, + { value: "2", label: "涓婃捣甯�" }, + { value: "3", label: "鍚夋灄鐪�" }, + { value: "4", label: "闄曡タ鐪�" } + ], // 鐪佷唤 + cityOptions: [ + { value: "1", label: "鍖椾含甯�" }, + { value: "2", label: "涓婃捣甯�" }, + { value: "3", label: "鍚夋灄甯�" }, + { value: "4", label: "瑗垮畨甯�" } + ], // 鍩庡競 + regionOptions: [ + { value: "1", label: "鏈濋槼鍖�" }, + { value: "2", label: "娴锋穩鍖�" }, + { value: "3", label: "閫氬窞鍖�" }, + { value: "4", label: "瑗垮煄鍖�" } + ], // 鍖哄煙 + unflodCollapseStr: "鏀惰捣", + isUnflod: true + } + }, + created() {}, + methods: { + handleClose() { + this.editConfig.visible = false + }, + // 娣诲姞闄勪欢 + addAnnexClick() {}, + // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡 + setFormatClick() {}, + // 灞曞紑鏀惰捣 + unflodCollapseClick() { + if (this.unflodCollapseStr === "鏀惰捣") { + this.unflodCollapseStr = "灞曞紑鏇村鏍忕洰" + this.isUnflod = false + } else { + this.unflodCollapseStr = "鏀惰捣" + this.isUnflod = true + } + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.service-fee-manage { + .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 { + display: flex; + .common-select-btn { + margin-left: 5px; + font-size: 18px; + } + } + } + .address-view { + margin-top: 10px; + padding-right: 40px; + } + .annex-view { + display: flex; + 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; + } +} +::v-deep { + .el-dialog__header { + padding: 12.5px 10px; + border-bottom: 1px solid #e5e5e5; + .el-dialog__title { + font-size: 15px; + color: #323232; + font-weight: bold; + } + } + .el-dialog__body { + padding: 0px; + } + .el-dialog__footer { + padding: 0px; + text-align: center; + box-sizing: border-box; + border-top: 1px solid #dadee5; + } +} +</style> diff --git a/src/views/service/serviceFeeManage/index.vue b/src/views/service/serviceFeeManage/index.vue index b88dfa3..48e2bdc 100644 --- a/src/views/service/serviceFeeManage/index.vue +++ b/src/views/service/serviceFeeManage/index.vue @@ -1,5 +1,5 @@ <template> - <div class="sales-lead"> + <div class="service-fee-manage"> <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" /> <div class="btn-pager"> <PublicFunctionBtnView @@ -21,8 +21,8 @@ </el-table-column> </template> </TableCommonView> - <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> - <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + <!-- 鏂板缓/缂栬緫鏈嶅姟鏀惰垂绠$悊 --> + <AddServiceFeeManageDialog v-if="editConfig.visible" :edit-common-config="editConfig" /> </div> </template> @@ -31,17 +31,17 @@ import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" import PagerView from "@/components/makepager/PagerView" import TableCommonView from "@/components/makepager/TableCommonView" -import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" +import AddServiceFeeManageDialog from "@/views/service/serviceFeeManage/AddServiceFeeManageDialog" export default { - name: "SalesLead", + name: "ServiceFeeManage", props: {}, components: { SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView, - AddSalesLeadDialog + AddServiceFeeManageDialog }, computed: { searchCommonHeight() { @@ -53,9 +53,12 @@ tableList: {}, queryClassOptions: [ { value: "1", label: "鍏ㄩ儴" }, - { value: "2", label: "骞垮憡瀹d紶" }, - { value: "3", label: "璺熻繘涓�" }, - { value: "4", label: "澶辫触鍏抽棴" } + { value: "2", label: "杩囨湡鏈弧60澶�" }, + { value: "3", label: "杩囨湡鏈弧30澶�" }, + { value: "4", label: "鍗冲皢鍒版湡60澶�" }, + { value: "5", label: "鍗冲皢鍒版湡30澶�" }, + { value: "6", label: "宸茶繃鏈�" }, + { value: "7", label: "鏃犳湇鍔�" } ], searchOptions: [], operatesList: [ @@ -66,9 +69,9 @@ { id: "5", name: "鏇存敼鍒涘缓浜�" }, { id: "6", name: "鏍戠粨鏋勮缃�" }, { id: "7", name: "瀹℃壒璁剧疆" }, - { id: "8", name: "鍏捣鍙傛暟璁剧疆" } + { id: "8", name: "鎭㈠棰勮鍒楀" } ], - editSalesLeadConfig: { + editConfig: { visible: false, title: "鏂板缓", infomation: {} @@ -118,47 +121,69 @@ }, // 鏂板缓 addBtnClick() { - this.editSalesLeadConfig.visible = true - this.editSalesLeadConfig.title = "鏂板缓" - this.editSalesLeadConfig.infomation = { + this.editConfig.visible = true + this.editConfig.title = "鏂板缓" + this.editConfig.infomation = { customName: "", - saleLeadNumber: "LEA50", + serviceCharger: "", + customNumber: "", + customerSize: "", + customStatus: "", + importantLevel: "", + customType: "", + customSource: "", + serviceAgent: "", + latestServiceDate: "", contactName: "", - contactDuties: "", + duties: "", phoneNumber: "", - businessStatus: "鏂板缓", - businessSource: "1", - owner: "", + contactsEmail: "", + operateRange: "", position: "", map: "", country: "1", province: "1", city: "1", region: "1", - address: "" + address: "", + industry: "", + companyNature: "", + companyWeb: "", + notes: "" } }, // 缂栬緫 handleClick(row) { console.log(row) - this.editSalesLeadConfig.visible = true - this.editSalesLeadConfig.title = "缂栬緫" - this.editSalesLeadConfig.infomation = { - customName: row.customName, - saleLeadNumber: row.saleLeadNumber, - contactName: row.contactName, - contactDuties: row.contactDuties, - phoneNumber: row.phoneNumber, - businessStatus: "鏂板缓", - businessSource: row.businessSource, - owner: row.owner, + this.editConfig.visible = true + this.editConfig.title = "缂栬緫" + this.editConfig.infomation = { + customName: "", + serviceCharger: "", + customNumber: "", + customerSize: "", + customStatus: "", + importantLevel: "", + customType: "", + customSource: "", + serviceAgent: "", + latestServiceDate: "", + contactName: "", + duties: "", + phoneNumber: "", + contactsEmail: "", + operateRange: "", position: "", map: "", country: "1", province: "1", city: "1", region: "1", - address: "" + address: "", + industry: "", + companyNature: "", + companyWeb: "", + notes: "" } } } @@ -167,7 +192,7 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.sales-lead { +.service-fee-manage { .btn-pager { display: flex; .page { diff --git a/src/views/service/serviceFollowup/AddServiceFollowupDialog.vue b/src/views/service/serviceFollowup/AddServiceFollowupDialog.vue new file mode 100644 index 0000000..15560b4 --- /dev/null +++ b/src/views/service/serviceFollowup/AddServiceFollowupDialog.vue @@ -0,0 +1,288 @@ +<template> + <div class="service-followup"> + <el-dialog + :title="editCommonConfig.title + '鏈嶅姟鍥炶鍗�'" + :visible.sync="editConfig.visible" + :width="dialogWidth" + :before-close="handleClose" + > + <el-form + ref="form" + :model="editConfig.infomation" + :rules="rules" + label-position="right" + label-width="308px" + size="mini" + style="height: 60vh; overflow-x: hidden" + > + <!-- 淇℃伅 --> + <div class="basic-info"> + <!-- 鍩烘湰淇℃伅 --> + <div class="basic-info-title">鍩烘湰淇℃伅</div> + <div class="basic-info-view"> + <el-row> + <el-col :span="12"> + <el-form-item label="瀹㈡埛鍚嶇О" prop="customName"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.customName"></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> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍥炶鍗曠紪鍙�" prop="followupNumber"> + <el-input v-model="editConfig.infomation.followupNumber"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鑱旂郴浜哄鍚�" prop="contactName"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.contactName"></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> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀹㈡埛鏈嶅姟鍗�" prop="customServiceForm"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.customServiceForm"></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> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍥炶浜�" prop="visitor"> + <el-select v-model="editConfig.infomation.visitor" size="mini"> + <el-option v-for="item in visitorOptions" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="椤圭洰璁″垝" prop="projectPlan"> + <div class="custom-name"> + <el-input v-model="editConfig.infomation.projectPlan"></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> + </div> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="婊℃剰搴�" prop="satisfaction"> + <CommonSelectView + :common-value="editConfig.infomation.satisfaction" + :common-options="satisfactionOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍙婃椂鐜�" prop="timelyRate"> + <CommonSelectView + :common-value="editConfig.infomation.timelyRate" + :common-options="satisfactionOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瑙e喅鐜�" prop="resolveRate"> + <CommonSelectView + :common-value="editConfig.infomation.resolveRate" + :common-options="satisfactionOptions" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍘熸湇鍔′汉鍛�" prop="originServicePerson"> + <el-select v-model="editConfig.infomation.originServicePerson" size="mini"> + <el-option v-for="item in visitorOptions" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鏈嶅姟浜哄憳鏄惁鏉ヨ繃" prop="haveBeen"> + <CommonSelectView :common-value="editConfig.infomation.haveBeen" :common-options="haveBeenOptions" /> + </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="notes"> + <el-input + type="textarea" + :autosize="{ minRows: 2, maxRows: 4 }" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="editConfig.infomation.notes" + ></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="12"> + <el-form-item label="闄勪欢" prop=""> + <div class="annex-view"> + <div @click="addAnnexClick">娣诲姞</div> + <div class="setFormat" @click="setFormatClick">璁剧疆鍏佽涓婁紶鐨勬枃浠舵牸寮�</div> + </div> + </el-form-item> + </el-col> + </el-row> + </div> + </div> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆苟鎻愪氦瀹℃壒</el-button> + <el-button type="primary" size="small" @click="editConfig.visible = false">淇濆瓨</el-button> + <el-button size="small" @click="editConfig.visible = false">鍙栨秷</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import CommonSelectView from "@/components/makepager/CommonSelectView" +export default { + name: "AddServiceFollowupDialog", + props: { + editCommonConfig: { + type: Object, + default: () => { + return { + visible: false, + title: "鏂板缓", + infomation: { + customName: "", + followupNumber: "HF21", + contactName: "", + customServiceForm: "", + visitor: "", + projectPlan: "", + satisfaction: "", + timelyRate: "", + resolveRate: "", + originServicePerson: "", + haveBeen: "", + notes: "" + } + } + } + } + }, + components: { CommonSelectView }, + computed: { + searchCommonHeight() { + return this.$refs.searchCommonView.offsetHeight + } + }, + data() { + return { + dialogWidth: "80%", + editConfig: this.editCommonConfig, + rules: { + followupNumber: [{ required: true, message: "璇疯緭鍏ュ洖璁垮崟鍗曠紪鍙�", trigger: "blur" }], + visitor: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }] + }, + satisfactionOptions: [], // 婊℃剰搴� 鍙婃椂鐜� 瑙e喅鐜� + haveBeenOptions: [], // 鏈嶅姟浜哄憳鏄惁鏉ヨ繃 + visitorOptions: [ + // 鍥炶浜� + { value: "1", label: "绯荤粺绠$悊鍛�" }, + { value: "2", label: "閿�鍞�荤洃" } + ] + } + }, + created() {}, + methods: { + handleClose() { + this.editConfig.visible = false + }, + // 娣诲姞闄勪欢 + addAnnexClick() {}, + // 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡 + setFormatClick() {} + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +.service-followup { + .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 { + display: flex; + .common-select-btn { + margin-left: 5px; + font-size: 18px; + } + } + } + .address-view { + margin-top: 10px; + padding-right: 40px; + } + .annex-view { + display: flex; + 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; + } +} +::v-deep { + .el-dialog__header { + padding: 12.5px 10px; + border-bottom: 1px solid #e5e5e5; + .el-dialog__title { + font-size: 15px; + color: #323232; + font-weight: bold; + } + } + .el-dialog__body { + padding: 0px; + } + .el-dialog__footer { + padding: 0px; + text-align: center; + box-sizing: border-box; + border-top: 1px solid #dadee5; + } +} +</style> diff --git a/src/views/service/serviceFollowup/index.vue b/src/views/service/serviceFollowup/index.vue index 125c151..dcc4300 100644 --- a/src/views/service/serviceFollowup/index.vue +++ b/src/views/service/serviceFollowup/index.vue @@ -14,8 +14,8 @@ </el-table-column> </template> </TableCommonView> - <!-- 鏂板缓/缂栬緫閿�鍞嚎绱� --> - <AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" /> + <!-- 鏂板缓/缂栬緫 --> + <AddServiceFollowupDialog v-if="editConfig.visible" :edit-common-config="editConfig" /> </div> </template> @@ -24,7 +24,7 @@ import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView" import PagerView from "@/components/makepager/PagerView" import TableCommonView from "@/components/makepager/TableCommonView" -import AddSalesLeadDialog from "@/views/custom/salesLead/AddSalesLeadDialog" +import AddServiceFollowupDialog from "@/views/service/serviceFollowup/AddServiceFollowupDialog" export default { name: "SalesLead", @@ -34,7 +34,7 @@ PublicFunctionBtnView, PagerView, TableCommonView, - AddSalesLeadDialog + AddServiceFollowupDialog }, computed: { searchCommonHeight() { @@ -56,7 +56,7 @@ { id: "7", name: "瀹℃壒璁剧疆" }, { id: "8", name: "鎭㈠棰勮鍒楀" } ], - editSalesLeadConfig: { + editConfig: { visible: false, title: "鏂板缓", infomation: {} @@ -98,47 +98,41 @@ }, // 鏂板缓 addBtnClick() { - this.editSalesLeadConfig.visible = true - this.editSalesLeadConfig.title = "鏂板缓" - this.editSalesLeadConfig.infomation = { + this.editConfig.visible = true + this.editConfig.title = "鏂板缓" + this.editConfig.infomation = { customName: "", - saleLeadNumber: "LEA50", + followupNumber: "HF21", contactName: "", - contactDuties: "", - phoneNumber: "", - businessStatus: "鏂板缓", - businessSource: "1", - owner: "", - position: "", - map: "", - country: "1", - province: "1", - city: "1", - region: "1", - address: "" + customServiceForm: "", + visitor: "", + projectPlan: "", + satisfaction: "", + timelyRate: "", + resolveRate: "", + originServicePerson: "", + haveBeen: "", + notes: "" } }, // 缂栬緫 handleClick(row) { console.log(row) - this.editSalesLeadConfig.visible = true - this.editSalesLeadConfig.title = "缂栬緫" - this.editSalesLeadConfig.infomation = { - customName: row.customName, - saleLeadNumber: row.saleLeadNumber, - contactName: row.contactName, - contactDuties: row.contactDuties, - phoneNumber: row.phoneNumber, - businessStatus: "鏂板缓", - businessSource: row.businessSource, - owner: row.owner, - position: "", - map: "", - country: "1", - province: "1", - city: "1", - region: "1", - address: "" + this.editConfig.visible = true + this.editConfig.title = "缂栬緫" + this.editConfig.infomation = { + customName: "", + followupNumber: "HF21", + contactName: "", + customServiceForm: "", + visitor: "", + projectPlan: "", + satisfaction: "", + timelyRate: "", + resolveRate: "", + originServicePerson: "", + haveBeen: "", + notes: "" } } } -- Gitblit v1.8.0