|
@@ -0,0 +1,488 @@
|
|
|
+<template>
|
|
|
+ <div class="borderless" v-loading="pageLoading">
|
|
|
+ <div class="customer-head">
|
|
|
+ <div class="customer-back">
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ style="border: none;background: none;color: red"
|
|
|
+ icon="el-icon-arrow-left"
|
|
|
+ @click="backToList"
|
|
|
+ :loading="btnLoading"
|
|
|
+ >返回列表</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="add-customer-btn">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ class="el-button--small-yh"
|
|
|
+ @click.stop="openEdit"
|
|
|
+ >编 辑</el-button>
|
|
|
+ <el-button
|
|
|
+ type="success"
|
|
|
+ :disabled="!form.id"
|
|
|
+ size="small"
|
|
|
+ @click="copyDoc"
|
|
|
+ :loading="btnLoading"
|
|
|
+ >复制单据</el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="editCustomer"
|
|
|
+ size="small"
|
|
|
+ :loading="btnLoading"
|
|
|
+ >保存数据</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="customer-main">
|
|
|
+ <containerTitle title="基础信息"/>
|
|
|
+ <basic-container :showBtn="true">
|
|
|
+ <avue-form
|
|
|
+ ref="form"
|
|
|
+ class="trading-form"
|
|
|
+ v-model="form"
|
|
|
+ :option="option"
|
|
|
+ >
|
|
|
+ <template slot="corpId">
|
|
|
+ <crop-select
|
|
|
+ v-model="form.corpId"
|
|
|
+ @getCorpData="getKHData"
|
|
|
+ corpType="KH"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ <template slot="createUser">
|
|
|
+ <el-select
|
|
|
+ v-model="form.createUser"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item,index) in userList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.realName"
|
|
|
+ :value="item.realName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ <template slot="oppositePerson">
|
|
|
+ <el-select
|
|
|
+ v-model="form.oppositePerson"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item,index) in userList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.realName"
|
|
|
+ :value="item.realName"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+ </avue-form>
|
|
|
+ </basic-container>
|
|
|
+ <containerTitle title="沟通记录"/>
|
|
|
+ <basic-container>
|
|
|
+ <avue-crud
|
|
|
+ ref="crud"
|
|
|
+ :data="dataList"
|
|
|
+ :option="tableOption"
|
|
|
+ :cell-style="cellStyle"
|
|
|
+ @saveColumn="saveColumn"
|
|
|
+ @resetColumn="resetColumn"
|
|
|
+ >
|
|
|
+ <template slot="menuLeft">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ icon="el-icon-plus"
|
|
|
+ size="small"
|
|
|
+ @click.stop="newDetails"
|
|
|
+ >录入明细</el-button>
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ icon="el-icon-printer"
|
|
|
+ size="small"
|
|
|
+ >报 表</el-button>
|
|
|
+ </template>
|
|
|
+ <template slot="menu" slot-scope="{ row, index }">
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ type="text"
|
|
|
+ @click="rowCell(row, index)"
|
|
|
+ >{{ row.$cellEdit ? "保存" : "修改" }}</el-button>
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ type="text"
|
|
|
+ @click="rowDel(row, index)"
|
|
|
+ >删除</el-button>
|
|
|
+ </template>
|
|
|
+ <template slot="date" slot-scope="{ row, index }">
|
|
|
+ <el-date-picker
|
|
|
+ v-if="row.$cellEdit"
|
|
|
+ v-model="row.date"
|
|
|
+ type="date"
|
|
|
+ placeholder="选择日期"
|
|
|
+ size="small"
|
|
|
+ style="width: 100%"
|
|
|
+ ></el-date-picker>
|
|
|
+ <span v-else>{{row.date}}</span>
|
|
|
+ </template>
|
|
|
+ <template slot="content" slot-scope="{ row, index }">
|
|
|
+ <el-input
|
|
|
+ v-if="row.$cellEdit"
|
|
|
+ v-model="row.content"
|
|
|
+ size="small"
|
|
|
+ placeholder="输入内容"
|
|
|
+ />
|
|
|
+ <span v-else>{{row.content}}</span>
|
|
|
+ </template>
|
|
|
+ <template slot="attn" slot-scope="{ row, index }">
|
|
|
+ <el-input
|
|
|
+ v-if="row.$cellEdit"
|
|
|
+ v-model="row.attn"
|
|
|
+ size="small"
|
|
|
+ placeholder="输入客户联系人"
|
|
|
+ />
|
|
|
+ <span v-else>{{row.attn}}</span>
|
|
|
+ </template>
|
|
|
+ <template slot="contact" slot-scope="{ row, index }">
|
|
|
+ <el-input
|
|
|
+ v-if="row.$cellEdit"
|
|
|
+ v-model="row.contact"
|
|
|
+ size="small"
|
|
|
+ placeholder="输入联系方式"
|
|
|
+ />
|
|
|
+ <span v-else>{{row.contact}}</span>
|
|
|
+ </template>
|
|
|
+ <template slot="satisfy" slot-scope="{ row, index }">
|
|
|
+ <el-switch
|
|
|
+ v-model="row.satisfy"
|
|
|
+ :disabled="!row.$cellEdit"
|
|
|
+ :inactive-value="0"
|
|
|
+ :active-value="1"
|
|
|
+ ></el-switch>
|
|
|
+ </template>
|
|
|
+ </avue-crud>
|
|
|
+ </basic-container>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import tableOption from "./config/customerContact.json";
|
|
|
+import {
|
|
|
+ isDiscount,
|
|
|
+ isPercentage,
|
|
|
+ micrometerFormat,
|
|
|
+ IntegerFormat
|
|
|
+} from "@/util/validate";
|
|
|
+import { gainUser } from "@/api/basicData/customerInquiry";
|
|
|
+import {getUserInfo} from "@/api/system/user";
|
|
|
+import {getDeptTree} from "@/api/system/dept";
|
|
|
+import { getCurrentDate } from "@/util/date";
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: "detail",
|
|
|
+ data() {
|
|
|
+ const validateRemark = (rule, value, callback) => {
|
|
|
+ if (this.form.state == 2 && !this.form.orderRemark) {
|
|
|
+ callback(new Error('备注不能为空'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ pageLoading: false,
|
|
|
+ btnLoading: false,
|
|
|
+ form: {},
|
|
|
+ option: {
|
|
|
+ menuBtn: false,
|
|
|
+ labelWidth: 100,
|
|
|
+ column: [
|
|
|
+ {
|
|
|
+ label: "客户名称",
|
|
|
+ prop: "corpId",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "change"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ span: 8,
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "客户联系人",
|
|
|
+ prop: "corpr",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "blur"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ span: 8,
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "客户电话",
|
|
|
+ prop: "corpTel",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "blur"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ span: 8,
|
|
|
+ slot: true,
|
|
|
+ type: 'number',
|
|
|
+ controls: false,
|
|
|
+ mock: {
|
|
|
+ type: 'number',
|
|
|
+ precision: 0,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "业务内容",
|
|
|
+ prop: "businessContent",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "blur"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ span: 8,
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "业务日期",
|
|
|
+ prop: "b",
|
|
|
+ span: 8,
|
|
|
+ type: "date",
|
|
|
+ format: "yyyy-MM-dd",
|
|
|
+ valueFormat: "yyyy-MM-dd 00:00:00",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "blur"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "承揽人",
|
|
|
+ prop: "createUser",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "change"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ span: 8,
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "对接人",
|
|
|
+ prop: "oppositePerson",
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "change"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ span: 8,
|
|
|
+ slot: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "状态",
|
|
|
+ prop: "state",
|
|
|
+ span: 8,
|
|
|
+ type: 'select',
|
|
|
+ dicData: [
|
|
|
+ {label: '沟通中', value: 0},
|
|
|
+ {label: '成交', value: 1},
|
|
|
+ {label: '未成交', value: 2},
|
|
|
+ ],
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: " ",
|
|
|
+ trigger: "change"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "备注",
|
|
|
+ prop: "orderRemark",
|
|
|
+ type: "textarea",
|
|
|
+ minRows: 2,
|
|
|
+ span: 24,
|
|
|
+ rules: [
|
|
|
+ {validator: validateRemark, trigger: 'blur'}
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ dataList: [],
|
|
|
+ tableOption: {},
|
|
|
+ goodsoptions: [],
|
|
|
+ unitOption: [],
|
|
|
+ selectionList: [],
|
|
|
+ search: {},
|
|
|
+ treeStyle: "height:" + (window.innerHeight - 315) + "px",
|
|
|
+ goodsOption: {},
|
|
|
+ loading: false,
|
|
|
+ switchDialog: false, // 报表弹窗控制
|
|
|
+ userList: [],
|
|
|
+ dic: [],
|
|
|
+ loginUser: '', // 登录人
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async created() {
|
|
|
+ this.$set(this.form, 'b', getCurrentDate()); // 默认当前日期
|
|
|
+ this.tableOption = await this.getColumnData(
|
|
|
+ this.getColumnName(102),
|
|
|
+ tableOption
|
|
|
+ );
|
|
|
+ gainUser().then(res => {
|
|
|
+ this.userList = res.data.data;
|
|
|
+ });
|
|
|
+ getUserInfo().then(res => {
|
|
|
+ this.$set(this.form, 'createUser', res.data.data.realName);
|
|
|
+ this.$set(this.form, 'oppositePerson', res.data.data.realName);
|
|
|
+ this.loginUser = res.data.data.realName;
|
|
|
+ })
|
|
|
+ getDeptTree().then(res => {
|
|
|
+ this.dic = res.data.data
|
|
|
+ })
|
|
|
+ this.getWorkDicts('unit').then(res => {
|
|
|
+ this.unitOption = res.data.data;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ filters: {
|
|
|
+ IntegerFormat(num) {
|
|
|
+ return IntegerFormat(num);
|
|
|
+ },
|
|
|
+ decimalFormat(num) {
|
|
|
+ return num ? Number(num).toFixed(2) : "0.00";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ //返回列表
|
|
|
+ backToList() {
|
|
|
+ this.$emit("goBack");
|
|
|
+ },
|
|
|
+ // 编辑按钮触发
|
|
|
+ openEdit() {},
|
|
|
+ // 复制
|
|
|
+ copyDoc() {
|
|
|
+ this.$emit("copyOrder", this.form.id);
|
|
|
+ },
|
|
|
+ //修改提交触发
|
|
|
+ editCustomer(status) {
|
|
|
+ this.$refs["form"].validate((valid, done) => {
|
|
|
+ done();
|
|
|
+ if (valid) {
|
|
|
+ // this.btnLoading = true;
|
|
|
+ // typeSave(this.form).then(res => {
|
|
|
+ // this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
|
|
|
+ // this.queryData(res.data.data.id);
|
|
|
+ // }).finally(() => {
|
|
|
+ // this.btnLoading = false;
|
|
|
+ // })
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ cellStyle() {
|
|
|
+ return "padding:0;height:40px;";
|
|
|
+ },
|
|
|
+ async saveColumn() {
|
|
|
+ const inSave = await this.saveColumnData(
|
|
|
+ this.getColumnName(102),
|
|
|
+ this.tableOption
|
|
|
+ );
|
|
|
+ if (inSave) {
|
|
|
+ this.$message.success("保存成功");
|
|
|
+ //关闭窗口
|
|
|
+ this.$refs.crud.$refs.dialogColumn.columnBox = false;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.crud.doLayout()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async resetColumn() {
|
|
|
+ this.tableOption = tableOption;
|
|
|
+ const inSave = await this.delColumnData(
|
|
|
+ this.getColumnName(102),
|
|
|
+ tableOption
|
|
|
+ );
|
|
|
+ if (inSave) {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.crud.doLayout()
|
|
|
+ })
|
|
|
+ this.$message.success("重置成功");
|
|
|
+ //关闭窗口
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$refs.crud.$refs.dialogColumn.columnBox = false;
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //录入明细
|
|
|
+ newDetails() {
|
|
|
+ this.$refs["form"].validate((valid, done) => {
|
|
|
+ done()
|
|
|
+ if (valid) {
|
|
|
+ this.dataList.push({
|
|
|
+ createTime: getCurrentDate('date'),
|
|
|
+ createUser: this.loginUser,
|
|
|
+ $cellEdit: true,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ rowCell(row, index) {
|
|
|
+ if (row.$cellEdit == true) {
|
|
|
+ this.$set(row, "$cellEdit", false);
|
|
|
+ } else {
|
|
|
+ this.$set(row, "$cellEdit", true);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ rowDel(row, index) {
|
|
|
+ this.$confirm("确定删除数据?", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning"
|
|
|
+ }).then(() => {
|
|
|
+ if (row.id) {
|
|
|
+ // removeGoods(row.id).then(res => {
|
|
|
+ // this.$message({
|
|
|
+ // type: 'success',
|
|
|
+ // message: '删除成功!'
|
|
|
+ // })
|
|
|
+ // this.dataList.splice(row.$index, 1);
|
|
|
+ // })
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "删除成功!"
|
|
|
+ });
|
|
|
+ this.dataList.splice(row.$index, 1);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getKHData(row) {},
|
|
|
+ },
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+
|
|
|
+</style>
|