tobeconfirm-postchange.vue 54 KB

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