AddDiagBase.vue 54 KB

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