| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874 |
- <template>
- <div>
- <el-form ref="form" :model="form" :rules="rules" label-width="120px" class="el-form-box">
- <headerTitle title="订单信息"></headerTitle>
- <el-row>
- <el-col :span="12">
- <el-form-item
- label="项目名称"
- prop="projectName"
- >
- <el-input
- clearable
- v-model="form.projectName"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="销售类型"
- prop="saleType"
- >
- <DictSelection
- dictName="销售类型"
- clearable
- v-model="form.saleType"
- :listFormatte="listFormatte"
- >
- </DictSelection>
- </el-form-item>
- <el-form-item
- label="销售部门"
- prop="salesDeptId"
- >
- <ele-tree-select
- clearable
- :data="groupTreeData"
- v-model="form.salesDeptId"
- valueKey="id"
- labelKey="name"
- placeholder="请选择"
- @change="change_principalDep"
- default-expand-all
- />
- </el-form-item>
- <el-form-item
- label="订单类型"
- prop="needProduce"
- >
- <el-radio v-model="form.needProduce" :label="1">生产性订单</el-radio>
- <el-radio v-model="form.needProduce" :label="0">贸易性订单</el-radio>
- </el-form-item>
- <el-form-item prop="orderFiles" label="订单附件">
- <fileMain v-model="form.orderFiles"></fileMain>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item
- label="选择合同"
- prop="contractName"
- >
- <el-input
- clearable
- v-model="form.contractName"
- @click.native="handleContractBtn"
- @clear="clearContrcat"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="合同编号"
- prop="contractNumber"
- >
- <el-input
- disabled
- v-model="form.contractNumber"
- />
- </el-form-item>
- <!-- <el-form-item
- label="交货日期"
- prop="deliveryDate"
- >
- <el-date-picker
- v-model="form.deliveryDate"
- type="date"
- placeholder="选择日期"
- >
- </el-date-picker>
- </el-form-item> -->
- <el-form-item label="结算方式" prop="settlementMode">
- <DictSelection
- dictName="结算方式"
- clearable
- @itemChange="settlementModeChange"
- v-model="form.settlementMode"
- >
- </DictSelection>
- </el-form-item>
- <!-- <el-form-item
- label="计价方式"
- prop="pricingWay"
- >
- <el-radio-group v-model="form.pricingWay" @change="changePricingWay" :disabled="!!form.contractId">
- <el-radio v-for="item in pricingWayList" :label="item.id">{{ item.name }}</el-radio>
- </el-radio-group>
- </el-form-item> -->
- </el-col>
- </el-row>
- <headerTitle title="基本信息"></headerTitle>
- <el-row>
- <el-col :span="12">
- <el-form-item
- label="客户名称"
- prop="partaName"
- >
- <el-input
- clearable
- v-model="form.partaName"
- @click.native="handParent"
- placeholder="请选择"
- />
- </el-form-item>
- <el-form-item
- label="客户统一社会信用代码"
- prop="partaUnifiedSocialCreditCode"
- class="form_item_label"
- >
- <el-input
- clearable
- v-model="form.partaUnifiedSocialCreditCode"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="客户联系人"
- prop="partaLinkName">
- <el-select
- v-model="form.partaLinkName"
- placeholder="请选择"
- @change="onchangeLink"
- @focus="selectFocus"
- style="width: 100%"
- >
- <el-option
- v-for="item in linkNameOptions"
- :key="item.id"
- :label="item.linkName"
- :value="item.id"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="客户电话"
- prop="partaTel"
- >
- <el-input
- clearable
- :maxlength="20"
- v-model="form.partaTel"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="客户传真"
- prop="partaFax"
- >
- <el-input clearable v-model="form.partaFax" placeholder="请输入"/>
- </el-form-item>
- <el-form-item
- label=" 客户Email"
- prop="partaEmail"
- >
- <el-input
- clearable
- v-model="form.partaEmail"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="客户地址"
- prop="partaAddress"
- >
- <el-input
- clearable
- v-model="form.partaAddress"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item
- label="售出方名称"
- prop="partbName"
- >
- <!-- <el-input
- clearable
- v-model="form.partbName"
- placeholder="请输入"
- /> -->
- <el-input
- v-if="enterprisePage.length <= 1"
- clearable
- v-model="form.partbName"
- placeholder="请输入"
- />
- <el-select
- v-if="enterprisePage.length > 1"
- style="width: 100%"
- v-model="form.partbName"
- placeholder="请选择"
- @change="getEnterprise()"
- >
- <el-option
- v-for="item in enterprisePage"
- :key="item.id"
- :label="item.name"
- :value="item.name"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="售出方统一社会信用代码"
- prop="partbUnifiedSocialCreditCode"
- class="form_item_label">
- <el-input
- clearable
- v-model="form.partbUnifiedSocialCreditCode"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="售出方联系人"
- prop="partbLinkName"
- >
- <el-input
- clearable
- v-model="form.partbLinkName"
- @click.native="handHead"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item prop="partbTel" label="售出方联系电话">
- <el-input clearable v-model="form.partbTel" placeholder="请输入"/>
- </el-form-item>
- <el-form-item prop="partbFax" label="售出方传真">
- <el-input clearable v-model="form.partbFax" placeholder="请输入"/>
- </el-form-item>
- <el-form-item
- label="售出方Email"
- prop="partbEmail"
- >
- <el-input
- clearable
- v-model="form.partbEmail"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="售出方地址"
- prop="partbAddress"
- >
- <el-input
- clearable
- v-model="form.partbAddress"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <headerTitle title="物品清单" style="margin-top: 30px"></headerTitle>
- <inventoryTable ref="inventoryTable" :pricingWay="form.pricingWay" :isContractId='!!form.contractId'
- @orderDiscountAmount="orderDiscountAmount"></inventoryTable>
- <el-row style="margin-top: 20px">
- <el-col :span="12">
- <el-form-item
- label="优惠总金额"
- prop="payAmount"
- >
- <el-input
- type="number"
- :min="0"
- :max="allcountAmount"
- clearable
- :disabled="!!form.contractId||!allcountAmount"
- v-model.number="form.payAmount"
- @blur="discountInput"
- placeholder="请输入">
- <template slot="append">元</template>
- </el-input>
- </el-form-item>
- <el-form-item
- label="收货地址"
- prop="receiveAddress"
- >
- <el-input
- clearable
- type="textarea"
- v-model="form.receiveAddress"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item
- label="总金额"
- prop="totalAmount"
- >
- {{ allcountAmount || 0 }}元
- </el-form-item>
- <el-form-item label="备注" prop="remark" >
- <el-input
- clearable
- type="textarea"
- v-model="form.remark"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <parentList ref="parentRef" @changeParent="changeParent"></parentList>
- <head-list ref="headRef" @changeParent="changePersonel"></head-list>
- <contractListDialog
- ref="selectContractRef"
- @changeParent="changeContract"
- ></contractListDialog>
- </div>
- </template>
- <script>
- import {emailReg, numberReg} from 'ele-admin';
- // import inventoryTable from './inventoryTable.vue';
- import inventoryTable from '@/views/bpm/handleTask/components/contractBook/inventoryTable.vue';
- import fileUpload from '@/components/upload/fileUpload';
- import dictMixins from '@/mixins/dictMixins';
- import parentList from '@/views//bpm/handleTask/components/quotation/parentList.vue';
- import {
- getDetail,
- enterprisePage
- } from '@/api/bpm/components/contractManage/contractBook';
- import {getSaleOrderDetail} from '@/api/bpm/components/saleManage/saleorder';
- import {getcontactlink} from '@/api/bpm/components/saleManage/businessOpportunity.js';
- import headList from '@/components/headList';
- import contractListDialog from './contractListDialog.vue';
- import {listOrganizations} from '@/api/system/organization';
- import {copyObj} from '@/utils/util';
- import fileMain from "@/components/addDoc/index.vue";
- export default {
- mixins: [dictMixins],
- components: {
- fileMain,
- fileUpload,
- headList,
- contractListDialog,
- inventoryTable,
- parentList
- },
- props: {
- businessId: {
- default: ''
- }
- },
- data() {
- let formDef = {
- id: '',
- contractId: '',
- orderFiles: [],
- contractName: '',
- deliveryDate: '',
- payAmount: '',
- projectName: '',
- projectId: '',
- receiveAddress: '',
- remark: '',
- saleType: '',
- saleTypeName: '',
- pricingWay: 1,
- totalAmount: '',
- partaUnifiedSocialCreditCode: '',
- partbUnifiedSocialCreditCode: '',
- partaAddress: '',
- partaEmail: '',
- partaFax: '',
- partaId: '',
- partaLinkId: '',
- partaLinkName: '',
- partaName: '',
- partaTel: '',
- partbAddress: '',
- partbEmail: '',
- partbFax: '',
- partbId: '',
- partbLinkId: '',
- partbLinkName: '',
- partbName: '',
- partbTel: '',
- settlementMode: '',
- settlementModeName: '',
- needProduce: 1,
- };
- return {
- clearing: false, //是否清除合同
- payWayOptions: [],
- delDetailIds: [],
- linkNameOptions: [],
- pricingWayList: [
- {id: 1, name: '按数量计价'},
- {id: 2, name: '按重量计价'}
- ],
- visible: false,
- title: '',
- row: {},
- activeName: 'base',
- formDef,
- form: copyObj(formDef),
- tableBankData: [],
- tableLinkData: [],
- // 组织机构树形结构数据
- groupTreeData: [],
- groupData: [],
- rules: {
- // deliveryDate: [
- // { required: true, message: '请选择交货日期', trigger: 'change' }
- // ],
- settlementMode: [
- {required: true, message: '请选择结算方式', trigger: 'change'}
- ],
- saleType: [
- {required: true, message: '请选择销售类型', trigger: 'change'}
- ],
- partaName: [
- {required: true, message: '请选择客户名称', trigger: 'change'}
- ],
- partaLinkName: [
- {required: true, message: '请选择客户联系人', trigger: 'change'}
- ],
- acceptUnpack: [
- {required: true, message: '请选择是否接受', trigger: 'change'}
- ],
- partaTel: [
- {
- required: true,
- pattern: numberReg,
- message: '请输入客户联系电话',
- trigger: 'blur'
- }
- ],
- partbName: [
- {required: true, message: '请输入售出方名称', trigger: 'change'}
- ],
- partbLinkName: [
- {required: true, message: '请输入售出方联系人', trigger: 'change'}
- ],
- partbTel: [
- {
- required: true,
- pattern: numberReg,
- message: '请输入售出方联系电话',
- trigger: 'blur'
- }
- ],
- partaEmail: [
- {pattern: emailReg, message: '邮箱格式不正确', trigger: 'blur'}
- ]
- },
- // 提交状态
- loading: false,
- // 是否是修改
- isUpdate: false,
- enterprisePage: []
- };
- },
- computed: {
- allcountAmount() {
- return this.$store.state.order.allcountAmount;
- }
- },
- async created() {
- await this.getGroupAll();
- await this.getEnterprisePage();
- await this.getSaleOrderDetail(this.businessId);
- },
- methods: {
- // 选择负责人部门
- change_principalDep(id) {
- const info = this.groupData.find((e) => e.id == id);
- this.form.salesDeptName = info.name;
- },
- // 获取公司数据
- getGroupAll() {
- listOrganizations().then((list) => {
- this.groupData = list;
- this.groupTreeData = this.$util.toTreeData({
- data: list,
- idField: 'id',
- parentIdField: 'parentId'
- });
- });
- },
- listFormatte(data) {
- return data.filter((item) => item.dictCode !== 0);
- },
- //选择供应商
- changeSupplier(obj) {
- this.form = Object.assign({}, this.form, {
- partbId: obj.id,
- partbName: obj.name,
- partbAddress: obj.addressName + obj.address,
- partbLinkId: '',
- partbLinkName: '',
- partbEmail: '',
- partbTel: ''
- });
- this.getLinkInfo(obj.id);
- },
- //切换计价方式重新算费用
- changePricingWay() {
- this.$refs.inventoryTable.getTotalPrice()
- },
- //选择合同获取合同的详情
- async getDetailData(id) {
- this.loading = true;
- const data = await getDetail(id);
- this.loading = false;
- if (data) {
- this.$nextTick(() => {
- let {contractVO} = data;
- // this.form=contractVOform.receiveAddress
- let {
- partaAddress,
- partaEmail,
- partaFax,
- partaId,
- partaLinkId,
- partaLinkName,
- partaName,
- partaTel,
- partbAddress,
- partbEmail,
- partbFax,
- partbId,
- partbLinkId,
- partbLinkName,
- partbName,
- partbTel,
- pricingWay,
- totalPrice,
- discountTotalPrice,
- partaUnifiedSocialCreditCode,
- partbUnifiedSocialCreditCode,
- settlementMode,
- settlementModeName
- } = contractVO;
- this.form = Object.assign({}, this.form, {
- partaAddress,
- partaEmail,
- partaFax,
- partaId,
- partaLinkId,
- partaLinkName,
- partaName,
- partaTel,
- partbAddress,
- partbEmail,
- partbFax,
- partbId,
- partbLinkId,
- partbLinkName,
- partbName,
- partbTel,
- pricingWay,
- totalPrice,
- discountTotalPrice,
- partaUnifiedSocialCreditCode,
- partbUnifiedSocialCreditCode,
- totalAmount: totalPrice,
- payAmount: discountTotalPrice,
- receiveAddress: partaAddress,
- settlementMode,
- settlementModeName
- });
- this.getLinkInfo(partaId);
- this.$refs.inventoryTable &&
- this.$refs.inventoryTable.putTableValue(data);
- this.$store.commit('order/setAllcountAmount', totalPrice);
- });
- }
- },
- //获取订单详情
- async getSaleOrderDetail(id) {
- this.loading = true;
- const data = await getSaleOrderDetail(id);
- this.loading = false;
- if (data) {
- this.$nextTick(() => {
- data.saleType = data.saleType+''
- this.form = data;
- this.$refs.inventoryTable &&
- this.$refs.inventoryTable.putTableValueByOrder(data)
- this.getLinkInfo(data.partaId);
- this.$store.commit('order/setAllcountAmount', data.totalAmount);
- this.$store.commit('order/setContractId', data.contractId);
- });
- }
- },
- //修改优惠金额
- discountInput() {
- this.$refs.inventoryTable.discountInputByOrder(this.form.payAmount)
- },
- //物品清单修改单价或者数量重置优惠金额
- orderDiscountAmount(val = 0) {
- this.form.payAmount = val
- },
- //更新联系人数据
- async getLinkInfo(contactId) {
- const data = await getcontactlink({contactId});
- if (data && data?.length) {
- this.linkNameOptions = data;
- }
- },
- selectFocus() {
- if (this.linkNameOptions.length === 0) {
- return this.$message.error('请先选择名称');
- }
- },
- //选择下拉框
- onchangeLink(selectedOptions) {
- const option = this.linkNameOptions.find(
- (opt) => opt.id === selectedOptions
- );
- this.form = Object.assign({}, this.form, {
- partaEmail: option?.email,
- partaLinkName: option?.linkName || '',
- partaTel: option?.mobilePhone || option?.phone || '',
- partaLinkId: option?.id
- });
- },
- handHead() {
- let item = {
- id: this.form.partbLinkId
- };
- this.$refs.headRef.open(item);
- },
- //选择售出方人回调
- changePersonel(obj) {
- this.$set(this.form, 'partbLinkId', obj.id);
- this.$set(this.form, 'partbLinkName', obj.name);
- this.$set(this.form, 'partbTel', obj.phone);
- this.$set(this.form, 'partbEmail', obj.email);
- },
- //选择客户回调
- changeParent(obj) {
- this.form = Object.assign({}, this.form, {
- partaId: obj.id,
- partaName: obj.name,
- partaAddress: obj.addressName + obj.address,
- partaLinkId: '',
- partaLinkName: '',
- partaEmail: '',
- partaTel: ''
- });
- this.getLinkInfo(obj.id);
- },
- //选择合同回调
- changeContract(obj) {
- this.form = Object.assign({}, this.form, {
- contractId: obj.id,
- contractName: obj.contractName,
- contractNo: obj.contractNo
- });
- this.getDetailData(obj.id);
- this.$store.commit('order/setContractId', obj.id);
- },
- //选择合同弹框
- handleContractBtn() {
- console.log('5556666');
- if (this.clearing) return;
- let item = {
- id: this.form.contractId
- };
- this.$refs.selectContractRef.open(item);
- },
- //清除合同
- clearContrcat() {
- this.clearing = true;
- let {
- id,
- projectName,
- saleType,
- saleTypeName,
- deliveryDate,
- orderFiles,
- remark
- } = this.form;
- this.form = Object.assign({}, copyObj(this.formDef), {
- id,
- projectName,
- saleType: +saleType,
- saleTypeName,
- deliveryDate,
- orderFiles,
- remark
- });
- this.$store.commit('order/setContractId', '');
- this.$store.commit('order/setAllcountAmount', 0);
- this.$refs.inventoryTable.putTableValue([]);
- setTimeout(() => {
- this.clearing = false;
- }, 500);
- },
- handParent() {
- if (this.form.contractId) {
- return this.$message.error('选择了合同不能更改客户名称');
- }
- let item = {
- id: this.form.contactId
- };
- this.$refs.parentRef.open(item);
- },
- getEnterprisePage() {
- enterprisePage({
- pageNum: 1,
- size: 100
- }).then((res) => {
- this.enterprisePage = [];
- this.enterprisePage.push(...res.list);
- });
- },
- getEnterprise() {
- let data = this.enterprisePage.find(
- (item) => item.name == this.form.quoteName
- );
- this.form.partbName = data.name;
- this.form.partbUnifiedSocialCreditCode = data.unifiedSocialCreditCode;
- this.form.partbFax = data.fax;
- this.form.partbAddress = data.address;
- },
- salesmanChange(val, info) {
- this.otherForm.salesmanName = info.name;
- },
- settlementModeChange(info) {
- this.form.settlementModeName = info.dictValue;
- },
- ifChiefChange(value, idx) {
- if (value === 1) {
- this.tableLinkData.forEach((e) => (e.ifChief = 0));
- this.tableLinkData[idx].ifChief = 1;
- }
- },
- getValidate() {
- return Promise.all([
- new Promise((resolve, reject) => {
- this.$refs.form.validate((valid) => {
- if (!valid) {
- reject(false);
- } else {
- resolve(true);
- }
- });
- }),
- new Promise((resolve, reject) => {
- this.$refs.inventoryTable.validateForm((valid) => {
- if (!valid) {
- reject(false);
- } else {
- resolve(true);
- }
- });
- })
- ]);
- },
- async getTableValue() {
- try {
- await this.getValidate();
- // 表单验证通过,执行保存操作
- this.loading = true;
- if (!this.form.contractId) {
- this.form.totalAmount = this.allcountAmount;
- }
- let commitData = Object.assign({}, this.form, {
- productList: this.$refs.inventoryTable.getTableValue(),
- saleTypeName: this.getDictValue('销售类型', this.form.saleType)
- });
- return commitData;
- } catch (error) {
- console.log(error);
- // 表单验证未通过,不执行保存操作
- }
- },
- cancel() {
- this.$nextTick(() => {
- this.activeName = 'base';
- // 关闭后,销毁所有的表单数据
- this.$refs['otherForm'] && this.$refs['otherForm'].resetFields();
- this.$refs['formRef'] && this.$refs['formRef'].resetFields();
- this.$store.commit('order/clearUserData');
- this.form = copyObj(this.formDef);
- this.visible = false;
- });
- },
- //查找合同分类对应name
- findNameById(tree, targetId) {
- for (let i = 0; i < tree.length; i++) {
- const node = tree[i];
- if (node.id === targetId) {
- return node.name;
- }
- if (node.children && node.children.length > 0) {
- const name = this.findNameById(node.children, targetId);
- if (name) {
- return name;
- }
- }
- }
- return null;
- }
- }
- };
- </script>
- <style scoped lang="scss">
- .TotalAmount {
- font-size: 16px;
- padding-right: 30px;
- }
- </style>
|