saleForm.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  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="dialogType == 'view' || !!saleOrderData?.id"
  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>
  211. <el-col :span="12">
  212. <el-form-item prop="repliedFiles" label="回执附件">
  213. <fileMain v-model="dataForm.repliedFiles" :type="dialogType == 'view' && taskDefinitionKey != 'uploadReceipt' ? 'view' : 'add'"></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 './customerListDialog.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: {
  248. OrderListDialog,
  249. parentList,
  250. // fileMain,
  251. // contractListDialog
  252. },
  253. //客户管理数据
  254. props: {
  255. dataForm: {
  256. type: Object,
  257. default: () => {
  258. return {};
  259. }
  260. },
  261. taskDefinitionKey: '',
  262. datasource: {
  263. type: Array,
  264. default: () => {
  265. return [];
  266. }
  267. },
  268. dialogType: '',
  269. contactData: {
  270. type: Object,
  271. default: () => {
  272. return {};
  273. }
  274. },
  275. saleOrderData: {
  276. type: Object,
  277. default: () => {
  278. return {};
  279. }
  280. },
  281. // recorpayList: {
  282. // type: Object,
  283. // default: () => {
  284. // return [];
  285. // }
  286. // },
  287. },
  288. data() {
  289. return {
  290. monthByDays: {},
  291. quarterList: {
  292. 一季度: ['-01-01 00:00:00', '-03-31 23:59:59'],
  293. 二季度: ['-04-01 00:00:00', '-06-30 23:59:59'],
  294. 三季度: ['-07-01 00:00:00', '-09-30 23:59:59'],
  295. 四季度: ['-10-01 00:00:00', '-12-31 23:59:59']
  296. },
  297. startTime: '-01-01 00:00:00',
  298. endTime: '23:59:59',
  299. rules: {
  300. sourceType: { required: true, message: '请选择', trigger: 'change' },
  301. contactId: { required: true, message: '请选择', trigger: 'change' },
  302. projectId: { required: true, message: '请选择', trigger: 'change' },
  303. orderId: { required: true, message: '请选择', trigger: 'change' },
  304. dateType: { required: true, message: '请选择', trigger: 'change' },
  305. year: { required: true, message: '请选择', trigger: 'change' },
  306. quarter: { required: true, message: '请选择', trigger: 'change' },
  307. month: { required: true, message: '请选择', trigger: 'change' },
  308. dateTimeRange: {
  309. required: true,
  310. message: '请选择',
  311. trigger: 'change'
  312. },
  313. sourceId: { required: true, message: '请选择', trigger: 'change' },
  314. contractId: { required: true, message: '请选择', trigger: 'change' },
  315. queryDimension: { required: true, message: '请选择', trigger: 'change' },
  316. }
  317. };
  318. },
  319. computed: {
  320. //计算未对账金额
  321. accountStatementPrice() {
  322. return this.datasource.reduce((pre, cur) => pre + +cur.amountTotalPrice, 0);
  323. },
  324. //计算相关订单号
  325. relatedOrderNumber() {
  326. return this.datasource.map((item) => item.orderNo).join(',');
  327. }
  328. },
  329. methods: {
  330. //查询
  331. handleSearch() {
  332. //
  333. switch (this.dataForm.dateType) {
  334. case 1:
  335. this.dataForm.dateValue = this.dataForm.year;
  336. this.dataForm.startDate = this.dataForm.year + this.startTime;
  337. this.dataForm.endDate = this.dataForm.year + '-12-31 23:59:59';
  338. break;
  339. case 2:
  340. this.dataForm.dateValue =
  341. this.dataForm.year + '年-' + this.dataForm.quarter;
  342. this.dataForm.startDate =
  343. this.dataForm.year + this.quarterList[this.dataForm.quarter][0];
  344. this.dataForm.endDate =
  345. this.dataForm.year + this.quarterList[this.dataForm.quarter][1];
  346. break;
  347. case 3:
  348. this.dataForm.dateValue = this.dataForm.month;
  349. this.dataForm.startDate = this.dataForm.month + '-01 00:00:00';
  350. let data = this.dataForm.month.split('-');
  351. let days = new Date(data[0], data[1], 0).getDate();
  352. this.dataForm.endDate =
  353. this.dataForm.month + '-' + days + ' 23:59:59';
  354. break;
  355. default:
  356. this.dataForm.dateValue = '';
  357. this.dataForm.startDate =
  358. this.dataForm.dateTimeRange[0] + ' 00:00:00';
  359. this.dataForm.endDate =
  360. this.dataForm.dateTimeRange[1] + ' 23:59:59';
  361. }
  362. this.$refs.form.validate((validate) => {
  363. if (!validate) return;
  364. this.$emit('handleSearch', this.dataForm);
  365. });
  366. },
  367. //
  368. getDays() {},
  369. //获取客户信息
  370. handleGetCus() {
  371. let item = { id: this.dataForm.contactId };
  372. this.$refs.parentRef.open(item);
  373. },
  374. //选择客户信息回调
  375. getCusInfo(obj) {
  376. let params = Object.assign({}, this.dataForm, {
  377. contactId: obj.id,
  378. contactName: obj.name,
  379. sourceName: obj.name,
  380. sourceId: obj.id
  381. });
  382. this.$emit('update:dataForm', params);
  383. this.reloadTableData();
  384. },
  385. //获取合同信息
  386. handleGetContract() {
  387. this.$refs.selectContractRef.open();
  388. },
  389. changeContract(obj) {
  390. let params = Object.assign({}, this.dataForm, {
  391. contractId: obj.id,
  392. contractName: obj.contractName,
  393. sourceId: obj.id,
  394. sourceName: obj.contractName,
  395. contactId: obj.partaId,
  396. contactName: obj.partaName
  397. });
  398. this.$emit('update:dataForm', params);
  399. this.reloadTableData();
  400. },
  401. //获取订单信息
  402. handleGetOrd() {
  403. let item = { id: this.dataForm.orderId };
  404. this.$refs.orderListDialogRef.open(item);
  405. },
  406. //选择订单信息回调
  407. getOrderInfo(obj) {
  408. this.dataForm.sourceType = 3;
  409. let params = Object.assign({}, this.dataForm, {
  410. orderId: obj.id,
  411. orderNo: obj.orderNo,
  412. contactId: obj.partaId,
  413. contactName: obj.partaName,
  414. sourceName: obj.orderNo,
  415. sourceId: obj.id
  416. });
  417. this.$emit('update:dataForm', params);
  418. this.reloadTableData();
  419. },
  420. //切换来源类型重置数据
  421. handleChange(val) {
  422. let params = Object.assign(
  423. {},
  424. {
  425. ...this.dataForm,
  426. orderNo: '',
  427. orderId: '',
  428. contactId: '',
  429. contactName: '',
  430. sourceName: '',
  431. sourceId: '',
  432. amountPayablePrice: '',
  433. amountReceivablePrice: '',
  434. amountTotalPrice: '',
  435. amountPayablePass: '',
  436. amountReceivablePass: ''
  437. }
  438. );
  439. this.$emit('update:dataForm', params);
  440. this.reloadTableData();
  441. if (val == 1 && this.contactData.id) {
  442. this.getCusInfo(this.contactData);
  443. }
  444. },
  445. reloadTableData() {
  446. this.$emit('update:datasource', []);
  447. // this.$emit('update:recorpayList', []);
  448. },
  449. downloadFile(file) {
  450. getFile({ objectName: file.storePath }, file.name);
  451. }
  452. },
  453. mounted() {
  454. // const year = new Date().getFullYear(); // 获取当前年份
  455. // for (let i = 0; i < 12; i++) {
  456. // // 获取指定月份的天数
  457. // this.monthByDays[i + 1] = new Date(year, i + 1, 0).getDate()
  458. // }
  459. }
  460. };
  461. </script>
  462. <style scoped lang="scss"></style>