distributionmanage.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182
  1. <template>
  2. <!-- 配送目录管理 -->
  3. <div style="display: flex">
  4. <el-card style="width: 18%; margin-right: 18px; border-radius: 6px">
  5. <el-tabs
  6. v-model="activeNametree"
  7. type="card"
  8. @tab-click="tabClick"
  9. stretch
  10. >
  11. <!-- <el-tab-pane label="按分类" name="grp"></el-tab-pane> -->
  12. <el-tab-pane label="按机构" name="org"></el-tab-pane>
  13. </el-tabs>
  14. <el-tree
  15. :data="data"
  16. :props="defaultProps"
  17. node-key="spdId"
  18. @node-click="handleNodeClick"
  19. default-expand-all="true"
  20. style="margin-top: 10px"
  21. ></el-tree>
  22. </el-card>
  23. <div class="right-common-box">
  24. <el-form
  25. :model="listQuery"
  26. ref="listQuery"
  27. :inline="true"
  28. label-width="90px"
  29. >
  30. <!-- <el-form-item label="耗材编码" prop="materialId" class="long">
  31. <el-input
  32. v-model="listQuery.materialId"
  33. placeholder="请输入耗材编码"
  34. ></el-input>
  35. </el-form-item> -->
  36. <!-- <el-form-item size="mini" label="医保编码" prop="hiCode" class="long">
  37. <el-input v-model="listQuery.hiCode" placeholder="请输入医保编码"></el-input>
  38. </el-form-item> -->
  39. <el-form-item size="mini" label="耗材信息" prop="prodName" class="long">
  40. <el-input
  41. v-model="listQuery.prodName"
  42. placeholder="请输入耗材名称/医保编码"
  43. ></el-input>
  44. </el-form-item>
  45. <el-form-item size="mini" label="规格" prop="spec" class="long">
  46. <el-input
  47. v-model="listQuery.spec"
  48. placeholder="请输入规格"
  49. ></el-input>
  50. </el-form-item>
  51. <el-form-item size="mini" label="型号" prop="mol" class="long">
  52. <el-input v-model="listQuery.mol" placeholder="请输入型号"></el-input>
  53. </el-form-item>
  54. <el-form-item size="mini" label="生产企业" prop="prodEntp" class="long">
  55. <el-input
  56. v-model="listQuery.prodEntp"
  57. placeholder="请输入生产企业"
  58. ></el-input>
  59. </el-form-item>
  60. <el-form-item size="mini" label="是否集采" prop="isFas" class="long">
  61. <el-select
  62. v-model="listQuery.isFas"
  63. placeholder="请选择是否集采"
  64. clearable
  65. >
  66. <el-option
  67. v-for="item in isFasData"
  68. :key="item.value"
  69. :label="item.name"
  70. :value="item.value"
  71. ></el-option>
  72. </el-select>
  73. </el-form-item>
  74. <!-- <el-form-item label="集采批次" prop="fasBtch" class="long">
  75. <el-input v-model="listQuery.fasBtch" placeholder="请输入集采批次"></el-input>
  76. </el-form-item> -->
  77. <el-form-item size="mini" label="耗材类别" prop="mcsType" class="long">
  78. <el-select
  79. v-model="listQuery.mcsType"
  80. placeholder="请选择耗材类别"
  81. clearable
  82. >
  83. <el-option
  84. v-for="item in mcsTypeData"
  85. :key="item.value"
  86. :label="item.name"
  87. :value="item.value"
  88. ></el-option>
  89. </el-select>
  90. </el-form-item>
  91. <el-form-item size="mini" label="生产来源" prop="prodSouc" class="long">
  92. <el-select
  93. v-model="listQuery.prodSouc"
  94. placeholder="请选择生产来源"
  95. clearable
  96. >
  97. <el-option
  98. v-for="item in SoucData"
  99. :key="item.value"
  100. :label="item.name"
  101. :value="item.value"
  102. ></el-option>
  103. </el-select>
  104. </el-form-item>
  105. <el-form-item size="mini" label="材质" prop="matl" class="long">
  106. <el-input
  107. v-model="listQuery.matl"
  108. placeholder="请输入材质"
  109. ></el-input>
  110. </el-form-item>
  111. <el-form-item
  112. size="mini"
  113. label="注册证号"
  114. prop="regcertno"
  115. class="long"
  116. >
  117. <el-input
  118. v-model="listQuery.regcertno"
  119. placeholder="请输入注册证号"
  120. ></el-input>
  121. </el-form-item>
  122. <el-form-item size="mini" label="是否挂网" prop="isPub" class="long">
  123. <el-select
  124. v-model="listQuery.isPub"
  125. placeholder="请选择是否挂网"
  126. clearable
  127. >
  128. <el-option
  129. v-for="item in isPubData"
  130. :key="item.value"
  131. :label="item.name"
  132. :value="item.value"
  133. ></el-option>
  134. </el-select>
  135. </el-form-item>
  136. <!-- <div class="right-button"> -->
  137. <el-button
  138. type="primary"
  139. style="margin-left: 30px"
  140. @click="getHospConsum('search')"
  141. >查询</el-button
  142. >
  143. <el-button @click="reset('consumableData')">重置</el-button>
  144. <!-- </div> -->
  145. </el-form>
  146. <div class="right-button" v-if="btnShow">
  147. <el-upload
  148. class="upload-demo"
  149. action=""
  150. :limit="3"
  151. headers="application/json"
  152. :file-list="fileList"
  153. :on-change="handleChange"
  154. :show-file-list="false"
  155. :auto-upload="false"
  156. accept=".xlsx"
  157. >
  158. <el-button type="success" icon="el-icon-upload2">目录导入 </el-button>
  159. </el-upload>
  160. <el-button
  161. type="success"
  162. icon="el-icon-download"
  163. @click="downTemplate()"
  164. >下载模版
  165. </el-button>
  166. <el-button
  167. type="primary"
  168. icon="el-icon-plus"
  169. @click="handleUpdate('search')"
  170. >挂网目录新增
  171. </el-button>
  172. <el-button
  173. type="primary"
  174. icon="el-icon-plus"
  175. @click="handleFadd('search')"
  176. >非挂网目录新增
  177. </el-button>
  178. </div>
  179. <el-table
  180. v-loading="listLoading"
  181. element-loading-text="加载中"
  182. :data="list"
  183. fit
  184. height="500"
  185. stripe
  186. border
  187. >
  188. <template slot="empty">
  189. <img src="@/assets/nopage.png" alt />
  190. <p>暂无数据</p>
  191. </template>
  192. <el-table-column fixed type="index" label="序号" width="60" />
  193. <el-table-column label="耗材信息" min-width="340">
  194. <template slot-scope="scope">
  195. <mcs-info :info="scope.row"></mcs-info>
  196. </template>
  197. </el-table-column>
  198. <el-table-column label="医保编码" prop="hiCode" width="80" />
  199. <el-table-column label="规格" prop="spec" width="80" />
  200. <el-table-column label="型号" prop="mol" width="80" />
  201. <el-table-column label="材质" prop="matl" width="80" />
  202. <el-table-column label="是否集采" prop="isFas" width="80">
  203. <template #default="{ row }">
  204. <span v-if="row.isFas == '0'">否</span>
  205. <span v-if="row.isFas == '1'">是</span>
  206. </template>
  207. </el-table-column>
  208. <el-table-column label="生效时间" prop="crteTime" width="140" />
  209. <el-table-column label="采购单位" prop="purcUnt" width="80" />
  210. <el-table-column label="采购价" prop="purcPric" width="80" />
  211. <el-table-column label="是否挂网" prop="isPub" width="80" fixed="right">
  212. <template #default="{ row }">
  213. <span v-if="row.isPub == '1'">是</span>
  214. <span v-if="row.isPub == '0'">否</span>
  215. </template>
  216. </el-table-column>
  217. <!-- <el-table-column label="当前状态" prop="status" width="80" fixed="right">
  218. <template #default="{ row }">
  219. <span v-if="row.status == 'A'">待提交</span>
  220. <span v-if="row.status == 'B'">已提交</span>
  221. <span v-if="row.status == 'C'">审核通过</span>
  222. <span v-if="row.status == 'R'">驳回 </span>
  223. </template>
  224. </el-table-column> -->
  225. <el-table-column fixed="right" label="操作" width="160">
  226. <template slot-scope="scope">
  227. <div>
  228. <el-button type="text" @click="handleDui(scope.row)"
  229. >修改</el-button
  230. >
  231. <!-- <el-button type="text" v-if="scope.row.stas == '1'" @click="handleCanc(scope.row)">取消对码</el-button> -->
  232. <!-- <el-button type="text" @click="handlePrice(scope.row)">申请调价</el-button> -->
  233. </div>
  234. </template>
  235. </el-table-column>
  236. </el-table>
  237. <!--分页-->
  238. <yl-pagination
  239. v-show="total > 0"
  240. :total="total"
  241. :page.sync="listQuery.current"
  242. :limit.sync="listQuery.size"
  243. @pagination="getHospConsum"
  244. />
  245. </div>
  246. <el-dialog title="调价申请" :visible.sync="dialogPrice" width="55%">
  247. <el-form
  248. ref="dataForm"
  249. :rules="rules"
  250. :model="temp"
  251. label-position="right"
  252. label-width="80px"
  253. >
  254. <el-row>
  255. <el-col :span="8">
  256. <el-form-item label="药品编码" prop="drugListId">
  257. <el-input
  258. v-model.trim="temp.drugListId"
  259. readonly
  260. placeholder="请输入"
  261. />
  262. </el-form-item>
  263. </el-col>
  264. <el-col :span="8">
  265. <el-form-item label="药品名称" prop="drugName">
  266. <el-input
  267. v-model.trim="temp.drugName"
  268. readonly
  269. placeholder="请输入"
  270. />
  271. </el-form-item>
  272. </el-col>
  273. <el-col :span="8">
  274. <el-form-item label="剂型" prop="dosformName">
  275. <el-input
  276. v-model.trim="temp.dosformName"
  277. readonly
  278. placeholder="请输入"
  279. />
  280. </el-form-item>
  281. </el-col>
  282. </el-row>
  283. <el-row>
  284. <el-col :span="8">
  285. <el-form-item label="规格" prop="specName">
  286. <el-input
  287. v-model.trim="temp.specName"
  288. readonly
  289. placeholder="请输入"
  290. />
  291. </el-form-item>
  292. </el-col>
  293. <el-col :span="8">
  294. <el-form-item label="包装单位" prop="pacUnt">
  295. <el-input
  296. v-model.trim="temp.pacUnt"
  297. readonly
  298. placeholder="请输入"
  299. />
  300. </el-form-item>
  301. </el-col>
  302. <el-col :span="8">
  303. <el-form-item label="生产企业" prop="prodEntp">
  304. <el-input
  305. v-model.trim="temp.prodEntp"
  306. readonly
  307. placeholder="请输入"
  308. />
  309. </el-form-item>
  310. </el-col>
  311. </el-row>
  312. <el-row>
  313. <el-col :span="8">
  314. <el-form-item label="当前价格" prop="pricInit">
  315. <el-input
  316. v-model.trim="temp.pricInit"
  317. readonly
  318. placeholder="请输入"
  319. />
  320. </el-form-item>
  321. </el-col>
  322. <el-col :span="8">
  323. <el-form-item label="调整价格" prop="pricCurr">
  324. <el-input
  325. v-model.trim="temp.pricCurr"
  326. placeholder="请输入调整后价格"
  327. />
  328. </el-form-item>
  329. </el-col>
  330. </el-row>
  331. <el-row>
  332. <el-form-item label="申请原因" prop="appyRea">
  333. <el-input
  334. type="textarea"
  335. v-model.trim="temp.appyRea"
  336. placeholder="请输入调价原因"
  337. />
  338. </el-form-item>
  339. </el-row>
  340. <el-row>
  341. <el-form-item
  342. label="上传文件"
  343. prop="fileId"
  344. :rules="rules.uploadRequired"
  345. >
  346. <yl-upload
  347. :fileId="temp.fileId"
  348. @getUpload="getUpload"
  349. urlName="acco"
  350. >
  351. <template v-slot:dec
  352. >只能上传pdf文件</template
  353. >
  354. </yl-upload>
  355. </el-form-item>
  356. </el-row>
  357. </el-form>
  358. <div slot="footer" class="dialog-footer">
  359. <el-button @click="dialogPrice = false">取消</el-button>
  360. <el-button type="primary" @click="commitData()" :loading="ccLoad"
  361. >确认</el-button
  362. >
  363. </div>
  364. </el-dialog>
  365. <el-dialog title="选择耗材" :visible.sync="dialogAdd" width="70%">
  366. <template>
  367. <el-form
  368. :model="listQueryadd"
  369. ref="listQueryadd"
  370. :inline="true"
  371. label-width="90px"
  372. >
  373. <el-form-item
  374. size="mini"
  375. label="耗材名称"
  376. prop="prodName"
  377. class="long"
  378. >
  379. <el-input
  380. v-model="listQueryadd.prodName"
  381. placeholder="请输入耗材名称"
  382. ></el-input>
  383. </el-form-item>
  384. <el-form-item size="mini" label="规格" prop="spec" class="long">
  385. <el-input
  386. v-model="listQueryadd.spec"
  387. placeholder="请输入耗材规格"
  388. ></el-input>
  389. </el-form-item>
  390. <!-- <el-form-item label="耗材编码" prop="materialId" class="long">
  391. <el-input
  392. v-model="listQueryadd.materialId"
  393. placeholder="请输入耗材编码"
  394. ></el-input>
  395. </el-form-item> -->
  396. <el-form-item size="mini" label="医保编码" prop="hiCode" class="long">
  397. <el-input
  398. v-model="listQueryadd.hiCode"
  399. placeholder="请输入医保编码"
  400. ></el-input>
  401. </el-form-item>
  402. <el-form-item size="mini" label="是否集采" prop="isFas" class="long">
  403. <el-select
  404. v-model="listQueryadd.isFas"
  405. placeholder="请选择是否集采"
  406. clearable
  407. >
  408. <el-option
  409. v-for="item in isFasData"
  410. :key="item.value"
  411. :label="item.name"
  412. :value="item.value"
  413. ></el-option>
  414. </el-select>
  415. </el-form-item>
  416. <el-form-item
  417. size="mini"
  418. label="注册证号"
  419. prop="regcertno"
  420. class="long"
  421. >
  422. <el-input
  423. v-model="listQueryadd.regcertno"
  424. placeholder="请输入注册证号"
  425. ></el-input>
  426. </el-form-item>
  427. <el-form-item
  428. size="mini"
  429. label="生产企业"
  430. prop="prodEntp"
  431. class="long"
  432. >
  433. <el-input
  434. v-model="listQueryadd.prodEntp"
  435. placeholder="请输入生产企业"
  436. ></el-input>
  437. </el-form-item>
  438. <el-form-item size="mini" label="型号" prop="mol" class="long">
  439. <el-input
  440. v-model="listQueryadd.mol"
  441. placeholder="请输入型号"
  442. ></el-input>
  443. </el-form-item>
  444. <!-- <el-form-item label="对码状态" prop="stas">
  445. <el-select
  446. v-model="listQuery.stas"
  447. placeholder="请选择对码状态"
  448. clearable
  449. >
  450. <el-option
  451. v-for="item in crspFlgOption"
  452. :key="item.value"
  453. :label="item.name"
  454. :value="item.value"
  455. ></el-option>
  456. </el-select>
  457. </el-form-item> -->
  458. <el-form-item>
  459. <el-button type="primary" @click="getdialog('search')"
  460. >查询</el-button
  461. >
  462. <el-button @click="resetdialog('consumableData')">重置</el-button>
  463. </el-form-item>
  464. </el-form>
  465. <el-table
  466. ref="multipleTable"
  467. v-loading="listdialogLoading"
  468. element-loading-text="加载中"
  469. fit
  470. stripe
  471. border
  472. :data="consumableData"
  473. border
  474. style="width: 100%"
  475. row-key="id"
  476. height="500"
  477. @selection-change="handleSelectionChange"
  478. highlight-current-row
  479. >
  480. <el-table-column
  481. type="selection"
  482. :selectable="selected"
  483. :reserve-selection="true"
  484. width="55"
  485. ></el-table-column>
  486. <el-table-column prop="hiCode" label="医保编码"> </el-table-column>
  487. <el-table-column prop="prodName" label="耗材名称" width="180">
  488. </el-table-column>
  489. <el-table-column prop="pubonlnPric" label="挂网价格">
  490. </el-table-column>
  491. <el-table-column prop="isFas" label="是否集采">
  492. <template #default="{ row }">
  493. <span v-if="row.isFas == '0'">否</span>
  494. <span v-if="row.isFas == '1'">是</span>
  495. </template>
  496. </el-table-column>
  497. <el-table-column prop="fasBtch" label="集采批次"> </el-table-column>
  498. <!-- <el-table-column prop="splb" label="耗材类别">
  499. </el-table-column>
  500. <el-table-column prop="spfl" label="耗材分类">
  501. </el-table-column> -->
  502. <el-table-column prop="spec" label="规格"> </el-table-column>
  503. <el-table-column prop="mol" label="型号"> </el-table-column>
  504. <el-table-column prop="matl" label="材质"> </el-table-column>
  505. <el-table-column prop="pacmatl" label="包装材质"> </el-table-column>
  506. <el-table-column prop="prodSouc" label="生产来源">
  507. <template #default="{ row }">
  508. <span v-if="row.prodSouc == '1'">国产</span>
  509. <span v-if="row.prodSouc == '2'">进口</span>
  510. </template>
  511. </el-table-column>
  512. <el-table-column prop="regcertno" label="注册证号"> </el-table-column>
  513. <el-table-column prop="prodEntp" label="生产企业" width="120">
  514. </el-table-column>
  515. <el-table-column prop="agnt" label="代理企业" width="150">
  516. </el-table-column>
  517. </el-table>
  518. <div slot="footer" class="dialog-footer">
  519. <el-button type="primary" @click="handleConfirm" :loading="addLoading"
  520. >确认</el-button
  521. >
  522. </div>
  523. <!-- <el-form :model="form" ref="form" :rules="rules">
  524. <el-table
  525. :data="form.splerData"
  526. border
  527. style="width: 100%"
  528. v-loading="supLoading"
  529. >
  530. <el-table-column
  531. fixed
  532. prop="splerDrugName"
  533. label="药品名称"
  534. width="150"
  535. >
  536. </el-table-column>
  537. <el-table-column
  538. prop="splerDosformName"
  539. label="剂型名称"
  540. width="120"
  541. >
  542. </el-table-column>
  543. <el-table-column prop="splerProdentpName" label="生产企业">
  544. </el-table-column>
  545. <el-table-column
  546. prop="splerDrugListId"
  547. label="药品编码"
  548. width="120"
  549. >
  550. </el-table-column>
  551. <el-table-column prop="address" label="规格" width="250">
  552. <template slot-scope="scope">
  553. <div class="drug-name">
  554. {{"供应商规格 【" +scope.row.splerSpecName +"*" +scope.row.splerPrepunt +"/" +scope.row.splerPacUnt +"】"}}
  555. </div>
  556. </template>
  557. </el-table-column>
  558. <el-table-column prop="address" label="转换比" width="150">
  559. <template slot-scope="scope">
  560. <el-form-item :prop="'splerData.' + scope.$index + '.convrat'" :rules="{required: true,message: '输入转换比',trigger: 'change'}" >
  561. <el-input v-model="scope.row.convrat" placeholder="请输入转换比"></el-input>
  562. </el-form-item>
  563. </template>
  564. </el-table-column>
  565. <el-table-column fixed="right" label="操作" width="60">
  566. <template slot-scope="scope">
  567. <el-button
  568. @click="handleClick(scope.row, scope.$index)"
  569. type="text"
  570. size="small"
  571. >对码</el-button
  572. >
  573. </template>
  574. </el-table-column>
  575. </el-table>
  576. </el-form> -->
  577. <!--分页-->
  578. <yl-pagination
  579. v-show="totalC > 0"
  580. :total="totalC"
  581. :page.sync="listQueryadd.current"
  582. :limit.sync="listQueryadd.size"
  583. @pagination="getdialog"
  584. />
  585. </template>
  586. </el-dialog>
  587. </div>
  588. </template>
  589. <script>
  590. import ylPagination from "@/components/yl-pagination";
  591. import mcsInfo from "@/views/components/mcs-info.vue";
  592. import {
  593. selectSplerMcsList,
  594. selectMcsList,
  595. saveSplerMcs,
  596. PricChg,
  597. QueryHospList,
  598. QueryHospDrugList,
  599. QuerySplerDrugList,
  600. DrugMatch,
  601. CancMatch,
  602. selectSpdList,
  603. selectSplerMcsListIntf,
  604. exportMcsTemplate,
  605. importMcsExcel
  606. } from "@/api/consumCataManage-sup/index";
  607. import rulesR from "@/utils/rules";
  608. import ylUpload from "@/components/yl-upload";
  609. import { exportData } from "./const";
  610. export default {
  611. components: {
  612. ylPagination,
  613. ylUpload,
  614. mcsInfo
  615. },
  616. data() {
  617. return {
  618. activeName: "grp",
  619. rulesR,
  620. spdId: null,
  621. fileList: [],
  622. data: [],
  623. defaultProps: {
  624. children: "children",
  625. label: "spdName"
  626. },
  627. listQuery: {
  628. current: 1,
  629. size: 10,
  630. materialId: "",
  631. spec: "",
  632. hiCode: "",
  633. isFas: "",
  634. fasBtch: "",
  635. mol: "",
  636. prodSouc: "",
  637. mcsType: "",
  638. matl: "",
  639. prodEntp: "",
  640. prodName: "",
  641. status: "",
  642. regcertno: "",
  643. isPub: "",
  644. spdId: ""
  645. },
  646. listLoading: false,
  647. list: [],
  648. total: 0,
  649. tableLoading: false,
  650. supLoading: false,
  651. tableData: [],
  652. // crspFlgOption: [
  653. // { value: "0", name: "未对码" },
  654. // { value: "1", name: "已对码" },
  655. // ],
  656. isFasData: [{ value: "1", name: "是" }, { value: "0", name: "否" }],
  657. mcsTypeData: [
  658. { value: "0", name: "普通耗材" },
  659. { value: "1", name: "高值耗材" },
  660. { value: "2", name: "试剂" },
  661. { value: "3", name: "总务耗材" },
  662. { value: "4", name: "低值可收费" },
  663. { value: "5", name: "低值不可收费" }
  664. ],
  665. SoucData: [{ value: "1", name: "国产" }, { value: "2", name: "进口" }],
  666. statusData: [
  667. { value: "A", name: "待提交" },
  668. { value: "B", name: "已提交" },
  669. { value: "C", name: "审核通过" },
  670. { value: "R", name: "驳回" }
  671. ],
  672. isPubData: [{ value: "1", name: "是" }, { value: "0", name: "否" }],
  673. dialogPrice: false,
  674. dialogDui: false,
  675. ccLoad: false,
  676. temp: {
  677. drugListId: "",
  678. drugName: "",
  679. dosformName: "",
  680. specName: "",
  681. pacUnt: "",
  682. prodEntp: "",
  683. pricInit: "",
  684. pricCurr: "",
  685. appyRea: "",
  686. fileId: ""
  687. },
  688. rules: {
  689. pricCurr: [
  690. {
  691. required: true,
  692. message: "调整价格不能为空",
  693. trigger: "blur"
  694. },
  695. {
  696. pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  697. message: "请输入数字,最多两位小数",
  698. trigger: "blur"
  699. }
  700. ],
  701. appyRea: [
  702. {
  703. required: true,
  704. message: "申请原因不能为空",
  705. trigger: "blur"
  706. }
  707. ],
  708. num: [
  709. {
  710. required: true,
  711. message: "请输入转换比",
  712. trigger: "change"
  713. }
  714. ],
  715. uploadRequired: [
  716. { required: true, message: "请上传文件", trigger: "change" }
  717. ]
  718. },
  719. tableData: [
  720. {
  721. date: "2016-05-02",
  722. name: "王小虎",
  723. province: "上海",
  724. city: "普陀区",
  725. address: "上海市普陀区金沙江路 1518 弄",
  726. zip: 200333
  727. },
  728. {
  729. date: "2016-05-04",
  730. name: "王小虎",
  731. province: "上海",
  732. city: "普陀区",
  733. address: "上海市普陀区金沙江路 1517 弄",
  734. zip: 200333
  735. },
  736. {
  737. date: "2016-05-01",
  738. name: "王小虎",
  739. province: "上海",
  740. city: "普陀区",
  741. address: "上海市普陀区金沙江路 1519 弄",
  742. zip: 200333
  743. },
  744. {
  745. date: "2016-05-03",
  746. name: "王小虎",
  747. province: "上海",
  748. city: "普陀区",
  749. address: "上海市普陀区金沙江路 1516 弄",
  750. zip: 200333
  751. }
  752. ],
  753. consumableData: [],
  754. form: {
  755. splerData: []
  756. },
  757. // 省平台目录
  758. listdialogLoading: false,
  759. dialogAdd: false,
  760. listQueryadd: {
  761. materialId: "",
  762. materialId: "",
  763. spec: "",
  764. hiCode: "",
  765. isFas: "",
  766. fasBtch: "",
  767. mol: "",
  768. current: 1,
  769. size: 10,
  770. regcertno: "",
  771. prodEntp: "",
  772. mol: ""
  773. },
  774. totalC: false,
  775. addLoading: false,
  776. insertMcsList: [],
  777. // tree
  778. activeNametree: "org",
  779. btnShow: false,
  780. list1: [],
  781. routespdId: ""
  782. };
  783. },
  784. methods: {
  785. handleChange(file, list) {
  786. let formData = new FormData();
  787. formData.append("spdId", this.listQuery.spdId);
  788. formData.append("file", file.raw);
  789. importMcsExcel(formData).then(res => {
  790. if (res.success == true) {
  791. this.$message({
  792. message: "导入成功",
  793. type: "success"
  794. });
  795. this.getData();
  796. }
  797. });
  798. },
  799. //模版下载
  800. downTemplate() {
  801. exportMcsTemplate({}).then(res => {
  802. const _res = res.data;
  803. exportData(_res, "目录模版");
  804. });
  805. },
  806. tabClick(tab) {
  807. if (tab.label == "按机构") {
  808. this.defaultProps.label = "spdName";
  809. }
  810. // else if(tab.label == "按分类"){
  811. // // this.getData4();
  812. // // this.defaultProps.label = 'orgGrpName'
  813. // // this.listQuery.type = 'grp';
  814. // }
  815. },
  816. // 上传文件
  817. getUpload(id) {
  818. this.temp.fileId = id;
  819. if (id) {
  820. this.$refs.dataForm.clearValidate("fileId");
  821. } else {
  822. this.$refs.dataForm.validateField("fileId");
  823. }
  824. },
  825. validateField(form, index) {
  826. let result = true;
  827. for (let item of this.$refs[form].fields) {
  828. if (item.prop.split(".")[1] == index) {
  829. this.$refs[form].validateField(item.prop, error => {
  830. if (error != "") {
  831. result = false;
  832. }
  833. });
  834. }
  835. if (!result) break;
  836. }
  837. return result;
  838. },
  839. // 点击获取医院药品列表
  840. handleNodeClick(data) {
  841. this.listLoading = true;
  842. this.spdId = data.spdId;
  843. this.listQuery.spdId = this.spdId;
  844. selectSplerMcsList(this.listQuery)
  845. .then(res => {
  846. this.list = res.data.records;
  847. this.total = res.data.total;
  848. this.listLoading = false;
  849. this.btnShow = true;
  850. })
  851. .catch(err => {
  852. this.listLoading = false;
  853. });
  854. },
  855. // 获取医院列表
  856. getData(type) {
  857. this.data = [];
  858. this.listLoading = true;
  859. selectSpdList()
  860. .then(res => {
  861. this.listQuery.spdId = res.data[0].spdId;
  862. this.data = res.data;
  863. this.listLoading = false;
  864. })
  865. .catch(err => {
  866. this.listLoading = false;
  867. });
  868. },
  869. // 搜索获取医院药品列表
  870. getHospConsum(type) {
  871. if (type == "search") {
  872. this.listQuery.current = 1;
  873. }
  874. this.listLoading = true;
  875. selectSplerMcsList(this.listQuery)
  876. .then(res => {
  877. this.list = res.data.records;
  878. this.total = res.data.total;
  879. this.listLoading = false;
  880. })
  881. .catch(err => {
  882. this.listLoading = false;
  883. });
  884. },
  885. // 获取新增目录弹框数据
  886. getdialog(type) {
  887. if (type == "search") {
  888. this.listQueryadd.current = 1;
  889. }
  890. this.listdialogLoading = true;
  891. selectMcsList(this.listQueryadd)
  892. .then(res => {
  893. this.consumableData = res.data.records;
  894. this.totalC = res.data.total;
  895. this.listdialogLoading = false;
  896. })
  897. .catch(err => {
  898. this.listdialogLoading = false;
  899. });
  900. },
  901. reset(type) {
  902. if (type === "consumableData") {
  903. this.$refs.listQuery.resetFields();
  904. this.getHospConsum();
  905. } else {
  906. this.$refs.supQuery.resetFields();
  907. this.searchSup();
  908. }
  909. },
  910. resetdialog(type) {
  911. if (type === "consumableData") {
  912. this.$refs.listQueryadd.resetFields();
  913. this.getdialog();
  914. } else {
  915. this.$refs.supQuery.resetFields();
  916. this.searchSup();
  917. }
  918. },
  919. // 多选
  920. handleSelectionChange(e) {
  921. this.insertMcsList = e;
  922. this.insertMcsList = this.insertMcsList.map(item => {
  923. return {
  924. ...item,
  925. spdId: this.spdId,
  926. opeType: "新增"
  927. };
  928. });
  929. },
  930. // 多选后选过的禁用
  931. selected(row, index) {
  932. if (
  933. this.list1.some(el => {
  934. return el.hiCode === row.hiCode;
  935. })
  936. ) {
  937. return false;
  938. } else {
  939. return true;
  940. }
  941. },
  942. // 新增目录
  943. handleUpdate(type) {
  944. if (type == "search") {
  945. this.listQueryadd.current = 1;
  946. }
  947. this.dialogAdd = true;
  948. selectSplerMcsListIntf(this.listQuery).then(res => {
  949. this.list1 = res.data.records;
  950. });
  951. // this.getdialog();
  952. },
  953. // 新增目录确认
  954. handleConfirm() {
  955. if (this.insertMcsList.length == 0) {
  956. this.$message({
  957. message: "请选择要添加的数据",
  958. type: "warning"
  959. });
  960. } else {
  961. this.$confirm("确认提交", "提示", {
  962. confirmButtonText: "确定",
  963. cancelButtonText: "取消",
  964. type: "warning"
  965. }).then(() => {
  966. this.addLoading = true;
  967. saveSplerMcs({ insertMcsList: this.insertMcsList })
  968. .then(res => {
  969. if (res.success === true) {
  970. this.addLoading = false;
  971. this.getHospConsum();
  972. this.insertMcsList = [];
  973. this.dialogAdd = false;
  974. this.$refs.multipleTable.clearSelection();
  975. this.$router.push({
  976. name: "consumCataManagement-sup",
  977. query: { spdId: this.spdId }
  978. });
  979. } else {
  980. this.addLoading = false;
  981. this.$refs.multipleTable.clearSelection();
  982. // this.$message({
  983. // message: res.message || "操作失败",
  984. // type: "error",
  985. // });
  986. }
  987. })
  988. .catch(() => {
  989. this.addLoading = false;
  990. this.dialogAdd = false;
  991. this.$refs.multipleTable.clearSelection();
  992. });
  993. });
  994. }
  995. // saveSplerMcs
  996. // this.addLoading = false;
  997. // this.dialogAdd = false;
  998. },
  999. // 非挂网目录新增
  1000. handleFadd() {
  1001. this.$router.push({
  1002. name: "catalogdetailsadd",
  1003. query: { spdId: this.spdId }
  1004. });
  1005. },
  1006. // 调价申请 确认
  1007. commitData() {
  1008. this.$refs["dataForm"].validate(valid => {
  1009. if (valid) {
  1010. this.ccLoad = true;
  1011. let data = {
  1012. drugListId: this.temp.drugListId,
  1013. pricInit: this.temp.pricInit,
  1014. pricCurr: this.temp.pricCurr,
  1015. appyRea: this.temp.appyRea,
  1016. spdId: this.spdId,
  1017. fileId: this.temp.fileId
  1018. };
  1019. PricChg(data)
  1020. .then(res => {
  1021. if (res.success === true) {
  1022. this.$message("调价已申请");
  1023. this.ccLoad = false;
  1024. this.dialogPrice = false;
  1025. this.getHospConsum();
  1026. }
  1027. })
  1028. .catch(err => {
  1029. this.ccLoad = false;
  1030. });
  1031. }
  1032. });
  1033. },
  1034. // 对码弹窗获取供应商列表
  1035. handleDui(row) {
  1036. if (this.spdId) {
  1037. this.routespdId = this.spdId;
  1038. } else {
  1039. this.routespdId = this.$route.query.spdId;
  1040. }
  1041. this.$router.push({
  1042. name: "catalogdetails",
  1043. query: {
  1044. id: row.id,
  1045. status: row.status,
  1046. spdId: this.routespdId,
  1047. isPub: row.isPub,
  1048. type: "modify",
  1049. page: "1",
  1050. opeType: "修改"
  1051. }
  1052. });
  1053. // this.dialogDui = true;
  1054. // this.consumableData = [];
  1055. // this.consumableData.push(row);
  1056. // this.supLoading = true;
  1057. // QuerySplerDrugList({ spdId: row.spdId })
  1058. // .then((res) => {
  1059. // this.form.splerData = res.data.records;
  1060. // this.total = res.data.total;
  1061. // this.supLoading = false;
  1062. // })
  1063. // .catch((err) => {
  1064. // this.supLoading = false;
  1065. // });
  1066. },
  1067. // 对码操作
  1068. handleClick(item, index) {
  1069. let DrugMatchObj = {
  1070. spdId: this.spdId,
  1071. drugListId: this.consumableData[0].drugListId,
  1072. splerDrugListId: item.splerDrugListId,
  1073. convrat: item.convrat
  1074. };
  1075. if (!this.validateField("form", index)) {
  1076. return;
  1077. } else {
  1078. DrugMatch(DrugMatchObj).then(res => {
  1079. if (res.success === true) {
  1080. this.dialogDui = false;
  1081. this.getHospConsum();
  1082. this.$message({
  1083. message: "对码成功",
  1084. type: "success"
  1085. });
  1086. } else {
  1087. this.$message.error("对码失败");
  1088. }
  1089. });
  1090. }
  1091. },
  1092. // 取消对码
  1093. handleCanc(row) {
  1094. this.$confirm("此操作会取消该药品对码, 是否继续?", "提示", {
  1095. confirmButtonText: "确定",
  1096. cancelButtonText: "取消",
  1097. type: "warning"
  1098. })
  1099. .then(() => {
  1100. CancMatch({ spdId: this.spdId, drugListId: row.drugListId }).then(
  1101. res => {
  1102. if (res.success) {
  1103. this.getHospConsum();
  1104. this.$message({
  1105. type: "success",
  1106. message: "取消对码成功"
  1107. });
  1108. }
  1109. }
  1110. );
  1111. })
  1112. .catch(() => {});
  1113. },
  1114. //搜索供应商列表
  1115. searchSup() {
  1116. this.supLoading = true;
  1117. this.supQuery.spdId = this.spdId;
  1118. QuerySplerDrugList(this.supQuery)
  1119. .then(res => {
  1120. this.form.splerData = res.data.records;
  1121. this.total = res.data.total;
  1122. this.supLoading = false;
  1123. })
  1124. .catch(err => {
  1125. this.supLoading = false;
  1126. });
  1127. }
  1128. },
  1129. mounted() {
  1130. this.getData();
  1131. // this.getHospConsum();
  1132. if (this.$route.query.spdId) {
  1133. this.listQuery.spdId = this.$route.query.spdId;
  1134. selectSplerMcsList(this.listQuery)
  1135. .then(res => {
  1136. this.list = res.data.records;
  1137. this.total = res.data.total;
  1138. this.listLoading = false;
  1139. this.btnShow = true;
  1140. })
  1141. .catch(err => {
  1142. this.listLoading = false;
  1143. });
  1144. }
  1145. }
  1146. };
  1147. </script>
  1148. <style lang="scss" scoped>
  1149. ::v-deep .el-card__body {
  1150. padding: 12px;
  1151. }
  1152. ::v-deep .el-tree-node__content {
  1153. height: 35px;
  1154. }
  1155. ::v-deep .el-input__suffix {
  1156. display: flex;
  1157. align-items: center;
  1158. cursor: pointer;
  1159. font-size: 15px;
  1160. }
  1161. ::v-deep .long .el-form-item__content {
  1162. width: 220px;
  1163. }
  1164. ::v-deep .long .el-input__inner {
  1165. width: 199px;
  1166. }
  1167. .upload-demo {
  1168. display: inline-block;
  1169. }
  1170. </style>