addAccountDialog.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. v-if="visible"
  6. :visible.sync="visible"
  7. :title="title"
  8. :close-on-click-modal="false"
  9. width="80%"
  10. @close="cancel"
  11. >
  12. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  13. <headerTitle title="对账单信息"></headerTitle>
  14. <el-row>
  15. <el-col :span="12">
  16. <el-form-item
  17. label="选择订单"
  18. prop="orderNo"
  19. style="margin-bottom: 22px"
  20. >
  21. <el-input
  22. clearable
  23. v-model="form.orderNo"
  24. @click.native="handleOrderBtn"
  25. placeholder="请输入"
  26. />
  27. </el-form-item>
  28. <el-form-item
  29. label="客户名称"
  30. prop="contactName"
  31. style="margin-bottom: 22px"
  32. >
  33. <el-input
  34. clearable
  35. v-model="form.contactName"
  36. disabled
  37. />
  38. </el-form-item>
  39. <el-form-item
  40. label="项目名称"
  41. prop="projectName"
  42. style="margin-bottom: 22px"
  43. >
  44. <el-input
  45. clearable
  46. v-model="form.projectName"
  47. disabled
  48. />
  49. </el-form-item>
  50. <el-form-item
  51. label="备注"
  52. prop="remark"
  53. style="margin-bottom: 22px"
  54. >
  55. <el-input
  56. clearable
  57. v-model="form.remark"
  58. type="textarea"
  59. placeholder="请输入"
  60. />
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="12">
  64. <el-form-item
  65. label="账期"
  66. prop="accountPeriod"
  67. style="margin-bottom: 22px"
  68. >
  69. <el-date-picker
  70. v-model="form.accountPeriod"
  71. value-format="yyyy-MM"
  72. type="month"
  73. placeholder="选择月">
  74. </el-date-picker>
  75. </el-form-item>
  76. <el-form-item
  77. label="开始日期"
  78. prop="startDate"
  79. style="margin-bottom: 22px"
  80. >
  81. <el-date-picker
  82. v-model="form.startDate"
  83. type="date"
  84. value-format="yyyy-MM-dd"
  85. placeholder="选择日期">
  86. </el-date-picker>
  87. </el-form-item>
  88. <el-form-item
  89. label="结束日期"
  90. prop="endDate"
  91. style="margin-bottom: 22px"
  92. >
  93. <el-date-picker
  94. v-model="form.endDate"
  95. type="date"
  96. value-format="yyyy-MM-dd"
  97. placeholder="选择日期">
  98. </el-date-picker>
  99. </el-form-item>
  100. <el-form-item
  101. label=""
  102. prop=""
  103. style="margin-bottom: 22px"
  104. >
  105. <el-button type="primary" @click="seachAccountDetail">查询明细</el-button>
  106. </el-form-item>
  107. </el-col>
  108. </el-row>
  109. <headerTitle title="对账明细" style="margin-top:30px;"></headerTitle>
  110. <inventoryTable ref="inventoryTableref" ></inventoryTable>
  111. </el-form>
  112. <div slot="footer" class="footer">
  113. <el-button type="primary" @click="save">保存</el-button>
  114. <el-button @click="cancel">返回</el-button>
  115. </div>
  116. <orderListDialog ref="orderListDialogRef" @changeParent="changeOrder"></orderListDialog>
  117. </ele-modal>
  118. </template>
  119. <script>
  120. import { emailReg, phoneReg,numberReg } from 'ele-admin';
  121. import {acceptUnpackoptions} from '@/enum/dict';
  122. import fileUpload from '@/components/upload/fileUpload';
  123. import dictMixins from '@/mixins/dictMixins';
  124. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  125. import personSelect from '@/components/CommomSelect/person-select.vue';
  126. import parentList from '@/views/saleManage/contact/components/parentList.vue'
  127. import { getDetail} from '@/api/contractManage/contractBook';
  128. import { getSaleOrderDetail, UpdateInformation, addInformation,deleteInformation,updateStatus} from '@/api/saleManage/saleorder';
  129. import { addtAccountstatement,UpdatetAccountstatement,gettAccountstatementDetail,getsearchDetailListByType} from '@/api/saleManage/accountstatement';
  130. import {getcontactlink} from '@/api/saleManage/businessFollow';
  131. import inventoryTable from './inventoryTable.vue';
  132. import {listOrganizations} from '@/api/system/organization';
  133. import orderListDialog from './orderListDialog.vue';
  134. import {copyObj} from '@/utils/util';
  135. export default {
  136. mixins: [dictMixins],
  137. components: {
  138. fileUpload,
  139. deptSelect,
  140. inventoryTable,
  141. orderListDialog,
  142. parentList,
  143. personSelect
  144. },
  145. data() {
  146. let formDef = {
  147. id:'',
  148. contractId: '',
  149. contractName: '',
  150. type:1,
  151. orderNo:'',
  152. orderId:'',
  153. orderNum:null,
  154. productNum:null,
  155. projectName:'',
  156. projectId:'',
  157. remark:'',
  158. startDate:'',
  159. endDate:'',
  160. totalPrice:null
  161. };
  162. return {
  163. detailData:{},
  164. payWayOptions:[],
  165. delDetailIds:[],
  166. linkNameOptions:[],
  167. acceptUnpackoptions,
  168. visible: false,
  169. title: '',
  170. row: {},
  171. activeName: 'base',
  172. formDef,
  173. form: copyObj(formDef),
  174. tableBankData: [],
  175. tableLinkData: [],
  176. // 组织机构树形结构数据
  177. groupTreeData: [],
  178. groupData:[],
  179. rules: {
  180. orderNo: [
  181. { required: true, message: '请选择订单', trigger: 'change' }
  182. ],
  183. accountPeriod: [
  184. { required: true, message: '请选择账期', trigger: 'change' }
  185. ],
  186. startDate: [
  187. { required: true, message: '请选择正确的开始日期',validator: this.validateStartDate, trigger: 'change' }
  188. ],
  189. endDate: [
  190. { required: true, message: '请选择正确的结束日期',validator: this.validateEndDate, trigger: 'change' }
  191. ],
  192. },
  193. // 提交状态
  194. loading: false,
  195. // 是否是修改
  196. isUpdate: false,
  197. };
  198. },
  199. computed: {
  200. allcountAmount(){
  201. return this.$store.state.order.allcountAmount
  202. }
  203. },
  204. methods: {
  205. //开始日期验证
  206. validateStartDate(rule, value, callback) {
  207. if (this.form.endDate && value > this.form.endDate) {
  208. callback(new Error('开始日期不能大于结束日期'));
  209. } else {
  210. callback();
  211. }
  212. },
  213. //结束日期验证
  214. validateEndDate(rule, value, callback) {
  215. if (this.form.endDate&&this.form.startDate && value < this.form.startDate) {
  216. callback(new Error('结束日期不能小于开始日期'));
  217. } else {
  218. callback();
  219. }
  220. },
  221. //查询对账单明细
  222. async seachAccountDetail(){
  223. let {orderId,endDate,startDate}=this.form
  224. try {
  225. await this.getValidate();
  226. let parms={
  227. type:1, //1销售订单2采购
  228. orderId,
  229. startDate,
  230. endDate
  231. }
  232. const data = await getsearchDetailListByType(parms);
  233. if(data&&data.length===0){
  234. return this.$message.error('没有数据')
  235. }
  236. this.$refs.inventoryTableref&&this.$refs.inventoryTableref.putTableValue(data)
  237. } catch (error) {
  238. }
  239. },
  240. //选择订单回调
  241. changeOrder(obj){
  242. this.form = Object.assign({},this.form,{
  243. orderId: obj.id,
  244. orderNo: obj.orderNo,
  245. contactId:obj.partaId,
  246. contactName:obj.partaName,
  247. projectName:obj.projectName,
  248. projectId:obj.projectId
  249. })
  250. },
  251. //对账单详情
  252. async gettAccountstatementDetail(id){
  253. this.loading = true;
  254. const data = await gettAccountstatementDetail(id);
  255. this.loading = false;
  256. if (data) {
  257. this.form = data;
  258. this.$refs.inventoryTableref&&this.$refs.inventoryTableref.putTableValue(data.detailList)
  259. this.$nextTick(()=>{
  260. this.$refs.form.validate();
  261. })
  262. }
  263. },
  264. //更新联系人数据
  265. async getLinkInfo(contactId) {
  266. const data = await getcontactlink({contactId});
  267. if(data&&data?.length){
  268. this.linkNameOptions=data
  269. }
  270. },
  271. selectFocus(){
  272. if(this.linkNameOptions.length===0){
  273. return this.$message.error('请先选择名称')
  274. }
  275. },
  276. handHead(){
  277. let item={
  278. id:this.form.partbLinkId
  279. }
  280. this.$refs.headRef.open(item)
  281. },
  282. //选择订单弹框
  283. handleOrderBtn(){
  284. let item = {
  285. id: this.form.orderId
  286. }
  287. this.$refs.orderListDialogRef.open(item)
  288. },
  289. //打开新增编辑弹框
  290. async open(type, row,orderId) {
  291. this.title = type==='add'?'新增发货单':'修改';
  292. this.row = row;
  293. this.visible = true;
  294. if(row&&row?.id){
  295. this.gettAccountstatementDetail(row?.id)
  296. }
  297. if (type == 'add') {
  298. this.isUpdate = false;
  299. } else {
  300. this.isUpdate = true;
  301. }
  302. },
  303. salesmanChange(val, info){
  304. this.otherForm.salesmanName = info.name;
  305. },
  306. settlementModeChange(info){
  307. this.form.settlementModeName = info.dictValue;
  308. },
  309. ifChiefChange(value, idx){
  310. if(value === 1){
  311. this.tableLinkData.forEach(e => e.ifChief = 0);
  312. this.tableLinkData[idx].ifChief = 1;
  313. }
  314. },
  315. getValidate() {
  316. return Promise.all([
  317. new Promise((resolve, reject) => {
  318. this.$refs.form.validate((valid) => {
  319. if (!valid) {
  320. reject(false);
  321. } else {
  322. resolve(true);
  323. }
  324. });
  325. })
  326. ]);
  327. },
  328. async save() {
  329. try {
  330. await this.getValidate();
  331. // 表单验证通过,执行保存操作
  332. this.loading = true;
  333. if (!this.isUpdate) {
  334. delete this.form.id;
  335. }
  336. let [detailList,amountData]=this.$refs.inventoryTableref.getTableValue()
  337. let commitData=Object.assign({},this.form,{
  338. detailList,
  339. ...amountData
  340. })
  341. if (this.isUpdate) {
  342. UpdatetAccountstatement(commitData)
  343. .then((res) => {
  344. this.loading = false;
  345. this.$message.success("修改成功");
  346. this.cancel();
  347. this.$emit('done');
  348. })
  349. .catch((e) => {
  350. //this.loading = false;
  351. });
  352. } else {
  353. addtAccountstatement(commitData)
  354. .then((res) => {
  355. this.loading = false;
  356. this.$message.success("新增成功");
  357. this.cancel();
  358. this.$emit('done');
  359. })
  360. .catch((e) => {
  361. //this.loading = false;
  362. });
  363. }
  364. } catch (error) {
  365. console.log(error)
  366. // 表单验证未通过,不执行保存操作
  367. }
  368. },
  369. cancel() {
  370. this.$nextTick(() => {
  371. this.activeName = 'base';
  372. // 关闭后,销毁所有的表单数据
  373. this.$refs['otherForm'] && this.$refs['otherForm'].resetFields();
  374. this.$refs['formRef'] && this.$refs['formRef'].resetFields();
  375. this.$store.commit('order/clearUserData');
  376. this.form = copyObj(this.formDef)
  377. this.visible = false;
  378. })
  379. },
  380. }
  381. };
  382. </script>
  383. <style scoped lang="scss">
  384. .TotalAmount{
  385. font-size: 16px;
  386. padding-right: 30px;
  387. }
  388. .headbox{
  389. display: flex;
  390. justify-content: flex-start;
  391. align-items: center;
  392. .amount{
  393. font-size: 14px;
  394. font-weight: bold;
  395. margin-right: 20px;
  396. }
  397. }
  398. </style>