tobeconfirm-postchange.vue 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571
  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. display: false,
  397. search: false,
  398. searchSpan: 4,
  399. rules: [{
  400. required: true,
  401. message: "請輸入銀行號",
  402. trigger: "blur"
  403. }]
  404. },
  405. {
  406. label: "機構號",
  407. prop: "orgNo",
  408. hide: true,
  409. disabled: true,
  410. display: false,
  411. rules: [{
  412. required: true,
  413. message: "請輸入機構號",
  414. trigger: "blur"
  415. }]
  416. },
  417. {
  418. label: "機構名稱",
  419. prop: "orgName",
  420. disabled: true,
  421. span: 24,
  422. rules: [{
  423. required: true,
  424. message: "請輸入機構號",
  425. trigger: "blur"
  426. }]
  427. },
  428. {
  429. label: "區域/支行",
  430. prop: "orgNos",
  431. hide: true,
  432. display: false,
  433. searchMultiple: true,
  434. search: true,
  435. type: "tree",
  436. dicData: [],
  437. props: {
  438. label: "title",
  439. value: "key"
  440. },
  441. checkStrictly: true,
  442. rules: [{
  443. required: true,
  444. message: "請輸入機構號",
  445. trigger: "blur"
  446. }]
  447. },
  448. {
  449. label: "申請日期",
  450. prop: "applyDate",
  451. type: "datetime",
  452. disabled: true,
  453. format: "yyyy-MM-dd",
  454. valueFormat: "yyyy-MM-dd",
  455. rules: [{
  456. required: true,
  457. message: "請輸入申請日期",
  458. trigger: "blur"
  459. }]
  460. },
  461. {
  462. label: "生效日期",
  463. prop: "effectiveDateRange",
  464. type: "date",
  465. format: "yyyy-MM-dd",
  466. valueFormat: "yyyy-MM-dd",
  467. searchRange:true,
  468. hide: true,
  469. addDisplay: false,
  470. editDisplay: false,
  471. viewDisplay: false,
  472. search: true,
  473. rules: [{
  474. required: true,
  475. message: "請輸入交接日期",
  476. trigger: "blur"
  477. }]
  478. },
  479. {
  480. label: "生效日期",
  481. prop: "effectiveDate",
  482. type: "date",
  483. format: "yyyy-MM-dd",
  484. valueFormat: "yyyy-MM-dd",
  485. pickerOptions: {
  486. disabledDate(time) {
  487. return time.getTime() < Date.now() - 8.64e7;
  488. }
  489. },
  490. rules: [{
  491. required: true,
  492. message: "請輸入生效日期",
  493. trigger: "blur"
  494. }]
  495. },
  496. {
  497. label: "審批人",
  498. prop: "personName",
  499. formslot: true,
  500. rules: [{
  501. required: true,
  502. message: "請輸入審批人姓名",
  503. trigger: "change"
  504. }]
  505. },
  506. {
  507. label: "審批人員工號",
  508. prop: "personNo",
  509. disabled: true,
  510. rules: [{
  511. required: true,
  512. message: "請輸入審批人員工號",
  513. trigger: "blur"
  514. }]
  515. },
  516. {
  517. label: "備註",
  518. prop: "remark",
  519. rules: [{
  520. required: false,
  521. message: "請輸入備註",
  522. trigger: "blur"
  523. }]
  524. },
  525. {
  526. label: "填報人",
  527. prop: "createUserName",
  528. addDisplay: false,
  529. editDisplay: false,
  530. },
  531. {
  532. label: "填報人員工號",
  533. prop: "createUserNo",
  534. addDisplay: false,
  535. editDisplay: false,
  536. },
  537. {
  538. label: "填報時間",
  539. prop: "createTime",
  540. addDisplay: false,
  541. editDisplay: false,
  542. },
  543. {
  544. label: "進度",
  545. prop: "process",
  546. // slot: true,
  547. viewDisplay: false,
  548. addDisplay: false,
  549. editDisplay: false,
  550. },
  551. ],
  552. group: [
  553. {
  554. label: "人員配置",
  555. column: [
  556. {
  557. // label: "人員配置",
  558. prop: "test",
  559. span: 24,
  560. },
  561. ]
  562. }
  563. ],
  564. },
  565. optionForm: {
  566. dialogClickModal: false,
  567. submitText: "確認",
  568. column: [
  569. {
  570. label: "銀行號",
  571. prop: "bankNo",
  572. span: 24,
  573. hide: true,
  574. disabled: true,
  575. display: false,
  576. rules: [{
  577. required: true,
  578. message: "請輸入銀行號",
  579. trigger: "blur"
  580. }]
  581. },
  582. {
  583. label: "機構號",
  584. prop: "orgNo",
  585. hide: true,
  586. disabled: true,
  587. display: false,
  588. rules: [{
  589. required: true,
  590. message: "請輸入機構號",
  591. trigger: "blur"
  592. }]
  593. },
  594. {
  595. label: "機構名稱",
  596. prop: "orgName",
  597. span: 24,
  598. disabled: true,
  599. rules: [{
  600. required: true,
  601. message: "請輸入機構號",
  602. trigger: "blur"
  603. }]
  604. },
  605. {
  606. label: "申請日期",
  607. prop: "applyDate",
  608. type: "datetime",
  609. disabled: true,
  610. format: "yyyy-MM-dd",
  611. valueFormat: "yyyy-MM-dd",
  612. rules: [{
  613. required: true,
  614. message: "請輸入申請日期",
  615. trigger: "blur"
  616. }]
  617. },
  618. {
  619. label: "生效日期",
  620. prop: "effectiveDate",
  621. type: "date",
  622. disabled: true,
  623. format: "yyyy-MM-dd",
  624. valueFormat: "yyyy-MM-dd",
  625. rules: [{
  626. required: true,
  627. message: "請輸入生效日期",
  628. trigger: "blur"
  629. }]
  630. },
  631. {
  632. label: "審批人",
  633. prop: "personName",
  634. formslot: true,
  635. rules: [{
  636. required: true,
  637. message: "請輸入審批人姓名",
  638. trigger: "blur"
  639. }]
  640. },
  641. {
  642. label: "審批人員工號",
  643. prop: "personNo",
  644. disabled: true,
  645. rules: [{
  646. required: true,
  647. message: "請輸入審批人員工號",
  648. trigger: "blur"
  649. }]
  650. },
  651. {
  652. label: "備註",
  653. prop: "remark",
  654. disabled: true,
  655. rules: [{
  656. required: false,
  657. message: "請輸入備註",
  658. trigger: "blur"
  659. }]
  660. },
  661. ],
  662. },
  663. groupEdit: [
  664. {
  665. label: "人員配置",
  666. prop: "personSetting",
  667. column: [
  668. {
  669. label: "網點出納主管",
  670. prop: "director",
  671. type: "text",
  672. span: 2,
  673. },
  674. {
  675. label: "持有人",
  676. prop: "holder1",
  677. span: 11,
  678. type: "select",
  679. // multiple: true,
  680. props: {
  681. label: "text",
  682. value: "ehr"
  683. },
  684. rules: [{
  685. required: true,
  686. message: "請輸入持有人",
  687. trigger: "blur"
  688. }]
  689. },
  690. {
  691. label: "後備人員",
  692. prop: "backupPerson1",
  693. span: 11,
  694. type: "select",
  695. multiple: true,
  696. props: {
  697. label: "text",
  698. value: "ehr"
  699. },
  700. rules: [{
  701. required: true,
  702. message: "請輸入後備人員",
  703. trigger: "blur"
  704. }]
  705. },
  706. {
  707. label: "網點出納專管員",
  708. prop: "manager",
  709. type: "text",
  710. span: 2,
  711. },
  712. {
  713. label: "持有人",
  714. prop: "holder2",
  715. span: 11,
  716. type: "select",
  717. multiple: true,
  718. props: {
  719. label: "text",
  720. value: "ehr"
  721. },
  722. rules: [{
  723. required: true,
  724. message: "請輸入持有人",
  725. trigger: "blur"
  726. }]
  727. },
  728. {
  729. label: "後備人員",
  730. prop: "backupPerson2",
  731. span: 11,
  732. type: "select",
  733. multiple: true,
  734. props: {
  735. label: "text",
  736. value: "ehr"
  737. },
  738. rules: [{
  739. required: true,
  740. message: "請輸入後備人員",
  741. trigger: "blur"
  742. }]
  743. },
  744. ]
  745. },
  746. ],
  747. groupView: [
  748. {
  749. label: "人員配置",
  750. prop: "personSetting",
  751. column: [
  752. {
  753. label: "網點出納主管",
  754. prop: "director",
  755. type: "text",
  756. span: 4,
  757. },
  758. {
  759. label: "上期持有人",
  760. prop: "preholder1",
  761. span: 5,
  762. type: "select",
  763. multiple: true,
  764. props: {
  765. label: "text",
  766. value: "ehr"
  767. },
  768. rules: [{
  769. required: true,
  770. message: "請輸入持有人",
  771. trigger: "blur"
  772. }]
  773. },
  774. {
  775. label: "目前持有人",
  776. prop: "holder1",
  777. span: 5,
  778. type: "select",
  779. multiple: true,
  780. props: {
  781. label: "text",
  782. value: "ehr"
  783. },
  784. rules: [{
  785. required: true,
  786. message: "請輸入持有人",
  787. trigger: "blur"
  788. }]
  789. },
  790. {
  791. label: "上期後備人員",
  792. prop: "prebackupPerson1",
  793. span: 5,
  794. type: "select",
  795. multiple: true,
  796. props: {
  797. label: "text",
  798. value: "ehr"
  799. },
  800. rules: [{
  801. required: true,
  802. message: "請輸入後備人員",
  803. trigger: "blur"
  804. }]
  805. },
  806. {
  807. label: "目前後備人員",
  808. prop: "backupPerson1",
  809. span: 5,
  810. type: "select",
  811. multiple: true,
  812. props: {
  813. label: "text",
  814. value: "ehr"
  815. },
  816. rules: [{
  817. required: true,
  818. message: "請輸入後備人員",
  819. trigger: "blur"
  820. }]
  821. },
  822. {
  823. label: "網點出納專管員",
  824. prop: "manager",
  825. type: "text",
  826. span: 4,
  827. },
  828. {
  829. label: "上期持有人",
  830. prop: "preholder2",
  831. span: 5,
  832. type: "select",
  833. multiple: true,
  834. props: {
  835. label: "text",
  836. value: "ehr"
  837. },
  838. rules: [{
  839. required: true,
  840. message: "請輸入持有人",
  841. trigger: "blur"
  842. }]
  843. },
  844. {
  845. label: "目前持有人",
  846. prop: "holder2",
  847. span: 5,
  848. type: "select",
  849. multiple: true,
  850. props: {
  851. label: "text",
  852. value: "ehr"
  853. },
  854. rules: [{
  855. required: true,
  856. message: "請輸入持有人",
  857. trigger: "blur"
  858. }]
  859. },
  860. {
  861. label: "後備人員",
  862. prop: "prebackupPerson2",
  863. span: 5,
  864. type: "select",
  865. multiple: true,
  866. props: {
  867. label: "text",
  868. value: "ehr"
  869. },
  870. rules: [{
  871. required: true,
  872. message: "請輸入後備人員",
  873. trigger: "blur"
  874. }]
  875. },
  876. {
  877. label: "目前後備人員",
  878. prop: "backupPerson2",
  879. span: 5,
  880. type: "select",
  881. multiple: true,
  882. props: {
  883. label: "text",
  884. value: "ehr"
  885. },
  886. rules: [{
  887. required: true,
  888. message: "請輸入後備人員",
  889. trigger: "blur"
  890. }]
  891. },
  892. ]
  893. },
  894. ],
  895. data: []
  896. };
  897. },
  898. computed: {
  899. ...mapGetters(["permission"]),
  900. ...mapGetters(["userInfo"]),
  901. permissionList() {
  902. return {
  903. addBtn: this.vaildData(this.permission.postchange_add, false),
  904. viewBtn: this.vaildData(this.permission.postchange_view, false),
  905. delBtn: this.vaildData(this.permission.postchange_delete, false),
  906. editBtn: this.vaildData(this.permission.postchange_edit, false)
  907. };
  908. },
  909. ids() {
  910. let ids = [];
  911. this.selectionList.forEach(ele => {
  912. ids.push(ele.id);
  913. });
  914. return ids.join(",");
  915. }
  916. },
  917. created() {
  918. const _this = this;
  919. getUserListDeptChild().then(res => {
  920. const data = res.data.data;
  921. for (let i = 0; i < data.length; i++) {
  922. let item = data[i];
  923. item.text = item.name + '-' + item.ehr;
  924. }
  925. this.userList = data;
  926. /*this.groupEdit[0].column.forEach(item => {
  927. if (item.prop.indexOf('holder') > -1 || item.prop.indexOf('backup') > -1){
  928. item.dicData = data;
  929. }
  930. })
  931. this.groupView[0].column.forEach(item => {
  932. if (item.prop.indexOf('holder') > -1 || item.prop.indexOf('backup') > -1){
  933. item.dicData = data;
  934. }
  935. item.disabled = true;
  936. })*/
  937. this.initForm();
  938. })
  939. },
  940. mounted() {
  941. // this.initForm();
  942. getDeptTree().then(res => {
  943. const column = this.findObject(this.option.column, "orgNos");
  944. let treeData = getTree(res.data.data, this.userInfo.dept_id);
  945. column.dicData = treeData;
  946. });
  947. getStandardByCode("postchange").then(res => {
  948. const data = res.data.data;
  949. if (Object.keys(data).length > 0){
  950. this.title = data.content;
  951. }else {
  952. this.option.column.splice(0,1)
  953. }
  954. });
  955. },
  956. methods: {
  957. clearSelect(propPrefix){
  958. let keyArr = Object.keys(this.form);
  959. for (let i = 0; i < keyArr.length; i++) {
  960. let prop = keyArr[i];
  961. if (prop.indexOf(propPrefix) == 0 && prop.indexOf(propPrefix + '1') && prop.indexOf(propPrefix + '2') == -1){
  962. this.form[''+prop] = false;
  963. }
  964. }
  965. },
  966. testExcel(){
  967. let $a = document.getElementById("dl");
  968. $a.href = tableToExcel('mytable', 'testname');
  969. $a.click();
  970. },
  971. handleTransfer(){
  972. if (this.selectionList.length === 0) {
  973. this.$message.warning("請選擇至少一條數據");
  974. return;
  975. }
  976. let personSet = new Set(), processSet = new Set();
  977. for (let i = 0; i < this.selectionList.length; i++) {
  978. let item = this.selectionList[i];
  979. personSet.add(item.personNo);
  980. processSet.add(item.process)
  981. }
  982. if (personSet.size > 1 || processSet.size > 1 || !processSet.has(2)){
  983. this.$message.warning("請選擇同一人員的待確認任務!");
  984. return;
  985. }
  986. this.transferVisible = true;
  987. },
  988. transferCallback(row){
  989. if (this.selectionList && this.selectionList.length > 0 && this.selectionList[0].personNo == row.ehr){
  990. this.$message.warning("移交人不能為原審批人,請重新選擇!")
  991. return;
  992. }
  993. transfer(this.ids, row.ehr).then(() => {
  994. this.onLoad(this.page);
  995. this.transferVisible = false;
  996. this.$message({
  997. type: "success",
  998. message: "移交成功!"
  999. });
  1000. });
  1001. },
  1002. handleDownload(){
  1003. if (this.selectionList.length === 0) {
  1004. this.$message.warning("請選擇至少一條數據");
  1005. return;
  1006. }
  1007. let columns = this.deepClone(this.option.column);
  1008. for (let i = 0; i < columns.length; i++) {
  1009. let item = columns[i];
  1010. if (item.hide || item.prop == 'process'){
  1011. columns.splice(i, 1);
  1012. i--;
  1013. }
  1014. if (item.type == 'select' || item.type == 'tree'){
  1015. item.prop = '$' + item.prop;
  1016. }
  1017. }
  1018. this.$Export.excel({
  1019. title: "網點出納主管及專管員崗位變更記錄表" || new Date().getTime(),
  1020. columns: columns,
  1021. data: this.selectionList
  1022. });
  1023. },
  1024. approveSubmit(row){
  1025. },
  1026. handleView(row, index){
  1027. this.form = row;
  1028. this.$refs.crud.rowView(row, index)
  1029. /*getDetail(this.form.id).then(res => {
  1030. let data = res.data.data;
  1031. let holder = JSON.parse(data.holder);
  1032. let backupPerson = JSON.parse(data.backupPerson);
  1033. Object.assign(data, holder, backupPerson)
  1034. this.form = data;
  1035. this.form.previousId && getDetail(this.form.previousId).then(res => {
  1036. let preData = res.data.data;
  1037. let preholderStr = preData.holder.replace(/holder/ig, 'preholder');
  1038. let prebackupPersonStr = preData.backupPerson.replace(/backup/ig, 'prebackup');
  1039. let propreholder = JSON.parse(preholderStr);
  1040. let prebackupPerson = JSON.parse(prebackupPersonStr);
  1041. Object.assign(data, propreholder, prebackupPerson)
  1042. this.form = data;
  1043. })
  1044. });*/
  1045. // this.viewForm = row;
  1046. // this.$refs.crudView.rowView(row, index)
  1047. },
  1048. approve(row, index){
  1049. this.approveFlag = true;
  1050. this.$refs.crud.rowEdit(row, index)
  1051. },
  1052. selectCallback(value){
  1053. this.form.personId = value.id;
  1054. this.form.personNo = value.ehr;
  1055. this.form.personName = value.name;
  1056. },
  1057. settingCallback(row){
  1058. this.form.personId = row.personId;
  1059. this.form.personNo = row.personNo;
  1060. this.form.personName = row.personName;
  1061. settingSave(this.form).then(() => {
  1062. this.onLoad(this.page);
  1063. this.$message({
  1064. type: "success",
  1065. message: "操作成功!"
  1066. });
  1067. }, error => {
  1068. window.console.log('error');
  1069. });
  1070. },
  1071. handleSetting(){
  1072. getSetting().then((res) => {
  1073. let data = res.data.data;
  1074. if (!!data){
  1075. this.personId = data.personId;
  1076. this.personNo = data.personNo;
  1077. this.personName = data.personName;
  1078. }
  1079. });
  1080. this.settingVisible = true;
  1081. },
  1082. rowDel(row) {
  1083. this.$confirm("確定將選擇數據刪除?", {
  1084. confirmButtonText: "確定",
  1085. cancelButtonText: "取消",
  1086. type: "warning"
  1087. })
  1088. .then(() => {
  1089. return remove(row.id);
  1090. })
  1091. .then(() => {
  1092. this.onLoad(this.page);
  1093. this.$message({
  1094. type: "success",
  1095. message: "操作成功!"
  1096. });
  1097. });
  1098. },
  1099. handleDelete() {
  1100. if (this.selectionList.length === 0) {
  1101. this.$message.warning("請選擇至少一條數據");
  1102. return;
  1103. }
  1104. this.$confirm("確定將選擇數據刪除?", {
  1105. confirmButtonText: "確定",
  1106. cancelButtonText: "取消",
  1107. type: "warning"
  1108. })
  1109. .then(() => {
  1110. return remove(this.ids);
  1111. })
  1112. .then(() => {
  1113. this.onLoad(this.page);
  1114. this.$message({
  1115. type: "success",
  1116. message: "操作成功!"
  1117. });
  1118. this.$refs.crud.toggleSelection();
  1119. });
  1120. },
  1121. rowSave(row, done, loading) {
  1122. this.beforeSave(row)
  1123. add(row).then(() => {
  1124. this.onLoad(this.page);
  1125. this.$message({
  1126. type: "success",
  1127. message: "操作成功!"
  1128. });
  1129. done();
  1130. }, error => {
  1131. loading();
  1132. window.console.log(error);
  1133. });
  1134. // done();
  1135. },
  1136. rowUpdate(row, index, done, loading) {
  1137. if (this.approveFlag){
  1138. approve(row.id).then(() => {
  1139. this.onLoad(this.page);
  1140. this.$message({
  1141. type: "success",
  1142. message: "操作成功!"
  1143. });
  1144. done();
  1145. }, error => {
  1146. loading();
  1147. console.log(error);
  1148. })
  1149. }else{
  1150. // delete row.id;
  1151. delete row.backupPerson;
  1152. delete row.holder;
  1153. this.beforeSave(row)
  1154. update(row).then(() => {
  1155. this.onLoad(this.page);
  1156. this.$message({
  1157. type: "success",
  1158. message: "操作成功!"
  1159. });
  1160. done();
  1161. }, error => {
  1162. loading();
  1163. console.log(error);
  1164. });
  1165. }
  1166. },
  1167. rowDel(row) {
  1168. this.$confirm("確定將選擇數據刪除?", {
  1169. confirmButtonText: "確定",
  1170. cancelButtonText: "取消",
  1171. type: "warning"
  1172. })
  1173. .then(() => {
  1174. return remove(row.id);
  1175. })
  1176. .then(() => {
  1177. this.onLoad(this.page);
  1178. this.$message({
  1179. type: "success",
  1180. message: "操作成功!"
  1181. });
  1182. });
  1183. },
  1184. handleDelete() {
  1185. if (this.selectionList.length === 0) {
  1186. this.$message.warning("請選擇至少一條數據");
  1187. return;
  1188. }
  1189. this.$confirm("確定將選擇數據刪除?", {
  1190. confirmButtonText: "確定",
  1191. cancelButtonText: "取消",
  1192. type: "warning"
  1193. })
  1194. .then(() => {
  1195. return remove(this.ids);
  1196. })
  1197. .then(() => {
  1198. this.onLoad(this.page);
  1199. this.$message({
  1200. type: "success",
  1201. message: "操作成功!"
  1202. });
  1203. this.$refs.crud.toggleSelection();
  1204. });
  1205. },
  1206. handleEdit(){
  1207. // this.form = this.data[0];
  1208. getLastRecord().then(res => {
  1209. const data = res.data.data || {};
  1210. data.applyDate = '',data.effectiveDate = '',data.remark = '';
  1211. this.approveFlag = false;
  1212. this.$refs.crud.rowEdit(data, 0)
  1213. });
  1214. /*let form = this.deepClone(this.data[0]);
  1215. form.applyDate = '',form.effectiveDate = '',form.remark = '';
  1216. this.approveFlag = false;
  1217. this.$refs.crud.rowEdit(form, 0)*/
  1218. },
  1219. beforeOpen(done, type) {
  1220. this.selectDisabled = type == 'view';
  1221. this.type = type;
  1222. let _this = this;
  1223. let createUserName = this.form.createUserName;
  1224. let createUserNo = this.form.createUserNo;
  1225. if (this.form.id){
  1226. getDetail(this.form.id).then(res => {
  1227. preDeal(res);
  1228. });
  1229. }else {
  1230. preDeal()
  1231. }
  1232. function preDeal(res){
  1233. let data = !!res ? res.data.data : {};
  1234. let holder = !!res ? JSON.parse(data.holder) : {};
  1235. let backupPerson = !!res ? JSON.parse(data.backupPerson) : {};
  1236. Object.assign(data, holder, backupPerson)
  1237. data.createUserName = createUserName;
  1238. data.createUserNo = createUserNo;
  1239. if (type === 'edit' || type === 'add'){
  1240. if (_this.approveFlag){
  1241. _this.selectDisabled = true;
  1242. _this.option.updateBtnText = '確認';
  1243. _this.option.editTitle = '信息審核【網點出納主管及專管員崗位變更記錄表】';
  1244. _this.option.column.forEach(item => {
  1245. item.disabled = true;
  1246. })
  1247. _this.option.group.forEach(g => {
  1248. g.column.forEach(item => {
  1249. item.disabled = true;
  1250. })
  1251. })
  1252. _this.form = data;
  1253. }else{
  1254. // data.applyDate = '',data.remark = '',delete data.id;
  1255. if (type === 'add'){
  1256. data.applyDate = dateFormat(new Date(), "yyyy-MM-dd");
  1257. }
  1258. getCurrentDept().then(res => {
  1259. const data2 = res.data.data;
  1260. data.bankNo = data2.bankNo;
  1261. data.orgNo = data2.orgNo;
  1262. data.orgName = data2.deptName;
  1263. _this.form = data;
  1264. });
  1265. /*getSetting().then((res) => {
  1266. let data = res.data.data;
  1267. if (!!data){
  1268. _this.form.personId = data.personId;
  1269. _this.form.personNo = data.personNo;
  1270. _this.form.personName = data.personName;
  1271. }
  1272. });*/
  1273. _this.option.updateBtnText = '提交';
  1274. _this.option.editTitle = '編輯【網點出納主管及專管員崗位變更記錄表】';
  1275. _this.option.column.forEach(item => {
  1276. if (item.prop == 'bankNo' || item.prop == 'orgNo' ||item.prop == 'orgName' || item.prop == 'applyDate'|| item.prop == 'personNo'){
  1277. item.disabled = true;
  1278. }else{
  1279. item.disabled = false;
  1280. }
  1281. })
  1282. _this.option.group.forEach(g => {
  1283. g.column.forEach(item => {
  1284. item.disabled = false;
  1285. })
  1286. })
  1287. }
  1288. }else{
  1289. _this.form = data;
  1290. if (_this.form.previousId && _this.form.previousId > 0){
  1291. getDetail(_this.form.previousId).then(res => {
  1292. let preData = res.data.data;
  1293. let preholderStr = preData.holder.replace(/holder/ig, 'preholder');
  1294. let prebackupPersonStr = preData.backupPerson.replace(/backup/ig, 'prebackup');
  1295. let propreholder = JSON.parse(preholderStr);
  1296. let prebackupPerson = JSON.parse(prebackupPersonStr);
  1297. Object.assign(data, propreholder, prebackupPerson)
  1298. _this.form = data;
  1299. })
  1300. }
  1301. }
  1302. }
  1303. done();
  1304. },
  1305. initForm(){
  1306. /*let holderObj = {
  1307. label: "持有人",
  1308. prop: "holder",
  1309. span: 11,
  1310. type: "select",
  1311. multiple: true,
  1312. dicData: this.userList,
  1313. props: {
  1314. label: "text",
  1315. value: "ehr"
  1316. },
  1317. }
  1318. let backupObj = {
  1319. label: "後備人員",
  1320. prop: "backupPerson",
  1321. span: 11,
  1322. type: "select",
  1323. multiple: true,
  1324. dicData: this.userList,
  1325. props: {
  1326. label: "text",
  1327. value: "ehr"
  1328. },
  1329. }
  1330. getDictByCode("cashier_key_type").then(res => {
  1331. const data = res.data.data;
  1332. let $groupEdit = this.groupEdit;
  1333. let $groupView = this.groupView;
  1334. data.forEach(item => {
  1335. let code = item.dictKey;
  1336. let value = item.dictValue;
  1337. let $item = {};
  1338. let $item12 = {};
  1339. $item.label = value;
  1340. $item12.label = value;
  1341. let column = [];
  1342. let column12 = [];
  1343. getDictByCode(code).then(res2 => {
  1344. const data2 = res2.data.data;
  1345. data2.forEach(item2 => {
  1346. let $item2 = {}
  1347. let $item22 = {}
  1348. $item2.label = item2.dictValue;
  1349. $item22.label = item2.dictValue;
  1350. // $item2.prop = item2.dictKey;
  1351. $item2.type = 'text';
  1352. $item22.type = 'text';
  1353. $item2.span = 2;
  1354. $item22.span = 4;
  1355. column.push($item2)
  1356. column12.push($item22)
  1357. let holderItem = this.deepClone(holderObj);
  1358. let holderItem2 = this.deepClone(holderObj);
  1359. let backupItem = this.deepClone(backupObj);
  1360. let backupItem2 = this.deepClone(backupObj);
  1361. holderItem.prop = 'holder-' + item.dictKey + '-' + item2.dictKey;
  1362. holderItem2.prop = 'preholder-' + item.dictKey + '-' + item2.dictKey;
  1363. holderItem.span = 5;
  1364. holderItem2.span = 5;
  1365. // holderItem.label = '目前' + holderItem.label;
  1366. holderItem2.label = '上期' + holderItem2.label;
  1367. let h1 = this.deepClone(holderItem);
  1368. h1.span = 11;
  1369. column.push(h1)
  1370. column12.push(holderItem2)
  1371. column12.push(holderItem)
  1372. backupItem.prop = 'backupPerson-' + item.dictKey + '-' + item2.dictKey;
  1373. backupItem2.prop = 'prebackupPerson-' + item.dictKey + '-' + item2.dictKey;
  1374. backupItem.span = 5;
  1375. backupItem2.span = 5;
  1376. // backupItem.label = '目前' + backupItem.label;
  1377. backupItem2.label = '上期' + backupItem2.label;
  1378. let b1 = this.deepClone(backupItem);
  1379. b1.span = 11;
  1380. column.push(b1)
  1381. column12.push(backupItem2)
  1382. column12.push(backupItem)
  1383. })
  1384. });
  1385. $item.column = column;
  1386. $item12.column = column12;
  1387. $groupEdit.push($item)
  1388. $groupView.push($item12)
  1389. this.option.group = $groupEdit;
  1390. this.optionForm.group = $groupView
  1391. })
  1392. });*/
  1393. getDictByCodes("cashier_key_type").then(res => {
  1394. const data = res.data.data;
  1395. let dictData = [];
  1396. let codeArr = [];
  1397. let dictKV = {};
  1398. for (let i = 0; i < data.length; i++) {
  1399. let item = data[i];
  1400. let code = item.dictKey;
  1401. let value = item.dictValue;
  1402. codeArr.push(code);
  1403. dictKV[''+code] = value;
  1404. /*getDictByCode(code).then(res2 => {
  1405. const data2 = res2.data.data;
  1406. // item.children = data2;
  1407. for (let h = 0; h < data2.length; h++) {
  1408. let item2 = data2[h], index = h;
  1409. item2.index = index;
  1410. item2.parentName = value;
  1411. item2.rowspan = data2.length;
  1412. dictData.push(item2)
  1413. }
  1414. });*/
  1415. }
  1416. getDictByCodes(codeArr.join()).then(res => {
  1417. dictData = res.data.data;
  1418. let rowspanKV = {};
  1419. for (let j = 0; j < data.length; j++) {
  1420. let item = data[j];
  1421. let code = item.dictKey;
  1422. let value = item.dictValue;
  1423. let index = 0;
  1424. for (let k = 0; k < dictData.length; k++) {
  1425. let item2 = dictData[k];
  1426. if (code == item2.code){
  1427. if (!rowspanKV[''+code]){
  1428. rowspanKV[''+code] = 1;
  1429. }else {
  1430. rowspanKV[''+code]++;
  1431. }
  1432. // rowspanKV[''+code] = item2.rowspan;
  1433. item2.parentName = value;
  1434. item2.index = index;
  1435. index++;
  1436. }
  1437. }
  1438. }
  1439. for (let m = 0; m < dictData.length; m++) {
  1440. let item = dictData[m];
  1441. item.rowspan = rowspanKV[''+item.code]
  1442. }
  1443. this.dicts = dictData;
  1444. })
  1445. // this.dicts = dictData;
  1446. // console.table(dictData)
  1447. });
  1448. },
  1449. beforeSave(row){
  1450. let holder = {}, backupPerson = {};
  1451. let keys = Object.keys(row);
  1452. for (let i = 0; i < keys.length; i++) {
  1453. let key = keys[i];
  1454. if (key.indexOf('holder') > -1){
  1455. holder['' + key] = row['' + key];
  1456. delete row['' + key];
  1457. }
  1458. if (key.indexOf('backup') > -1){
  1459. backupPerson['' + key] = row['' + key];
  1460. delete row['' + key];
  1461. }
  1462. delete row['undefined']
  1463. }
  1464. row.holder = JSON.stringify(holder);
  1465. row.backupPerson = JSON.stringify(backupPerson);
  1466. return row;
  1467. },
  1468. searchReset() {
  1469. this.query = {};
  1470. this.onLoad(this.page);
  1471. },
  1472. searchChange(params, done) {
  1473. if (params.effectiveDateRange){
  1474. params.effectiveDate_begin = params.effectiveDateRange[0], params.effectiveDate_end = params.effectiveDateRange[1];
  1475. params.effectiveDateRange = null;
  1476. }
  1477. if (params.orgNos){
  1478. params.orgNostr = params.orgNos.join();
  1479. params.orgNos = '';
  1480. }
  1481. this.query = params;
  1482. this.page.currentPage = 1;
  1483. this.onLoad(this.page, params);
  1484. done();
  1485. },
  1486. selectionChange(list) {
  1487. this.selectionList = list;
  1488. if (list && list.length > 0){
  1489. let delFlag = true;
  1490. // userInfo.user_id == row.createUser && row.process != 3
  1491. for (let i = 0; i < list.length; i++) {
  1492. let item = list[i];
  1493. delFlag = delFlag && item.createUser == this.userInfo.user_id && item.process != 3;
  1494. }
  1495. this.delBatchBtn = !delFlag;
  1496. }else{
  1497. this.delBatchBtn = true;
  1498. }
  1499. },
  1500. selectionClear() {
  1501. this.selectionList = [];
  1502. this.$refs.crud.toggleSelection();
  1503. },
  1504. currentChange(currentPage){
  1505. this.page.currentPage = currentPage;
  1506. },
  1507. sizeChange(pageSize){
  1508. this.page.pageSize = pageSize;
  1509. },
  1510. refreshChange() {
  1511. this.onLoad(this.page, this.query);
  1512. },
  1513. onLoad(page, params = {}) {
  1514. this.loading = true;
  1515. params.process = 2;
  1516. params.personNo = this.userInfo.user_ehr;
  1517. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  1518. const data = res.data.data;
  1519. this.page.total = data.total;
  1520. this.data = data.records;
  1521. this.loading = false;
  1522. this.selectionClear();
  1523. });
  1524. }
  1525. }
  1526. };
  1527. </script>
  1528. <style>
  1529. </style>