confirmed-postchange.vue 54 KB

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