AddDiagBase.vue 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668
  1. <template>
  2. <div style="min-height:100%" ref="viewBox">
  3. <crumbs :title="title" :param="$route.params" linkTo="ZskDiagBase"></crumbs>
  4. <div class="contents">
  5. <el-form
  6. :inline="true"
  7. ref="form"
  8. :label-position="labelPosition"
  9. class="add-new-form"
  10. label-width="100px"
  11. :model="form"
  12. :rules="rules"
  13. >
  14. <div class="content">
  15. <el-form-item label="疾病名称:" class="item" prop="conceptId" :rules="rules.conceptId">
  16. <el-select
  17. clearable
  18. remote
  19. filterable
  20. :remote-method="searchDiag"
  21. v-model.trim="form.conceptId"
  22. >
  23. <el-option
  24. v-for="item in conceptList"
  25. :key="item.conceptId"
  26. :label="item.conceptName"
  27. :value="item.conceptId"
  28. ></el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="诊断依据描述:" prop="description" class="item">
  32. <el-input
  33. class="inps"
  34. maxlength="200"
  35. placeholder="请输入诊断依据描述"
  36. v-model.trim="form.description"
  37. ></el-input>
  38. </el-form-item>
  39. </div>
  40. <div class="content content-2">
  41. <div class="content-2-header">
  42. <p class="title1">
  43. <span class="star">*</span>诊断依据内容
  44. </p>
  45. <p class="title2">注:1、选择诊断依据类型后才能展示基础依据类型。2、医学内容可输入升高、降低、阴性、阳性等~</p>
  46. </div>
  47. <el-table
  48. size="mini"
  49. :span-method="dataSpanMethod"
  50. :data="form.klDiagnoseTypeVO"
  51. border
  52. ref="tableList"
  53. style="min-height: 200px"
  54. height="calc(100vh - 450px)"
  55. :header-cell-style="{background:'#E3EAF4'}"
  56. >
  57. <el-table-column label="依据" width="100" fixed>
  58. <template slot="header" slot-scope="scope">
  59. <span class="name">依据</span>
  60. </template>
  61. <template slot-scope="scope">
  62. <el-form-item>
  63. <img
  64. src="../../images/icon-copy.png"
  65. height="18"
  66. width="18"
  67. class="icon"
  68. @click="copyDiag(scope.row.depart_id)"
  69. />
  70. <img
  71. src="../../images/icon-add.png"
  72. height="18"
  73. width="18"
  74. class="icon"
  75. @click="addDiag(scope.row.depart_id)"
  76. />
  77. <img
  78. src="../../images/icon-delete.png"
  79. height="18"
  80. width="18"
  81. class="icon"
  82. @click="delDiag(scope.row.depart_id,scope.$index)"
  83. v-show="dest.length>1"
  84. />
  85. </el-form-item>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="诊断依据类型" width="130">
  89. <template slot="header" slot-scope="scope">
  90. <span class="star">*</span>
  91. <span class="name">诊断依据类型</span>
  92. </template>
  93. <template slot-scope="scope">
  94. <el-form-item
  95. class="is-request"
  96. :prop="'klDiagnoseTypeVO.'+scope.$index+'.conditionType'"
  97. :rules="rules.conditionType"
  98. >
  99. <el-select
  100. ref="aa"
  101. v-model="form.klDiagnoseTypeVO[scope.$index].conditionType"
  102. @change="(val)=>basTypeChange(val,scope.$index)"
  103. >
  104. <el-option
  105. v-for="item in baseTypes"
  106. :key="item.ruleType"
  107. :label="item.name"
  108. :value="item.ruleType"
  109. ></el-option>
  110. </el-select>
  111. </el-form-item>
  112. </template>
  113. </el-table-column>
  114. <el-table-column label="组" width="130">
  115. <template slot="header" slot-scope="scope">
  116. <span class="star">*</span>
  117. <span class="name">组</span>
  118. </template>
  119. <template slot-scope="scope">
  120. <el-form-item>
  121. <img
  122. src="../../images/icon-add.png"
  123. height="18"
  124. width="18"
  125. class="icon"
  126. @click="addGroup(scope.$index)"
  127. />
  128. <img
  129. src="../../images/icon-delete.png"
  130. height="18"
  131. width="18"
  132. class="icon"
  133. @click="delGroup(scope.row.depart_id,scope.$index)"
  134. v-show="isMax(scope.row.depart_id)"
  135. />
  136. </el-form-item>
  137. </template>
  138. </el-table-column>
  139. <el-table-column label="符合条件数量" width="150">
  140. <template slot="header" slot-scope="scope">
  141. <span class="star">*</span>
  142. <span class="name">符合条件数量</span>
  143. </template>
  144. <template slot-scope="scope">
  145. <el-form-item
  146. :prop="'klDiagnoseTypeVO.'+scope.$index+'.groupVO.'+0+'.fitNo'"
  147. :rules="rules.fitNo"
  148. >
  149. <el-select v-model="scope.row.groupVO[0].fitNo">
  150. <el-option
  151. v-for="item in numArr[scope.$index].num[0]"
  152. :key="item.id"
  153. :label="item.name"
  154. :value="item.id"
  155. ></el-option>
  156. </el-select>
  157. </el-form-item>
  158. </template>
  159. </el-table-column>
  160. <el-table-column v-for="(v,i) in columns" :width="v.width" :key="i">
  161. <template slot="header" slot-scope="scope">
  162. <span class="star" v-if="v.istar">*</span>
  163. <span class="name">{{v.title}}</span>
  164. </template>
  165. <template slot-scope="scope">
  166. <div v-for="(item,index) in scope.row.groupVO" :key="index">
  167. <div v-for="(items,i) in item.klDiagnoseDetail" :key="i">
  168. <div v-if="v.title == '基础依据'">
  169. <el-form-item>
  170. <img
  171. src="../../images/icon-add.png"
  172. height="18"
  173. width="18"
  174. class="icon"
  175. @click="addRule(scope.row,scope.$index,index)"
  176. />
  177. <img
  178. src="../../images/icon-delete.png"
  179. height="18"
  180. width="18"
  181. class="icon"
  182. @click="delRule(scope.row,scope.$index,index,i)"
  183. v-show="item.klDiagnoseDetail.length>1"
  184. />
  185. </el-form-item>
  186. </div>
  187. <div class="box-2" v-if="v.title == '基础依据名称'">
  188. <el-form-item
  189. :prop="'klDiagnoseTypeVO.' +
  190. scope.$index +
  191. '.groupVO.' +
  192. index +
  193. '.klDiagnoseDetail.'+i+'.basDescription'"
  194. :rules="rules.basDescription"
  195. >
  196. <el-input
  197. class="inp-name"
  198. placeholder="请输入基础依据名称"
  199. maxlength="100"
  200. v-model.trim="items.basDescription"
  201. ></el-input>
  202. </el-form-item>
  203. </div>
  204. <div class="box-2" v-if="v.title == '基础依据类型'">
  205. <el-form-item
  206. :prop="'klDiagnoseTypeVO.' +
  207. scope.$index +
  208. '.groupVO.' +
  209. index +
  210. '.klDiagnoseDetail.'+i+'.basType'"
  211. :rules="rules.basType"
  212. >
  213. <el-select
  214. v-model="items.basType"
  215. @change="(val)=>baseTermTypeChange(val,scope.$index,index,i)"
  216. >
  217. <el-option
  218. v-for="item in baseTermTypeList"
  219. :key="item.id"
  220. :label="item.name"
  221. :value="item.type"
  222. ></el-option>
  223. </el-select>
  224. </el-form-item>
  225. </div>
  226. <el-form-item
  227. :prop="'klDiagnoseTypeVO.' +
  228. scope.$index +
  229. '.groupVO.' +
  230. index +
  231. '.klDiagnoseDetail.'+i+'.basLibType'"
  232. v-if="!items.basNameType && v.title == '基础依据术语类型'"
  233. :rules="rules.basLibType"
  234. >
  235. <el-select
  236. v-model="items.basLibType"
  237. @change="(val)=>basLibTypeChange(val,scope.$index,index,i)"
  238. >
  239. <el-option
  240. v-for="item in items.basLibTypeList"
  241. :key="item.id"
  242. :label="item.name"
  243. :value="Number(item.code)"
  244. ></el-option>
  245. </el-select>
  246. </el-form-item>
  247. <el-form-item v-if="items.basNameType && v.title == '基础依据术语类型'">
  248. <el-input disabled v-model="items.basTypeName"></el-input>
  249. </el-form-item>
  250. <div
  251. v-if="v.title == '医学标准术语'"
  252. class="box-2"
  253. :class="items.basType===3 || items.basType===4? 'tmall' : 'taobao'"
  254. >
  255. <el-form-item
  256. v-if="items.basType==1 || items.basType==2 || items.basType==''"
  257. :prop="'klDiagnoseTypeVO.' +
  258. scope.$index +
  259. '.groupVO.' +
  260. index +
  261. '.klDiagnoseDetail.'+i+'.basConceptId'"
  262. :rules="rules.subConceptId"
  263. >
  264. <el-select
  265. class="searchselect"
  266. v-model.trim="items.basConceptId"
  267. multiple
  268. filterable
  269. remote
  270. reserve-keyword
  271. placeholder="请输入关键词"
  272. :remote-method="(val)=>searchConcept(val,scope.$index,index,i)"
  273. @change="(val)=>conceptChange(val,scope.$index,index,i)"
  274. >
  275. <el-option
  276. v-for="item in items.conceptList"
  277. :key="item.conceptId"
  278. :label="item.conceptName"
  279. :value="item.conceptId"
  280. ></el-option>
  281. </el-select>
  282. </el-form-item>
  283. </div>
  284. <div class="last-box" v-if="v.title == '依据具体内容'">
  285. <el-form-item
  286. :prop="'klDiagnoseTypeVO.' +
  287. scope.$index +
  288. '.groupVO.' +
  289. index +
  290. '.klDiagnoseDetail.'+i+'.dataType'"
  291. v-if="items.basType===2&&!items.onlyNumType&&!items.onlyTxtType"
  292. :rules="rules.dataType"
  293. >
  294. <el-select
  295. class="box-1"
  296. :class="items.basType===2&&!items.onlyNumType&&!items.onlyTxtType? 'taobao' : 'tmall'"
  297. v-model="items.dataType"
  298. @change="(val)=>dataTypeChange(val,scope.$index,index,i)"
  299. placeholder="请选择"
  300. size="small"
  301. >
  302. <el-option
  303. v-for="item in dataTypes"
  304. :key="item.id"
  305. :label="item.name"
  306. :value="item.id"
  307. ></el-option>
  308. </el-select>
  309. </el-form-item>
  310. <el-form-item
  311. v-if="(!items.onlyNumType&&items.dataType==='1')||items.onlyNumType"
  312. label="最大值:"
  313. label-width="60px"
  314. >
  315. <div class="last-box-1">
  316. <el-form-item
  317. :prop="'klDiagnoseTypeVO.' +
  318. scope.$index +
  319. '.groupVO.' +
  320. index +
  321. '.klDiagnoseDetail.'+i+'.maxOperator'"
  322. :rules="[
  323. {
  324. validator: (rule, value, callback) => {
  325. maxOperator(items, rule, value, callback);
  326. },
  327. trigger: ['change']
  328. }
  329. ]"
  330. >
  331. <el-select
  332. v-model="items.maxOperator"
  333. placeholder="请选择"
  334. size="small"
  335. clearable
  336. >
  337. <el-option
  338. v-for="item in operMaxList"
  339. :key="item.key"
  340. :label="item.name"
  341. :value="item.key"
  342. ></el-option>
  343. </el-select>
  344. </el-form-item>
  345. <el-form-item
  346. class="num"
  347. :prop="'klDiagnoseTypeVO.' +
  348. scope.$index +
  349. '.groupVO.' +
  350. index +
  351. '.klDiagnoseDetail.'+i+'.maxVal'"
  352. :rules="[
  353. {
  354. validator: (rule, value, callback) => {
  355. maxVal(items, rule, value, callback);
  356. },
  357. trigger: ['blur']
  358. }
  359. ]"
  360. >
  361. <el-input v-model="items.maxVal" placeholder="填写数值"></el-input>
  362. </el-form-item>
  363. <el-form-item prop="minUnit">
  364. <el-input v-model.trim="items.maxUnit" placeholder="填写单位"></el-input>
  365. </el-form-item>
  366. </div>
  367. </el-form-item>
  368. <el-form-item
  369. v-if="(!items.onlyNumType&&items.dataType==='1')||items.onlyNumType"
  370. label="最小值:"
  371. label-width="60px"
  372. >
  373. <div class="last-box-1 last-box-s">
  374. <el-form-item
  375. :prop="'klDiagnoseTypeVO.' +
  376. scope.$index +
  377. '.groupVO.' +
  378. index +
  379. '.klDiagnoseDetail.'+i+'.minOperator'"
  380. :rules="[
  381. {
  382. validator: (rule, value, callback) => {
  383. minOperator(items, rule, value, callback);
  384. },
  385. trigger: ['change']
  386. }
  387. ]"
  388. >
  389. <el-select
  390. v-model="items.minOperator"
  391. placeholder="请选择"
  392. size="small"
  393. clearable
  394. >
  395. <el-option
  396. v-for="item in operMinList"
  397. :key="item.key"
  398. :label="item.name"
  399. :value="item.key"
  400. ></el-option>
  401. </el-select>
  402. </el-form-item>
  403. <el-form-item
  404. class="minnum"
  405. :prop="'klDiagnoseTypeVO.' +
  406. scope.$index +
  407. '.groupVO.' +
  408. index +
  409. '.klDiagnoseDetail.'+i+'.minVal'"
  410. :rules="[
  411. {
  412. validator: (rule, value, callback) => {
  413. minVal(items, rule, value, callback);
  414. },
  415. trigger: ['blur']
  416. }
  417. ]"
  418. >
  419. <el-input v-model="items.minVal" placeholder="填写数值"></el-input>
  420. </el-form-item>
  421. <el-form-item prop="minUnit">
  422. <el-input v-model.trim="items.minUnit" placeholder="填写单位"></el-input>
  423. </el-form-item>
  424. </div>
  425. </el-form-item>
  426. <div>
  427. <el-form-item
  428. :prop="'klDiagnoseTypeVO.' +
  429. scope.$index +
  430. '.groupVO.' +
  431. index +
  432. '.klDiagnoseDetail.'+i+'.eqValue'"
  433. v-if="items.basType===4 || items.basType===3"
  434. maxlength="200"
  435. label="正则表达式:"
  436. class="discDesc"
  437. :rules="[
  438. {
  439. required: true,
  440. message: '请输入正则表达式',
  441. trigger: 'blur'
  442. },
  443. ]"
  444. >
  445. <el-input class="inp" placeholder="请输入正则表达式" v-model.trim="items.eqValue"></el-input>
  446. </el-form-item>
  447. </div>
  448. <div>
  449. <el-form-item
  450. :prop="'klDiagnoseTypeVO.' +
  451. scope.$index +
  452. '.groupVO.' +
  453. index +
  454. '.klDiagnoseDetail.'+i+'.eqValue'"
  455. maxlength="200"
  456. v-if="(!items.onlyNumType&&!items.basNameType&&(items.basType===2 || items.basType===1)&&items.dataType==='2')||items.onlyTxtType"
  457. label="医学内容:"
  458. class="discDesc"
  459. :rules="[
  460. {
  461. required: true,
  462. message: '请输入医学内容',
  463. trigger: 'blur'
  464. }
  465. ]"
  466. >
  467. <el-input v-model.trim="items.eqValue" class="inp" placeholder="请输入医学内容"></el-input>
  468. </el-form-item>
  469. </div>
  470. </div>
  471. </div>
  472. </div>
  473. </template>
  474. </el-table-column>
  475. </el-table>
  476. </div>
  477. </el-form>
  478. <div class="Butn">
  479. <el-button class="disclButn" size="small" type="primary" @click="confirm">确定</el-button>
  480. </div>
  481. </div>
  482. </div>
  483. </template>
  484. <script type="text/javascript">
  485. import util from '../../api/utils.js';
  486. import api from '@api/zskDiagBase.js';
  487. import { tableRules } from './rules';
  488. export default {
  489. name: 'AddZskDiagBase',
  490. data() {
  491. return {
  492. columns: [
  493. { title: '基础依据', width: 90, istar: true },
  494. { title: '基础依据名称', width: 160, istar: true },
  495. { title: '基础依据类型', width: 130, istar: true },
  496. { title: '基础依据术语类型', width: 160, istar: true },
  497. { title: '医学标准术语', width: 180, istar: true },
  498. { title: '依据具体内容', width: 850 }
  499. ],
  500. dicts: {},
  501. baseTypes: [], //诊断数据类型
  502. baseTermTypeList: [], //基础依据类型
  503. basLibTypeList: [], //基础术语依据类型
  504. numTypes: '', //只有数值类型的类型id
  505. labelPosition: 'left',
  506. isCopy: false,
  507. title: '诊断依据维护-添加诊断依据',
  508. conceptName: '',
  509. conceptList: [],
  510. form: {
  511. description: '',
  512. conceptId: '',
  513. klDiagnoseTypeVO: [
  514. {
  515. conditionType: '',
  516. depart_id: 0,
  517. groupVO: [
  518. {
  519. baseGroup: '',
  520. conditionGroup: '',
  521. fitNo: '',
  522. klDiagnoseDetail: [
  523. {
  524. dataType: '',
  525. basNameType: false,
  526. onlyNumType: false,
  527. onlyTxtType: false,
  528. basTypeName: '',
  529. basConceptId: [],
  530. basDescription: '',
  531. basLename: '',
  532. basLibName: '',
  533. basLibType: null,
  534. basType: '',
  535. eqOperator: '',
  536. eqUnit: '',
  537. eqValue: '',
  538. maxOperator: '',
  539. maxUnit: '',
  540. maxVal: '',
  541. minOperator: '',
  542. minUnit: '',
  543. minVal: ''
  544. }
  545. ]
  546. }
  547. ]
  548. }
  549. ]
  550. },
  551. id: null,
  552. rules: tableRules,
  553. dataTypes: [
  554. { id: '1', name: '数值类型' },
  555. { id: '2', name: '文本类型' }
  556. ],
  557. operMaxList: [
  558. { name: '<=', key: '<=' },
  559. { name: '<', key: '<' }
  560. ],
  561. operMinList: [
  562. { name: '>', key: '>' },
  563. { name: '>=', key: '>=' }
  564. ],
  565. basType: '',
  566. dataType: '',
  567. spanArr: [],
  568. list: [], //提交数据数组,
  569. i: 1,
  570. onshow: true
  571. };
  572. },
  573. created() {
  574. const param = this.$route.params;
  575. this.baseTypes = JSON.parse(localStorage.getItem('zskDiagList') || '[]');
  576. this.dicts = JSON.parse(localStorage.getItem('zskDiagDicts') || '{}');
  577. let info = param.data;
  578. if (info) {
  579. this.id = info.id;
  580. this.isCopy = param.copy;
  581. this.title =
  582. '诊断依据维护-' + (this.isCopy ? '复制' : '修改') + '诊断依据';
  583. this.conceptList = [
  584. { conceptId: info.conceptId, conceptName: info.conceptName }
  585. ];
  586. for (let i = 0; i < info.klDiagnoseTypeVO.length; i++) {
  587. info.klDiagnoseTypeVO[i].depart_id = i;
  588. }
  589. this.form = Object.assign({}, this.form, this.formatData(info));
  590. if (this.isCopy) {
  591. this.conceptList = [];
  592. delete this.form.conceptName;
  593. delete this.form.conceptId;
  594. delete this.form.description;
  595. delete this.form.id;
  596. }
  597. var index2 = this.baseTypes.findIndex(
  598. item => item.ruleType === this.form.klDiagnoseTypeVO[0].conditionType
  599. );
  600. this.baseTermTypeList = this.baseTypes[index2].subMenuList;
  601. const klDiagnoseTypeVO = this.form.klDiagnoseTypeVO,
  602. arr = [];
  603. let groupVOi, klDiagnoseDetailj;
  604. for (let i = 0; i < klDiagnoseTypeVO.length; i++) {
  605. groupVOi = klDiagnoseTypeVO[i].groupVO;
  606. for (let j = 0; j < groupVOi.length; j++) {
  607. klDiagnoseDetailj = groupVOi[j].klDiagnoseDetail;
  608. for (let k = 0; k < groupVOi[j].klDiagnoseDetail.length; k++) {
  609. var index2 = this.baseTermTypeList.findIndex(
  610. item => item.type === klDiagnoseDetailj[k].basType
  611. );
  612. klDiagnoseDetailj[k].basLibTypeList = this.baseTermTypeList[
  613. index2
  614. ].subMenuList;
  615. klDiagnoseDetailj[k].conceptList = this.formatData2(
  616. klDiagnoseDetailj[k].libNameList
  617. );
  618. klDiagnoseDetailj[k].libNameList.forEach(item => {
  619. arr.push(item.basConceptId);
  620. });
  621. this.$set(klDiagnoseDetailj[k],'basConceptId',arr )
  622. // klDiagnoseDetailj[k].basConceptId = arr;
  623. if (
  624. klDiagnoseDetailj[k].maxOperator ||
  625. klDiagnoseDetailj[k].minOperator
  626. ) {
  627. klDiagnoseDetailj[k].dataType = '1';
  628. } else if (klDiagnoseDetailj[k].eqValue) {
  629. klDiagnoseDetailj[k].dataType = '2';
  630. }
  631. if (
  632. klDiagnoseDetailj[k].basType == 3 ||
  633. klDiagnoseDetailj[k].basType == 4 ||
  634. klDiagnoseDetailj[k].basType == 5 ||
  635. klDiagnoseDetailj[k].basType == 6
  636. ) {
  637. klDiagnoseDetailj[k].basTypeName =
  638. klDiagnoseDetailj[k].basLibTypeList[0].name;
  639. klDiagnoseDetailj[k].basNameType = true;
  640. } else {
  641. klDiagnoseDetailj[k].basTypeName = '';
  642. klDiagnoseDetailj[k].basNameType = false;
  643. }
  644. const onlyNum = this.dicts['onlyNum'] || '&';
  645. const onlyTxt = this.dicts['onlyTxt'] || '&';
  646. const codes = onlyNum + ',';
  647. const code = onlyTxt + ',';
  648. let type = klDiagnoseDetailj[k].basLibType;
  649. let a = klDiagnoseDetailj[k].basLibType;
  650. klDiagnoseDetailj[k].onlyNumType =
  651. type && codes.indexOf(a + ',') > -1;
  652. klDiagnoseDetailj[k].onlyTxtType =
  653. type && code.indexOf(a + ',') > -1;
  654. }
  655. }
  656. }
  657. this.i = this.form.klDiagnoseTypeVO.slice(-1)[0].depart_id + 1;
  658. }
  659. },
  660. computed: {
  661. numArr() {
  662. let arr = [];
  663. let num = [];
  664. for (let i = 0; i < this.form.klDiagnoseTypeVO.length; i++) {
  665. arr.push({ num: [] });
  666. for (let j = 0; j < this.form.klDiagnoseTypeVO[i].groupVO.length; j++) {
  667. arr[i].num.push([]);
  668. for (
  669. let k = 0;
  670. k <
  671. this.form.klDiagnoseTypeVO[i].groupVO[j].klDiagnoseDetail.length;
  672. k++
  673. ) {
  674. arr[i].num[j].push({ id: k + 1, name: k + 1 });
  675. }
  676. }
  677. }
  678. return arr;
  679. },
  680. dest() {
  681. const formData = JSON.parse(JSON.stringify(this.form));
  682. let map = {},
  683. dest = [];
  684. for (let i = 0; i < formData.klDiagnoseTypeVO.length; i++) {
  685. let ai = formData.klDiagnoseTypeVO[i];
  686. if (!map[ai.depart_id]) {
  687. dest.push({
  688. depart_id: ai.depart_id,
  689. conditionType: ai.conditionType,
  690. groupVO: ai.groupVO
  691. });
  692. map[ai.depart_id] = ai;
  693. } else {
  694. for (let j = 0; j < dest.length; j++) {
  695. var dj = dest[j];
  696. if (dj.depart_id == ai.depart_id) {
  697. dj.groupVO = dj.groupVO.concat(ai.groupVO);
  698. break;
  699. }
  700. }
  701. }
  702. }
  703. return dest;
  704. }
  705. },
  706. methods: {
  707. // 最大值 选择rule
  708. maxOperator(items, rule, value, callback) {
  709. const { maxVal, minOperator, minVal } = items;
  710. const val = value + minOperator + minVal + maxVal;
  711. if (!val || (!value && maxVal !== '')) {
  712. callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
  713. } else {
  714. callback();
  715. }
  716. },
  717. // 最大值 数值rule
  718. maxVal(items, rule, value, callback) {
  719. const { maxOperator, minOperator, minVal } = items;
  720. const val = value + maxOperator + minOperator + minVal;
  721. const isNum = /^(\-|\+)?\d+(\.\d+)?$/.test(value);
  722. if (!val || (value == '' && maxOperator)) {
  723. callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
  724. } else if (value !== '' && !isNum) {
  725. callback(new Error('只能输入数字'));
  726. } else {
  727. callback();
  728. }
  729. },
  730. // 最小值 选择rule
  731. minOperator(items, rule, value, callback) {
  732. const { maxVal, maxOperator, minVal } = items;
  733. const val = value + maxVal + maxOperator + minVal;
  734. if (!val || (!value && minVal !== '')) {
  735. callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
  736. } else {
  737. callback();
  738. }
  739. },
  740. // 最小值 数值rule
  741. minVal(items, rule, value, callback) {
  742. const { maxVal, minOperator, maxOperator } = items;
  743. const val = value + maxVal + minOperator + maxOperator;
  744. const isNum = /^(\-|\+)?\d+(\.\d+)?$/.test(value);
  745. if (!val || (value == '' && minOperator)) {
  746. callback(new Error('最大值和最小值至少完整填写一个,单位不必填'));
  747. } else if (value !== '' && !isNum) {
  748. callback(new Error('只能输入数字'));
  749. } else {
  750. callback();
  751. }
  752. },
  753. isMax(id) {
  754. const typeNum = this.form.klDiagnoseTypeVO.filter(
  755. item => item.depart_id === id
  756. ).length;
  757. return typeNum > 1;
  758. },
  759. getData(data) {
  760. let arr = data;
  761. let str = [];
  762. let newArr = [];
  763. arr.filter((value, index, array) => {
  764. if (value.groupVO.length > 1 && value.groupVO.length != 0) {
  765. for (let j = 0; j < value.groupVO.length; j++) {
  766. var db = {
  767. conditionType: value.conditionType,
  768. depart_id: value.depart_id,
  769. groupVO: [value.groupVO[j]]
  770. };
  771. str.push(db);
  772. }
  773. value.groupVO = [];
  774. arr.splice(index, 1);
  775. arr.splice(index, 0, ...str);
  776. newArr = str;
  777. } else {
  778. newArr = arr;
  779. }
  780. });
  781. this.getSpanArr(newArr);
  782. },
  783. getSpanArr(data) {
  784. this.spanArr = [];
  785. for (var i = 0; i < data.length; i++) {
  786. if (i === 0) {
  787. this.spanArr.push(1);
  788. this.pos = 0;
  789. } else {
  790. if (data[i].depart_id === data[i - 1].depart_id) {
  791. this.spanArr[this.pos] += 1;
  792. this.spanArr.push(0);
  793. } else {
  794. this.spanArr.push(1);
  795. this.pos = i;
  796. }
  797. }
  798. }
  799. },
  800. dataSpanMethod({ row, column, rowIndex, columnIndex }) {
  801. if (columnIndex === 0 || columnIndex === 1) {
  802. //合并行的行为只在第一列进行
  803. const _row = this.spanArr[rowIndex];
  804. const _col = _row > 0 ? 1 : 0;
  805. return {
  806. rowspan: _row,
  807. colspan: _col
  808. };
  809. }
  810. },
  811. getInitData() {
  812. this.i++;
  813. return {
  814. conditionType: '',
  815. depart_id: this.i,
  816. groupVO: [
  817. {
  818. baseGroup: '',
  819. conditionGroup: '',
  820. fitNo: '',
  821. klDiagnoseDetail: [
  822. {
  823. dataType: '',
  824. basNameType: false,
  825. onlyNumType: false,
  826. onlyTxtType: false,
  827. basTypeName: '',
  828. basConceptId: [],
  829. basDescription: '',
  830. basLename: '',
  831. basLibName: '',
  832. basLibType: null,
  833. basType: '',
  834. eqOperator: '',
  835. eqUnit: '',
  836. eqValue: '',
  837. maxOperator: '',
  838. maxUnit: '',
  839. maxVal: '',
  840. minOperator: '',
  841. minUnit: '',
  842. minVal: ''
  843. }
  844. ]
  845. }
  846. ]
  847. };
  848. },
  849. //新增依据
  850. addDiag(id) {
  851. let temp = this.getInitData();
  852. var i = -1;
  853. this.form.klDiagnoseTypeVO.forEach((item, inx) => {
  854. if (item.depart_id == id) {
  855. i = inx;
  856. }
  857. });
  858. this.$nextTick(() => {
  859. this.$refs.tableList.bodyWrapper.scrollLeft = 0;
  860. });
  861. this.form.klDiagnoseTypeVO.splice(i + 1, 0, temp);
  862. },
  863. //复制依据
  864. copyDiag(id) {
  865. this.i++;
  866. const formData = JSON.parse(JSON.stringify(this.form));
  867. let i = -1;
  868. let arr = [];
  869. formData.klDiagnoseTypeVO.forEach((item, inx) => {
  870. if (item.depart_id == id) {
  871. arr.push(item);
  872. i = inx;
  873. }
  874. });
  875. arr.forEach((item, index) => {
  876. item.depart_id = this.i;
  877. this.form.klDiagnoseTypeVO.splice(i + index + 1, 0, item);
  878. });
  879. },
  880. //删除依据
  881. delDiag(id, inx) {
  882. this.form.klDiagnoseTypeVO = this.form.klDiagnoseTypeVO.filter(
  883. item => item.depart_id !== id
  884. );
  885. this.form.klDiagnoseTypeVO.forEach((item, index) => {
  886. if (item.depart_id > id) {
  887. item.depart_id = item.depart_id - 1;
  888. }
  889. });
  890. },
  891. //新增组
  892. addGroup(i) {
  893. const temp = {
  894. baseGroup: '',
  895. conditionGroup: '',
  896. fitNo: '',
  897. klDiagnoseDetail: [
  898. {
  899. dataType: '',
  900. basNameType: false,
  901. onlyNumType: false,
  902. onlyTxtType: false,
  903. basTypeName: '',
  904. basConceptId: [],
  905. basDescription: '',
  906. basLename: '',
  907. basLibName: '',
  908. basLibType: null,
  909. basType: '',
  910. eqOperator: '',
  911. eqUnit: '',
  912. eqValue: '',
  913. maxOperator: '',
  914. maxUnit: '',
  915. maxVal: '',
  916. minOperator: '',
  917. minUnit: '',
  918. minVal: ''
  919. }
  920. ]
  921. };
  922. this.form.klDiagnoseTypeVO[i].groupVO.splice(i + 1, 0, temp);
  923. },
  924. delGroup(id, i) {
  925. this.form.klDiagnoseTypeVO.splice(i, 1);
  926. },
  927. //新增基础依据
  928. addRule(row, index, inx, i) {
  929. let temp = {
  930. dataType: '',
  931. basNameType: false,
  932. basTypeName: '',
  933. basConceptId: [],
  934. basDescription: '',
  935. basLename: '',
  936. basLibName: '',
  937. basLibType: null,
  938. basType: '',
  939. eqOperator: '',
  940. eqUnit: '',
  941. eqValue: '',
  942. maxOperator: '',
  943. maxUnit: '',
  944. maxVal: '',
  945. minOperator: '',
  946. minUnit: '',
  947. minVal: ''
  948. };
  949. this.form.klDiagnoseTypeVO[index].groupVO[inx].klDiagnoseDetail.splice(
  950. i + 1,
  951. 0,
  952. temp
  953. );
  954. this.form.klDiagnoseTypeVO = JSON.parse(
  955. JSON.stringify(this.form.klDiagnoseTypeVO)
  956. ); //8525更新对象触发滚动条更新
  957. },
  958. delRule(row, inx, index, i) {
  959. const klDiagnoseDetail = this.form.klDiagnoseTypeVO[inx].groupVO[index]
  960. .klDiagnoseDetail;
  961. if (klDiagnoseDetail.length === 1) {
  962. return;
  963. } else {
  964. klDiagnoseDetail.splice(i, 1);
  965. const numArr = this.numArr[inx].num[0];
  966. const fitNo = this.form.klDiagnoseTypeVO[inx].groupVO[0].fitNo;
  967. if (numArr[numArr.length - 1].name < fitNo) {
  968. this.form.klDiagnoseTypeVO[inx].groupVO[0].fitNo = '';
  969. }
  970. }
  971. },
  972. //诊断依据类型修改
  973. basTypeChange(val, inx) {
  974. if (!val) {
  975. this.baseTermTypeList = [];
  976. return;
  977. }
  978. var index2 = this.baseTypes.findIndex(item => item.ruleType === val);
  979. this.baseTermTypeList = this.baseTypes[index2].subMenuList;
  980. },
  981. //基础依据类型修改
  982. baseTermTypeChange(val, inx, index, i) {
  983. if (!val) {
  984. return;
  985. }
  986. this.basType = val;
  987. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  988. i
  989. ].basType = val;
  990. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  991. i
  992. ].basLibType = '';
  993. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  994. i
  995. ].dataType = '';
  996. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  997. i
  998. ].conceptList = [];
  999. this.clearConcept(val, inx, index, i); //清空医学标准术语
  1000. this.clearNumText(val, inx, index, i); //清空数值、医学内容
  1001. var index2 = this.baseTermTypeList.findIndex(item => item.type === val);
  1002. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1003. i
  1004. ].basLibTypeList = this.baseTermTypeList[index2].subMenuList;
  1005. this.form.klDiagnoseTypeVO[inx].groupVO[
  1006. index
  1007. ].baseTermTypeList = this.baseTermTypeList;
  1008. if (val == 3 || val == 4 || val == 5 || val == 6) {
  1009. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1010. i
  1011. ].basTypeName = this.form.klDiagnoseTypeVO[inx].groupVO[
  1012. index
  1013. ].klDiagnoseDetail[i].basLibTypeList[0].name;
  1014. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1015. i
  1016. ].basNameType = true;
  1017. this.$refs['form'].clearValidate([
  1018. 'klDiagnoseTypeVO.' +
  1019. inx +
  1020. '.groupVO.' +
  1021. index +
  1022. '.klDiagnoseDetail.' +
  1023. i +
  1024. '.basLibType'
  1025. ]);
  1026. } else {
  1027. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1028. i
  1029. ].basTypeName = '';
  1030. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1031. i
  1032. ].basNameType = false;
  1033. }
  1034. },
  1035. //基础依据术语类型修改
  1036. basLibTypeChange(val, inx, index, i) {
  1037. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1038. i
  1039. ].basLibType = val;
  1040. // this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1041. // i
  1042. // ].dataType = '';
  1043. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1044. i
  1045. ].basConceptId = [];
  1046. if ((this.numTypes + ',').indexOf(val + ',') > -1) {
  1047. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1048. i
  1049. ].dataType = '1';
  1050. } else {
  1051. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1052. i
  1053. ].dataType = '';
  1054. }
  1055. const onlyNum = this.dicts['onlyNum'] || '&';
  1056. const onlyTxt = this.dicts['onlyTxt'] || '&';
  1057. const codes = onlyNum + ',';
  1058. const code = onlyTxt + ',';
  1059. let type = this.form.klDiagnoseTypeVO[inx].groupVO[index]
  1060. .klDiagnoseDetail[i].basLibType;
  1061. let a = this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[i]
  1062. .basLibType;
  1063. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1064. i
  1065. ].onlyNumType = type && codes.indexOf(a + ',') > -1;
  1066. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1067. i
  1068. ].onlyTxtType = type && code.indexOf(a + ',') > -1;
  1069. this.clearConcept(val, inx, index, i);
  1070. this.clearNumText2(val, inx, index, i);
  1071. },
  1072. //医学标准术语
  1073. conceptChange(val, inx, index, i) {
  1074. // this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1075. // i
  1076. // ].basConceptId = val;
  1077. this.$set(
  1078. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[i],
  1079. 'basConceptId',
  1080. val
  1081. );
  1082. console.log(
  1083. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[i]
  1084. .basConceptId
  1085. );
  1086. // if (val) {
  1087. // this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1088. // i
  1089. // ].basLibName = this.form.klDiagnoseTypeVO[inx].groupVO[
  1090. // index
  1091. // ].klDiagnoseDetail[i].conceptList.find(
  1092. // it => it.conceptId === val
  1093. // ).conceptName;
  1094. // } else {
  1095. // this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1096. // i
  1097. // ].basLibName = '';
  1098. // }
  1099. },
  1100. searchConcept(val, inx, index, i) {
  1101. const formData = JSON.parse(JSON.stringify(this.form));
  1102. const param = {
  1103. excludedConceptIds: [
  1104. formData.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[i]
  1105. .basType
  1106. ],
  1107. libType:
  1108. formData.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[i]
  1109. .basLibType,
  1110. name: val
  1111. };
  1112. api
  1113. .searchConcept(param)
  1114. .then(res => {
  1115. if (res.data.code == '0') {
  1116. const data = res.data.data;
  1117. this.$nextTick(() => {
  1118. // dom元素更新后执行,因此这里能正确打印更改之后的值
  1119. formData.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1120. i
  1121. ].conceptList = data; // 改变了的值
  1122. });
  1123. this.form = formData;
  1124. }
  1125. })
  1126. .catch(error => {
  1127. console.log(error);
  1128. });
  1129. },
  1130. dataTypeChange(val, inx, index, i) {
  1131. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1132. i
  1133. ].dataType = val;
  1134. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1135. i
  1136. ].eqOperator = val === '2' ? '=' : '';
  1137. },
  1138. clearConcept(val, inx, index, i) {
  1139. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1140. i
  1141. ].basConceptId = [];
  1142. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1143. i
  1144. ].basLibName = '';
  1145. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1146. i
  1147. ].conceptList = [];
  1148. },
  1149. clearNumText2(val, inx, index, i) {
  1150. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1151. i
  1152. ].maxOperator = '';
  1153. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1154. i
  1155. ].maxVal = '';
  1156. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1157. i
  1158. ].maxUnit = '';
  1159. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1160. i
  1161. ].minOperator = '';
  1162. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1163. i
  1164. ].minVal = '';
  1165. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1166. i
  1167. ].minUnit = '';
  1168. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1169. i
  1170. ].eqValue = '';
  1171. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1172. i
  1173. ].eqOperator = '';
  1174. },
  1175. clearNumText(val, inx, index, i) {
  1176. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1177. i
  1178. ].maxOperator = '';
  1179. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1180. i
  1181. ].maxVal = '';
  1182. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1183. i
  1184. ].maxUnit = '';
  1185. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1186. i
  1187. ].minOperator = '';
  1188. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1189. i
  1190. ].minVal = '';
  1191. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1192. i
  1193. ].minUnit = '';
  1194. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1195. i
  1196. ].eqValue = '';
  1197. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1198. i
  1199. ].eqOperator = '';
  1200. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1201. i
  1202. ].onlyNumType = false;
  1203. this.form.klDiagnoseTypeVO[inx].groupVO[index].klDiagnoseDetail[
  1204. i
  1205. ].onlyTxtType = false;
  1206. },
  1207. formatData(data) {
  1208. //转换字段名
  1209. let str = JSON.stringify(data)
  1210. .replace(/byIdDTO/g, 'groupVO')
  1211. .replace(/klDiagnoseByIdDTO/g, 'klDiagnoseDetail');
  1212. //console.log(JSON.parse(str))
  1213. return JSON.parse(str);
  1214. },
  1215. formatData2(data) {
  1216. //转换字段名
  1217. let str = JSON.stringify(data)
  1218. .replace(/basLibName/g, 'conceptName')
  1219. .replace(/basConceptId/g, 'conceptId');
  1220. //console.log(JSON.parse(str))
  1221. return JSON.parse(str);
  1222. },
  1223. searchDiag(val) {
  1224. const param = {
  1225. diseaseName: val
  1226. };
  1227. api
  1228. .searchDiag(param)
  1229. .then(res => {
  1230. if (res.data.code == '0') {
  1231. const data = res.data.data;
  1232. this.conceptList = data;
  1233. }
  1234. })
  1235. .catch(error => {
  1236. console.log(error);
  1237. });
  1238. },
  1239. setInitGroupData() {
  1240. let temp = this.getInitData();
  1241. this.form.klDiagnoseTypeVO = [temp];
  1242. },
  1243. setRules() {
  1244. let that = this;
  1245. let list = this.form.klDiagnoseTypeVO;
  1246. if (list && list.length > 0) {
  1247. list.forEach((item, i) => {
  1248. let list1 = list[i].groupVO;
  1249. list1.forEach((it, x) => {
  1250. let list2 = list1[x].klDiagnoseDetail;
  1251. list2.forEach((t, j) => {
  1252. let grandeObj = this.form.klDiagnoseTypeVO[i].groupVO[x]
  1253. .klDiagnoseDetail[j];
  1254. if (grandeObj) {
  1255. const keyTxt =
  1256. 'klDiagnoseTypeVO.' +
  1257. i +
  1258. '.groupVO.' +
  1259. x +
  1260. '.klDiagnoseDetail.' +
  1261. j;
  1262. that.rules[keyTxt + '.dataType'] = [
  1263. {
  1264. required: true,
  1265. message: '请选择类型',
  1266. trigger: ['change']
  1267. }
  1268. ];
  1269. that.rules[keyTxt + '.maxOperator'] = [
  1270. {
  1271. validator: (rule, value, callback) => {
  1272. const { maxVal, minOperator, minVal } = grandeObj;
  1273. const val = value + minOperator + minVal + maxVal;
  1274. if (!val || (!value && maxVal !== '')) {
  1275. callback(
  1276. new Error(
  1277. '最大值和最小值至少完整填写一个,单位不必填'
  1278. )
  1279. );
  1280. } else {
  1281. callback();
  1282. }
  1283. },
  1284. trigger: 'change'
  1285. }
  1286. ];
  1287. that.rules[keyTxt + '.minOperator'] = [
  1288. {
  1289. validator: (rule, value, callback) => {
  1290. const { maxVal, maxOperator, minVal } = grandeObj;
  1291. const val = value + maxOperator + minVal + maxVal;
  1292. if (!val || (!value && minVal !== '')) {
  1293. callback(
  1294. new Error(
  1295. '最大值和最小值至少完整填写一个,单位不必填'
  1296. )
  1297. );
  1298. } else {
  1299. callback();
  1300. }
  1301. },
  1302. trigger: 'change'
  1303. }
  1304. ];
  1305. that.rules[keyTxt + '.maxVal'] = [
  1306. {
  1307. validator: (rule, value, callback) => {
  1308. const { maxOperator, minOperator, minVal } = grandeObj;
  1309. const val = value + maxOperator + minVal + minOperator;
  1310. const isNum = /^(\-|\+)?\d+(\.\d+)?$/.test(value);
  1311. if (!val || (value === '' && maxOperator)) {
  1312. callback(
  1313. new Error(
  1314. '最大值和最小值至少完整填写一个,单位不必填'
  1315. )
  1316. );
  1317. } else if (value !== '' && !isNum) {
  1318. callback(new Error('只能输入数字'));
  1319. } else {
  1320. callback();
  1321. }
  1322. },
  1323. trigger: 'blur'
  1324. }
  1325. ];
  1326. that.rules[keyTxt + '.minVal'] = [
  1327. {
  1328. validator: (rule, value, callback) => {
  1329. const { maxVal, minOperator, maxOperator } = grandeObj;
  1330. const val = value + maxOperator + maxVal + minOperator;
  1331. const isNum = /^(\-|\+)?\d+(\.\d+)?$/.test(value);
  1332. if (!val || (value === '' && minOperator)) {
  1333. callback(
  1334. new Error(
  1335. '最大值和最小值至少完整填写一个,单位不必填'
  1336. )
  1337. );
  1338. } else if (value !== '' && !isNum) {
  1339. callback(new Error('只能输入数字'));
  1340. } else {
  1341. callback();
  1342. }
  1343. },
  1344. trigger: 'blur'
  1345. }
  1346. ];
  1347. }
  1348. });
  1349. });
  1350. });
  1351. }
  1352. },
  1353. saveDiagBase(params) {
  1354. api.saveDiagBase(params).then(res => {
  1355. if (res.data.code == 0) {
  1356. this.$message({
  1357. message: '操作成功',
  1358. type: 'success'
  1359. });
  1360. this.$router.push({
  1361. name: 'ZskDiagBase',
  1362. params: this.$route.params
  1363. });
  1364. } else {
  1365. this.$message({
  1366. message: res.data.msg,
  1367. type: 'warning'
  1368. });
  1369. }
  1370. });
  1371. },
  1372. validateForms(callBack) {
  1373. this.$refs['form'].validate(valid => {
  1374. if (valid) {
  1375. callBack();
  1376. } else {
  1377. return false;
  1378. }
  1379. });
  1380. },
  1381. confirm() {
  1382. const formData = JSON.parse(JSON.stringify(this.form));
  1383. const _this = this;
  1384. for (let i = 0; i < formData.klDiagnoseTypeVO.length; i++) {
  1385. for (let j = 0; j < formData.klDiagnoseTypeVO[i].groupVO.length; j++) {
  1386. delete formData.klDiagnoseTypeVO[i].groupVO[j].baseTermTypeList;
  1387. for (
  1388. let k = 0;
  1389. k < formData.klDiagnoseTypeVO[i].groupVO[j].klDiagnoseDetail.length;
  1390. k++
  1391. ) {
  1392. delete formData.klDiagnoseTypeVO[i].groupVO[j].klDiagnoseDetail[k]
  1393. .basLibTypeList;
  1394. delete formData.klDiagnoseTypeVO[i].groupVO[j].klDiagnoseDetail[k]
  1395. .conceptList;
  1396. }
  1397. }
  1398. }
  1399. let map = {},
  1400. dest = [];
  1401. for (let i = 0; i < formData.klDiagnoseTypeVO.length; i++) {
  1402. let ai = formData.klDiagnoseTypeVO[i];
  1403. if (!map[ai.depart_id]) {
  1404. dest.push({
  1405. depart_id: ai.depart_id,
  1406. conditionType: ai.conditionType,
  1407. groupVO: ai.groupVO
  1408. });
  1409. map[ai.depart_id] = ai;
  1410. } else {
  1411. for (let j = 0; j < dest.length; j++) {
  1412. var dj = dest[j];
  1413. if (dj.depart_id == ai.depart_id) {
  1414. dj.groupVO = dj.groupVO.concat(ai.groupVO);
  1415. break;
  1416. }
  1417. }
  1418. }
  1419. }
  1420. formData.klDiagnoseTypeVO = dest;
  1421. this.validateForms(function() {
  1422. let params = formData;
  1423. _this.saveDiagBase(params);
  1424. });
  1425. }
  1426. },
  1427. watch: {
  1428. form: {
  1429. handler: function(newQuestion, oldQuestion) {
  1430. this.getData(this.form.klDiagnoseTypeVO);
  1431. },
  1432. deep: true,
  1433. immediate: true
  1434. }
  1435. }
  1436. };
  1437. </script>
  1438. <style lang="less" scoped>
  1439. @import '../../less/admin.less';
  1440. /deep/ .searchselect {
  1441. .el-input {
  1442. height: 100% !important;
  1443. }
  1444. }
  1445. .contents {
  1446. height: 100%;
  1447. .content {
  1448. background: #fff;
  1449. padding: 20px 20px;
  1450. color: #545455;
  1451. min-width: 980px;
  1452. position: relative;
  1453. .tip-text {
  1454. color: #f56c6c;
  1455. margin-left: 10px;
  1456. }
  1457. .conceptItem {
  1458. padding: 0 10px;
  1459. cursor: pointer;
  1460. height: 32px;
  1461. line-height: 32px;
  1462. &:hover {
  1463. background: #ebedf1;
  1464. }
  1465. }
  1466. .el-table--scrollable-y .el-table__body-wrapper {
  1467. height: calc(100vh - 370px);
  1468. }
  1469. /deep/ .el-input {
  1470. height: 30px;
  1471. line-height: 30px;
  1472. .el-input__inner {
  1473. height: 30px;
  1474. line-height: 30px;
  1475. font-size: 12px;
  1476. }
  1477. }
  1478. /deep/ .el-select .el-input .el-icon-arrow-up {
  1479. line-height: 25px;
  1480. }
  1481. .inps {
  1482. width: 500px !important;
  1483. font-size: 14px;
  1484. /deep/ .el-input__inner {
  1485. width: 500px !important;
  1486. font-size: 14px;
  1487. }
  1488. }
  1489. .item {
  1490. /deep/.el-form-item__label {
  1491. font-size: 14px;
  1492. }
  1493. /deep/.el-input__inner {
  1494. font-size: 14px;
  1495. }
  1496. }
  1497. }
  1498. /deep/.is-error .el-form-item__error {
  1499. top: 30px;
  1500. }
  1501. .content-2 {
  1502. margin-top: 10px;
  1503. padding: 20px 20px;
  1504. height: calc(100vh - 370px);
  1505. .cell {
  1506. overflow: initial;
  1507. }
  1508. .content-2-header {
  1509. padding: 20px 0;
  1510. .title1 {
  1511. font-size: 14px;
  1512. font-weight: 400;
  1513. color: #333333;
  1514. line-height: 20px;
  1515. }
  1516. .title2 {
  1517. font-size: 12px;
  1518. font-weight: 400;
  1519. color: #ff545b;
  1520. line-height: 17px;
  1521. }
  1522. }
  1523. .el-form-item {
  1524. margin-bottom: 10px;
  1525. margin-right: 0;
  1526. }
  1527. .discDesc {
  1528. margin-bottom: 20px;
  1529. /deep/ .el-form-item__error {
  1530. top: 38px;
  1531. left: 100px !important;
  1532. white-space: nowrap;
  1533. }
  1534. }
  1535. .el-popper[x-placement^='bottom'] {
  1536. width: 100px !important;
  1537. }
  1538. .disclButn {
  1539. position: absolute;
  1540. right: calc(50% - 60px);
  1541. bottom: 10px;
  1542. }
  1543. .el-table .cell.el-tooltip {
  1544. position: relative;
  1545. }
  1546. .box-2 {
  1547. position: relative;
  1548. .tips {
  1549. left: 3px;
  1550. }
  1551. }
  1552. .box-3 {
  1553. position: relative;
  1554. }
  1555. .tips {
  1556. width: 12px;
  1557. height: 12px;
  1558. position: absolute;
  1559. left: 15px;
  1560. top: 15px;
  1561. }
  1562. .title {
  1563. position: absolute;
  1564. z-index: -1;
  1565. }
  1566. .last-box {
  1567. display: flex;
  1568. height: 50px;
  1569. margin-bottom: 10px;
  1570. position: relative;
  1571. /deep/ .el-input,
  1572. .el-input__inner {
  1573. width: 85px;
  1574. font-size: 12px;
  1575. margin-right: 15px;
  1576. }
  1577. /deep/ .el-form-item__content {
  1578. position: inherit !important;
  1579. }
  1580. .last-box-1 {
  1581. display: flex;
  1582. /deep/ .el-form-item__error {
  1583. top: 38px;
  1584. left: 10px;
  1585. white-space: nowrap;
  1586. width: 360px;
  1587. }
  1588. }
  1589. .last-box-s {
  1590. position: absolute;
  1591. /deep/ .el-form-item__error {
  1592. top: 38px;
  1593. left: 0px;
  1594. white-space: nowrap;
  1595. width: 260px;
  1596. }
  1597. }
  1598. /deep/ .el-form-item__error {
  1599. top: 38px;
  1600. left: 10px;
  1601. white-space: nowrap;
  1602. }
  1603. /deep/ .inp {
  1604. width: 600px !important;
  1605. .el-input__inner {
  1606. width: 600px !important;
  1607. }
  1608. }
  1609. .el-form-item {
  1610. margin: 0;
  1611. overflow: hidden;
  1612. display: flex;
  1613. }
  1614. }
  1615. .tmall {
  1616. visibility: hidden;
  1617. height: 60px;
  1618. }
  1619. .medical {
  1620. margin-right: 26px;
  1621. }
  1622. .group {
  1623. border-bottom: 1px solid red;
  1624. padding: 30px 0;
  1625. .group-row {
  1626. padding: 10px 0;
  1627. border-bottom: 1px solid red;
  1628. }
  1629. }
  1630. .group:last-child {
  1631. border-bottom: none;
  1632. }
  1633. .icon {
  1634. padding: 0 3px;
  1635. cursor: pointer;
  1636. }
  1637. .star {
  1638. color: #ff545b;
  1639. }
  1640. }
  1641. .Butn {
  1642. display: flex;
  1643. justify-content: center;
  1644. background: #fff;
  1645. .el-button {
  1646. margin: 15px 0;
  1647. }
  1648. }
  1649. .name {
  1650. font-size: 14px;
  1651. font-weight: 400;
  1652. color: #333333;
  1653. line-height: 20px;
  1654. }
  1655. }
  1656. </style>