| | |
| | | params: data |
| | | }) |
| | | } |
| | | |
| | | // 获取常见问题列表 |
| | | export const getFaqList = async (data) => { |
| | | return await axios.get(`/api/faq/list`, { |
| | | params: data |
| | | }) |
| | | } |
| | |
| | | }) |
| | | .then(() => { |
| | | this.$emit("recalculateProductClick") |
| | | this.tableList.tableData.map((ite) => { |
| | | ite.total = ite.amount ? ite.amount * ite.price : 1 * ite.price |
| | | }) |
| | | }) |
| | | .catch(() => {}) |
| | | }, |
| | |
| | | import SubOrder from "@/views/sales/subOrder" |
| | | import SalesDetails from "@/views/sales/salesDetails" |
| | | import Receipt from "@/views/other/payment/receipt" |
| | | import { getContactList } from "@/api/client/contacts" |
| | | export default { |
| | | name: "DetailClientManage", |
| | | props: { |
| | |
| | | addressInfoList: [], |
| | | isRemarkExpand: true, // 备注信息 |
| | | isAnnexExpand: true, // 附件信息 |
| | | addConfig: {} |
| | | addConfig: {}, |
| | | contact_name: "", |
| | | contact_phone: "", |
| | | contact_position: "", |
| | | contact_wechat: "", |
| | | contact_email: "" |
| | | } |
| | | }, |
| | | created() { |
| | | this.getContactList() |
| | | this.setData(this.detailConfig.infomation) |
| | | this.addConfig = { |
| | | id_name: "client_name", |
| | |
| | | this.contactList = [ |
| | | { |
| | | leftStr: "联系人姓名", |
| | | leftValue: item.contact_name, |
| | | leftValue: this.contact_name, |
| | | rightStr: "联系人手机", |
| | | rightValue: item.contact_phone |
| | | rightValue: this.contact_phone |
| | | }, |
| | | { |
| | | leftStr: "联系人职务", |
| | | leftValue: "", |
| | | leftValue: this.contact_position, |
| | | rightStr: "联系人微信", |
| | | rightValue: "" |
| | | rightValue: this.contact_wechat |
| | | }, |
| | | { |
| | | leftStr: "联系人Email", |
| | | leftValue: "", |
| | | leftValue: this.contact_email, |
| | | rightStr: "", |
| | | rightValue: "" |
| | | } |
| | |
| | | } |
| | | } |
| | | return fmt |
| | | }, |
| | | getContactList() { |
| | | getContactList({ |
| | | search_map: { |
| | | client_id: this.clientManageDetail.infomation.id |
| | | }, |
| | | page: 0, |
| | | pageSize: 0 |
| | | }).then((res) => { |
| | | if (res.code === 200) { |
| | | console.log(res.data.list) |
| | | if (res.data.list && res.data.list.length > 0) { |
| | | let data = res.data.list[0] |
| | | console.log(data) |
| | | this.contact_name = data.name |
| | | this.contact_phone = data.phone |
| | | this.contact_position = data.position |
| | | this.contact_wechat = data.wechat |
| | | this.contact_email = data.email |
| | | } |
| | | } |
| | | this.setData(this.detailConfig.infomation) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | }, |
| | | // 客户名称详情 |
| | | selClientClick(row) { |
| | | // console.log(row) |
| | | console.log(row) |
| | | this.clientDeail.visible = true |
| | | this.clientDeail.infomation = { |
| | | ...row.Client, |
| | |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | :picker-options="pickerOptions" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | |
| | | } |
| | | ] |
| | | }, |
| | | pickerOptions: { |
| | | disabledDate: (time) => { |
| | | return time.getTime() > Date.now() |
| | | } |
| | | }, |
| | | clientStatusOptions: [], // 客户状态 |
| | | contactInfoOptions: [], // 联系方式 |
| | | memberOptions: [], |
| | |
| | | </li> |
| | | </ul> |
| | | <div class="business_scope"> |
| | | <div class="content-title">{{ "最新进展" }}</div> |
| | | <div class="content-title">{{ "最新进展:" }}</div> |
| | | <div class="content-data">{{ record ? record : "--" }}</div> |
| | | </div> |
| | | </div> |
| | |
| | | isRemarkExpand: true, // 备注信息 |
| | | remarkInfoList: [], |
| | | addConfig: {}, |
| | | record: "" |
| | | record: "", // 最新进展 |
| | | noContactDays: 0, |
| | | newContactDays: "" |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | setData(item) { |
| | | if (item.FollowRecord && item.FollowRecord.length > 0) { |
| | | this.record = item.FollowRecord[0].record |
| | | console.log(item.FollowRecord[0].follow_time) |
| | | let follow_time = item.FollowRecord[0].follow_time |
| | | this.newContactDays = follow_time.substring(0, 10) |
| | | this.noContactDays = this.getDiffDay(Date.now(), this.newContactDays) |
| | | } |
| | | this.basicInfoList = [ |
| | | { |
| | |
| | | this.dynamicInfoList = [ |
| | | { |
| | | leftStr: "未联系天数", |
| | | leftValue: "", |
| | | leftValue: this.noContactDays, |
| | | rightStr: "最新联系日期", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "最新进展", |
| | | leftValue: this.record, |
| | | rightStr: "", |
| | | rightValue: "" |
| | | rightValue: this.newContactDays |
| | | } |
| | | ] |
| | | this.addressInfoList = [ |
| | |
| | | } else if (value === "remark") { |
| | | this.isRemarkExpand = !this.isRemarkExpand |
| | | } |
| | | }, |
| | | // 计算两个日期之间的差值 |
| | | getDiffDay(date_1, date_2) { |
| | | let totalDays, diffDate |
| | | let myDate_1 = date_1 |
| | | let myDate_2 = Date.parse(date_2) |
| | | // 将两个日期都转换为毫秒格式,然后做差 |
| | | diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值 |
| | | |
| | | totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整 |
| | | // console.log(totalDays) |
| | | |
| | | return totalDays // 相差的天数 |
| | | } |
| | | } |
| | | } |
| | |
| | | align-items: center; |
| | | height: 40px; |
| | | .content-title { |
| | | width: 220px; |
| | | width: 320px; |
| | | text-align: right; |
| | | color: #555; |
| | | } |
| | |
| | | { label: "产品编号", prop: "number" } |
| | | ] |
| | | } |
| | | this.searchSel = { value: "Name", label: "产品名称" } |
| | | this.searchSel = { value: "name", label: "产品名称" } |
| | | } |
| | | this.searchOptions = [] |
| | | for (let i = 0; i < this.tableList.tableColumn.length; i++) { |
| | |
| | | // 产品名称 |
| | | async getProductList() { |
| | | await getProductList({ |
| | | productName: "", |
| | | productNumber: "", |
| | | productName: this.keywordType === "产品名称" ? this.keyword : "", |
| | | productNumber: this.keywordType === "产品编号" ? this.keyword : "", |
| | | page: 1, |
| | | pageSize: 5 |
| | | }).then((res) => { |
| | |
| | | </div> |
| | | <div class="collection-view"> |
| | | <div class="label">金额</div> |
| | | <div>{{ editConfig.infomation.amount }}</div> |
| | | <div>{{ editConfig.infomation.amountTotal }}</div> |
| | | </div> |
| | | <div class="collection-view"> |
| | | <div class="label">未计划金额</div> |
| | | <div>{{ editConfig.infomation.amount }}</div> |
| | | <div>{{ editConfig.infomation.amountTotal }}</div> |
| | | </div> |
| | | <div class="collection-view"> |
| | | <div class="label">收款计划负责人</div> |
| | |
| | | methods: { |
| | | // 设置初始值 |
| | | setData() { |
| | | this.amount = |
| | | typeof this.editCommonConfig.infomation.amountTotal == "string" |
| | | ? parseInt(this.editCommonConfig.infomation.amountTotal) |
| | | : this.editCommonConfig.infomation.amountTotal |
| | | this.editConfig.infomation = { |
| | | collectionType: this.collectionType, |
| | | moneyType: "人民币", |
| | | amount: this.amount.toFixed(2) |
| | | amountTotal: this.editCommonConfig.infomation.amountTotal |
| | | } |
| | | }, |
| | | getCommonData() { |
| | |
| | | amount: this.amount, |
| | | amountReceivable: this.amount * 0.3, |
| | | amountReceived: 0, |
| | | amountTotal: 0, |
| | | amountTotal: this.amount, |
| | | collectionDate: this.setDate(date, 0), |
| | | collectionType: this.editConfig.infomation.collectionType, |
| | | fileId: 0, |
| | |
| | | amount: this.amount, |
| | | amountReceivable: this.amount * 0.5, |
| | | amountReceived: 0, |
| | | amountTotal: 0, |
| | | amountTotal: this.amount, |
| | | collectionDate: this.setDate(date, 1), |
| | | collectionType: this.editConfig.infomation.collectionType, |
| | | fileId: 0, |
| | |
| | | amount: this.amount, |
| | | amountReceivable: this.amount * 0.2, |
| | | amountReceived: 0, |
| | | amountTotal: 0, |
| | | amountTotal: this.amount, |
| | | collectionDate: this.setDate(date, 2), |
| | | collectionType: this.editConfig.infomation.collectionType, |
| | | fileId: 0, |
| | |
| | | amount: this.amount, |
| | | amountReceivable: this.amount, |
| | | amountReceived: 0, |
| | | amountTotal: 0, |
| | | amountTotal: this.amount, |
| | | collectionDate: this.setDate(this.firstDate, 0), |
| | | collectionType: this.editConfig.infomation.collectionType, |
| | | fileId: 0, |
| | |
| | | amount: this.amount, |
| | | amountReceivable: this.amount * 0.5, |
| | | amountReceived: 0, |
| | | amountTotal: 0, |
| | | amountTotal: this.amount, |
| | | collectionDate: this.setDate(this.firstDate, 0), |
| | | collectionType: this.editConfig.infomation.collectionType, |
| | | fileId: 0, |
| | |
| | | amount: this.amount, |
| | | amountReceivable: this.amount * 0.5, |
| | | amountReceived: 0, |
| | | amountTotal: 0, |
| | | amountTotal: this.amount, |
| | | collectionDate: this.setDate(this.firstDate, 1), |
| | | collectionType: this.editConfig.infomation.collectionType, |
| | | fileId: 0, |
| | |
| | | @addProductClick="addProductClick" |
| | | @emptyProductClick="emptyProductClick" |
| | | @recalculateProductClick="recalculateProductClick" |
| | | @clearupProduct="clearupProduct" |
| | | /> |
| | | </div> |
| | | <!-- 选择审批流程 --> |
| | |
| | | </div> |
| | | </template> |
| | | <div class="content"> |
| | | <div class="top">{{ "合同发起人:" + "" }}</div> |
| | | <!-- <div class="top">{{ "合同发起人:" + "" }}</div> --> |
| | | <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="changeOrder"> |
| | | <!-- <template slot="label"> |
| | | <!-- <el-tab-pane label="报价变更单" name="changeOrder"> --> |
| | | <!-- <template slot="label"> |
| | | <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div> |
| | | </template> --> |
| | | </el-tab-pane> |
| | | <!-- </el-tab-pane> --> |
| | | <el-tab-pane label="销售明细单" name="detail"></el-tab-pane> |
| | | <el-tab-pane label="服务合同" name="serviceContract"></el-tab-pane> |
| | | </el-tabs> |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | this.editConfig.infomation = { ...this.addConfig, currency: "人民币" } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | | console.log(row) |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "编辑" |
| | | this.editConfig.infomation = { ...row } |
| | | this.editConfig.infomation = { ...row, currency: "人民币" } |
| | | }, |
| | | // 删除 |
| | | delClick() { |
| | |
| | | 产品管理 |
| | | <div style="margin-left: 400px"> |
| | | 币种 |
| | | <el-select |
| | | v-model="editConfig.infomation.currency" |
| | | placeholder="请选择" |
| | | size="mini" |
| | | style="width: 63%" |
| | | disabled |
| | | > |
| | | <el-select v-model="editConfig.infomation.currency" placeholder="请选择" size="mini" style="width: 63%"> |
| | | <el-option v-for="item in currencyOptions" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { currency: "人民币" } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | | console.log(row) |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "编辑" |
| | | this.editConfig.infomation = { ...row } |
| | | this.editConfig.infomation = { ...row, currency: "人民币" } |
| | | }, |
| | | // 删除 |
| | | delClick() { |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | this.editConfig.infomation = { ...this.addConfig, currency: "人民币" } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | | console.log(row) |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "编辑" |
| | | this.editConfig.infomation = { ...row, sale_chance_name: "" } |
| | | this.editConfig.infomation = { ...row, sale_chance_name: "", currency: "人民币" } |
| | | }, |
| | | // 删除 |
| | | delClick() { |
| | |
| | | <div class="basic-info-view"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="可能性(%)" prop="possibilities"> |
| | | <el-form-item label="可能性(%)" prop="possibilities_id"> |
| | | <div class="common-select"> |
| | | <el-select |
| | | v-model="editConfig.infomation.possibilities" |
| | | v-model="editConfig.infomation.possibilities_id" |
| | | placeholder="请选择" |
| | | class="common-select-sel" |
| | | size="mini" |
| | |
| | | number: data.number || "", |
| | | opportunities: data.opportunities || "", |
| | | pain_points: data.pain_points || "", |
| | | possibilities: data.possibilities || 0, |
| | | possibilities: data.possibilities_id || 0, |
| | | process: data.process || "", |
| | | projected_amount: data.projected_amount || 0, |
| | | province_id: data.province_id || 0, |
| | |
| | | <div>跟进记录<el-badge type="primary" :value="2"> </el-badge></div> |
| | | </template> --> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="收款预测" name="collectionForecast"></el-tab-pane> |
| | | <!-- <el-tab-pane label="收款预测" name="collectionForecast"></el-tab-pane> --> |
| | | <el-tab-pane label="报价单" name="quotation"></el-tab-pane> |
| | | <el-tab-pane label="销售明细单" name="detail"></el-tab-pane> |
| | | <el-tab-pane label="服务合同" name="serviceContract"></el-tab-pane> |
| | |
| | | selContactsClick(row) { |
| | | console.log(row) |
| | | this.contactsDeail.visible = true |
| | | this.contactsDeail.infomation = { ...row.contact, sale_chance_name: row.name, sale_chance_id: row.id } |
| | | this.contactsDeail.infomation = { |
| | | ...row.contact, |
| | | sale_chance_name: row.name, |
| | | sale_chance_id: row.id, |
| | | Client: { name: row.client.name, client_status_id: row.client.client_status_id }, |
| | | client_name: row.name |
| | | } |
| | | }, |
| | | // 机会名称详情 |
| | | selCommonClick(row) { |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { currency: "人民币" } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | | console.log(row) |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "编辑" |
| | | this.editConfig.infomation = { ...row } |
| | | this.editConfig.infomation = { ...row, currency: "人民币" } |
| | | }, |
| | | // 删除 |
| | | delClick() { |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | this.editConfig.infomation = { ...this.addConfig, currency: "人民币" } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | | console.log(row) |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "编辑" |
| | | this.editConfig.infomation = { ...row, masterOrderNumber: "" } |
| | | this.editConfig.infomation = { ...row, masterOrderNumber: "", currency: "人民币" } |
| | | }, |
| | | // 删除 |
| | | delClick() { |
| | |
| | | selClientClick(row) { |
| | | console.log(row) |
| | | this.clientDeail.visible = true |
| | | this.clientDeail.infomation = { ...row, client_name: row.name } |
| | | this.clientDeail.infomation = { |
| | | ...row.client, |
| | | client_name: row.client.name, |
| | | client_level: row.client.client_level.name, |
| | | client_status: row.client.client_status.name, |
| | | contact_name: row.name |
| | | } |
| | | }, |
| | | // 销售总单详情 |
| | | selMasterClick(row) { |
| | |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="常见问题" prop="faqId"> |
| | | <el-input v-model="editConfig.infomation.faqId"></el-input> |
| | | <!-- <el-input v-model="editConfig.infomation.faqId"></el-input> --> |
| | | <el-select |
| | | v-model="editConfig.infomation.faqId" |
| | | placeholder="请选择" |
| | | class="common-select-sel" |
| | | size="mini" |
| | | > |
| | | <el-option v-for="item in faqOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | |
| | | import SelectCommonDialog from "@/views/other/commonDialog/SelectCommonDialog" |
| | | import SelectContactDialog from "@/views/other/commonDialog/SelectContactDialog" |
| | | import SelectChanceDialog from "@/views/other/commonDialog/SelectChanceDialog" |
| | | import { getFaqList } from "@/api/common/other" |
| | | import { |
| | | getFaultTypeList, |
| | | getServiceTypeList, |
| | |
| | | priorityLevelOptions: [], // 优先级别 |
| | | statusOptions: Status.processStatus, // 处理状态 |
| | | timeSpentOptions: [], // 花费时间 |
| | | faqOptions: [], // 常见问题 |
| | | editSelectClientConfig: { |
| | | editVisible: false, |
| | | title: "", |
| | |
| | | this.reportSourceOptions = res.data.reportSource |
| | | }) |
| | | this.getServiceTypeList() |
| | | this.getFaqList() |
| | | }, |
| | | // 获取常见问题列表 |
| | | async getFaqList() { |
| | | await getFaqList().then((res) => { |
| | | console.log(res) |
| | | if (res.data.code === 200) { |
| | | this.faqOptions = res.data.data.data |
| | | } |
| | | }) |
| | | }, |
| | | // 保存 |
| | | saveClick(formName) { |
| | |
| | | contactId: this.detailConfig.infomation.contactId, |
| | | contact_name: this.detailConfig.infomation.contact_name, |
| | | service_number: this.detailConfig.infomation.serviceNumber, |
| | | serviceId: this.detailConfig.infomation.id |
| | | serviceOrderId: this.detailConfig.infomation.id |
| | | } |
| | | }, |
| | | mounted() {}, |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="应服务次数" prop="serviceTimes"> |
| | | <el-input v-model="editConfig.infomation.serviceTimes"></el-input> |
| | | <el-input-number |
| | | v-model="editConfig.infomation.serviceTimes" |
| | | placeholder="请输入" |
| | | :min="0" |
| | | :precision="2" |
| | | :controls="false" |
| | | style="width: 100%; margin-right: 5px" |
| | | ></el-input-number> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | this.productTableList.tableData = this.tableData |
| | | }, |
| | | // 产品重算 |
| | | recalculateProductClick() {} |
| | | recalculateProductClick() {}, |
| | | clearupProduct(data) { |
| | | this.tableData = data |
| | | this.productTableList.tableData = this.tableData |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | height: 55px; |
| | | line-height: 55px; |
| | | } |
| | | .el-input__inner { |
| | | text-align: left; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | client_name: this.detailConfig.infomation.client.name, |
| | | contact_name: this.detailConfig.infomation.contact_name, |
| | | client_id: this.detailConfig.infomation.client_id, |
| | | contact_id: this.detailConfig.infomation.contact_id |
| | | contact_id: this.detailConfig.infomation.contact_id, |
| | | amountTotal: this.detailConfig.infomation.amountTotal |
| | | } |
| | | this.setTableForm() |
| | | }, |
| | |
| | | { label: "产品名称", prop: "productName" }, // 产品名称 |
| | | { label: "服务开始日", prop: "startTime" }, // 服务开始日 |
| | | { label: "服务到期日", prop: "endTime" }, // 服务到期日 |
| | | { label: "价税合计", prop: "priceTax" } // 价税合计 |
| | | { label: "价税合计", prop: "amountTotal" } // 价税合计 |
| | | ] |
| | | } |
| | | this.searchOptions = [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | this.editConfig.infomation = { ...this.addConfig, currency: "人民币" } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | this.editConfig.infomation = { |
| | | ...row, |
| | | contract_number: row.salesDetails.number, |
| | | quotation_number: row.quotation.number |
| | | quotation_number: row.quotation.number, |
| | | currency: "人民币" |
| | | } |
| | | }, |
| | | // 删除 |