addOrEditDialog.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
  1. <template>
  2. <div>
  3. <el-form ref="form" :rules="rules" :model="form" label-width="130px">
  4. <headerTitle title="基本信息"></headerTitle>
  5. <el-row :gutter="12">
  6. <!-- <el-row :gutter="12"> -->
  7. <el-col :span="8">
  8. <el-form-item label="发票类型" prop="type">
  9. <el-select
  10. v-model="form.type"
  11. @change="handleSelType"
  12. disabled
  13. clearable
  14. style="width: 100%"
  15. >
  16. <el-option label="开票" value="1"></el-option>
  17. <el-option label="收票" value="2"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="8">
  22. <el-form-item label="来源类型" prop="sourceType">
  23. <el-select
  24. v-model="form.sourceType"
  25. :disabled="true"
  26. style="width: 100%"
  27. >
  28. <el-option label="收款计划" :value="6"></el-option>
  29. <el-option label="付款计划" :value="7"></el-option>
  30. <el-option label="应收管理" :value="5"></el-option>
  31. <el-option label="应付管理" :value="4"></el-option>
  32. </el-select>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="8" v-if="form.sourceType == 6">
  36. <el-form-item label="收款计划" prop="sourceCode">
  37. <el-input v-model="form.sourceCode" :disabled="true"></el-input>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="8" v-if="form.sourceType == 7">
  41. <el-form-item label="付款计划" prop="sourceCode">
  42. <el-input v-model="form.sourceCode" :disabled="true"></el-input>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="8" v-if="form.sourceType == 5">
  46. <el-form-item label="应收管理" prop="sourceCode">
  47. <el-input v-model="form.sourceCode" :disabled="true"></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="8" v-if="form.sourceType == 4">
  51. <el-form-item label="应付管理" prop="sourceCode">
  52. <el-input v-model="form.sourceCode" :disabled="true"></el-input>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="8">
  56. <el-form-item label="发票金额" prop="amount">
  57. <el-input-number
  58. v-model="form.amount"
  59. :precision="2"
  60. disabled
  61. :controls="false"
  62. style="width: 100%"
  63. :min="0"
  64. ></el-input-number>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="8">
  68. <el-form-item label="发票号" prop="invoiceNos">
  69. <el-input
  70. v-model="form.invoiceNos"
  71. disabled
  72. ></el-input>
  73. </el-form-item>
  74. </el-col>
  75. <!-- </el-row> -->
  76. <el-col :span="8">
  77. <el-form-item label="申请部门" prop="applyDeptId">
  78. <ele-tree-select
  79. disabled
  80. clearable
  81. :data="deptTreeList"
  82. v-model="form.applyDeptId"
  83. valueKey="id"
  84. labelKey="name"
  85. placeholder="请选择"
  86. @change="changeDeptInfo"
  87. default-expand-all
  88. />
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="8">
  92. <el-form-item label="申请人" prop="applyUserId">
  93. <personSelect
  94. disabled
  95. ref="directorRef"
  96. v-model="form.applyUserId"
  97. @selfChange="changeUserInfo"
  98. />
  99. </el-form-item>
  100. </el-col>
  101. <el-col :span="8">
  102. <el-form-item label="开票日期">
  103. <el-date-picker
  104. disabled
  105. style="width: 100%"
  106. v-model="form.expectInvoiceDate"
  107. type="date"
  108. value-format="yyyy-MM-dd"
  109. >
  110. </el-date-picker>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="8">
  114. <el-form-item
  115. v-if="taskDefinitionKey != 'starter'"
  116. label="会计科目"
  117. prop="accountingSubjectId"
  118. >
  119. <ele-tree-select
  120. clearable
  121. filterable
  122. ref="treeSelect"
  123. :data="accountingSubjectList"
  124. v-model="form.accountingSubjectId"
  125. valueKey="id"
  126. labelKey="name"
  127. placeholder="请选择"
  128. @change="changeSubjectInfo"
  129. default-expand-all
  130. />
  131. </el-form-item>
  132. </el-col>
  133. <el-col :span="8" :gutter="12" v-if="taskDefinitionKey != 'starter'">
  134. <el-form-item label="发票类型" prop="category">
  135. <el-radio disabled v-model="form.category" :label="2"
  136. >增值税普通发票</el-radio
  137. >
  138. <el-radio disabled v-model="form.category" :label="1"
  139. >增值税专用发票</el-radio
  140. >
  141. </el-form-item>
  142. </el-col>
  143. <el-col :span="8" :gutter="12" v-if="taskDefinitionKey != 'starter'">
  144. <el-form-item
  145. prop="files"
  146. label="发票附件"
  147. :rules="[
  148. {
  149. required: isFile == 1 ? false : true,
  150. message: '请上传发票附件',
  151. trigger: 'blur'
  152. }
  153. ]"
  154. >
  155. <fileMain v-model="form.files" @updateVal="getFiles"></fileMain>
  156. </el-form-item>
  157. </el-col>
  158. </el-row>
  159. <headerTitle title="发票信息"></headerTitle>
  160. <el-row :gutter="12">
  161. <el-col :span="12">
  162. <el-form-item label="购买方名称" prop="companyName">
  163. <el-input v-model="form.companyName" disabled></el-input>
  164. </el-form-item>
  165. <el-form-item label="统一社会信用代码" prop="companyUsc">
  166. <el-input v-model="form.companyUsc" disabled></el-input>
  167. </el-form-item>
  168. <el-form-item label="开户银行" prop="companyBankBranchNo">
  169. <el-input v-model="form.companyBankBranchNo" disabled></el-input>
  170. </el-form-item>
  171. <el-form-item label="银行账户" prop="companyBankAccount">
  172. <el-input v-model="form.companyBankAccount" disabled></el-input>
  173. </el-form-item>
  174. <el-form-item label="地址" prop="companyAddress">
  175. <el-input v-model="form.companyAddress" disabled></el-input>
  176. </el-form-item>
  177. <el-form-item label="联系人" prop="companyContactName">
  178. <el-input v-model="form.companyContactName" disabled></el-input>
  179. </el-form-item>
  180. <el-form-item label="电话号码" prop="companyTel">
  181. <el-input v-model="form.companyTel" disabled></el-input>
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="12">
  185. <el-form-item label="销售方名称" prop="receiverName">
  186. <el-input disabled v-model="form.receiverName"></el-input>
  187. </el-form-item>
  188. <el-form-item
  189. label="统一社会信用代码"
  190. prop="salesCompanyUsc"
  191. class="form_item_label"
  192. >
  193. <el-input v-model="form.salesCompanyUsc" disabled></el-input>
  194. </el-form-item>
  195. <el-form-item label="开户银行" prop="salesCompanyBankBranchNo">
  196. <el-input
  197. v-model="form.salesCompanyBankBranchNo"
  198. disabled
  199. ></el-input>
  200. </el-form-item>
  201. <el-form-item label="银行账户" prop="salesCompanyBankAccount">
  202. <el-input
  203. v-model="form.salesCompanyBankAccount"
  204. disabled
  205. ></el-input>
  206. </el-form-item>
  207. <el-form-item label="地址" prop="receiverAddress">
  208. <el-input v-model="form.receiverAddress" disabled></el-input>
  209. </el-form-item>
  210. <el-form-item label="联系人" prop="receiverContactName">
  211. <el-input v-model="form.receiverContactName" disabled></el-input>
  212. </el-form-item>
  213. <el-form-item label="电话号码" prop="receiverTel">
  214. <el-input v-model="form.receiverTel" disabled></el-input>
  215. </el-form-item>
  216. </el-col>
  217. </el-row>
  218. </el-form>
  219. <!-- <headerTitle title="关联信息"></headerTitle>
  220. <table-info
  221. v-if="form.detailList.length"
  222. :dialogType="taskDefinitionKey != 'starter' ? 'view' : 'update'"
  223. :form="form"
  224. ref="table"
  225. @setPrice="setPrice"
  226. ></table-info> -->
  227. <div style="margin-top: 20px; margin-bottom: 20px;">
  228. <headerTitle title="收款计划信息"></headerTitle>
  229. <!-- <el-form ref="form" :model="tableForm"> -->
  230. <ele-pro-table
  231. ref="table"
  232. :needPage="false"
  233. :columns="columns"
  234. :datasource="form.receiptPayments"
  235. row-key="id"
  236. class="time-form"
  237. >
  238. <template v-slot:toolbar>
  239. <!-- <span>已开票金额:{{ totalInvoiceAmount }}</span> -->
  240. </template>
  241. <template v-slot:invoiceAmount="scope">
  242. <!-- <el-form-item
  243. style="width: 100%;"
  244. label-width="0"
  245. :prop="'receiptPayments.' + scope.$index + '.invoiceAmount'"
  246. :rules="[
  247. {
  248. required: true,
  249. message: '请输入开票金额',
  250. trigger: 'blur'
  251. },
  252. {
  253. validator: (rule, value, callback) => {
  254. if (value === undefined || value === null || value === '') {
  255. callback('请输入开票金额');
  256. } else if (parseFloat(value) <= 0) {
  257. callback('开票金额必须大于0');
  258. } else {
  259. callback();
  260. }
  261. },
  262. trigger: 'blur'
  263. }
  264. ]"
  265. > -->
  266. <span v-if="dialogType === 'view'">{{ scope.row.invoiceAmount }}</span>
  267. <!-- <el-input :min="0" :max="scope.row.planPaymentAmount" v-limit="{ min: 0, max: scope.row.planPaymentAmount }" v-else v-model="scope.row.invoiceAmount" type="number" @input="updateInvoiceAmount(scope.row)"></el-input> -->
  268. <!-- </el-form-item> -->
  269. </template>
  270. </ele-pro-table>
  271. <!-- </el-form> -->
  272. </div>
  273. <headerTitle title="关联物品清单信息"></headerTitle>
  274. <!-- <table-info
  275. v-if="dialogType != 'add' && form.detailList.length"
  276. dialogType="view"
  277. :form="form"
  278. ref="table"
  279. ></table-info> -->
  280. <table-info-new
  281. dialogType="view"
  282. ref="tableInfoNewRef"
  283. ></table-info-new>
  284. </div>
  285. </template>
  286. <script>
  287. import personSelect from '@/components/CommomSelect/person-select.vue';
  288. import { listOrganizations } from '@/api/system/organization';
  289. import { mapGetters } from 'vuex';
  290. import fileUpload from '@/components/upload/fileUpload.vue';
  291. import tableInfo from './tableInfo.vue';
  292. import { getTreeByPid } from '@/api/classifyManage';
  293. import {
  294. invoiceApplyInfoAPI,
  295. invoiceApplyUpdateAPI,
  296. invoiceApplyUpdateV2API
  297. } from '@/api/bpm/components/financialManage/invoiceManage';
  298. // import fileMain from '@/components/addDoc/index.vue';
  299. import { parameterGetByCode } from '@/api/main/index.js';
  300. import { paymentTypeOp } from '@/enum/dict';
  301. import { invoiceApplyInfoV2API } from '@/api/bpm/components/financialManage/invoiceManage';
  302. import tableInfoNew from './tableInfoNew.vue';
  303. export default {
  304. name: 'add-or-edit-dialog',
  305. components: {
  306. // fileMain,
  307. fileUpload,
  308. personSelect,
  309. tableInfo,
  310. tableInfoNew
  311. },
  312. props: {
  313. businessId: {
  314. default: ''
  315. },
  316. taskDefinitionKey: {
  317. default: ''
  318. }
  319. },
  320. provide() {
  321. return {
  322. invoiceType: () => this.form.type
  323. };
  324. },
  325. computed: {
  326. ...mapGetters(['user']),
  327. columns() {
  328. return [
  329. {
  330. width: 45,
  331. type: 'index',
  332. columnKey: 'index',
  333. align: 'center',
  334. fixed: 'left'
  335. },
  336. {
  337. width: 150,
  338. prop: 'sourceOrderDetailNo',
  339. label: this.form.type == 1 ? '收款计划编码' : '付款计划编码',
  340. align: 'center'
  341. },
  342. {
  343. width: 150,
  344. prop: 'relatedOrderNo',
  345. label: '订单编号',
  346. align: 'center'
  347. },
  348. {
  349. width: 120,
  350. prop: 'relatedOrderType',
  351. label: '订单类型',
  352. align: 'center',
  353. formatter: (row) => {
  354. return row.relatedOrderType == 1 ? '销售订单' : '采购订单'
  355. }
  356. },
  357. {
  358. width: 120,
  359. prop: 'contractNo',
  360. label: '合同编码',
  361. align: 'center'
  362. },
  363. {
  364. width: 120,
  365. prop: 'contractCode',
  366. label: '合同编号',
  367. align: 'center'
  368. },
  369. {
  370. width: 120,
  371. prop: 'contractName',
  372. label: '合同名称',
  373. align: 'center'
  374. },
  375. {
  376. prop: 'issueNumber',
  377. label: '期数',
  378. align: 'center'
  379. },
  380. {
  381. width: 120,
  382. prop: 'paymentType',
  383. label: '款项类型',
  384. align: 'center',
  385. formatter: (row) => {
  386. return this.paymentTypeOp.find(item => item.value == row.paymentType)?.label || ''
  387. }
  388. },
  389. {
  390. prop: 'moneyName',
  391. label: '款项名称',
  392. align: 'center',
  393. width: 170
  394. },
  395. {
  396. width: 150,
  397. prop: 'paymentRatio',
  398. label: '比例',
  399. align: 'center'
  400. },
  401. {
  402. width: 170,
  403. prop: 'planPaymentAmount',
  404. label: this.form.type == 1 ? '计划收款金额' : '计划付款金额',
  405. align: 'center',
  406. },
  407. {
  408. width: 150,
  409. prop: 'unInvoiceAmount',
  410. label: '未开票金额',
  411. align: 'center'
  412. },
  413. {
  414. width: 150,
  415. prop: 'invoicedAmount',
  416. label: '已开票金额',
  417. align: 'center'
  418. },
  419. {
  420. width: 160,
  421. prop: 'invoiceAmount',
  422. label: '开票金额',
  423. align: 'center',
  424. // slot: 'invoiceAmount',
  425. fixed: 'right'
  426. }
  427. ];
  428. },
  429. },
  430. data() {
  431. return {
  432. dialogType: '',
  433. title: '',
  434. paymentTypeOp,
  435. form: {
  436. salesCompanyUsc: '',
  437. salesCompanyBankBranchNo: '',
  438. salesCompanyBankAccount: '',
  439. accountingSubjectCode: '',
  440. accountingSubjectId: '',
  441. accountingSubjectName: '',
  442. amount: undefined,
  443. applyDeptId: '',
  444. applyDeptName: '',
  445. applyUserId: '',
  446. applyUserName: '',
  447. companyAddress: '',
  448. companyBankAccount: '',
  449. companyUsc: '',
  450. expectInvoiceDate: '',
  451. companyBankBranchNo: '',
  452. companyName: '',
  453. receiverAddress: '',
  454. receiverName: '',
  455. receiverTel: '',
  456. companyTel: '',
  457. detailList: [],
  458. drawerId: '',
  459. drawerName: '',
  460. files: [],
  461. invoiceStatus: '',
  462. link: [],
  463. remark: '',
  464. settlementAccountId: '',
  465. settlementAccountName: '',
  466. type: '',
  467. category: 1
  468. },
  469. isFile: 0,
  470. feeTypeList: [],
  471. accountingSubjectList: [],
  472. deptList: [],
  473. deptTreeList: [],
  474. rules: {
  475. applyDeptId: { required: true, message: '请选择', trigger: 'change' },
  476. applyUserId: { required: true, message: '请选择', trigger: 'change' },
  477. accountingSubjectId: {
  478. required: true,
  479. message: '请选择',
  480. trigger: ['change', 'blur']
  481. },
  482. feeTypeId: { required: true, message: '请选择', trigger: 'change' },
  483. amount: { required: true, message: '请输入', trigger: 'blur' },
  484. type: { required: true, message: '请选择', trigger: 'change' }
  485. }
  486. };
  487. },
  488. created() {
  489. this.init();
  490. parameterGetByCode({
  491. code: 'eos_financialManage_invoiceManage_files'
  492. }).then((res) => {
  493. this.isFile = res.value;
  494. });
  495. },
  496. methods: {
  497. //初始化
  498. async init() {
  499. await this.getClassifyList(24, 'accountingSubjectList');
  500. await this.getDeptList();
  501. await this.getInfo(this.businessId);
  502. this.$nextTick(async () => {
  503. await this.getUserList(this.form.applyDeptId);
  504. });
  505. },
  506. //获取详情
  507. async getInfo(id) {
  508. this.form = await invoiceApplyInfoV2API(id);
  509. this.$nextTick(() => {
  510. this.$refs.tableInfoNewRef && this.$refs.tableInfoNewRef.putValue(this.form);
  511. })
  512. },
  513. //获取分类管理中的数据
  514. async getClassifyList(id, listName) {
  515. let res = await getTreeByPid(id);
  516. this[listName] = res.data;
  517. },
  518. //获取会计科目选中数据
  519. changeSubjectInfo(val) {
  520. if (!val) return (this.form.accountingSubjectName = '');
  521. let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {};
  522. this.form.accountingSubjectName = data.name;
  523. this.$refs.form.validateField('accountingSubjectId');
  524. },
  525. getFiles(val) {
  526. // this.form.files = val;
  527. console.log(val, 'val');
  528. this.$refs.form.validateField('files');
  529. },
  530. // 获取部门数据
  531. getDeptList() {
  532. listOrganizations().then((list) => {
  533. this.deptList = list;
  534. this.deptTreeList = this.$util.toTreeData({
  535. data: list,
  536. idField: 'id',
  537. parentIdField: 'parentId'
  538. });
  539. });
  540. },
  541. // 选择负责人部门
  542. changeDeptInfo(id) {
  543. const info = this.deptList.find((e) => e.id == id) || {};
  544. this.form.applyDeptName = info.name;
  545. this.form.applyUserId = '';
  546. this.form.applyUserName = '';
  547. this.getUserList(id);
  548. },
  549. // 获取人员数据
  550. getUserList(deptId) {
  551. if (deptId) {
  552. this.$refs.directorRef.getList({ deptId });
  553. }
  554. },
  555. //选择人员数据
  556. changeUserInfo(val, info) {
  557. this.form.applyUserName = info.name;
  558. },
  559. //
  560. handleSelType(val) {
  561. this.$refs.table.clearTable();
  562. },
  563. setPrice(val) {
  564. this.form.amount = val;
  565. },
  566. //
  567. getTableValue() {
  568. return new Promise((resolve, reject) => {
  569. this.$refs.form.validate(async (valid) => {
  570. if (!valid) return this.$message.warning('有必填项未填,请检查');
  571. // let tableData = {};
  572. console.log(this.form.sourceType, 'this.form.sourceType');
  573. // if (this.form.sourceType != 4 && this.form.sourceType != 5) {
  574. // tableData = await this.$refs.table.getTableValidate();
  575. // }
  576. // this.form.link = tableData.link;
  577. // this.form.detailList = tableData.detailList;
  578. const API = invoiceApplyUpdateV2API;
  579. const res = await API(this.form);
  580. console.log(res, 'res~~~');
  581. res.code == '0' ? resolve('1') : reject(new Error(res.message));
  582. });
  583. });
  584. }
  585. }
  586. };
  587. </script>
  588. <style scoped lang="scss"></style>