AddDiagBase.vue 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896
  1. <!-- 添加常见科室症状 -->
  2. <template>
  3. <div class="AddDiagBaseWrapper" @click="close">
  4. <crumbs
  5. :title="'诊断依据数据维护-'+titleText"
  6. class="topBack"
  7. :param="$route.params"
  8. linkTo="DiagBase"
  9. ></crumbs>
  10. <el-form ref="ruleForm" class="addDepartForm">
  11. <el-form-item class="addDiagName" label="选择添加疾病名称:" >
  12. <input class="searchInput" @focus="focuInput" type="text" v-model = "searchDiagVal">
  13. <span class="searchName" @click="searchDiag">搜索</span>
  14. <ul v-if="showDiagList&&diagList.length > 0" class="itemList diagList" ref="diagList">
  15. <li
  16. v-for="item in diagList"
  17. class="diagItem ellipsis"
  18. :title="item.name"
  19. @click="selectDiag(item)"
  20. :key="item.conceptId">
  21. {{item.name}}
  22. </li>
  23. </ul>
  24. </el-form-item>
  25. <el-form-item class="isRequired" label="已选添加疾病名称:" :class="{colorRed: !disNameExist}">
  26. {{disName}}
  27. </el-form-item>
  28. </el-form>
  29. <div class="symptomList">
  30. <p class="moduleTitle">疾病特征:</p>
  31. <p class="inpTips">序号输入规则“序号+.”后可输入的范围0~99;标准词只能有一个词;化验类型关联只能出现一个词,其他类型可以输入多个词;化验类型可输入结果列,其他类型不可输入</p>
  32. <table class="diagTable">
  33. <tr class="tableTitle">
  34. <td class="FeatureSort">排序</td>
  35. <td class="FeatureType require">类型</td>
  36. <td class="FeatureNumber require">序号</td>
  37. <td class="FeatureStand require">标准词</td>
  38. <td class="FeatureRelate">关联词</td>
  39. <td class="FeatureResult">结果</td>
  40. <td class="FeatureOpera"></td>
  41. </tr>
  42. <tr v-for="(item, index) in disFeatureList" :key="item.index">
  43. <td class="FeatureSort" >{{index+1}}</td>
  44. <td class="FeatureType" >
  45. <el-select size="mini" :class="{selectType: item.typeNull}" v-model.trim="item.type" placeholder="标签类型" @change="clickItem(index,'FeatureType')" clearable>
  46. <el-option v-for="item in featureTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
  47. </el-select>
  48. </td>
  49. <td class="FeatureNumber" >
  50. <el-tooltip :disabled="!item.verifyCode&&!item.codeNull&&!item.codeError" class="item" effect="dark" :content="item.verifyCode||item.codeNull||item.codeError" placement="top">
  51. <el-input class="groupTextarea"
  52. type="textarea"
  53. :autosize="{ minRows: 1}"
  54. :class="{borderRed:item.verifyCode||item.codeNull, colorRed: item.codeError}"
  55. :title="item.code"
  56. v-model.trim="item.code"
  57. @input="handleInp(index,$event,'FeatureNumber')"
  58. @focus="clickItem(index,'FeatureNumber')">
  59. </el-input>
  60. </el-tooltip>
  61. </td>
  62. <td class="FeatureStand" >
  63. <el-tooltip :disabled="!item.verifyStandard&&!item.standardNull" class="item" effect="dark" :content="item.verifyStandard||item.standardNull" placement="top">
  64. <el-input class="groupTextarea"
  65. type="textarea"
  66. :autosize="{ minRows: 1}"
  67. :class="{borderRed:item.verifyStandard||item.standardNull}"
  68. :title="item.standard"
  69. v-model.trim="item.standard"
  70. @input="handleInp(index,$event,'FeatureStand')"
  71. @focus="clickItem(index,'FeatureStand')">
  72. </el-input>
  73. </el-tooltip>
  74. </td>
  75. <td class="FeatureRelate">
  76. <el-tooltip :disabled="!item.verifyRelation&&!item.relationNull" class="item" effect="dark" :content="item.verifyRelation||item.relationNull" placement="top">
  77. <el-input class="groupTextarea"
  78. type="textarea"
  79. :autosize="{ minRows: 1}"
  80. :class="{borderRed:item.verifyRelation|| item.relationNull}"
  81. :title="item.relation"
  82. v-model.trim="item.relation"
  83. @input="handleInp(index,$event,'FeatureRelate',item.type)"
  84. @focus="clickItem(index,'FeatureRelate')">
  85. </el-input>
  86. </el-tooltip>
  87. </td>
  88. <td class="FeatureResult">
  89. <el-tooltip :disabled="!item.verifyResult" class="item" effect="dark" :content="item.verifyResult" placement="top">
  90. <el-input class="groupTextarea"
  91. type="textarea"
  92. :autosize="{ minRows: 1}"
  93. :readonly="item.type!=3"
  94. :class="{borderRed:item.verifyResult, inpDisabled:item.type!=3}"
  95. :title="item.result"
  96. v-model.trim="item.result"
  97. @input="handleInp(index,$event,'FeatureResult')"
  98. @focus="clickItem(index,'FeatureResult')">
  99. </el-input>
  100. </el-tooltip>
  101. </td>
  102. <td class="FeatureOpera">
  103. <el-button type="text" size="small" class="delete" @click="addItem(index, 1)"><div class="btnOpera">+</div></el-button>
  104. <el-button v-if="index !=0" type="text" size="small" class="delete" @click="delItem(index, 1)"><div class="btnOpera">-</div></el-button>
  105. </td>
  106. </tr>
  107. </table>
  108. <p class="moduleTitle">诊断公式:</p>
  109. <p class="inpTips">可输入数字(0~9);可输入规定汉字:任、一、二、三、四、五、六、七、八、九、十,其余汉字不可输入;可输入的符号:“.”、“/”、“()” “+”;确诊还可输入“拟、诊”二字;鉴别诊断的序号不可输入公式中,数据放入后该条件无效;</p>
  110. <table class="diagTable">
  111. <tr class="tableTitle">
  112. <td class="FormulaSort">排序</td>
  113. <td class="FormulaType">类型</td>
  114. <td class="FormulaNumber">公式</td>
  115. <td class="FormulaOpera"></td>
  116. </tr>
  117. <tr v-for="(item, index) in disFormulaList" :key="item.index">
  118. <td class="FormulaSort">{{index +1}}</td>
  119. <td class="FormulaType">
  120. <el-select size="mini" :class="{selectType: item.verifyType}" v-model.trim="item.type" placeholder="标签类型" @change="clickItem(index,'FormulaType')" clearable>
  121. <el-option v-for="item in formulaTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
  122. </el-select>
  123. </td>
  124. <td class="FormulaNumber">
  125. <el-tooltip :disabled="!item.verifyFormula" class="item" effect="dark" :content="item.verifyFormula" placement="top">
  126. <el-input class="groupTextarea"
  127. type="textarea"
  128. :readonly="!item.type"
  129. :autosize="{ minRows: 1}"
  130. :class="{borderRed:item.verifyFormula,inpDisabled:!item.type}"
  131. :title="item.formula"
  132. v-model.trim="item.formula"
  133. @input="handleInp(index,$event,'FormulaNumber',item.type)"
  134. @focus="clickItem(index,'FormulaNumber')">
  135. </el-input>
  136. </el-tooltip>
  137. </td>
  138. <td class="FeatureOpera">
  139. <el-button type="text" size="small" class="delete" @click="addItem(index, 2)"><div class="btnOpera">+</div></el-button>
  140. <el-button v-if="index !=0" type="text" size="small" class="delete" @click="delItem(index, 2)"><div class="btnOpera">-</div></el-button>
  141. </td>
  142. <!-- <td class="selectedContent ">{{item.indexUnique}}</td>
  143. <td class="selectedContentGroup"><input class="groupInput" type="text" v-model="item.indexDesc" @input="handleInp(index,$event)"></td>
  144. <td class="selectedContentOpera"><el-button type="text" size="small" class="delete" @click="delSelectedIndex(item, index)">删除</el-button></td> -->
  145. </tr>
  146. </table>
  147. <div class="btn clearfix">
  148. <div class="btnBox">
  149. <el-button
  150. type="primary"
  151. :disabled = "isReady"
  152. @click="submitForm('save')"
  153. >校验并保存数据</el-button>
  154. <el-button
  155. type="primary"
  156. :disabled = "hasQuestion == 1"
  157. @click="exportDiagnosticAll"
  158. >导出诊断依据</el-button>
  159. <el-button
  160. type="primary"
  161. :disabled = "hasQuestion == 1"
  162. @click="updateNeo"
  163. >更新图谱</el-button>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </template>
  169. <script>
  170. import api from '@api/diagBase.js';
  171. import utils from '@api/utils.js';
  172. import apis from '@api/icss.js';
  173. export default {
  174. name: 'AddChronicAndIndexRelation',
  175. data() {
  176. return{
  177. id: '', //诊断id
  178. disName:'', //诊断名称
  179. modifier: '', //操作人
  180. titleText: '添加',
  181. diagList: [],
  182. featureTypeList: [],
  183. formulaTypeList: [],
  184. disFeatureList: [
  185. {
  186. type:'',
  187. code:'',
  188. standard:'',
  189. relation:'',
  190. result:'',
  191. formula:''
  192. }
  193. ], //疾病特征列表
  194. disFeatureListResult:[], //疾病特征列表(保存用)
  195. disFormulaList:[
  196. {
  197. type:'',
  198. code:'',
  199. standard:'',
  200. relation:'',
  201. result:'',
  202. formula:''
  203. }
  204. ],
  205. disFormulaListResult:[], //诊断公式列表(保存用)
  206. searchDiagVal: '',
  207. isEdit: false,
  208. saveDisable: false ,
  209. hasQuestion: 1, //是否有问题词
  210. disNameExist: true, //诊断名称是否存在
  211. isReady:false,
  212. showDiagList: false
  213. }
  214. },
  215. created(){
  216. const userLoginDTO = JSON.parse(localStorage.getItem('userLoginDTO'))
  217. this.modifier = userLoginDTO && userLoginDTO.linkman
  218. this.getDropList()
  219. const { isEdit, data } = this.$route.params;
  220. if(isEdit) {
  221. if(isEdit) {
  222. this.isEdit = isEdit;
  223. this.titleText = '修改';
  224. this.disName = data.disName
  225. this.id = data.id
  226. this.disNameExist = data.disNameExist
  227. if(data.disFeature.length) {
  228. this.disFeatureList = data.disFeature
  229. }
  230. if(data.disformula.length) {
  231. this.disFormulaList = data.disformula
  232. }
  233. this.hasQuestion = data.hasQuestion
  234. }
  235. } else {
  236. }
  237. },
  238. watch: {
  239. // searchTagVal(newVal, preVal) {
  240. // if(newVal.trim() == ''){
  241. // this.getTagList()
  242. // }else if(newVal.trim() != preVal.trim()){
  243. // this.getTagList()
  244. // }
  245. // }
  246. },
  247. methods: {
  248. getDropList() {
  249. return apis.getKnowledgeEnums().then((res) =>{
  250. if(res.data.code === '0') {
  251. this.featureTypeList = res.data.data.diagnoseFeatureTypeEnum.filter(item => item.key != 0)
  252. this.formulaTypeList = res.data.data.diagnoseTypeEnum
  253. }
  254. })
  255. },
  256. close() {
  257. this.diagList = [];
  258. },
  259. back(){
  260. this.$router.go(-1);
  261. },
  262. searchDiag() {
  263. if(!this.searchDiagVal) {
  264. return
  265. }
  266. const param = {
  267. "name": this.searchDiagVal,
  268. }
  269. api.diagBaseIndex(param).then((res)=>{
  270. if(res.data.code === '0') {
  271. this.diagList = res.data.data
  272. this.showDiagList = true
  273. }
  274. })
  275. },
  276. selectDiag(item) {
  277. this.disName = item.name
  278. this.searchDiagVal = ''
  279. this.diagList=[]
  280. },
  281. focuInput() {
  282. this.showDiagList = false
  283. },
  284. addItem(index, type) {
  285. if(type == 1) {
  286. const item = {
  287. type:'',
  288. code:'',
  289. standard:'',
  290. relation:'',
  291. result:'',
  292. }
  293. this.disFeatureList.splice(index+1, 0, item)
  294. }else if(type == 2) {
  295. const item = {
  296. type:'',
  297. code:'',
  298. standard:'',
  299. relation:'',
  300. result:'',
  301. }
  302. this.disFormulaList.splice(index+1, 0, item)
  303. }
  304. },
  305. delItem(index, type) {
  306. if(type == 1) {
  307. this.disFeatureList.splice(index, 1)
  308. }else if(type == 2) {
  309. this.disFormulaList.splice(index, 1)
  310. }
  311. },
  312. updateNeo() {
  313. this.submitForm('updateNeo').then(() => {
  314. if(this.hasQuestion == 0) {
  315. const param = {
  316. id: this.id,
  317. modifier: this.modifier
  318. }
  319. api.diagBaseUpdateNeo(param).then((res) => {
  320. if(res.data.code == 0) {
  321. this.warning('更新成功', 'success');
  322. } else {
  323. this.warning(res.data.msg)
  324. }
  325. })
  326. } else {
  327. this.warning('更新失败');
  328. }
  329. })
  330. // api.diagBaseUpdateNeo(param).then((res) =>{
  331. // })
  332. },
  333. exportDiagnosticAll(){
  334. this.submitForm('export').then(() => {
  335. if(this.hasQuestion == 0) {
  336. const param = {
  337. diagnoseId: this.id
  338. }
  339. api.exportDiagnosticAll(param).then((res) => {
  340. utils.downloadExportedData(res.data,'诊断依据.xls');
  341. })
  342. }else {
  343. this.warning('导出失败');
  344. }
  345. })
  346. },
  347. submitForm(type) {
  348. if(!this.disName) {
  349. this.warning('请选择诊断');
  350. return
  351. }
  352. this.disFeatureListResult = []
  353. this.disFormulaListResult = []
  354. let errStrList = [];
  355. for(let i = 0; i < this.disFeatureList.length; i++) {
  356. if(this.disFeatureList[i].type || this.disFeatureList[i].code || this.disFeatureList[i].standard || this.disFeatureList[i].relation || this.disFeatureList[i].result) {
  357. this.disFeatureListResult.push(this.disFeatureList[i])
  358. }
  359. }
  360. for(let i = 0; i < this.disFormulaList.length; i++) {
  361. if(this.disFormulaList[i].type || this.disFormulaList[i].formula ) {
  362. this.disFormulaListResult.push(this.disFormulaList[i])
  363. }
  364. }
  365. let disFeatureList;
  366. if(this.disFeatureListResult.length) {
  367. disFeatureList = this.disFeatureListResult;
  368. } else {
  369. disFeatureList = [
  370. {
  371. type:'',
  372. code:'',
  373. standard:'',
  374. relation:'',
  375. result:'',
  376. formula:''
  377. }
  378. ];
  379. }
  380. const disFormulaList = this.disFormulaListResult;
  381. let codeErrorNum = 0;
  382. for(let i=0; i < disFeatureList.length; i++) {
  383. if(!disFeatureList[i].type) {
  384. disFeatureList[i].typeNull = "未选择类型"
  385. }
  386. if(!disFeatureList[i].code) {
  387. disFeatureList[i].codeNull = "未填写编码"
  388. }
  389. if(!disFeatureList[i].standard) {
  390. disFeatureList[i].standardNull = "未填写标准词"
  391. }
  392. if(!disFeatureList[i].type||!disFeatureList[i].code||!disFeatureList[i].standard) {
  393. const errStr = "第" + (i+ 1) +"行必填项未填写"
  394. errStrList.push(errStr)
  395. }
  396. let regex =new RegExp(`^${disFeatureList[i].type}\\.(0|[1-9]\\d?)$`,)
  397. if(disFeatureList[i].code &&!regex.test(disFeatureList[i].code)) { //序号和类型不匹配
  398. codeErrorNum++
  399. disFeatureList[i].codeError = "序号和类型不匹配"
  400. const errStr = "疾病特征第" + (i+ 1) +"行序号和类型不匹配"
  401. errStrList.push(errStr)
  402. } else { //序号和类型匹配但序号重复
  403. let codeArr = disFeatureList.filter(item => item.code ===disFeatureList[i].code)
  404. if(codeArr.length > 1) {
  405. codeErrorNum++
  406. disFeatureList[i].codeError = "序号重复"
  407. const errStr = "疾病特征第" + (i+ 1) +"行序号重复"
  408. errStrList.push(errStr)
  409. }
  410. }
  411. if(disFeatureList[i].type == '3' && disFeatureList[i].result && !disFeatureList[i].relation) {
  412. disFeatureList[i].relationNull = "未填写关联词"
  413. const errStr = "第" + (i+ 1) +"行化验项数据填写不完整"
  414. errStrList.push(errStr)
  415. }
  416. if(disFeatureList[i].type == '3' && !disFeatureList[i].result ) { //化验项下面诊断公式如果有用到,判断是否填写结果项
  417. const regex2 = new RegExp(`(?<=\\D|\\s?)${disFeatureList[i].code}(?=\\D|\\s?)`)
  418. // const regex2 = new RegExp(`、\\s*、{1,}`)
  419. // const regex2 = new RegExp(`([^0-9]|\\s{0,1})${disFeatureList[i].code}([^0-9]|\\s{0,1})`)
  420. console.log(disFormulaList)
  421. let hasError = disFormulaList.find(item => {return regex2.test(item.formula)})
  422. if(hasError) {
  423. if(!disFeatureList[i].relation) {
  424. disFeatureList[i].verifyRelation = "数据异常"
  425. }
  426. disFeatureList[i].verifyResult = "数据异常"
  427. const errStr = "第" + (i+ 1) +"行化验项数据异常"
  428. errStrList.push(errStr)
  429. }
  430. }
  431. if(disFeatureList[i].type == '4' && !disFeatureList[i].relation ) { //辅检项下面诊断公式如果有用到,判断是否填写结果项(辅检结果是填在关联词列)
  432. const regex2 = new RegExp(`(?<=\\D|\\s?)${disFeatureList[i].code}(?=\\D|\\s?)`)
  433. let hasError = disFormulaList.find(item => {return regex2.test(item.formula)})
  434. if(hasError) {
  435. disFeatureList[i].verifyRelation = "数据异常"
  436. const errStr = "第" + (i+ 1) +"行辅捡项数据异常"
  437. errStrList.push(errStr)
  438. }
  439. }
  440. let regex1 =new RegExp(`、\\s*、{1,}|^、|、$`)
  441. if(disFeatureList[i].relation &&regex1.test(disFeatureList[i].relation)) { //不能输入连续的、,前后也不能是、
  442. disFeatureList[i].verifyRelation ='数据异常'
  443. const errStr = "疾病特征第" + (i+ 1) +"行数据异常"
  444. errStrList.push(errStr)
  445. }
  446. if(disFeatureList[i].result &&regex1.test(disFeatureList[i].result)) {
  447. disFeatureList[i].verifyResult ='数据异常'
  448. const errStr = "疾病特征第" + (i+ 1) +"行数据异常"
  449. errStrList.push(errStr)
  450. }
  451. }
  452. this.disFeatureList = JSON.parse(JSON.stringify(disFeatureList))
  453. let formulaListErrNum = 0
  454. for(let i=0; i < disFormulaList.length; i++) {
  455. if(disFormulaList[i].type&&!disFormulaList[i].formula ) {
  456. disFormulaList[i].verifyFormula = "诊断公式不能为空"
  457. formulaListErrNum++;
  458. const errStr = "诊断公式第" + (i+ 1) +"行诊断公式不能为空"
  459. errStrList.push(errStr)
  460. } else if(disFormulaList[i].formula&&!disFormulaList[i].type) {
  461. disFormulaList[i].verifyType = "诊断类型不能为空"
  462. const errStr = "诊断公式第" + (i+ 1) +"行诊断类型不能为空"
  463. errStrList.push(errStr)
  464. formulaListErrNum++;
  465. }
  466. if(disFormulaList[i].type == 91 && disFormulaList[i].formula.indexOf("拟诊") > -1) { //确诊项如果有拟诊这两个字,判断公式列表中有没有拟诊这项
  467. const noError = disFormulaList.filter(item => item.type == 92).length > 0
  468. if(!noError) {
  469. disFormulaList[i].verifyFormula = "公式格式错误"
  470. const errStr = "诊断公式第" + (i+ 1) +"行公式格式错误"
  471. errStrList.push(errStr)
  472. formulaListErrNum++;
  473. } else {
  474. disFormulaList[i].verifyFormula = ""
  475. }
  476. }
  477. }
  478. if(disFormulaList.length) {
  479. this.disFormulaList = JSON.parse(JSON.stringify(disFormulaList))
  480. }
  481. let errorStr =''
  482. for(let i = 0; i <errStrList.length; i++) {
  483. errorStr += '<p>'+errStrList[i]+'</p>'
  484. }
  485. if(errStrList.length >0 ||codeErrorNum > 0 ||formulaListErrNum > 0) {
  486. this.$alert(errorStr,'错误信息',{
  487. dangerouslyUseHTMLString: true,
  488. confirmButtonText: '确定',
  489. callback: action => {
  490. /*this.$message({
  491. type: 'info',
  492. message: `action: ${ action }`
  493. });*/
  494. }
  495. });
  496. return
  497. }
  498. // this.showDelDialog()
  499. return this.diagBaseVerifyData(type)
  500. },
  501. diagBaseVerifyData(type) {
  502. const param = {
  503. disFeature: this.disFeatureListResult,
  504. disName: this.disName,
  505. disformula: this.disFormulaListResult,
  506. id: this.id,
  507. modifier: this.modifier
  508. }
  509. if(type == 'save'){
  510. this.isReady = true
  511. }
  512. return api.diagBaseVerifyData(param).then((res) => {
  513. const data = res.data.data
  514. this.isReady=false
  515. if(type =='save') {
  516. if(data.hasQuestion) {
  517. this.warning('校验完成请先调整错误数据,该数据已保存')
  518. } else {
  519. this.warning('校验成功', 'success')
  520. }
  521. }
  522. this.id = data.id
  523. this.disNameExist = data.disNameExist
  524. this.disFeatureList = data.disFeature
  525. if(data.disformula.length) {
  526. this.disFormulaList = data.disformula
  527. }else {
  528. this.disFormulaList = [
  529. {
  530. type:'',
  531. code:'',
  532. standard:'',
  533. relation:'',
  534. result:'',
  535. formula:''
  536. }
  537. ]
  538. }
  539. this.hasQuestion = data.hasQuestion
  540. }).catch(()=>{this.isReady=false})
  541. },
  542. showConfirmDialog(msg, resolve) {
  543. this.$alert(msg, '提示', {
  544. confirmButtonText: '确定',
  545. type: 'warning'
  546. }).then(() => {
  547. resolve();
  548. }).catch(() => {});
  549. },
  550. warning(msg, type,time) {
  551. this.$message({
  552. showClose: true,
  553. message: msg,
  554. type: type || 'warning',
  555. duration:time || '3000'
  556. })
  557. },
  558. handleInp(index,e,type,itemType){ //分组不能输入负数
  559. const value = e;
  560. if(type === 'FeatureNumber') { //序号只能输入数字和.
  561. this.$nextTick(() => {
  562. this.disFeatureList[index].code = value.replace(/[^\d.]/g,'')
  563. })
  564. } else if(type==='FeatureStand') { //标准词不能输入顿号
  565. this.$nextTick(() => {
  566. this.disFeatureList[index].standard = value.replace(/、/g,'')
  567. })
  568. // this.disFeatureList[index].standard = value.replace(/、/g,'')
  569. } else if ( type === 'FormulaNumber') {
  570. //计算公式确诊只能输入以下内容: 任、一、二、三、四、五、六、七、八、九、十、拟、诊、0-9、/、.、(、)、(、)
  571. if(itemType == 91) {
  572. this.$nextTick(() => {
  573. this.disFormulaList[index].formula = value.replace(/[^\u4EFB\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D\u5341\u62df\u8bca0-9\/\.+\(\)\(\)]/g,'').replace(/[\(]/g, '(').replace(/[\)]/g, ')').replace(/' '/g, '')
  574. })
  575. } else { //计算公式其他只能输入以下内容: 任、一、二、三、四、五、六、七、八、九、十、0-9、/、.、(、)、(、)
  576. //计算公式只能输入以下内容: 任、一、二、三、四、五、六、七、八、九、十、0-9、/、.、(、)、(、)
  577. this.$nextTick(() => {
  578. this.disFormulaList[index].formula = value.replace(/[^\u4EFB\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D\u53410-9\/\.+\(\)\(\)]/g,'').replace(/[\(]/g, '(').replace(/[\)]/g, ')').replace(/' '/g, '')
  579. })
  580. }
  581. } else if ( type === 'FeatureRelate') {
  582. if(itemType == 3) {
  583. this.$nextTick(() => {
  584. this.disFeatureList[index].relation = value.replace(/、/g,'')
  585. })
  586. }
  587. }
  588. // const item = this.selectedIndexList[index].indexDesc;
  589. // e.target.value = value.replace(/[^\d]/g,'');
  590. // this.selectedIndexList[index].indexDesc = item.replace(/[^\d]/g,'');
  591. },
  592. clickItem(index, type) {
  593. switch(type) {
  594. case 'FeatureType':
  595. this.disFeatureList[index].typeNull = ''
  596. this.disFeatureList[index].code = ''
  597. this.disFeatureList[index].standard = ''
  598. this.disFeatureList[index].relation = ''
  599. this.disFeatureList[index].result = ''
  600. this.disFeatureList[index].formula = ''
  601. return this.disFeatureList = JSON.parse(JSON.stringify(this.disFeatureList))
  602. case 'FeatureNumber':
  603. this.disFeatureList[index].codeNull = ''
  604. this.disFeatureList[index].verifyCode = ''
  605. this.disFeatureList[index].codeError = ''
  606. return this.disFeatureList = JSON.parse(JSON.stringify(this.disFeatureList))
  607. case 'FeatureStand':
  608. this.disFeatureList[index].verifyStandard =''
  609. this.disFeatureList[index].standardNull =''
  610. return this.disFeatureList = JSON.parse(JSON.stringify(this.disFeatureList))
  611. case 'FeatureRelate':
  612. this.disFeatureList[index].verifyRelation =''
  613. return this.disFeatureList = JSON.parse(JSON.stringify(this.disFeatureList))
  614. case 'FeatureResult':
  615. this.disFeatureList[index].verifyResult =''
  616. return this.disFeatureList = JSON.parse(JSON.stringify(this.disFeatureList))
  617. case 'FeatureResult':
  618. this.disFeatureList[index].verifyResult =''
  619. return this.disFeatureList = JSON.parse(JSON.stringify(this.disFeatureList))
  620. case 'FormulaType':
  621. this.disFormulaList[index].verifyType =''
  622. this.disFormulaList[index].formula =''
  623. return this.disFormulaList = JSON.parse(JSON.stringify(this.disFormulaList))
  624. case 'FormulaNumber':
  625. this.disFormulaList[index].verifyFormula =''
  626. return this.disFormulaList = JSON.parse(JSON.stringify(this.disFormulaList))
  627. }
  628. },
  629. warning(msg,type){
  630. this.$message({
  631. showClose: true,
  632. message:msg,
  633. type:type||'warning'
  634. })
  635. }
  636. }
  637. }
  638. </script>
  639. <style lang="less">
  640. @import '../../less/common.less';
  641. .AddDiagBaseWrapper {
  642. color: #606266;
  643. .topBack {
  644. top: 0;
  645. }
  646. .groupTitle {
  647. background-color: #fff;
  648. height: 40px;
  649. line-height: 40px;
  650. padding-left: 20px;
  651. }
  652. .searchInput, .searchName {
  653. display: inline-block;
  654. height: 32px;
  655. line-height: 32px;
  656. border: 1px solid #a9a9a9;
  657. margin: 0px 0 0 0;
  658. padding: 0 5px;
  659. float: left;
  660. margin-top: 4px;
  661. }
  662. .isRequired .el-form-item__label::before {
  663. content: '*';
  664. color: red;
  665. }
  666. .searchName {
  667. border-left: none;
  668. cursor: pointer;
  669. font-size: 16px;
  670. padding: 0 14px;
  671. }
  672. .itemList {
  673. position: absolute;
  674. background: #fff;
  675. width: 162px;
  676. max-height: 150px;
  677. border: 1px solid #a9a9a9;
  678. left: 138px;
  679. top: 37px;
  680. z-index: 2;
  681. overflow-y: auto;
  682. }
  683. .diagItem {
  684. padding: 0 5px;
  685. height: 30px;
  686. line-height: 30px;
  687. font-size: 14px;
  688. cursor: pointer;
  689. }
  690. .diagItem:hover {
  691. background: #f5f7fa;
  692. }
  693. .addDepartForm {
  694. position: relative;
  695. background-color: #fff;
  696. padding: 20px;
  697. margin: 70px 20px 0px 20px;
  698. }
  699. .addDiagName {
  700. position: relative;
  701. }
  702. .symptomList {
  703. position: relative;
  704. background-color: #fff;
  705. padding: 20px 20px 100px 20px;
  706. margin: 0px 20px 40px 20px;
  707. min-height: 400px;
  708. }
  709. .diagTable {
  710. width: 100%;
  711. border-collapse: collapse;
  712. margin-bottom: 20px;
  713. tr {
  714. td {
  715. border: 1px solid #a9a9a9;
  716. text-align: center;
  717. }
  718. .FormulaOpera, .FeatureOpera{
  719. background: #fff;
  720. border: none;
  721. text-align: left;
  722. padding-left: 30px;
  723. }
  724. /deep/.el-textarea__inner {
  725. width: 100%;
  726. line-height: 20px;
  727. resize:none;
  728. border: none;
  729. border-radius: 0;
  730. text-align: center;
  731. }
  732. }
  733. .selectedContent {
  734. width: 25%;
  735. }
  736. .selectedContentGroup {
  737. width: 55%;
  738. }
  739. .selectedContentOpera {
  740. width: 20%;
  741. }
  742. }
  743. .groupInput {
  744. text-align: center;
  745. color: #606266;
  746. width: 80%;
  747. }
  748. .groupTextarea {
  749. text-align: center;
  750. color: #606266;
  751. width: 100%;
  752. }
  753. .btn {
  754. position: absolute;
  755. background-color: #fff;
  756. width: 100%;
  757. margin: 20px 0;
  758. height: 40px;
  759. bottom: 0px;
  760. right: 0px;
  761. .btnBox {
  762. position: absolute;
  763. right: 0px;
  764. }
  765. .el-button {
  766. margin-right: 20px;
  767. }
  768. }
  769. .tableTitle{
  770. background: rgba(239,243,249,1);
  771. }
  772. .require::after{
  773. content:"*";
  774. color: red;
  775. }
  776. .borderRed {
  777. border: 3px solid red ;
  778. box-sizing: border-box;
  779. }
  780. .colorRed {
  781. color: red;
  782. }
  783. .FeatureSort {
  784. width: 5%;
  785. }
  786. .FeatureType {
  787. width: 7%;
  788. padding: 0 5px;
  789. }
  790. .FeatureNumber {
  791. width: 8%;
  792. }
  793. .FeatureStand {
  794. width: 25%;
  795. }
  796. .FeatureRelate {
  797. width: 25%;
  798. }
  799. .FeatureResult {
  800. width: 20%;
  801. }
  802. .FeatureOpera{
  803. width: 10%;
  804. }
  805. .FormulaSort{
  806. width: 5%;
  807. }
  808. .FormulaType{
  809. width: 7%;
  810. padding: 0 5px;
  811. }
  812. .FormulaNumber{
  813. width: 78%;
  814. }
  815. .FormulaOpera{
  816. width: 10%;
  817. }
  818. .btnOpera {
  819. width:16px;
  820. height:16px;
  821. background:rgba(176,190,197,1);
  822. border-radius: 50%;
  823. color: #fff;
  824. line-height: 16px;
  825. text-align: center;
  826. }
  827. /deep/.el-input--mini .el-input__inner {
  828. width: 80px;
  829. }
  830. /deep/ .is-disabled {
  831. background: #ECECEC;
  832. color: #AAAAAA;
  833. border: none;
  834. }
  835. .selectType {
  836. input {
  837. border: 3px solid red;
  838. }
  839. input:hover {
  840. border: 3px solid red;
  841. }
  842. }
  843. .moduleTitle {
  844. margin: 0 0 10px 0;
  845. }
  846. .inpDisabled{
  847. textarea {
  848. background: #ECECEC;
  849. color: #AAAAAA;
  850. border: none;
  851. cursor: not-allowed;
  852. height: 100%;
  853. }
  854. }
  855. .inpTips {
  856. font-size: 14px;
  857. color: red;
  858. margin-bottom: 10px;
  859. }
  860. }
  861. </style>