saleForm.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. <template>
  2. <el-form ref="form" :model="dataForm" :rules="rules" label-width="120px">
  3. <headerTitle title="对账单信息"></headerTitle>
  4. <el-row>
  5. <el-col :span="8">
  6. <el-form-item label="来源类型" prop="sourceType">
  7. <el-select
  8. :disabled="dialogType == 'view' || !!saleOrderData?.id"
  9. clearable
  10. class="ele-block"
  11. v-model="dataForm.sourceType"
  12. @change="handleChange"
  13. placeholder="请选择"
  14. >
  15. <el-option label="客户" :value="1" />
  16. <!-- <el-option label="项目" :value="2"/>-->
  17. <!-- <el-option label="合同" :value="4" /> -->
  18. <el-option label="销售订单" :value="3" />
  19. </el-select>
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="8">
  23. <el-form-item
  24. label="选择客户"
  25. prop="contactId"
  26. v-if="dataForm.sourceType == 1"
  27. >
  28. <el-input
  29. :disabled="dialogType == 'view' || !!contactData?.id"
  30. v-model="dataForm.contactName"
  31. @click.native="handleGetCus"
  32. ></el-input>
  33. </el-form-item>
  34. <!-- <el-form-item label="选择项目" prop="projectId" v-if="dataForm.sourceType ==2">-->
  35. <!-- <el-input :disabled="dialogType=='view'" v-model="dataForm.projectId" @click.native="handleGetOrd"></el-input>-->
  36. <!-- </el-form-item>-->
  37. <el-form-item
  38. label="选择订单"
  39. prop="sourceId"
  40. v-if="dataForm.sourceType == 3"
  41. >
  42. <el-input
  43. :disabled="dialogType == 'view'"
  44. v-model="dataForm.sourceName"
  45. @click.native="handleGetOrd"
  46. ></el-input>
  47. </el-form-item>
  48. <el-form-item
  49. label="选择合同"
  50. prop="contractId"
  51. v-if="dataForm.sourceType == 4"
  52. >
  53. <el-input
  54. :disabled="dialogType == 'view'"
  55. v-model="dataForm.sourceName"
  56. @click.native="handleGetContract"
  57. ></el-input>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="8">
  61. <el-form-item label="查询维度" prop="queryDimension">
  62. <el-select
  63. clearable
  64. :disabled="dialogType == 'view'"
  65. class="ele-block"
  66. v-model="dataForm.queryDimension"
  67. placeholder="请选择"
  68. >
  69. <el-option label="按发货单" :value="1" />
  70. <el-option label="按调拨单" :value="2" />
  71. <!-- <el-option label="按收货单" :value="3" /> -->
  72. </el-select>
  73. </el-form-item>
  74. </el-col>
  75. </el-row>
  76. <el-row>
  77. <el-col :span="8">
  78. <el-form-item label="对账方式" prop="dateType">
  79. <el-select
  80. :disabled="dialogType == 'view'"
  81. clearable
  82. class="ele-block"
  83. v-model="dataForm.dateType"
  84. @change="reloadTableData"
  85. placeholder="请选择"
  86. >
  87. <el-option
  88. v-for="item in dateTypeOp"
  89. :key="item.value"
  90. :label="item.label"
  91. :value="item.value"
  92. />
  93. </el-select>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="8" v-if="![2].includes(dataForm.dateType)">
  97. <el-form-item
  98. label="选择年度"
  99. prop="year"
  100. v-if="[1].includes(dataForm.dateType)"
  101. >
  102. <el-date-picker
  103. :disabled="dialogType == 'view'"
  104. v-model="dataForm.year"
  105. value-format="yyyy"
  106. type="year"
  107. style="width: 100%"
  108. @change="reloadTableData"
  109. placeholder="选择年"
  110. >
  111. </el-date-picker>
  112. </el-form-item>
  113. <el-form-item
  114. label="选择月度"
  115. prop="month"
  116. v-if="[3].includes(dataForm.dateType)"
  117. >
  118. <el-date-picker
  119. :disabled="dialogType == 'view'"
  120. v-model="dataForm.month"
  121. value-format="yyyy-MM"
  122. type="month"
  123. @change="reloadTableData"
  124. style="width: 100%"
  125. >
  126. </el-date-picker>
  127. </el-form-item>
  128. <el-form-item
  129. label="选择时间段"
  130. prop="dateTimeRange"
  131. v-if="[4].includes(dataForm.dateType)"
  132. >
  133. <el-date-picker
  134. :key="dataForm.dateType"
  135. :disabled="dialogType == 'view'"
  136. v-model="dataForm.dateTimeRange"
  137. value-format="yyyy-MM-dd"
  138. type="daterange"
  139. @change="reloadTableData"
  140. range-separator="至"
  141. start-placeholder="开始日期"
  142. end-placeholder="结束日期"
  143. style="width: 100%"
  144. >
  145. </el-date-picker>
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="8" v-if="[2].includes(dataForm.dateType)">
  149. <el-form-item
  150. label="选择年度"
  151. prop="year"
  152. v-if="[1, 2].includes(dataForm.dateType)"
  153. >
  154. <el-date-picker
  155. :disabled="dialogType == 'view'"
  156. v-model="dataForm.year"
  157. value-format="yyyy"
  158. type="year"
  159. @change="reloadTableData"
  160. style="width: 100%"
  161. placeholder="选择年"
  162. >
  163. </el-date-picker>
  164. </el-form-item>
  165. </el-col>
  166. <el-col :span="8" v-if="[2].includes(dataForm.dateType)">
  167. <el-form-item
  168. label="选择季度"
  169. prop="quarter"
  170. v-if="[2].includes(dataForm.dateType)"
  171. >
  172. <el-select
  173. :disabled="dialogType == 'view'"
  174. clearable
  175. @change="reloadTableData"
  176. class="ele-block"
  177. v-model="dataForm.quarter"
  178. placeholder="请选择"
  179. >
  180. <el-option label="一季度" value="一季度" />
  181. <el-option label="二季度" value="二季度" />
  182. <el-option label="三季度" value="三季度" />
  183. <el-option label="四季度" value="四季度" />
  184. </el-select>
  185. </el-form-item>
  186. </el-col>
  187. </el-row>
  188. <el-row>
  189. <el-col :span="8">
  190. <el-form-item prop="createUserName" label="本次总对账金额">
  191. <el-input disabled v-model="accountStatementPrice"></el-input>
  192. </el-form-item>
  193. </el-col>
  194. <el-col :span="8">
  195. <el-form-item prop="createUserName" label="关联订单编码">
  196. <el-input disabled v-model="relatedOrderNumber"></el-input>
  197. </el-form-item>
  198. </el-col>
  199. <el-col :span="8" v-if="dialogType == 'view'">
  200. <el-form-item prop="createUserName" label="对账人">
  201. <el-input disabled v-model="dataForm.createUserName"></el-input>
  202. </el-form-item>
  203. </el-col>
  204. </el-row>
  205. <el-row>
  206. <el-col :span="8" v-if="dialogType == 'view'">
  207. <el-form-item prop="createTime" label="对账时间">
  208. <el-input disabled v-model="dataForm.createTime"></el-input>
  209. </el-form-item>
  210. </el-col>
  211. </el-row>
  212. <el-row v-if="dialogType == 'view'">
  213. <el-col :span="12">
  214. <el-form-item prop="repliedFiles" label="回执附件">
  215. <fileMain v-model="dataForm.repliedFiles" type="view"></fileMain>
  216. </el-form-item>
  217. </el-col>
  218. </el-row>
  219. <el-row v-if="dialogType !== 'view'">
  220. <el-col :span="24">
  221. <el-button
  222. style="float: right"
  223. v-click-once
  224. @click="handleSearch"
  225. type="primary"
  226. >查询</el-button
  227. >
  228. </el-col>
  229. </el-row>
  230. <parentList ref="parentRef" @changeParent="getCusInfo"></parentList>
  231. <orderListDialog
  232. ref="orderListDialogRef"
  233. @changeParent="getOrderInfo"
  234. :contactData="contactData"
  235. :needProduces="dataForm.queryDimension == 2 ? '4' : '0,1,2,5'"
  236. ></orderListDialog>
  237. <contractListDialog
  238. ref="selectContractRef"
  239. @changeParent="changeContract"
  240. :type="1"
  241. :isAdd="true"
  242. ></contractListDialog>
  243. </el-form>
  244. </template>
  245. <script xmlns:el-col="http://www.w3.org/1999/html">
  246. import parentList from '@/views/saleManage/contact/components/parentList.vue';
  247. import OrderListDialog from './orderListDialog.vue';
  248. import { getFile } from '@/api/system/file';
  249. // import fileMain from '@/components/addDoc/index.vue';
  250. import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
  251. import { accountStatementExportAPI } from '@/api/saleManage/accountstatement';
  252. export default {
  253. name: 'saleForm',
  254. components: {
  255. OrderListDialog,
  256. parentList,
  257. // fileMain,
  258. contractListDialog
  259. },
  260. //客户管理数据
  261. props: {
  262. dataForm: {
  263. type: Object,
  264. default: () => {
  265. return {};
  266. }
  267. },
  268. datasource: {
  269. type: Array,
  270. default: () => {
  271. return [];
  272. }
  273. },
  274. dialogType: String,
  275. contactData: {
  276. type: Object,
  277. default: () => {
  278. return {};
  279. }
  280. },
  281. saleOrderData: {
  282. type: Object,
  283. default: () => {
  284. return {};
  285. }
  286. }
  287. // recorpayList: {
  288. // type: Object,
  289. // default: () => {
  290. // return [];
  291. // }
  292. // },
  293. },
  294. data() {
  295. return {
  296. monthByDays: {},
  297. dateTypeOp: [
  298. { label: '按年度', value: 1 },
  299. { label: '按季度', value: 2 },
  300. { label: '按月度', value: 3 },
  301. { label: '按时间段', value: 4 },
  302. { label: '按调拨单', value: 5 }
  303. ],
  304. quarterList: {
  305. 一季度: ['-01-01 00:00:00', '-03-31 23:59:59'],
  306. 二季度: ['-04-01 00:00:00', '-06-30 23:59:59'],
  307. 三季度: ['-07-01 00:00:00', '-09-30 23:59:59'],
  308. 四季度: ['-10-01 00:00:00', '-12-31 23:59:59']
  309. },
  310. startTime: '-01-01 00:00:00',
  311. endTime: '23:59:59',
  312. rules: {
  313. sourceType: { required: true, message: '请选择', trigger: 'change' },
  314. contactId: { required: true, message: '请选择', trigger: 'change' },
  315. projectId: { required: true, message: '请选择', trigger: 'change' },
  316. orderId: { required: true, message: '请选择', trigger: 'change' },
  317. dateType: { required: true, message: '请选择', trigger: 'change' },
  318. year: { required: true, message: '请选择', trigger: 'change' },
  319. quarter: { required: true, message: '请选择', trigger: 'change' },
  320. month: { required: true, message: '请选择', trigger: 'change' },
  321. dateTimeRange: {
  322. required: true,
  323. message: '请选择',
  324. trigger: 'change'
  325. },
  326. sourceId: { required: true, message: '请选择', trigger: 'change' },
  327. contractId: { required: true, message: '请选择', trigger: 'change' },
  328. queryDimension: {
  329. required: true,
  330. message: '请选择',
  331. trigger: 'change'
  332. }
  333. }
  334. };
  335. },
  336. computed: {
  337. // dateTypeOps() {
  338. // return this.dataForm.queryDimension != 2
  339. // ? this.dateTypeOp.filter((item) => item.value != 5)
  340. // : this.dateTypeOp;
  341. // },
  342. //计算未对账金额
  343. accountStatementPrice() {
  344. return this.datasource.reduce(
  345. (pre, cur) => pre + +cur.statementAmount,
  346. 0
  347. );
  348. },
  349. //计算相关订单号
  350. relatedOrderNumber() {
  351. return [...new Set(this.datasource.map((item) => item.orderNo))].join(',');
  352. }
  353. },
  354. methods: {
  355. //查询
  356. handleSearch() {
  357. //
  358. switch (this.dataForm.dateType) {
  359. case 1:
  360. this.dataForm.dateValue = this.dataForm.year;
  361. this.dataForm.startDate = this.dataForm.year + this.startTime;
  362. this.dataForm.endDate = this.dataForm.year + '-12-31 23:59:59';
  363. break;
  364. case 2:
  365. this.dataForm.dateValue =
  366. this.dataForm.year + '年-' + this.dataForm.quarter;
  367. this.dataForm.startDate =
  368. this.dataForm.year + this.quarterList[this.dataForm.quarter][0];
  369. this.dataForm.endDate =
  370. this.dataForm.year + this.quarterList[this.dataForm.quarter][1];
  371. break;
  372. case 3: {
  373. this.dataForm.dateValue = this.dataForm.month;
  374. this.dataForm.startDate = this.dataForm.month + '-01 00:00:00';
  375. const data = this.dataForm.month.split('-');
  376. const days = new Date(data[0], data[1], 0).getDate();
  377. this.dataForm.endDate =
  378. this.dataForm.month + '-' + days + ' 23:59:59';
  379. break;
  380. }
  381. default:
  382. this.dataForm.dateValue = '';
  383. this.dataForm.startDate =
  384. this.dataForm.dateTimeRange[0] + ' 00:00:00';
  385. this.dataForm.endDate =
  386. this.dataForm.dateTimeRange[1] + ' 23:59:59';
  387. }
  388. this.$refs.form.validate((validate) => {
  389. if (!validate) return;
  390. this.$emit('handleSearch', this.dataForm);
  391. });
  392. },
  393. //
  394. getDays() {},
  395. //获取客户信息
  396. handleGetCus() {
  397. let item = { id: this.dataForm.contactId };
  398. this.$refs.parentRef.open(item);
  399. },
  400. //选择客户信息回调
  401. getCusInfo(obj) {
  402. let params = Object.assign({}, this.dataForm, {
  403. contactId: obj.id,
  404. contactName: obj.name,
  405. sourceName: obj.name,
  406. sourceId: obj.id
  407. });
  408. this.$emit('update:dataForm', params);
  409. this.reloadTableData();
  410. },
  411. //获取合同信息
  412. handleGetContract() {
  413. this.$refs.selectContractRef.open();
  414. },
  415. changeContract(obj) {
  416. let params = Object.assign({}, this.dataForm, {
  417. contractId: obj.id,
  418. contractName: obj.contractName,
  419. sourceId: obj.id,
  420. sourceName: obj.contractName,
  421. contactId: obj.partaId,
  422. contactName: obj.partaName
  423. });
  424. this.$emit('update:dataForm', params);
  425. this.reloadTableData();
  426. },
  427. //获取订单信息
  428. handleGetOrd() {
  429. let item = { id: this.dataForm.orderId };
  430. this.$refs.orderListDialogRef.open(item);
  431. },
  432. //选择订单信息回调
  433. getOrderInfo(obj) {
  434. this.dataForm.sourceType = 3;
  435. let params = Object.assign({}, this.dataForm, {
  436. orderId: obj.id,
  437. orderNo: obj.orderNo,
  438. contactId: obj.partaId,
  439. contactName: obj.partaName,
  440. sourceName: obj.orderNo,
  441. sourceId: obj.id
  442. });
  443. this.$emit('update:dataForm', params);
  444. this.reloadTableData();
  445. },
  446. //切换来源类型重置数据
  447. handleChange(val) {
  448. let params = Object.assign(
  449. {},
  450. {
  451. ...this.dataForm,
  452. orderNo: '',
  453. orderId: '',
  454. contactId: '',
  455. contactName: '',
  456. sourceName: '',
  457. sourceId: '',
  458. amountPayablePrice: '',
  459. amountReceivablePrice: '',
  460. amountTotalPrice: '',
  461. amountPayablePass: '',
  462. amountReceivablePass: ''
  463. }
  464. );
  465. this.$emit('update:dataForm', params);
  466. this.reloadTableData();
  467. if (val == 1 && this.contactData.id) {
  468. this.getCusInfo(this.contactData);
  469. }
  470. },
  471. reloadTableData() {
  472. this.$emit('update:datasource', []);
  473. // this.$emit('update:recorpayList', []);
  474. },
  475. downloadFile(file) {
  476. getFile({ objectName: file.storePath }, file.name);
  477. }
  478. },
  479. mounted() {
  480. // const year = new Date().getFullYear(); // 获取当前年份
  481. // for (let i = 0; i < 12; i++) {
  482. // // 获取指定月份的天数
  483. // this.monthByDays[i + 1] = new Date(year, i + 1, 0).getDate()
  484. // }
  485. }
  486. };
  487. </script>
  488. <style scoped lang="scss"></style>