index.vue 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <!-- <el-form-item label="业务编号" prop="fBillno">-->
  5. <!-- <el-input-->
  6. <!-- v-model="queryParams.fBillno"-->
  7. <!-- placeholder="请输入业务编号"-->
  8. <!-- clearable-->
  9. <!-- size="small"-->
  10. <!-- @keyup.enter.native="handleQuery"-->
  11. <!-- />-->
  12. <!-- </el-form-item>-->
  13. <el-form-item label="客户名称" prop="fCorpid">
  14. <el-select
  15. v-model="queryParams.fCorpid"
  16. filterable
  17. remote
  18. clearable
  19. style="width: 200px"
  20. @keyup.enter.native="handleQuery"
  21. :remote-method="corpsRemoteMethod"
  22. placeholder="请输入客户名称"
  23. >
  24. <el-option
  25. v-for="(dict, index) in fMblnoOptions"
  26. :key="index.fId"
  27. :label="dict.fName"
  28. :value="dict.fId"
  29. ></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <!-- <el-form-item label="货物品名" prop="fGoodsid">-->
  33. <!-- <el-select-->
  34. <!-- v-model="queryParams.fGoodsid"-->
  35. <!-- filterable-->
  36. <!-- remote-->
  37. <!-- clearable-->
  38. <!-- style="width: 200px"-->
  39. <!-- :remote-method="goodsRemoteMethod"-->
  40. <!-- @keyup.enter.native="handleQuery"-->
  41. <!-- placeholder="请输入货物品名"-->
  42. <!-- >-->
  43. <!-- <el-option-->
  44. <!-- v-for="(dict, index) in goodsOptions"-->
  45. <!-- :key="index.fId"-->
  46. <!-- :label="dict.fName"-->
  47. <!-- :value="dict.fId"-->
  48. <!-- ></el-option>-->
  49. <!-- </el-select>-->
  50. <!-- </el-form-item>-->
  51. <el-form-item label="制单部门" prop="fDeptid">
  52. <el-input
  53. v-model="queryParams.fDeptid"
  54. placeholder="请输入制单部门"
  55. clearable
  56. size="small"
  57. @keyup.enter.native="handleQuery"
  58. />
  59. </el-form-item>
  60. <el-form-item label="有效期起" prop="fBegindate">
  61. <el-date-picker clearable size="small" style="width: 200px"
  62. v-model="queryParams.fBegindate"
  63. type="date"
  64. value-format="yyyy-MM-dd"
  65. placeholder="选择有效期起"
  66. >
  67. </el-date-picker>
  68. </el-form-item>
  69. <el-form-item label="有效期至" prop="fEnddate">
  70. <el-date-picker clearable size="small" style="width: 200px"
  71. v-model="queryParams.fEnddate"
  72. type="date"
  73. value-format="yyyy-MM-dd"
  74. placeholder="选择有效期至"
  75. >
  76. </el-date-picker>
  77. </el-form-item>
  78. <el-form-item label="协议编号" prop="fContractno">
  79. <el-input
  80. v-model="queryParams.fContractno"
  81. placeholder="请输入协议编号"
  82. clearable
  83. size="small"
  84. @keyup.enter.native="handleQuery"
  85. />
  86. </el-form-item>
  87. <el-row>
  88. <el-form-item style="float: right;padding: 5px">
  89. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  90. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  91. </el-form-item>
  92. </el-row>
  93. </el-form>
  94. <el-row :gutter="10" class="mb8">
  95. <el-col :span="1.5">
  96. <el-button
  97. type="primary"
  98. icon="el-icon-plus"
  99. size="mini"
  100. @click="handleAdd()"
  101. v-hasPermi="['agreement:agreementStorage:add']"
  102. >新增
  103. </el-button>
  104. </el-col>
  105. <el-col :span="1.5">
  106. <el-button
  107. type="warning"
  108. icon="el-icon-download"
  109. size="mini"
  110. @click="handleExport"
  111. v-hasPermi="['agreement:agreementStorage:export']"
  112. >导出
  113. </el-button>
  114. </el-col>
  115. <el-col :span="1.5">
  116. <el-button
  117. type="info"
  118. icon="el-icon-download"
  119. size="mini"
  120. :disabled="single"
  121. @click="handleUpdate(null,2)"
  122. v-hasPermi="['agreement:agreementStorage:export']"
  123. >复制新增
  124. </el-button>
  125. </el-col>
  126. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  127. </el-row>
  128. <el-table v-loading="loading" :data="agreementList" @selection-change="handleSelectionChange">
  129. <el-table-column type="selection" width="55" align="center"/>
  130. <el-table-column label="合同编号" sortable align="center" prop="fContractno" show-overflow-tooltip/>
  131. <el-table-column label="客户名称" sortable align="center" width="220" prop="fCorpid"/>
  132. <!-- <el-table-column label="货物品名" align="center" prop="fGoodsid"/>-->
  133. <el-table-column label="有效期起" sortable align="center" prop="fBegindate" width="180">
  134. <template slot-scope="scope">
  135. <span>{{ parseTime(scope.row.fBegindate, '{y}-{m}-{d}') }}</span>
  136. </template>
  137. </el-table-column>
  138. <el-table-column label="有效期至" sortable align="center" prop="fEnddate" width="180">
  139. <template slot-scope="scope">
  140. <span>{{ parseTime(scope.row.fEnddate, '{y}-{m}-{d}') }}</span>
  141. </template>
  142. </el-table-column>
  143. <!-- <el-table-column label="状态" align="center" prop="fId" />-->
  144. <el-table-column label="是否启用" align="center" prop="fStatus">
  145. <template slot-scope="scope">
  146. <el-switch
  147. v-model="scope.row.fStatus"
  148. active-value="0"
  149. inactive-value="1"
  150. @change="handleStatusChange(scope.row)"
  151. ></el-switch>
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="状态" align="center" prop="fBillstatus">
  155. <template slot-scope="scope">
  156. <span v-if="scope.row.fBillstatus === '1'">保存</span>
  157. <span v-else-if="scope.row.fBillstatus === '2'">暂存</span>
  158. <span v-else-if="scope.row.fBillstatus === '3'">审批驳回</span>
  159. <span v-else-if="scope.row.fBillstatus === '4'">提交审核</span>
  160. <span v-else-if="scope.row.fBillstatus === '5'">审核中</span>
  161. <span v-else-if="scope.row.fBillstatus === '6'">审核完成</span>
  162. </template>
  163. </el-table-column>
  164. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  165. <template slot-scope="scope">
  166. <el-button
  167. size="mini"
  168. type="text"
  169. icon="el-icon-view"
  170. @click="check_s(scope.row,0)"
  171. v-hasPermi="['agreement:agreementStorage:edit']"
  172. >查看
  173. </el-button>
  174. <el-button
  175. size="mini"
  176. type="text"
  177. icon="el-icon-view"
  178. @click="check(scope.row,1)"
  179. v-hasPermi="['agreement:agreementStorage:edit']"
  180. v-if="scope.row.fBillstatus === '4' || scope.row.fBillstatus === '5'"
  181. >审批进度
  182. </el-button>
  183. <el-button
  184. size="mini"
  185. type="text"
  186. icon="el-icon-edit"
  187. @click="handleUpdate(scope.row,1)"
  188. v-hasPermi="['agreement:agreementStorage:edit']"
  189. v-if="scope.row.fBillstatus < 4"
  190. >修改
  191. </el-button>
  192. <el-button
  193. size="mini"
  194. type="text"
  195. icon="el-icon-delete"
  196. @click="handleDelete(scope.row)"
  197. v-if="scope.row.fBillstatus < 4"
  198. v-hasPermi="['agreement:agreementStorage:remove']"
  199. >删除
  200. </el-button>
  201. </template>
  202. </el-table-column>
  203. </el-table>
  204. <pagination
  205. v-show="total>0"
  206. :total="total"
  207. :page.sync="queryParams.pageNum"
  208. :limit.sync="queryParams.pageSize"
  209. @pagination="getList"
  210. />
  211. <!-- 添加或修改仓储费对话框 -->
  212. <el-dialog
  213. v-dialogDrag
  214. :fullscreen="dialogFull"
  215. :title="title"
  216. :visible.sync="open" width="65%"
  217. append-to-body
  218. :show-close="colseButton"
  219. >
  220. <template slot="title">
  221. <div class="avue-crud__dialog__header">
  222. <span class="el-dialog__title">
  223. <span style="display:inline-block;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px"></span>
  224. 添加仓储费
  225. </span>
  226. <div class="avue-crud__dialog__menu enlarge" @click="full">
  227. <i style="cursor: pointer;display: block;width:12px;height:12px;border:1px solid #909399;border-top:3px solid #909399;margin-top: -3px;"></i>
  228. </div>
  229. </div>
  230. </template>
  231. <el-form ref="form" :model="form" :rules="rules" label-width="80px"
  232. style="display: flex;flex-wrap: wrap;"
  233. >
  234. <el-form-item label="客户名称" prop="fCorpid">
  235. <el-select
  236. :disabled="notChange"
  237. v-model="form.fCorpid"
  238. filterable
  239. clearable
  240. style="width: 200px"
  241. @keyup.enter.native="handleQuery"
  242. placeholder="请输入客户名称"
  243. >
  244. <el-option
  245. v-for="(dict, index) in fMblnoOptions"
  246. :key="index.fId"
  247. :label="dict.fName"
  248. :value="dict.fId"
  249. ></el-option>
  250. </el-select>
  251. </el-form-item>
  252. <el-form-item label="制单部门">
  253. <el-input v-model="deptName" :disabled="true" placeholder="请输入制单部门" style="width: 200px"/>
  254. </el-form-item>
  255. <el-form-item label="有效期起" prop="fBegindate">
  256. <el-date-picker clearable size="small" style="width: 200px"
  257. v-model="form.fBegindate"
  258. type="date"
  259. :disabled="notChange"
  260. value-format="yyyy-MM-dd"
  261. placeholder="选择有效期起"
  262. >
  263. </el-date-picker>
  264. </el-form-item>
  265. <el-form-item label="有效期至" prop="fEnddate">
  266. <el-date-picker clearable size="small" style="width: 200px"
  267. v-model="form.fEnddate"
  268. :disabled="notChange"
  269. type="date"
  270. value-format="yyyy-MM-dd"
  271. placeholder="选择有效期至"
  272. >
  273. </el-date-picker>
  274. </el-form-item>
  275. <el-form-item label="合同编号" prop="fContractno">
  276. <el-input v-model="form.fContractno" :disabled="notChange" placeholder="请输入合同编号" style="width: 200px"/>
  277. </el-form-item>
  278. <el-form-item label="商品类别" prop="tPackages">
  279. <el-select v-model="form.tPackages" :disabled="notChange" placeholder="请选择商品类别">
  280. <el-option
  281. v-for="(dict, index) in fTypeidOptions"
  282. :key="index.dictValue"
  283. :label="dict.dictLabel"
  284. :value="dict.dictValue"
  285. style="width: 210px;"
  286. ></el-option>
  287. </el-select>
  288. </el-form-item>
  289. </el-form>
  290. <el-button type="primary" @click="submit" :disabled="notChange">请 核</el-button>
  291. <div class="dialogTableTitle flex a-center jlr">
  292. <h2>标题</h2>
  293. <el-button @click="getList_s()" :disabled="notChange">新增</el-button>
  294. </div>
  295. <el-table v-loading="loading_s" :data="agreementitemsList" @selection-change="handleSelectionChange">
  296. <!-- <el-table-column type="selection" width="55" align="center"/>-->
  297. <el-table-column label="行号" align="center" type="index"/>
  298. <el-table-column
  299. prop="fFeeunitid"
  300. header-align="center"
  301. align="center"
  302. width="180px"
  303. label="计价单位"
  304. >
  305. <template slot-scope="scope">
  306. <el-select
  307. v-model="scope.row.fFeeunitid"
  308. placeholder="请选择计价单位"
  309. @change="changeFeeUnit(scope.row)"
  310. clearable
  311. :disabled="browseStatus"
  312. >
  313. <el-option
  314. v-for="(dict, index) in jFeetunitOptions"
  315. :key="index.dictValue"
  316. :label="dict.dictLabel"
  317. :value="dict.dictValue"
  318. />
  319. </el-select>
  320. </template>
  321. </el-table-column>
  322. <el-table-column label="开始天数" align="center">
  323. <template slot-scope="scope">
  324. <el-input
  325. v-model="scope.row.fFromdays"
  326. placeholder="请输入开始天数"
  327. oninput='value = value.replace(/[^\d.]/g,"")'
  328. clearable
  329. size="small"
  330. :disabled="notChange"
  331. />
  332. </template>
  333. </el-table-column>
  334. <el-table-column label="结束天数" align="center">
  335. <template slot-scope="scope">
  336. <el-input
  337. v-model="scope.row.fEndays"
  338. placeholder="请输入结束天数"
  339. oninput='value = value.replace(/[^\d.]/g,"")'
  340. clearable
  341. size="small"
  342. :disabled="notChange"
  343. />
  344. </template>
  345. </el-table-column>
  346. <el-table-column label="单价" align="center">
  347. <el-input
  348. slot-scope="scope"
  349. v-model="scope.row.fPrice"
  350. placeholder="请输入单价"
  351. oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")'
  352. clearable
  353. size="small"
  354. :disabled="notChange"
  355. />
  356. </el-table-column>
  357. <el-table-column label="录入人" align="center">
  358. <el-input
  359. slot-scope="scope"
  360. v-model="scope.row.createBy"
  361. :disabled="true"
  362. placeholder="默认录入人"
  363. clearable
  364. size="small"
  365. />
  366. </el-table-column>
  367. <el-table-column label="录入时间" align="center">
  368. <el-input
  369. slot-scope="scope"
  370. v-model="scope.row.createTime"
  371. placeholder="默认录入时间"
  372. :disabled="true"
  373. clearable
  374. size="small"
  375. />
  376. </el-table-column>
  377. <el-table-column
  378. prop="fFeeid"
  379. header-align="center"
  380. align="center"
  381. width="180px"
  382. label="费用名称"
  383. >
  384. <template slot-scope="scope">
  385. <el-select
  386. v-model="scope.row.fFeeid"
  387. filterable
  388. remote
  389. :disabled="browseStatus"
  390. :remote-method="fWRemoteMethod"
  391. placeholder="费用名称"
  392. >
  393. <el-option
  394. v-for="(dict, index) in fWbuOptions"
  395. :key="index.fId"
  396. :label="dict.fName"
  397. :value="dict.fId"
  398. ></el-option>
  399. </el-select>
  400. </template>
  401. </el-table-column>
  402. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  403. <template slot-scope="scope">
  404. <el-button
  405. size="mini"
  406. type="text"
  407. icon="el-icon-delete"
  408. :disabled="browseStatus"
  409. @click.native.prevent="deleteRow(scope.$index, agreementitemsList)"
  410. >删除
  411. </el-button>
  412. </template>
  413. </el-table-column>
  414. </el-table>
  415. <div slot="footer" class="dialog-footer">
  416. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  417. <approval-comments v-if="addOrUpdateVisib" ref="ApprovalComments" @refreshDataList="returnData"></approval-comments>
  418. <el-button v-if="approve === true" @click="goApproval('f_billstatus')">审批</el-button>
  419. <el-button type="danger" @click="backApproval('f_billstatus')" v-if="form.fBillstatus === '4' && operator === lander">撤销审批</el-button>
  420. <el-button type="info" v-if="form.fBillstatus >= 3" @click="addOrUpdateHandle('f_billstatus')">查看审批流</el-button>
  421. <el-button type="success" @click="backrRconciliation" v-if="form.fBillstatus === '6'">撤销请核</el-button>
  422. <el-button type="primary" @click="submitForm" :disabled="notChange">保 存</el-button>
  423. <el-button v-if="cancelButton === true" @click="cancel">取 消</el-button>
  424. <el-button v-if="cancelButton === false" @click="homePage">取消</el-button>
  425. </div>
  426. </el-dialog>
  427. </div>
  428. </template>
  429. <script>
  430. import moment from 'moment'
  431. import {
  432. RevocationApproval,
  433. backFee,
  434. PleaseCheck,
  435. listAgreements,
  436. getAgreement,
  437. delAgreement,
  438. addAgreement,
  439. updateAgreement_s,
  440. exportAgreement,
  441. listAgreementitems,
  442. queryUserVal
  443. } from '@/api/warehouseBusiness/agreement'
  444. import { listCorps } from '@/api/basicdata/corps'
  445. import { listGoods } from '@/api/basicdata/goods'
  446. import { delWarehousebills } from '@/api/warehouseBusiness/warehouseInStock'
  447. import { listGoodsTransfer } from '@/api/warehouseBusiness/goodsTransfer'
  448. import { listFees } from '@/api/basicdata/fees'
  449. import { changeUserStatus } from '@/api/system/user'
  450. import AddOrUpdate from '@/views/viewApproval'
  451. import ApprovalComments from '@/views/startApproval'
  452. import Global from '@/layout/components/global'
  453. import Vue from 'vue'
  454. // import { listUser, queryUserVal } from '@/api/system/user'
  455. Vue.directive('dialogDrag', {
  456. bind(el, binding, vnode, oldVnode) {
  457. const dialogHeaderEl = el.querySelector('.el-dialog__header')
  458. const dragDom = el.querySelector('.el-dialog')
  459. const enlarge = el.querySelector('.enlarge')
  460. dialogHeaderEl.style.cursor = 'move'
  461. // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
  462. const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
  463. if(enlarge){
  464. enlarge.onclick = (e) => {
  465. dragDom.style.top = '0px'
  466. dragDom.style.left = '0px'
  467. }
  468. }
  469. dialogHeaderEl.onmousedown = (e) => {
  470. // 鼠标按下,计算当前元素距离可视区的距离
  471. const disX = e.clientX - dialogHeaderEl.offsetLeft
  472. const disY = e.clientY - dialogHeaderEl.offsetTop
  473. // 获取到的值带px 正则匹配替换
  474. let styL, styT
  475. // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
  476. if (sty.left.includes('%')) {
  477. styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
  478. styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
  479. } else {
  480. styL = +sty.left.replace(/\px/g, '')
  481. styT = +sty.top.replace(/\px/g, '')
  482. }
  483. document.onmousemove = function(e) {
  484. // 通过事件委托,计算移动的距离
  485. const l = e.clientX - disX
  486. const t = e.clientY - disY
  487. // 移动当前元素
  488. if ((t + styT) >= 0){
  489. dragDom.style.top = `${t + styT}px`
  490. }
  491. dragDom.style.left = `${l + styL}px`
  492. // 将此时的位置传出去
  493. // binding.value({x:e.pageX,y:e.pageY})
  494. }
  495. document.onmouseup = function(e) {
  496. document.onmousemove = null
  497. document.onmouseup = null
  498. }
  499. }
  500. }
  501. })
  502. export default {
  503. name: 'Agreement',
  504. components: {
  505. AddOrUpdate,
  506. ApprovalComments
  507. },
  508. data() {
  509. return {
  510. dialogFull:false,
  511. addOrEdid:1,
  512. idCopy:'',
  513. colseButton:true,
  514. cancelButton:true,
  515. // 审批状态
  516. approve:false,
  517. addOrUpdateVisible: false,
  518. addOrUpdateVisib:false,
  519. notChange: false,
  520. dataList: '',
  521. value_s: [],
  522. // 遮罩层
  523. loading: true,
  524. loading_s: false,
  525. browseStatus: false,
  526. // 计价单位
  527. jFeetunitOptions: [],
  528. agreementId: 310,
  529. goodsOptions: [],
  530. fTypeidOptions: [],
  531. // 选中数组
  532. ids: [],
  533. deptName: '',
  534. // 客户(客户数据)
  535. fMblnoOptions: [],
  536. fFeeunitidOptions: [],
  537. fWbuOptions: [],
  538. // 非单个禁用
  539. single: true,
  540. // 非多个禁用
  541. multiple: true,
  542. // 显示搜索条件
  543. showSearch: true,
  544. // 总条数
  545. total: 0,
  546. // 仓储费表格数据
  547. agreementList: [],
  548. // 弹出层标题
  549. title: '',
  550. add: '',
  551. // 是否显示弹出层
  552. open: false,
  553. // 结算方式,也可以从表t_stltypes中下拉选择,存储id,显示name字典
  554. fStltypeidOptions: [],
  555. // 货物类别,存储t_packages,f_id 显示名称,可以多选t_packages 中的no或 name,模糊查找选择后,存储f_id,显示name字典
  556. tPackagesOptions: [],
  557. // 贸易方式,对应t_trademodels 字典
  558. fTrademodeidOptions: [],
  559. // 仓储费明细表表格数据
  560. agreementitemsList: [],
  561. // 操作人
  562. operator: '',
  563. lander: '',
  564. // 查询参数
  565. queryParams: {
  566. pageNum: 1,
  567. pageSize: 10,
  568. fBillno: null,
  569. fDeptid: null,
  570. fContractno: null,
  571. fCorpid: null,
  572. fStltypeid: null,
  573. fGoodsid: null,
  574. fFeetypeid: null,
  575. tPackages: null,
  576. fTrademodeid: null,
  577. fFreedays: null,
  578. fBegindate: null,
  579. fEnddate: null,
  580. fBillstatus: null,
  581. fStatus: null
  582. },
  583. // 表单参数
  584. form: {},
  585. // 表单校验
  586. rules: {
  587. fBillno: [
  588. {
  589. required: true,
  590. message: ' ',
  591. trigger: 'blur'
  592. }
  593. ],
  594. fCorpid: [
  595. { required: true, message: ' ', trigger: 'blur' }
  596. ],
  597. tPackages:[
  598. { required: true, message: ' ', trigger: 'blur' }
  599. ],
  600. fBegindate:[
  601. { required: true, message: ' ', trigger: 'blur' }
  602. ],
  603. fEnddate:[
  604. { required: true, message: ' ', trigger: 'blur' }
  605. ]
  606. }
  607. }
  608. },
  609. created() {
  610. this.getList()
  611. // console.log(fMblnoOptions)
  612. listCorps().then(response => {
  613. this.fMblnoOptions = response.rows
  614. })
  615. this.getDicts('data_settlement_method').then(response => {
  616. this.fStltypeidOptions = response.data
  617. })
  618. this.getDicts('data_package_unit').then(response => {
  619. this.tPackagesOptions = response.data
  620. })
  621. this.getDicts('data_trademodes').then(response => {
  622. this.fTrademodeidOptions = response.data
  623. })
  624. this.getDicts('data_goods_category').then(response => {
  625. this.fTypeidOptions = response.data
  626. })
  627. this.getDicts("data_unitfees").then(response => {
  628. this.jFeetunitOptions = response.data;
  629. });
  630. this.register()
  631. },
  632. activated(){
  633. this.Jump()
  634. },
  635. methods: {
  636. full(){
  637. this.dialogFull = !this.dialogFull
  638. },
  639. //复制新增按钮
  640. handleCopy(){
  641. getAgreement().then(response => {
  642. })
  643. },
  644. homepaGe(){
  645. let view = {
  646. fullPath: "/agreement/agreementStorage",
  647. hash: "",
  648. matched: Array(2),
  649. meta: Object,
  650. name: "AgreementStorage",
  651. params: Object,
  652. path: "/agreement/agreementStorage",
  653. query: Object,
  654. title: "仓储费协议"
  655. }
  656. this.$router.push({ path: '/index'})
  657. this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
  658. if (this.isActive(view)) {
  659. this.toLastView(visitedViews, view)
  660. }
  661. })
  662. Global.$emit("removeCache", "closeSelectedTag", view);
  663. },
  664. homePage() {
  665. this.open = false
  666. let view = {
  667. fullPath: "/agreement/agreementStorage",
  668. hash: "",
  669. matched: Array(2),
  670. meta: Object,
  671. name: "AgreementStorage",
  672. params: Object,
  673. path: "/agreement/agreementStorage",
  674. query: Object,
  675. title: "仓储费协议"
  676. }
  677. this.$router.push({ path: '/index' })
  678. this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {
  679. if (this.isActive(view)) {
  680. this.toLastView(visitedViews, view)
  681. }
  682. })
  683. Global.$emit("removeCache", "closeSelectedTag", view);
  684. },
  685. Jump(){
  686. this.approval = this.$route.query.data
  687. if(this.approval) {
  688. this.approval = JSON.parse(this.approval)
  689. this.colseButton = false
  690. this.hide = false
  691. this.open = true
  692. this.notChange = true
  693. this.approve = true
  694. this.cancelButton = false
  695. this.reset()
  696. getAgreement(this.approval.billId).then(response => {
  697. this.deptName = response.data.dept.deptName
  698. this.form = response.data.tWarehouseAgreement
  699. //--
  700. // this.fMblnoOptions = response.data.corps
  701. this.agreementitemsList = response.data.tWarehouseAgreementitems
  702. for (let item in this.agreementitemsList) {
  703. this.$set(this.agreementitemsList[item], 'fFeeunitid', this.agreementitemsList[item].fFeeunitid + '')
  704. // this.fWRemoteMethod(this.agreementitemsList[item].fFeeid)
  705. }
  706. this.fWbuOptions = response.data.feesList
  707. // this.add = row
  708. this.open = true
  709. this.browseStatus = true
  710. })
  711. }
  712. },
  713. goApproval(status){
  714. this.addOrUpdateVisib = true
  715. this.$nextTick(() => {
  716. this.$refs.ApprovalComments.init(this.form.fId,status,this.agreementId)
  717. })
  718. },
  719. returnData(){
  720. this.addOrUpdateVisib = false
  721. this.open = false
  722. this.homepaGe()
  723. },
  724. getDataList(){
  725. this.addOrUpdateVisible = false
  726. },
  727. // 查看审批流
  728. addOrUpdateHandle(status) {
  729. this.addOrUpdateVisible = true
  730. this.addOrUpdateVisib = false
  731. let id = '448'
  732. let actId = '110'
  733. this.$nextTick(() => {
  734. this.$refs.addOrUpdate.init(this.form.fId, this.agreementId,status)
  735. })
  736. },
  737. register() {
  738. queryUserVal().then((response) => {
  739. this.lander = response.user.userName
  740. })
  741. },
  742. check_s(row, res) {
  743. this.notChange = true
  744. this.browseStatus = true
  745. this.register()
  746. getAgreement(row.fId).then(response => {
  747. // this.$set(this,'fMblnoOptions',response.data.corps)
  748. this.deptName = response.data.dept.deptName
  749. this.form = response.data.tWarehouseAgreement
  750. this.operator = this.form.createBy
  751. this.agreementitemsList = response.data.tWarehouseAgreementitems
  752. for (let item in this.agreementitemsList) {
  753. this.$set(this.agreementitemsList[item], 'fFeeunitid', this.agreementitemsList[item].fFeeunitid + '')
  754. }
  755. this.fWbuOptions = response.data.feesList
  756. this.add = row
  757. this.title = '修改仓储费'
  758. this.open = true
  759. })
  760. },
  761. // 查看按钮
  762. check(row, res) {
  763. this.notChange = true
  764. this.browseStatus = true
  765. this.register()
  766. getAgreement(row.fId).then(response => {
  767. // this.fMblnoOptions = response.data.corps
  768. this.deptName = response.data.dept.deptName
  769. this.form = response.data.tWarehouseAgreement
  770. this.operator = this.form.createBy
  771. this.agreementitemsList = response.data.tWarehouseAgreementitems
  772. for (let item in this.agreementitemsList) {
  773. this.$set(this.agreementitemsList[item], 'fFeeunitid', this.agreementitemsList[item].fFeeunitid + '')
  774. }
  775. this.fWbuOptions = response.data.feesList
  776. this.add = row
  777. this.title = '修改仓储费'
  778. this.open = true
  779. })
  780. },
  781. //撤销审批
  782. backApproval(status) {
  783. let data = {
  784. id: this.form.fId,
  785. actId: this.agreementId,
  786. billId: this.form.fId,
  787. fidStatus: status,
  788. }
  789. RevocationApproval(data).then(data => {
  790. if (data.code === 200) {
  791. this.$message.success('撤销成功')
  792. this.open = false
  793. this.getList()
  794. }
  795. })
  796. },
  797. // 撤销请核
  798. backrRconciliation() {
  799. let formData = new window.FormData()
  800. // 附件数据
  801. formData.append('agreement', JSON.stringify(this.form))
  802. formData.append('agreementitems', JSON.stringify(this.agreementitemsList))
  803. backFee(formData).then(response => {
  804. this.msgSuccess('撤销成功')
  805. this.open = false
  806. this.getList()
  807. })
  808. },
  809. // 请核按钮
  810. submit() {
  811. if (this.agreementitemsList.length <= 0) {
  812. this.$message.error('仓储费协议明细为空,无法操作')
  813. return false
  814. }
  815. for (let agr = 0; agr < this.agreementitemsList.length; agr ++) {
  816. if (!this.agreementitemsList[agr].fFeeunitid) {
  817. this.$message.error('请维护仓储费明细计价单位')
  818. return false
  819. }
  820. if (!this.agreementitemsList[agr].fFromdays) {
  821. this.$message.error('请维护仓储费明细开始天数')
  822. return false
  823. }
  824. if (!this.agreementitemsList[agr].fEndays) {
  825. this.$message.error('请维护仓储费明细结束天数')
  826. return false
  827. }
  828. if (this.agreementitemsList[agr].fPrice.length === 0) {
  829. this.$message.error('请维护仓储费明细单价')
  830. return false
  831. }
  832. if (!this.agreementitemsList[agr].fFeeid) {
  833. this.$message.error('请维护仓储费明细费用名称')
  834. return false
  835. }
  836. }
  837. this.$refs['form'].validate(valid => {
  838. if (valid) {
  839. let formData = new window.FormData()
  840. formData.append('agreement', JSON.stringify(this.form))
  841. formData.append('agreementitems', JSON.stringify(this.agreementitemsList))
  842. PleaseCheck(formData).then(response => {
  843. this.msgSuccess('请核成功')
  844. this.open = false
  845. this.getList()
  846. })
  847. }
  848. })
  849. },
  850. // 仓储费状态修改
  851. handleStatusChange(row) {
  852. if(row.fBillstatus == '6'){
  853. let text = row.fStatus === '0' ? '启用' : '停用'
  854. this.$confirm('确认要"' + text + '""' + row.fCorpid + '"用户吗?', '警告', {
  855. confirmButtonText: '确定',
  856. cancelButtonText: '取消',
  857. type: 'warning'
  858. }).then(function() {
  859. return updateAgreement_s(row.fId, row.fStatus)
  860. }).then(() => {
  861. this.msgSuccess(text + '成功')
  862. }).catch(function() {
  863. row.fStatus = row.fStatus === '0' ? '1' : '0'
  864. })
  865. }else{
  866. row.fStatus = 0
  867. this.$message.error('审核完成时才能启用');
  868. }
  869. },
  870. /** 创建仓储费明细表列表 */
  871. getList_s() {
  872. queryUserVal().then((response) => {
  873. this.agreementitemsList.push({
  874. //行号
  875. fLineno: '',
  876. //计价单位
  877. fFeeunitid: '',
  878. //费用名称
  879. fFeeid: '',
  880. //开始天数
  881. fFromdays: '',
  882. //结束天数
  883. fEndays: '',
  884. //单价
  885. fPrice: '',
  886. //录入人
  887. createBy: response.user.userName,
  888. //创建时间
  889. createTime: moment(Date.parse(new Date())).format('YYYY-MM-DD HH:mm:ss')
  890. })
  891. // this.$set("deptName", response.dept.deptName);
  892. this.deptName = response.dept.deptName
  893. this.form.fDeptid = response.dept.deptId
  894. this.agreementitemsList.createBy = response.user.userName
  895. // this.$set(this.agreementitemsList, "createBy", response.user.userName);
  896. //格式化时间戳
  897. // this.$set(this.agreementitemsList, "createTime", moment(Date.parse(new Date())).format("YYYY-MM-DD HH:mm:ss"));
  898. })
  899. listAgreementitems(this.queryParams).then(response => {
  900. })
  901. },
  902. /* 远程模糊查询商品 */
  903. goodsRemoteMethod(name) {
  904. if (name == null || name === '') {
  905. return false
  906. }
  907. let queryParams = { pageNum: 1, pageSize: 10, fName: name }
  908. listGoods(queryParams).then((response) => {
  909. this.goodsOptions = response.rows
  910. })
  911. },
  912. // 计价单位
  913. fFeeunitidFormat(row, column) {
  914. return this.selectDictLabel(this.fFeeunitidOptions, row.fFeeunitid)
  915. },
  916. /** 查询仓储费列表 */
  917. getList() {
  918. this.loading = true
  919. listAgreements(this.queryParams).then(response => {
  920. this.agreementList = response.rows
  921. this.total = response.total
  922. this.loading = false
  923. })
  924. },
  925. // 远程模糊查询费用名称
  926. fWRemoteMethod(name) {
  927. this.fWbuOptions = []
  928. if (name == null || name === '') {
  929. return false
  930. }
  931. let queryParams = { fName: name }
  932. listFees(queryParams).then((response) => {
  933. this.fWbuOptions = response.rows
  934. })
  935. },
  936. // 结算方式,也可以从表t_stltypes中下拉选择,存储id,显示name字典翻译
  937. fStltypeidFormat(row, column) {
  938. return this.selectDictLabel(this.fStltypeidOptions, row.fStltypeid)
  939. },
  940. // 货物类别,存储t_packages,f_id 显示名称,可以多选t_packages 中的no或 name,模糊查找选择后,存储f_id,显示name字典翻译
  941. tPackagesFormat(row, column) {
  942. return this.selectDictLabel(this.tPackagesOptions, row.tPackages)
  943. },
  944. // 贸易方式,对应t_trademodels 字典翻译
  945. fTrademodeidFormat(row, column) {
  946. return this.selectDictLabel(this.fTrademodeidOptions, row.fTrademodeid)
  947. },
  948. // 取消按钮
  949. cancel() {
  950. this.open = false
  951. this.reset()
  952. this.getList()
  953. this.agreementitemsList = []
  954. },
  955. handleClose() {
  956. this.open = false
  957. this.reset()
  958. this.getList()
  959. this.agreementitemsList = []
  960. },
  961. // 表单重置
  962. reset() {
  963. this.form = {
  964. fId: null,
  965. fBillno: null,
  966. fDeptid: null,
  967. fContractno: null,
  968. fCorpid: null,
  969. fStltypeid: null,
  970. fGoodsid: null,
  971. fFeetypeid: null,
  972. tPackages: null,
  973. fTrademodeid: null,
  974. fFreedays: null,
  975. fBegindate: null,
  976. fEnddate: null,
  977. fBillstatus: null,
  978. delFlag: null,
  979. createBy: null,
  980. createTime: null,
  981. updateBy: null,
  982. updateTime: null,
  983. remark: null
  984. }
  985. this.resetForm('form')
  986. },
  987. /** 搜索按钮操作 */
  988. handleQuery() {
  989. this.queryParams.pageNum = 1
  990. this.getList()
  991. },
  992. // 变更计价单位
  993. changeFeeUnit(row) {
  994. if (!row.fFeeUnitid) {
  995. return false
  996. }
  997. if (row.fFeeUnitid === '0') {
  998. this.$set(row, 'fQty', this.fCntqty)
  999. } else if (row.fFeeUnitid === '1') {
  1000. this.$set(row, 'fQty', this.fGrossweight)
  1001. }
  1002. if (row.fUnitprice) {
  1003. this.$set(
  1004. row,
  1005. 'fAmount',
  1006. parseFloat(Number(row.fUnitprice) * Number(row.fQty)).toFixed(2)
  1007. )
  1008. }
  1009. },
  1010. /** 重置按钮操作 */
  1011. resetQuery() {
  1012. this.resetForm('queryForm')
  1013. this.handleQuery()
  1014. },
  1015. // 多选框选中数据
  1016. handleSelectionChange(selection) {
  1017. this.ids = selection.map(item => item.fId)
  1018. this.idCopy = this.ids[0]
  1019. this.single = selection.length !== 1
  1020. this.multiple = !selection.length
  1021. },
  1022. /** 新增按钮操作 */
  1023. handleAdd() {
  1024. this.form = {}
  1025. this.agreementitemsList = []
  1026. this.reset()
  1027. // this.agreementitemsList = {
  1028. // fFeeunitid:'',
  1029. // fFromdays:'',
  1030. // fEndays:'',
  1031. // fPrice:'',
  1032. // fFeeid:''
  1033. // }
  1034. this.open = true
  1035. this.browseStatus = false
  1036. this.notChange = false
  1037. this.title = '添加仓储费'
  1038. queryUserVal().then((response) => {
  1039. // this.$set("deptName", response.dept.deptName);
  1040. this.deptName = response.dept.deptName
  1041. this.form.fDeptid = response.dept.deptId
  1042. // this.agreementitemsList.createBy = response.user.userName
  1043. // this.$set(this.agreementitemsList, "createBy", response.user.userName);
  1044. //格式化时间戳
  1045. // this.$set(this.agreementitemsList, "createTime", moment(Date.parse(new Date())).format("YYYY-MM-DD HH:mm:ss"));
  1046. })
  1047. },
  1048. /** 修改按钮操作 */
  1049. handleUpdate(row,num) {
  1050. if (num === 2){
  1051. getAgreement(this.idCopy).then(response => {
  1052. this.deptName = response.data.dept.deptName
  1053. this.form = response.data.tWarehouseAgreement
  1054. this.form.fId = null
  1055. this.form.fBillstatus = ''
  1056. // this.fMblnoOptions = response.data.corps
  1057. this.agreementitemsList = response.data.tWarehouseAgreementitems
  1058. for (let item in this.agreementitemsList) {
  1059. this.$set(this.agreementitemsList[item], 'fFeeunitid', this.agreementitemsList[item].fFeeunitid + '')
  1060. // this.fWRemoteMethod(this.agreementitemsList[item].fFeeid)
  1061. }
  1062. this.fWbuOptions = response.data.feesList
  1063. this.add = row
  1064. this.open = true
  1065. this.title = '新增仓储费'
  1066. })
  1067. }else {
  1068. this.notChange = false
  1069. this.browseStatus = false
  1070. const fId = row.fId || this.ids
  1071. getAgreement(fId).then(response => {
  1072. this.deptName = response.data.dept.deptName
  1073. this.form = response.data.tWarehouseAgreement
  1074. // this.fMblnoOptions = response.data.corps
  1075. this.agreementitemsList = response.data.tWarehouseAgreementitems
  1076. for (let item in this.agreementitemsList) {
  1077. this.$set(this.agreementitemsList[item], 'fFeeunitid', this.agreementitemsList[item].fFeeunitid + '')
  1078. // this.fWRemoteMethod(this.agreementitemsList[item].fFeeid)
  1079. }
  1080. this.fWbuOptions = response.data.feesList
  1081. let queryParams = { fName: name }
  1082. listFees(queryParams).then((response) => {
  1083. this.fWbuOptions = response.rows
  1084. })
  1085. this.add = row
  1086. this.open = true
  1087. this.title = '修改仓储费'
  1088. })
  1089. }
  1090. },
  1091. /** 远程模糊查询用户 */
  1092. corpsRemoteMethod(name) {
  1093. if (name == null || name === '') {
  1094. return false
  1095. }
  1096. // let queryParams = { pageNum: 1, pageSize: 10, fName: name, type: 1 }
  1097. // listCorps(queryParams).then((response) => {
  1098. // this.fMblnoOptions = response.rows
  1099. // this.KHblnoOptions = response.rows
  1100. // })
  1101. },
  1102. debounce(fn, delay) {
  1103. let timerId = null;
  1104. return function () {
  1105. let self = this;
  1106. let args = arguments;
  1107. timerId && clearTimeout(timerId);
  1108. timerId = setTimeout(function () {
  1109. fn.apply(self, args);
  1110. }, delay || 1000);
  1111. }
  1112. },
  1113. /** 保存按钮 */
  1114. submitForm() {
  1115. if(this.addOrEdid == 2){
  1116. this.$set(this.form, 'fId', null)
  1117. }
  1118. this.$refs['form'].validate(valid => {
  1119. if (valid) {
  1120. let formData = new window.FormData()
  1121. formData.append('agreement', JSON.stringify(this.form))
  1122. formData.append('agreementitems', JSON.stringify(this.agreementitemsList))
  1123. addAgreement(formData).then(response => {
  1124. this.msgSuccess('操作成功')
  1125. this.$set(this.form, 'fId', response.data.tWarehouseAgreement.fId)
  1126. this.$set(this.form, 'fBillsStatus', response.data.tWarehouseAgreement.fBillsStatus)
  1127. })
  1128. }
  1129. })
  1130. },
  1131. /** 删除按钮操作 */
  1132. handleDelete(row) {
  1133. const fIds = row.fId || this.ids
  1134. this.$confirm('是否确认删除仓储费编号为"' + fIds + '"的数据项?', '警告', {
  1135. confirmButtonText: '确定',
  1136. cancelButtonText: '取消',
  1137. type: 'warning'
  1138. }).then(function() {
  1139. return delAgreement(fIds)
  1140. }).then(() => {
  1141. this.getList()
  1142. this.msgSuccess('删除成功')
  1143. })
  1144. },
  1145. /** 导出按钮操作 */
  1146. handleExport() {
  1147. const queryParams = this.queryParams
  1148. this.$confirm('是否确认导出所有仓储费数据项?', '警告', {
  1149. confirmButtonText: '确定',
  1150. cancelButtonText: '取消',
  1151. type: 'warning'
  1152. }).then(function() {
  1153. return exportAgreement(queryParams)
  1154. }).then(response => {
  1155. this.download(response.msg)
  1156. })
  1157. },
  1158. deleteRow(index, rows) {
  1159. rows.splice(index, 1)
  1160. }
  1161. }
  1162. }
  1163. </script>
  1164. <style lang="scss">
  1165. .avue-crud__dialog__header {
  1166. display: -webkit-box;
  1167. display: -ms-flexbox;
  1168. display: flex;
  1169. -webkit-box-align: center;
  1170. -ms-flex-align: center;
  1171. align-items: center;
  1172. -webkit-box-pack: justify;
  1173. -ms-flex-pack: justify;
  1174. justify-content: space-between;
  1175. }
  1176. .el-dialog__title {
  1177. color: rgba(0,0,0,.85);
  1178. font-weight: 500;
  1179. word-wrap: break-word;
  1180. }
  1181. .avue-crud__dialog__menu {
  1182. padding-right: 20px;
  1183. float: left;
  1184. }
  1185. .avue-crud__dialog__menu i {
  1186. color: #909399;
  1187. font-size: 15px;
  1188. }
  1189. .el-icon-full-screen{
  1190. cursor: pointer;
  1191. }
  1192. .el-icon-full-screen:before {
  1193. content: "\e719";
  1194. }
  1195. </style>