init-postchange.vue 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option"
  4. :table-loading="loading"
  5. :data="data"
  6. :page.sync="page"
  7. :permission="permissionList"
  8. :before-open="beforeOpen"
  9. v-model="form"
  10. ref="crud"
  11. @row-update="rowUpdate"
  12. @row-save="rowSave"
  13. @search-change="searchChange"
  14. @search-reset="searchReset"
  15. @selection-change="selectionChange"
  16. @current-change="currentChange"
  17. @size-change="sizeChange"
  18. @refresh-change="refreshChange"
  19. @on-load="onLoad">
  20. <template slot="menuLeft">
  21. <el-button type="danger"
  22. size="small"
  23. icon="el-icon-delete"
  24. :disabled="delBatchBtn"
  25. plain
  26. v-if="permission.postchange_delete"
  27. @click="handleDelete">刪 除
  28. </el-button>
  29. <el-button type="success"
  30. size="small"
  31. icon="el-icon-setting"
  32. plain
  33. v-if="permission.postchange_setting"
  34. @click="handleSetting">設置審批人
  35. </el-button>
  36. <el-button type="primary"
  37. size="small"
  38. icon="el-icon-download"
  39. plain
  40. v-if="permission.postchange_download"
  41. @click="handleDownload">下載
  42. </el-button>
  43. <el-button type="success"
  44. size="small"
  45. icon="el-icon-refresh"
  46. plain
  47. v-if="permission.postchange_transfer"
  48. @click="handleTransfer">一鍵移交
  49. </el-button>
  50. </template>
  51. <template slot="process" slot-scope="{row, index}">
  52. <el-tag size="small " type="warning" plain v-if="row.process == 2">待確認</el-tag>
  53. <el-tag size="small " type="success" plain v-if="row.process == 3">已確認</el-tag>
  54. </template>
  55. <template slot="menu" slot-scope="{row, index}">
  56. <el-button size="small" class="el-button--text" v-if="permission.postchange_view" @click="handleView(row, index)"><i class="el-icon-view"></i> 查 看</el-button>
  57. <el-button size="small" class="el-button--text" v-if="permission.postchange_edit && userInfo.user_id == row.createUser && row.process != 3" @click="$refs.crud.rowEdit(row, index)"><i class="el-icon-edit"></i> 編 輯</el-button>
  58. <el-button size="small" class="el-button--text" v-if="permission.postchange_delete && userInfo.user_id == row.createUser && row.process != 3" @click="$refs.crud.rowDel(row, index)"><i class="el-icon-delete"></i> 刪 除</el-button>
  59. <el-button size="small" class="el-button--text" v-if="permission.postchange_approve && row.process == 2 && row.personNo == userInfo.user_ehr" @click="approve(row, index)"><i class="el-icon-check"></i> 審 批</el-button>
  60. </template>
  61. <template slot="personNameForm">
  62. <select-dialog-user :disabled="selectDisabled" :id="form.personId" :name="form.personName" :ehr="form.personNo" :callback="selectCallback"></select-dialog-user>
  63. </template>
  64. <template slot="testForm" slot-scope="{row}">
  65. <div>
  66. <el-button type="primary"
  67. size="small"
  68. icon="el-icon-print"
  69. style="position: fixed;right: 100px;top: 200px;border-radius: 73px"
  70. download="myexcel.xls"
  71. v-if="permission.postchange_download && row.process == 3 && type == 'view'"
  72. @click="testExcel">下載Excel
  73. </el-button>
  74. <a href="" download="網點出納主管及專管員崗位變更記錄表.xls" id="dl" style="display: none"></a>
  75. <div id="mytable">
  76. <table v-show="false" border="1" cellpadding="5" cellspacing="5">
  77. <caption>網點出納主管及專管員崗位變更記錄表</caption><!--可以生成表格的标题-->
  78. <tr>
  79. <th>銀行號</th>
  80. <td>{{row.bankNo}}</td>
  81. <th></th>
  82. <th>機構號</th>
  83. <td>{{row.orgNo}}</td>
  84. </tr>
  85. <tr>
  86. <th>申請日期</th>
  87. <td>{{row.applyDate}}</td>
  88. <th></th>
  89. <th>生效日期</th>
  90. <td>{{row.effectiveDate}}</td>
  91. </tr>
  92. <tr>
  93. <th>審批人</th>
  94. <td>{{row.personName}}</td>
  95. <th></th>
  96. <th>審批人員工號</th>
  97. <td>{{row.personNo}}</td>
  98. </tr>
  99. <tr>
  100. <th>備註</th>
  101. <td>{{row.remark}}</td>
  102. <th></th>
  103. <th>填報人</th>
  104. <td>{{row.createUserName}}</td>
  105. </tr>
  106. <tr>
  107. <th>填報人員工號</th>
  108. <td>{{row.createUserNo}}</td>
  109. <th></th>
  110. <th>填報時間</th>
  111. <td>{{row.createTime}}</td>
  112. </tr>
  113. </table>
  114. <br v-show="false">
  115. <table border="1" cellpadding="5" cellspacing="5">
  116. <tr>
  117. <th>人員配置</th>
  118. <th></th>
  119. <th v-if="type != 'view'" colspan="3">網點出納主管</th>
  120. <th v-if="type != 'view'" colspan="3">網點出納專管員</th>
  121. <th v-if="type == 'view'"colspan="6">網點出納主管</th>
  122. <th v-if="type == 'view'"colspan="6">網點出納專管員</th>
  123. </tr>
  124. <tr>
  125. <th></th>
  126. <th></th>
  127. <th v-if="type != 'view'">持有人</th>
  128. <th v-if="type == 'view'">上期持有人</th>
  129. <th v-if="type == 'view'">當前持有人</th>
  130. <th v-if="type != 'view'" colspan="2">後備人員</th>
  131. <th v-if="type == 'view'" colspan="2">上期後備人員</th>
  132. <th v-if="type == 'view'" colspan="2">當前後備人員</th>
  133. <th v-if="type != 'view'">持有人</th>
  134. <th v-if="type == 'view'">上期持有人</th>
  135. <th v-if="type == 'view'">當前持有人</th>
  136. <th v-if="type != 'view'" colspan="2">後備人員</th>
  137. <th v-if="type == 'view'" colspan="2">上期後備人員</th>
  138. <th v-if="type == 'view'" colspan="2">當前後備人員</th>
  139. </tr>
  140. <tr>
  141. <th></th>
  142. <th></th>
  143. <th v-if="type == 'view'">
  144. <span v-for="item in userList">
  145. <span v-if="item.ehr == row.preholderDirector">{{item.text}}</span>
  146. </span>
  147. </th>
  148. <th>
  149. <span v-if="type == 'view'" v-for="item in userList">
  150. <span v-if="item.ehr == row.holderDirector">{{item.text}}</span>
  151. </span>
  152. <el-select v-if="type != 'view'" clearable v-model="row.holderDirector" placeholder="請選擇" :disabled="selectDisabled">
  153. <el-option
  154. v-for="item in userList"
  155. :key="item.ehr"
  156. :label="item.text"
  157. :value="item.ehr">
  158. </el-option>
  159. </el-select>
  160. </th>
  161. <th v-if="type == 'view'">
  162. <span v-for="item in userList">
  163. <span v-if="item.ehr == row.prebackupDirector1">{{item.text}}</span>
  164. </span>
  165. </th>
  166. <th v-if="type == 'view'">
  167. <span v-for="item in userList">
  168. <span v-if="item.ehr == row.prebackupDirector2">{{item.text}}</span>
  169. </span>
  170. </th>
  171. <th>
  172. <span v-if="type == 'view'" v-for="item in userList">
  173. <span v-if="item.ehr == row.backupDirector1">{{item.text}}</span>
  174. </span>
  175. <el-select v-if="type != 'view'" clearable v-model="row.backupDirector1" placeholder="請選擇" :disabled="selectDisabled">
  176. <el-option
  177. v-for="item in userList"
  178. :key="item.ehr"
  179. :label="item.text"
  180. :value="item.ehr">
  181. </el-option>
  182. </el-select>
  183. </th>
  184. <th>
  185. <span v-if="type == 'view'" v-for="item in userList">
  186. <span v-if="item.ehr == row.backupDirector2">{{item.text}}</span>
  187. </span>
  188. <el-select v-if="type != 'view'" clearable v-model="row.backupDirector2" placeholder="請選擇" :disabled="selectDisabled">
  189. <el-option
  190. v-for="item in userList"
  191. :key="item.ehr"
  192. :label="item.text"
  193. :value="item.ehr">
  194. </el-option>
  195. </el-select>
  196. </th>
  197. <th v-if="type == 'view'">
  198. <span v-for="item in userList">
  199. <span v-if="item.ehr == row.preholderManage">{{item.text}}</span>
  200. </span>
  201. </th>
  202. <th>
  203. <span v-if="type == 'view'" v-for="item in userList">
  204. <span v-if="item.ehr == row.holderManage">{{item.text}}</span>
  205. </span>
  206. <el-select v-if="type != 'view'" clearable v-model="row.holderManage" placeholder="請選擇" :disabled="selectDisabled">
  207. <el-option
  208. v-for="item in userList"
  209. :key="item.ehr"
  210. :label="item.text"
  211. :value="item.ehr">
  212. </el-option>
  213. </el-select>
  214. </th>
  215. <th v-if="type == 'view'">
  216. <span v-for="item in userList">
  217. <span v-if="item.ehr == row.prebackupManage1">{{item.text}}</span>
  218. </span>
  219. </th>
  220. <th v-if="type == 'view'">
  221. <span v-for="item in userList">
  222. <span v-if="item.ehr == row.prebackupManage2">{{item.text}}</span>
  223. </span>
  224. </th>
  225. <th>
  226. <span v-if="type == 'view'" v-for="item in userList">
  227. <span v-if="item.ehr == row.backupManage1">{{item.text}}</span>
  228. </span>
  229. <el-select v-if="type != 'view'" clearable v-model="row.backupManage1" placeholder="請選擇" :disabled="selectDisabled">
  230. <el-option
  231. v-for="item in userList"
  232. :key="item.ehr"
  233. :label="item.text"
  234. :value="item.ehr">
  235. </el-option>
  236. </el-select>
  237. </th>
  238. <th>
  239. <span v-if="type == 'view'" v-for="item in userList">
  240. <span v-if="item.ehr == row.backupManage2">{{item.text}}</span>
  241. </span>
  242. <el-select v-if="type != 'view'" clearable v-model="row.backupManage2" placeholder="請選擇" :disabled="selectDisabled">
  243. <el-option
  244. v-for="item in userList"
  245. :key="item.ehr"
  246. :label="item.text"
  247. :value="item.ehr">
  248. </el-option>
  249. </el-select>
  250. </th>
  251. </tr>
  252. <tr v-for="(item1, index1) in dicts">
  253. <th v-if="!(item1.index != 0 && item1.parentName == dicts[index1-1].parentName)" :rowspan="item1.rowspan + ''">{{item1.parentName}}</th>
  254. <th>{{item1.dictValue}}</th>
  255. <th v-if="type == 'view'">
  256. <el-tag size="small " type="success" plain v-if="row['preholder1' + item1.code + '' + item1.dictKey]">√</el-tag>
  257. </th>
  258. <th>
  259. <el-checkbox v-if="type != 'view'" :disabled="selectDisabled || !row.holderDirector" v-model="row['holder1' + item1.code + '' + item1.dictKey]"></el-checkbox>
  260. <el-tag size="small " type="success" plain v-if="row['holder1' + item1.code + '' + item1.dictKey]">√</el-tag>
  261. </th>
  262. <th v-if="type == 'view'">
  263. <el-tag size="small " type="success" plain v-if="row['prebackup1' + item1.code + '' + item1.dictKey]">√</el-tag>
  264. </th>
  265. <th v-if="type == 'view'">
  266. <el-tag size="small " type="success" plain v-if="row['prebackup11' + item1.code + '' + item1.dictKey]">√</el-tag>
  267. </th>
  268. <th>
  269. <el-checkbox v-if="type != 'view'" :disabled="selectDisabled || !row.backupDirector1" v-model="row['backup1' + item1.code + '' + item1.dictKey]"></el-checkbox>
  270. <el-tag size="small " type="success" plain v-if="row['backup1' + item1.code + '' + item1.dictKey]">√</el-tag>
  271. </th>
  272. <th>
  273. <el-checkbox v-if="type != 'view'" :disabled="selectDisabled || !row.backupDirector2" v-model="row['backup11' + item1.code + '' + item1.dictKey]"></el-checkbox>
  274. <el-tag size="small " type="success" plain v-if="row['backup11' + item1.code + '' + item1.dictKey]">√</el-tag>
  275. </th>
  276. <th v-if="type == 'view'">
  277. <el-tag size="small " type="success" plain v-if="row['preholder2' + item1.code + '' + item1.dictKey]">√</el-tag>
  278. </th>
  279. <th>
  280. <el-checkbox v-if="type != 'view'" :disabled="selectDisabled || !row.holderManage" v-model="row['holder2' + item1.code + '' + item1.dictKey]"></el-checkbox>
  281. <el-tag size="small " type="success" plain v-if="row['holder2' + item1.code + '' + item1.dictKey]">√</el-tag>
  282. </th>
  283. <th v-if="type == 'view'">
  284. <el-tag size="small " type="success" plain v-if="row['prebackup2' + item1.code + '' + item1.dictKey]">√</el-tag>
  285. </th>
  286. <th v-if="type == 'view'">
  287. <el-tag size="small " type="success" plain v-if="row['prebackup22' + item1.code + '' + item1.dictKey]">√</el-tag>
  288. </th>
  289. <th>
  290. <el-checkbox v-if="type != 'view'" :disabled="selectDisabled || !row.backupManage1" v-model="row['backup2' + item1.code + '' + item1.dictKey]"></el-checkbox>
  291. <el-tag size="small " type="success" plain v-if="row['backup2' + item1.code + '' + item1.dictKey]">√</el-tag>
  292. </th>
  293. <th>
  294. <el-checkbox v-if="type != 'view'" :disabled="selectDisabled || !row.backupManage2" v-model="row['backup22' + item1.code + '' + item1.dictKey]"></el-checkbox>
  295. <el-tag size="small " type="success" plain v-if="row['backup22' + item1.code + '' + item1.dictKey]">√</el-tag>
  296. </th>
  297. </tr>
  298. </table>
  299. </div>
  300. </div>
  301. </template>
  302. </avue-crud>
  303. <el-dialog :append-to-body="true" :modal-append-to-body="false" :visible.sync="settingVisible" title="設置審批人">
  304. <flow-settings :id="personId" :ehr="personNo" :name="personName" :callback="settingCallback" @close="settingVisible = false"></flow-settings>
  305. </el-dialog>
  306. <div v-show="false">
  307. <avue-crud :option="optionForm" :data="data" v-model="viewForm" ref="crudView" :row-update="approveSubmit"></avue-crud>
  308. </div>
  309. <el-dialog :append-to-body="true" :modal-append-to-body="false" :visible.sync="transferVisible" title="一鍵移交">
  310. <select-dialog-user :callback="transferCallback"></select-dialog-user>
  311. </el-dialog>
  312. </basic-container>
  313. </template>
  314. <script>
  315. import {getList, getDetail, add, update, approve, settingSave, getDictByCode, getSetting, getLastRecord, transfer} from "@/api/bank/postchange";
  316. import {mapGetters} from "vuex";
  317. import { getCurrentDept } from "@/api/system/dept";
  318. import {dateFormat} from "../../util/date";
  319. import FlowSettings from "../../components/common/flow-settings";
  320. import {getPage as getUserList} from "@/api/system/user";
  321. import {getDeptTree, getTree} from "@/api/system/dept";
  322. import {getStandardByCode} from "@/api/bank/handoverstandard";
  323. import SelectDialogUser from "../../components/select-dialog/select-dialog-user";
  324. import {getDictByCodes} from "../../api/system/dict";
  325. import {tableToExcel} from "../../util/util";
  326. export default {
  327. name: "init-postchange",
  328. components: {SelectDialogUser, FlowSettings},
  329. data() {
  330. return {
  331. dicts: [],
  332. transferVisible: false,
  333. selectDisabled: false,
  334. approveFlag: false,
  335. delBatchBtn: true,
  336. type: 'add',
  337. form: {},
  338. viewForm: {},
  339. query: {},
  340. loading: true,
  341. settingVisible: false,
  342. viewVisible: false,
  343. personId: null,
  344. personNo: null,
  345. personName: null,
  346. page: {
  347. pageSize: 10,
  348. currentPage: 1,
  349. total: 0
  350. },
  351. selectionList: [],
  352. userList: [],
  353. option: {
  354. addTitle: '新增【網點出納主管及專管員崗位變更記錄表】',
  355. editTitle: '編輯【網點出納主管及專管員崗位變更記錄表】',
  356. viewTitle: '查看【網點出納主管及專管員崗位變更記錄表】',
  357. height:'auto',
  358. calcHeight: 30,
  359. tip: false,
  360. searchShow: true,
  361. searchMenuSpan: 6,
  362. dialogFullscreen: true,
  363. border: true,
  364. index: false,
  365. viewBtn: false,
  366. // addBtn: true,
  367. editBtn: false,
  368. delBtn: false,
  369. selection: true,
  370. dialogClickModal: false,
  371. column: [
  372. {
  373. label: "銀行號",
  374. prop: "bankNo",
  375. span: 24,
  376. hide: true,
  377. disabled: true,
  378. search: true,
  379. searchSpan: 4,
  380. rules: [{
  381. required: true,
  382. message: "請輸入銀行號",
  383. trigger: "blur"
  384. }]
  385. },
  386. {
  387. label: "機構號",
  388. prop: "orgNo",
  389. hide: true,
  390. disabled: true,
  391. rules: [{
  392. required: true,
  393. message: "請輸入機構號",
  394. trigger: "blur"
  395. }]
  396. },
  397. {
  398. label: "機構名稱",
  399. prop: "orgName",
  400. disabled: true,
  401. rules: [{
  402. required: true,
  403. message: "請輸入機構號",
  404. trigger: "blur"
  405. }]
  406. },
  407. {
  408. label: "區域/支行",
  409. prop: "orgNos",
  410. hide: true,
  411. display: false,
  412. searchMultiple: true,
  413. search: true,
  414. type: "tree",
  415. dicData: [],
  416. props: {
  417. label: "title",
  418. value: "key"
  419. },
  420. checkStrictly: true,
  421. rules: [{
  422. required: true,
  423. message: "請輸入機構號",
  424. trigger: "blur"
  425. }]
  426. },
  427. {
  428. label: "申請日期",
  429. prop: "applyDate",
  430. type: "datetime",
  431. disabled: true,
  432. format: "yyyy-MM-dd",
  433. valueFormat: "yyyy-MM-dd",
  434. rules: [{
  435. required: true,
  436. message: "請輸入申請日期",
  437. trigger: "blur"
  438. }]
  439. },
  440. {
  441. label: "生效日期",
  442. prop: "effectiveDateRange",
  443. type: "date",
  444. format: "yyyy-MM-dd",
  445. valueFormat: "yyyy-MM-dd",
  446. searchRange:true,
  447. hide: true,
  448. addDisplay: false,
  449. editDisplay: false,
  450. viewDisplay: false,
  451. search: true,
  452. rules: [{
  453. required: true,
  454. message: "請輸入交接日期",
  455. trigger: "blur"
  456. }]
  457. },
  458. {
  459. label: "生效日期",
  460. prop: "effectiveDate",
  461. type: "datetime",
  462. format: "yyyy-MM-dd",
  463. valueFormat: "yyyy-MM-dd",
  464. pickerOptions: {
  465. disabledDate(time) {
  466. return time.getTime() < Date.now() - 8.64e7;
  467. }
  468. },
  469. rules: [{
  470. required: true,
  471. message: "請輸入生效日期",
  472. trigger: "blur"
  473. }]
  474. },
  475. {
  476. label: "審批人",
  477. prop: "personName",
  478. formslot: true,
  479. rules: [{
  480. required: true,
  481. message: "請輸入審批人姓名",
  482. trigger: "change"
  483. }]
  484. },
  485. {
  486. label: "審批人員工號",
  487. prop: "personNo",
  488. disabled: true,
  489. rules: [{
  490. required: true,
  491. message: "請輸入審批人員工號",
  492. trigger: "blur"
  493. }]
  494. },
  495. {
  496. label: "備註",
  497. prop: "remark",
  498. rules: [{
  499. required: false,
  500. message: "請輸入備註",
  501. trigger: "blur"
  502. }]
  503. },
  504. {
  505. label: "填報人",
  506. prop: "createUserName",
  507. addDisplay: false,
  508. editDisplay: false,
  509. },
  510. {
  511. label: "填報人員工號",
  512. prop: "createUserNo",
  513. addDisplay: false,
  514. editDisplay: false,
  515. },
  516. {
  517. label: "填報時間",
  518. prop: "createTime",
  519. addDisplay: false,
  520. editDisplay: false,
  521. },
  522. {
  523. label: "進度",
  524. prop: "process",
  525. // slot: true,
  526. viewDisplay: false,
  527. addDisplay: false,
  528. editDisplay: false,
  529. },
  530. ],
  531. group: [
  532. {
  533. label: "人員配置",
  534. column: [
  535. {
  536. // label: "人員配置",
  537. prop: "test",
  538. span: 24,
  539. },
  540. ]
  541. }
  542. ],
  543. },
  544. optionForm: {
  545. dialogClickModal: false,
  546. submitText: "確認",
  547. column: [
  548. {
  549. label: "銀行號",
  550. prop: "bankNo",
  551. span: 24,
  552. hide: true,
  553. disabled: true,
  554. rules: [{
  555. required: true,
  556. message: "請輸入銀行號",
  557. trigger: "blur"
  558. }]
  559. },
  560. {
  561. label: "機構號",
  562. prop: "orgNo",
  563. hide: true,
  564. disabled: true,
  565. rules: [{
  566. required: true,
  567. message: "請輸入機構號",
  568. trigger: "blur"
  569. }]
  570. },
  571. {
  572. label: "機構名稱",
  573. prop: "orgName",
  574. disabled: true,
  575. rules: [{
  576. required: true,
  577. message: "請輸入機構號",
  578. trigger: "blur"
  579. }]
  580. },
  581. {
  582. label: "申請日期",
  583. prop: "applyDate",
  584. type: "datetime",
  585. disabled: true,
  586. format: "yyyy-MM-dd",
  587. valueFormat: "yyyy-MM-dd",
  588. rules: [{
  589. required: true,
  590. message: "請輸入申請日期",
  591. trigger: "blur"
  592. }]
  593. },
  594. {
  595. label: "生效日期",
  596. prop: "effectiveDate",
  597. type: "datetime",
  598. disabled: true,
  599. format: "yyyy-MM-dd",
  600. valueFormat: "yyyy-MM-dd",
  601. rules: [{
  602. required: true,
  603. message: "請輸入生效日期",
  604. trigger: "blur"
  605. }]
  606. },
  607. {
  608. label: "審批人",
  609. prop: "personName",
  610. formslot: true,
  611. rules: [{
  612. required: true,
  613. message: "請輸入審批人姓名",
  614. trigger: "blur"
  615. }]
  616. },
  617. {
  618. label: "審批人員工號",
  619. prop: "personNo",
  620. disabled: true,
  621. rules: [{
  622. required: true,
  623. message: "請輸入審批人員工號",
  624. trigger: "blur"
  625. }]
  626. },
  627. {
  628. label: "備註",
  629. prop: "remark",
  630. disabled: true,
  631. rules: [{
  632. required: false,
  633. message: "請輸入備註",
  634. trigger: "blur"
  635. }]
  636. },
  637. ],
  638. },
  639. groupEdit: [
  640. {
  641. label: "人員配置",
  642. prop: "personSetting",
  643. column: [
  644. {
  645. label: "網點出納主管",
  646. prop: "director",
  647. type: "text",
  648. span: 2,
  649. },
  650. {
  651. label: "持有人",
  652. prop: "holder1",
  653. span: 11,
  654. type: "select",
  655. // multiple: true,
  656. props: {
  657. label: "text",
  658. value: "ehr"
  659. },
  660. rules: [{
  661. required: true,
  662. message: "請輸入持有人",
  663. trigger: "blur"
  664. }]
  665. },
  666. {
  667. label: "後備人員",
  668. prop: "backupPerson1",
  669. span: 11,
  670. type: "select",
  671. multiple: true,
  672. props: {
  673. label: "text",
  674. value: "ehr"
  675. },
  676. rules: [{
  677. required: true,
  678. message: "請輸入後備人員",
  679. trigger: "blur"
  680. }]
  681. },
  682. {
  683. label: "網點出納專管員",
  684. prop: "manager",
  685. type: "text",
  686. span: 2,
  687. },
  688. {
  689. label: "持有人",
  690. prop: "holder2",
  691. span: 11,
  692. type: "select",
  693. multiple: true,
  694. props: {
  695. label: "text",
  696. value: "ehr"
  697. },
  698. rules: [{
  699. required: true,
  700. message: "請輸入持有人",
  701. trigger: "blur"
  702. }]
  703. },
  704. {
  705. label: "後備人員",
  706. prop: "backupPerson2",
  707. span: 11,
  708. type: "select",
  709. multiple: true,
  710. props: {
  711. label: "text",
  712. value: "ehr"
  713. },
  714. rules: [{
  715. required: true,
  716. message: "請輸入後備人員",
  717. trigger: "blur"
  718. }]
  719. },
  720. ]
  721. },
  722. ],
  723. groupView: [
  724. {
  725. label: "人員配置",
  726. prop: "personSetting",
  727. column: [
  728. {
  729. label: "網點出納主管",
  730. prop: "director",
  731. type: "text",
  732. span: 4,
  733. },
  734. {
  735. label: "上期持有人",
  736. prop: "preholder1",
  737. span: 5,
  738. type: "select",
  739. multiple: true,
  740. props: {
  741. label: "text",
  742. value: "ehr"
  743. },
  744. rules: [{
  745. required: true,
  746. message: "請輸入持有人",
  747. trigger: "blur"
  748. }]
  749. },
  750. {
  751. label: "目前持有人",
  752. prop: "holder1",
  753. span: 5,
  754. type: "select",
  755. multiple: true,
  756. props: {
  757. label: "text",
  758. value: "ehr"
  759. },
  760. rules: [{
  761. required: true,
  762. message: "請輸入持有人",
  763. trigger: "blur"
  764. }]
  765. },
  766. {
  767. label: "上期後備人員",
  768. prop: "prebackupPerson1",
  769. span: 5,
  770. type: "select",
  771. multiple: true,
  772. props: {
  773. label: "text",
  774. value: "ehr"
  775. },
  776. rules: [{
  777. required: true,
  778. message: "請輸入後備人員",
  779. trigger: "blur"
  780. }]
  781. },
  782. {
  783. label: "目前後備人員",
  784. prop: "backupPerson1",
  785. span: 5,
  786. type: "select",
  787. multiple: true,
  788. props: {
  789. label: "text",
  790. value: "ehr"
  791. },
  792. rules: [{
  793. required: true,
  794. message: "請輸入後備人員",
  795. trigger: "blur"
  796. }]
  797. },
  798. {
  799. label: "網點出納專管員",
  800. prop: "manager",
  801. type: "text",
  802. span: 4,
  803. },
  804. {
  805. label: "上期持有人",
  806. prop: "preholder2",
  807. span: 5,
  808. type: "select",
  809. multiple: true,
  810. props: {
  811. label: "text",
  812. value: "ehr"
  813. },
  814. rules: [{
  815. required: true,
  816. message: "請輸入持有人",
  817. trigger: "blur"
  818. }]
  819. },
  820. {
  821. label: "目前持有人",
  822. prop: "holder2",
  823. span: 5,
  824. type: "select",
  825. multiple: true,
  826. props: {
  827. label: "text",
  828. value: "ehr"
  829. },
  830. rules: [{
  831. required: true,
  832. message: "請輸入持有人",
  833. trigger: "blur"
  834. }]
  835. },
  836. {
  837. label: "後備人員",
  838. prop: "prebackupPerson2",
  839. span: 5,
  840. type: "select",
  841. multiple: true,
  842. props: {
  843. label: "text",
  844. value: "ehr"
  845. },
  846. rules: [{
  847. required: true,
  848. message: "請輸入後備人員",
  849. trigger: "blur"
  850. }]
  851. },
  852. {
  853. label: "目前後備人員",
  854. prop: "backupPerson2",
  855. span: 5,
  856. type: "select",
  857. multiple: true,
  858. props: {
  859. label: "text",
  860. value: "ehr"
  861. },
  862. rules: [{
  863. required: true,
  864. message: "請輸入後備人員",
  865. trigger: "blur"
  866. }]
  867. },
  868. ]
  869. },
  870. ],
  871. data: []
  872. };
  873. },
  874. computed: {
  875. ...mapGetters(["permission"]),
  876. ...mapGetters(["userInfo"]),
  877. permissionList() {
  878. return {
  879. addBtn: this.vaildData(this.permission.postchange_add, false),
  880. viewBtn: this.vaildData(this.permission.postchange_view, false),
  881. delBtn: this.vaildData(this.permission.postchange_delete, false),
  882. editBtn: this.vaildData(this.permission.postchange_edit, false)
  883. };
  884. },
  885. ids() {
  886. let ids = [];
  887. this.selectionList.forEach(ele => {
  888. ids.push(ele.id);
  889. });
  890. return ids.join(",");
  891. }
  892. },
  893. created() {
  894. const _this = this;
  895. getUserList(1,500, {}).then(res => {
  896. const data = res.data.data.records;
  897. for (let i = 0; i < data.length; i++) {
  898. let item = data[i];
  899. item.text = item.name + '-' + item.ehr;
  900. }
  901. this.userList = data;
  902. /*this.groupEdit[0].column.forEach(item => {
  903. if (item.prop.indexOf('holder') > -1 || item.prop.indexOf('backup') > -1){
  904. item.dicData = data;
  905. }
  906. })
  907. this.groupView[0].column.forEach(item => {
  908. if (item.prop.indexOf('holder') > -1 || item.prop.indexOf('backup') > -1){
  909. item.dicData = data;
  910. }
  911. item.disabled = true;
  912. })*/
  913. this.initForm();
  914. })
  915. },
  916. mounted() {
  917. // this.initForm();
  918. getDeptTree().then(res => {
  919. const column = this.findObject(this.option.column, "orgNos");
  920. let treeData = getTree(res.data.data, this.userInfo.dept_id);
  921. column.dicData = treeData;
  922. });
  923. getStandardByCode("postchange").then(res => {
  924. const data = res.data.data;
  925. if (data){
  926. this.option.addTitle = data.content;
  927. this.option.editTitle = data.content;
  928. this.option.viewTitle = data.content;
  929. }
  930. });
  931. },
  932. methods: {
  933. testExcel(){
  934. let $a = document.getElementById("dl");
  935. $a.href = tableToExcel('mytable', 'testname');
  936. $a.click();
  937. },
  938. handleTransfer(){
  939. if (this.selectionList.length === 0) {
  940. this.$message.warning("請選擇至少一條數據");
  941. return;
  942. }
  943. let personSet = new Set(), processSet = new Set();
  944. for (let i = 0; i < this.selectionList.length; i++) {
  945. let item = this.selectionList[i];
  946. personSet.add(item.personNo);
  947. processSet.add(item.process)
  948. }
  949. if (personSet.size > 1 || processSet.size > 1 || !processSet.has(2)){
  950. this.$message.warning("請選擇同一人員的待確認任務!");
  951. return;
  952. }
  953. this.transferVisible = true;
  954. },
  955. transferCallback(row){
  956. if (this.selectionList && this.selectionList.length > 0 && this.selectionList[0].personNo == row.ehr){
  957. this.$message.warning("移交人不能為原審批人,請重新選擇!")
  958. return;
  959. }
  960. transfer(this.ids, row.ehr).then(() => {
  961. this.onLoad(this.page);
  962. this.transferVisible = false;
  963. this.$message({
  964. type: "success",
  965. message: "移交成功!"
  966. });
  967. });
  968. },
  969. handleDownload(){
  970. if (this.selectionList.length === 0) {
  971. this.$message.warning("請選擇至少一條數據");
  972. return;
  973. }
  974. let columns = this.deepClone(this.option.column);
  975. for (let i = 0; i < columns.length; i++) {
  976. let item = columns[i];
  977. if (item.hide || item.prop == 'process'){
  978. columns.splice(i, 1);
  979. i--;
  980. }
  981. if (item.type == 'select' || item.type == 'tree'){
  982. item.prop = '$' + item.prop;
  983. }
  984. }
  985. this.$Export.excel({
  986. title: "網點出納主管及專管員崗位變更記錄表" || new Date().getTime(),
  987. columns: columns,
  988. data: this.selectionList
  989. });
  990. },
  991. approveSubmit(row){
  992. },
  993. handleView(row, index){
  994. this.form = row;
  995. this.$refs.crud.rowView(row, index)
  996. /*getDetail(this.form.id).then(res => {
  997. let data = res.data.data;
  998. let holder = JSON.parse(data.holder);
  999. let backupPerson = JSON.parse(data.backupPerson);
  1000. Object.assign(data, holder, backupPerson)
  1001. this.form = data;
  1002. this.form.previousId && getDetail(this.form.previousId).then(res => {
  1003. let preData = res.data.data;
  1004. let preholderStr = preData.holder.replace(/holder/ig, 'preholder');
  1005. let prebackupPersonStr = preData.backupPerson.replace(/backup/ig, 'prebackup');
  1006. let propreholder = JSON.parse(preholderStr);
  1007. let prebackupPerson = JSON.parse(prebackupPersonStr);
  1008. Object.assign(data, propreholder, prebackupPerson)
  1009. this.form = data;
  1010. })
  1011. });*/
  1012. // this.viewForm = row;
  1013. // this.$refs.crudView.rowView(row, index)
  1014. },
  1015. approve(row, index){
  1016. this.approveFlag = true;
  1017. this.$refs.crud.rowEdit(row, index)
  1018. },
  1019. selectCallback(value){
  1020. this.form.personId = value.id;
  1021. this.form.personNo = value.ehr;
  1022. this.form.personName = value.name;
  1023. },
  1024. settingCallback(row){
  1025. this.form.personId = row.personId;
  1026. this.form.personNo = row.personNo;
  1027. this.form.personName = row.personName;
  1028. settingSave(this.form).then(() => {
  1029. this.onLoad(this.page);
  1030. this.$message({
  1031. type: "success",
  1032. message: "操作成功!"
  1033. });
  1034. }, error => {
  1035. window.console.log('error');
  1036. });
  1037. },
  1038. handleSetting(){
  1039. getSetting().then((res) => {
  1040. let data = res.data.data;
  1041. if (!!data){
  1042. this.personId = data.personId;
  1043. this.personNo = data.personNo;
  1044. this.personName = data.personName;
  1045. }
  1046. });
  1047. this.settingVisible = true;
  1048. },
  1049. rowDel(row) {
  1050. this.$confirm("確定將選擇數據刪除?", {
  1051. confirmButtonText: "確定",
  1052. cancelButtonText: "取消",
  1053. type: "warning"
  1054. })
  1055. .then(() => {
  1056. return remove(row.id);
  1057. })
  1058. .then(() => {
  1059. this.onLoad(this.page);
  1060. this.$message({
  1061. type: "success",
  1062. message: "操作成功!"
  1063. });
  1064. });
  1065. },
  1066. handleDelete() {
  1067. if (this.selectionList.length === 0) {
  1068. this.$message.warning("請選擇至少一條數據");
  1069. return;
  1070. }
  1071. this.$confirm("確定將選擇數據刪除?", {
  1072. confirmButtonText: "確定",
  1073. cancelButtonText: "取消",
  1074. type: "warning"
  1075. })
  1076. .then(() => {
  1077. return remove(this.ids);
  1078. })
  1079. .then(() => {
  1080. this.onLoad(this.page);
  1081. this.$message({
  1082. type: "success",
  1083. message: "操作成功!"
  1084. });
  1085. this.$refs.crud.toggleSelection();
  1086. });
  1087. },
  1088. rowSave(row, done, loading) {
  1089. this.beforeSave(row)
  1090. add(row).then(() => {
  1091. this.onLoad(this.page);
  1092. this.$message({
  1093. type: "success",
  1094. message: "操作成功!"
  1095. });
  1096. done();
  1097. }, error => {
  1098. loading();
  1099. window.console.log(error);
  1100. });
  1101. // done();
  1102. },
  1103. rowUpdate(row, index, done, loading) {
  1104. if (this.approveFlag){
  1105. approve(row.id).then(() => {
  1106. this.onLoad(this.page);
  1107. this.$message({
  1108. type: "success",
  1109. message: "操作成功!"
  1110. });
  1111. done();
  1112. }, error => {
  1113. loading();
  1114. console.log(error);
  1115. })
  1116. }else{
  1117. // delete row.id;
  1118. delete row.backupPerson;
  1119. delete row.holder;
  1120. this.beforeSave(row)
  1121. update(row).then(() => {
  1122. this.onLoad(this.page);
  1123. this.$message({
  1124. type: "success",
  1125. message: "操作成功!"
  1126. });
  1127. done();
  1128. }, error => {
  1129. loading();
  1130. console.log(error);
  1131. });
  1132. }
  1133. },
  1134. handleEdit(){
  1135. // this.form = this.data[0];
  1136. getLastRecord().then(res => {
  1137. const data = res.data.data || {};
  1138. data.applyDate = '',data.effectiveDate = '',data.remark = '';
  1139. this.approveFlag = false;
  1140. this.$refs.crud.rowEdit(data, 0)
  1141. });
  1142. /*let form = this.deepClone(this.data[0]);
  1143. form.applyDate = '',form.effectiveDate = '',form.remark = '';
  1144. this.approveFlag = false;
  1145. this.$refs.crud.rowEdit(form, 0)*/
  1146. },
  1147. beforeOpen(done, type) {
  1148. this.selectDisabled = type == 'view';
  1149. this.type = type;
  1150. let _this = this;
  1151. let createUserName = this.form.createUserName;
  1152. let createUserNo = this.form.createUserNo;
  1153. if (this.form.id){
  1154. getDetail(this.form.id).then(res => {
  1155. preDeal(res);
  1156. });
  1157. }else {
  1158. preDeal()
  1159. }
  1160. function preDeal(res){
  1161. let data = !!res ? res.data.data : {};
  1162. let holder = !!res ? JSON.parse(data.holder) : {};
  1163. let backupPerson = !!res ? JSON.parse(data.backupPerson) : {};
  1164. Object.assign(data, holder, backupPerson)
  1165. data.createUserName = createUserName;
  1166. data.createUserNo = createUserNo;
  1167. if (type === 'edit' || type === 'add'){
  1168. if (_this.approveFlag){
  1169. _this.selectDisabled = true;
  1170. _this.option.updateBtnText = '確認';
  1171. _this.option.editTitle = '信息審核【網點出納主管及專管員崗位變更記錄表】';
  1172. _this.option.column.forEach(item => {
  1173. item.disabled = true;
  1174. })
  1175. _this.option.group.forEach(g => {
  1176. g.column.forEach(item => {
  1177. item.disabled = true;
  1178. })
  1179. })
  1180. _this.form = data;
  1181. }else{
  1182. // data.applyDate = '',data.remark = '',delete data.id;
  1183. if (type === 'add'){
  1184. data.applyDate = dateFormat(new Date(), "yyyy-MM-dd");
  1185. }
  1186. getCurrentDept().then(res => {
  1187. const data2 = res.data.data;
  1188. data.bankNo = data2.bankNo;
  1189. data.orgNo = data2.orgNo;
  1190. _this.form = data;
  1191. });
  1192. /*getSetting().then((res) => {
  1193. let data = res.data.data;
  1194. if (!!data){
  1195. _this.form.personId = data.personId;
  1196. _this.form.personNo = data.personNo;
  1197. _this.form.personName = data.personName;
  1198. }
  1199. });*/
  1200. _this.option.updateBtnText = '提交';
  1201. _this.option.editTitle = '編輯【網點出納主管及專管員崗位變更記錄表】';
  1202. _this.option.column.forEach(item => {
  1203. if (item.prop == 'bankNo' || item.prop == 'orgNo' || item.prop == 'applyDate'|| item.prop == 'personNo'){
  1204. item.disabled = true;
  1205. }else{
  1206. item.disabled = false;
  1207. }
  1208. })
  1209. _this.option.group.forEach(g => {
  1210. g.column.forEach(item => {
  1211. item.disabled = false;
  1212. })
  1213. })
  1214. }
  1215. }else{
  1216. _this.form = data;
  1217. if (_this.form.previousId){
  1218. getDetail(_this.form.previousId).then(res => {
  1219. let preData = res.data.data;
  1220. let preholderStr = preData.holder.replace(/holder/ig, 'preholder');
  1221. let prebackupPersonStr = preData.backupPerson.replace(/backup/ig, 'prebackup');
  1222. let propreholder = JSON.parse(preholderStr);
  1223. let prebackupPerson = JSON.parse(prebackupPersonStr);
  1224. Object.assign(data, propreholder, prebackupPerson)
  1225. _this.form = data;
  1226. })
  1227. }
  1228. }
  1229. }
  1230. done();
  1231. },
  1232. initForm(){
  1233. /*let holderObj = {
  1234. label: "持有人",
  1235. prop: "holder",
  1236. span: 11,
  1237. type: "select",
  1238. multiple: true,
  1239. dicData: this.userList,
  1240. props: {
  1241. label: "text",
  1242. value: "ehr"
  1243. },
  1244. }
  1245. let backupObj = {
  1246. label: "後備人員",
  1247. prop: "backupPerson",
  1248. span: 11,
  1249. type: "select",
  1250. multiple: true,
  1251. dicData: this.userList,
  1252. props: {
  1253. label: "text",
  1254. value: "ehr"
  1255. },
  1256. }
  1257. getDictByCode("cashier_key_type").then(res => {
  1258. const data = res.data.data;
  1259. let $groupEdit = this.groupEdit;
  1260. let $groupView = this.groupView;
  1261. data.forEach(item => {
  1262. let code = item.dictKey;
  1263. let value = item.dictValue;
  1264. let $item = {};
  1265. let $item12 = {};
  1266. $item.label = value;
  1267. $item12.label = value;
  1268. let column = [];
  1269. let column12 = [];
  1270. getDictByCode(code).then(res2 => {
  1271. const data2 = res2.data.data;
  1272. data2.forEach(item2 => {
  1273. let $item2 = {}
  1274. let $item22 = {}
  1275. $item2.label = item2.dictValue;
  1276. $item22.label = item2.dictValue;
  1277. // $item2.prop = item2.dictKey;
  1278. $item2.type = 'text';
  1279. $item22.type = 'text';
  1280. $item2.span = 2;
  1281. $item22.span = 4;
  1282. column.push($item2)
  1283. column12.push($item22)
  1284. let holderItem = this.deepClone(holderObj);
  1285. let holderItem2 = this.deepClone(holderObj);
  1286. let backupItem = this.deepClone(backupObj);
  1287. let backupItem2 = this.deepClone(backupObj);
  1288. holderItem.prop = 'holder-' + item.dictKey + '-' + item2.dictKey;
  1289. holderItem2.prop = 'preholder-' + item.dictKey + '-' + item2.dictKey;
  1290. holderItem.span = 5;
  1291. holderItem2.span = 5;
  1292. // holderItem.label = '目前' + holderItem.label;
  1293. holderItem2.label = '上期' + holderItem2.label;
  1294. let h1 = this.deepClone(holderItem);
  1295. h1.span = 11;
  1296. column.push(h1)
  1297. column12.push(holderItem2)
  1298. column12.push(holderItem)
  1299. backupItem.prop = 'backupPerson-' + item.dictKey + '-' + item2.dictKey;
  1300. backupItem2.prop = 'prebackupPerson-' + item.dictKey + '-' + item2.dictKey;
  1301. backupItem.span = 5;
  1302. backupItem2.span = 5;
  1303. // backupItem.label = '目前' + backupItem.label;
  1304. backupItem2.label = '上期' + backupItem2.label;
  1305. let b1 = this.deepClone(backupItem);
  1306. b1.span = 11;
  1307. column.push(b1)
  1308. column12.push(backupItem2)
  1309. column12.push(backupItem)
  1310. })
  1311. });
  1312. $item.column = column;
  1313. $item12.column = column12;
  1314. $groupEdit.push($item)
  1315. $groupView.push($item12)
  1316. this.option.group = $groupEdit;
  1317. this.optionForm.group = $groupView
  1318. })
  1319. });*/
  1320. getDictByCodes("cashier_key_type").then(res => {
  1321. const data = res.data.data;
  1322. let dictData = [];
  1323. let codeArr = [];
  1324. let dictKV = {};
  1325. for (let i = 0; i < data.length; i++) {
  1326. let item = data[i];
  1327. let code = item.dictKey;
  1328. let value = item.dictValue;
  1329. codeArr.push(code);
  1330. dictKV[''+code] = value;
  1331. /*getDictByCode(code).then(res2 => {
  1332. const data2 = res2.data.data;
  1333. // item.children = data2;
  1334. for (let h = 0; h < data2.length; h++) {
  1335. let item2 = data2[h], index = h;
  1336. item2.index = index;
  1337. item2.parentName = value;
  1338. item2.rowspan = data2.length;
  1339. dictData.push(item2)
  1340. }
  1341. });*/
  1342. }
  1343. getDictByCodes(codeArr.join()).then(res => {
  1344. dictData = res.data.data;
  1345. let rowspanKV = {};
  1346. for (let j = 0; j < data.length; j++) {
  1347. let item = data[j];
  1348. let code = item.dictKey;
  1349. let value = item.dictValue;
  1350. let index = 0;
  1351. for (let k = 0; k < dictData.length; k++) {
  1352. let item2 = dictData[k];
  1353. if (code == item2.code){
  1354. if (!rowspanKV[''+code]){
  1355. rowspanKV[''+code] = 1;
  1356. }else {
  1357. rowspanKV[''+code]++;
  1358. }
  1359. // rowspanKV[''+code] = item2.rowspan;
  1360. item2.parentName = value;
  1361. item2.index = index;
  1362. index++;
  1363. }
  1364. }
  1365. }
  1366. for (let m = 0; m < dictData.length; m++) {
  1367. let item = dictData[m];
  1368. item.rowspan = rowspanKV[''+item.code]
  1369. }
  1370. this.dicts = dictData;
  1371. })
  1372. // this.dicts = dictData;
  1373. // console.table(dictData)
  1374. });
  1375. },
  1376. beforeSave(row){
  1377. let holder = {}, backupPerson = {};
  1378. let keys = Object.keys(row);
  1379. for (let i = 0; i < keys.length; i++) {
  1380. let key = keys[i];
  1381. if (key.indexOf('holder') > -1){
  1382. holder['' + key] = row['' + key];
  1383. delete row['' + key];
  1384. }
  1385. if (key.indexOf('backup') > -1){
  1386. backupPerson['' + key] = row['' + key];
  1387. delete row['' + key];
  1388. }
  1389. delete row['undefined']
  1390. }
  1391. row.holder = JSON.stringify(holder);
  1392. row.backupPerson = JSON.stringify(backupPerson);
  1393. return row;
  1394. },
  1395. searchReset() {
  1396. this.query = {};
  1397. this.onLoad(this.page);
  1398. },
  1399. searchChange(params, done) {
  1400. if (params.effectiveDateRange){
  1401. params.effectiveDate_begin = params.effectiveDateRange[0], params.effectiveDate_end = params.effectiveDateRange[1];
  1402. params.effectiveDateRange = null;
  1403. }
  1404. if (params.orgNos){
  1405. params.orgNostr = params.orgNos.join();
  1406. params.orgNos = '';
  1407. }
  1408. this.query = params;
  1409. this.page.currentPage = 1;
  1410. this.onLoad(this.page, params);
  1411. done();
  1412. },
  1413. selectionChange(list) {
  1414. this.selectionList = list;
  1415. if (list && list.length > 0){
  1416. let delFlag = true;
  1417. // userInfo.user_id == row.createUser && row.process != 3
  1418. for (let i = 0; i < list.length; i++) {
  1419. let item = list[i];
  1420. delFlag = delFlag && item.createUser == this.userInfo.user_id && item.process != 3;
  1421. }
  1422. this.delBatchBtn = !delFlag;
  1423. }else{
  1424. this.delBatchBtn = true;
  1425. }
  1426. },
  1427. selectionClear() {
  1428. this.selectionList = [];
  1429. this.$refs.crud.toggleSelection();
  1430. },
  1431. currentChange(currentPage){
  1432. this.page.currentPage = currentPage;
  1433. },
  1434. sizeChange(pageSize){
  1435. this.page.pageSize = pageSize;
  1436. },
  1437. refreshChange() {
  1438. this.onLoad(this.page, this.query);
  1439. },
  1440. onLoad(page, params = {}) {
  1441. this.loading = true;
  1442. params.createUser = this.userInfo.user_id;
  1443. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  1444. const data = res.data.data;
  1445. this.page.total = data.total;
  1446. this.data = data.records;
  1447. this.loading = false;
  1448. this.selectionClear();
  1449. });
  1450. }
  1451. }
  1452. };
  1453. </script>
  1454. <style>
  1455. </style>