saleForm.vue 15 KB

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