saleForm.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  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="contactName" label="客户名称">
  208. <el-input disabled v-model="dataForm.contactName"></el-input>
  209. </el-form-item>
  210. </el-col>
  211. <el-col :span="8" v-if="dialogType == 'view'">
  212. <el-form-item prop="createTime" label="对账时间">
  213. <el-input disabled v-model="dataForm.createTime"></el-input>
  214. </el-form-item>
  215. </el-col>
  216. </el-row>
  217. <el-row v-if="dialogType == 'view'">
  218. <el-col :span="12">
  219. <el-form-item prop="repliedFiles" label="回执附件">
  220. <fileMain v-model="dataForm.repliedFiles" type="view"></fileMain>
  221. </el-form-item>
  222. </el-col>
  223. </el-row>
  224. <el-row v-if="dialogType !== 'view'">
  225. <el-col :span="24">
  226. <el-button
  227. style="float: right"
  228. v-click-once
  229. @click="handleSearch"
  230. type="primary"
  231. >查询</el-button
  232. >
  233. </el-col>
  234. </el-row>
  235. <parentList ref="parentRef" @changeParent="getCusInfo"></parentList>
  236. <orderListDialog
  237. ref="orderListDialogRef"
  238. @changeParent="getOrderInfo"
  239. :contactData="contactData"
  240. :needProduces="dataForm.queryDimension == 2 ? '4' : '0,1,2,5'"
  241. ></orderListDialog>
  242. <contractListDialog
  243. ref="selectContractRef"
  244. @changeParent="changeContract"
  245. :type="1"
  246. :isAdd="true"
  247. ></contractListDialog>
  248. </el-form>
  249. </template>
  250. <script xmlns:el-col="http://www.w3.org/1999/html">
  251. import parentList from '@/views/saleManage/contact/components/parentList.vue';
  252. import OrderListDialog from './orderListDialog.vue';
  253. import { getFile } from '@/api/system/file';
  254. // import fileMain from '@/components/addDoc/index.vue';
  255. import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
  256. import { accountStatementExportAPI } from '@/api/saleManage/accountstatement';
  257. export default {
  258. name: 'saleForm',
  259. components: {
  260. OrderListDialog,
  261. parentList,
  262. // fileMain,
  263. contractListDialog
  264. },
  265. //客户管理数据
  266. props: {
  267. dataForm: {
  268. type: Object,
  269. default: () => {
  270. return {};
  271. }
  272. },
  273. datasource: {
  274. type: Array,
  275. default: () => {
  276. return [];
  277. }
  278. },
  279. dialogType: String,
  280. contactData: {
  281. type: Object,
  282. default: () => {
  283. return {};
  284. }
  285. },
  286. saleOrderData: {
  287. type: Object,
  288. default: () => {
  289. return {};
  290. }
  291. }
  292. // recorpayList: {
  293. // type: Object,
  294. // default: () => {
  295. // return [];
  296. // }
  297. // },
  298. },
  299. data() {
  300. return {
  301. monthByDays: {},
  302. dateTypeOp: [
  303. { label: '按年度', value: 1 },
  304. { label: '按季度', value: 2 },
  305. { label: '按月度', value: 3 },
  306. { label: '按时间段', value: 4 },
  307. { label: '按调拨单', value: 5 }
  308. ],
  309. quarterList: {
  310. 一季度: ['-01-01 00:00:00', '-03-31 23:59:59'],
  311. 二季度: ['-04-01 00:00:00', '-06-30 23:59:59'],
  312. 三季度: ['-07-01 00:00:00', '-09-30 23:59:59'],
  313. 四季度: ['-10-01 00:00:00', '-12-31 23:59:59']
  314. },
  315. startTime: '-01-01 00:00:00',
  316. endTime: '23:59:59',
  317. rules: {
  318. sourceType: { required: true, message: '请选择', trigger: 'change' },
  319. contactId: { required: true, message: '请选择', trigger: 'change' },
  320. projectId: { required: true, message: '请选择', trigger: 'change' },
  321. orderId: { required: true, message: '请选择', trigger: 'change' },
  322. dateType: { required: true, message: '请选择', trigger: 'change' },
  323. year: { required: true, message: '请选择', trigger: 'change' },
  324. quarter: { required: true, message: '请选择', trigger: 'change' },
  325. month: { required: true, message: '请选择', trigger: 'change' },
  326. dateTimeRange: {
  327. required: true,
  328. message: '请选择',
  329. trigger: 'change'
  330. },
  331. sourceId: { required: true, message: '请选择', trigger: 'change' },
  332. contractId: { required: true, message: '请选择', trigger: 'change' },
  333. queryDimension: {
  334. required: true,
  335. message: '请选择',
  336. trigger: 'change'
  337. }
  338. }
  339. };
  340. },
  341. computed: {
  342. // dateTypeOps() {
  343. // return this.dataForm.queryDimension != 2
  344. // ? this.dateTypeOp.filter((item) => item.value != 5)
  345. // : this.dateTypeOp;
  346. // },
  347. //计算未对账金额
  348. accountStatementPrice() {
  349. return this.datasource.reduce(
  350. (pre, cur) => pre + +cur.statementAmount,
  351. 0
  352. );
  353. },
  354. //计算相关订单号
  355. relatedOrderNumber() {
  356. return [...new Set(this.datasource.map((item) => item.orderNo))].join(',');
  357. }
  358. },
  359. methods: {
  360. //查询
  361. handleSearch() {
  362. //
  363. switch (this.dataForm.dateType) {
  364. case 1:
  365. this.dataForm.dateValue = this.dataForm.year;
  366. this.dataForm.startDate = this.dataForm.year + this.startTime;
  367. this.dataForm.endDate = this.dataForm.year + '-12-31 23:59:59';
  368. break;
  369. case 2:
  370. this.dataForm.dateValue =
  371. this.dataForm.year + '年-' + this.dataForm.quarter;
  372. this.dataForm.startDate =
  373. this.dataForm.year + this.quarterList[this.dataForm.quarter][0];
  374. this.dataForm.endDate =
  375. this.dataForm.year + this.quarterList[this.dataForm.quarter][1];
  376. break;
  377. case 3: {
  378. this.dataForm.dateValue = this.dataForm.month;
  379. this.dataForm.startDate = this.dataForm.month + '-01 00:00:00';
  380. const data = this.dataForm.month.split('-');
  381. const days = new Date(data[0], data[1], 0).getDate();
  382. this.dataForm.endDate =
  383. this.dataForm.month + '-' + days + ' 23:59:59';
  384. break;
  385. }
  386. default:
  387. this.dataForm.dateValue = '';
  388. this.dataForm.startDate =
  389. this.dataForm.dateTimeRange[0] + ' 00:00:00';
  390. this.dataForm.endDate =
  391. this.dataForm.dateTimeRange[1] + ' 23:59:59';
  392. }
  393. this.$refs.form.validate((validate) => {
  394. if (!validate) return;
  395. this.$emit('handleSearch', this.dataForm);
  396. });
  397. },
  398. //
  399. getDays() {},
  400. //获取客户信息
  401. handleGetCus() {
  402. let item = { id: this.dataForm.contactId };
  403. this.$refs.parentRef.open(item);
  404. },
  405. //选择客户信息回调
  406. getCusInfo(obj) {
  407. let params = Object.assign({}, this.dataForm, {
  408. contactId: obj.id,
  409. contactName: obj.name,
  410. sourceName: obj.name,
  411. sourceId: obj.id
  412. });
  413. this.$emit('update:dataForm', params);
  414. this.reloadTableData();
  415. },
  416. //获取合同信息
  417. handleGetContract() {
  418. this.$refs.selectContractRef.open();
  419. },
  420. changeContract(obj) {
  421. let params = Object.assign({}, this.dataForm, {
  422. contractId: obj.id,
  423. contractName: obj.contractName,
  424. sourceId: obj.id,
  425. sourceName: obj.contractName,
  426. contactId: obj.partaId,
  427. contactName: obj.partaName
  428. });
  429. this.$emit('update:dataForm', params);
  430. this.reloadTableData();
  431. },
  432. //获取订单信息
  433. handleGetOrd() {
  434. let item = { id: this.dataForm.orderId };
  435. this.$refs.orderListDialogRef.open(item);
  436. },
  437. //选择订单信息回调
  438. getOrderInfo(obj) {
  439. this.dataForm.sourceType = 3;
  440. let params = Object.assign({}, this.dataForm, {
  441. orderId: obj.id,
  442. orderNo: obj.orderNo,
  443. contactId: obj.partaId,
  444. contactName: obj.partaName,
  445. sourceName: obj.orderNo,
  446. sourceId: obj.id
  447. });
  448. this.$emit('update:dataForm', params);
  449. this.reloadTableData();
  450. },
  451. //切换来源类型重置数据
  452. handleChange(val) {
  453. let params = Object.assign(
  454. {},
  455. {
  456. ...this.dataForm,
  457. orderNo: '',
  458. orderId: '',
  459. contactId: '',
  460. contactName: '',
  461. sourceName: '',
  462. sourceId: '',
  463. amountPayablePrice: '',
  464. amountReceivablePrice: '',
  465. amountTotalPrice: '',
  466. amountPayablePass: '',
  467. amountReceivablePass: ''
  468. }
  469. );
  470. this.$emit('update:dataForm', params);
  471. this.reloadTableData();
  472. if (val == 1 && this.contactData.id) {
  473. this.getCusInfo(this.contactData);
  474. }
  475. },
  476. reloadTableData() {
  477. this.$emit('update:datasource', []);
  478. // this.$emit('update:recorpayList', []);
  479. },
  480. downloadFile(file) {
  481. getFile({ objectName: file.storePath }, file.name);
  482. }
  483. },
  484. mounted() {
  485. // const year = new Date().getFullYear(); // 获取当前年份
  486. // for (let i = 0; i < 12; i++) {
  487. // // 获取指定月份的天数
  488. // this.monthByDays[i + 1] = new Date(year, i + 1, 0).getDate()
  489. // }
  490. }
  491. };
  492. </script>
  493. <style scoped lang="scss"></style>