|
|
@@ -5,38 +5,73 @@
|
|
|
|
|
|
<xc-dialog-v2 v-model="dialog"
|
|
|
title="病历时效限制">
|
|
|
+
|
|
|
+
|
|
|
<el-form :label-width="120">
|
|
|
<el-form-item label="入参数据元:">
|
|
|
- <el-input v-model="ruleForm.ginseng"/>
|
|
|
+ <el-select v-model="timeRule.sqlId" @change="selectChange" ref="selectRef">
|
|
|
+ <el-option v-for="item in ruleDataElement"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ :key="item.id"
|
|
|
+ :title="item.group_name"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="时效(小时):">
|
|
|
+ <el-input v-model.number="timeRule.prescription">
|
|
|
+ <template #prepend>
|
|
|
+ {{ selectRef?.selectedLabel }}
|
|
|
+ </template>
|
|
|
+ <template #append> 小时后</template>
|
|
|
+ </el-input>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
<el-form-item label="病历编码:">
|
|
|
<el-tree-select
|
|
|
- class="tree-select"
|
|
|
style="width: 100%"
|
|
|
- :props="defaultProps"
|
|
|
+ class="tree-select"
|
|
|
+ v-model="value"
|
|
|
+ :data="emrTree"
|
|
|
+ @clear=""
|
|
|
+ @remove-tag="removeTag"
|
|
|
multiple
|
|
|
- node-key="_id"
|
|
|
- :render-after-expand="false"
|
|
|
- v-model="ruleForm.medicalRecordCode"
|
|
|
- :data="emrTree">
|
|
|
- <template #default="{ node, data }">
|
|
|
+ @node-click="nodeClick"
|
|
|
+ :props="defaultProps"
|
|
|
+ check-strictly
|
|
|
+ :render-after-expand="false">
|
|
|
+ <template #default="{data}">
|
|
|
<div style="display: flex;justify-content: space-between;align-items: center">
|
|
|
- <div>{{ data.name }}</div>
|
|
|
<div>
|
|
|
- <el-button text type="primary">全选</el-button>
|
|
|
+ {{ data.name }}
|
|
|
+ </div>
|
|
|
+ <div v-if="data.children && data.children.length > 0">
|
|
|
+ <el-button text @click.stop="selectAll(data.children)">全选</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-tree-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="时效(小时):">
|
|
|
- <el-input v-model="ruleForm.prescription"/>
|
|
|
+
|
|
|
+ <el-form-item label="提示语:">
|
|
|
+ <el-input v-model="ruleForm.promptStatement" show-word-limit maxlength="50"/>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item>
|
|
|
+ <el-switch
|
|
|
+ v-model="ruleForm.offOrOnRule"
|
|
|
+ :active-value="1"
|
|
|
+ :inactive-value="0"
|
|
|
+ active-text="开启"
|
|
|
+ inactive-text="关闭"/>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
</el-form>
|
|
|
|
|
|
<template #footer>
|
|
|
<el-button>取消</el-button>
|
|
|
- <el-button>确认</el-button>
|
|
|
+ <el-button @click="confirm">确认</el-button>
|
|
|
</template>
|
|
|
</xc-dialog-v2>
|
|
|
|
|
|
@@ -44,46 +79,127 @@
|
|
|
|
|
|
<script setup name='EmrControlRule' lang="ts">
|
|
|
import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
|
|
|
-import {onMounted, Ref, ref} from "vue";
|
|
|
+import {nextTick, onMounted, Ref, ref} from "vue";
|
|
|
import XcDialogV2 from "@/components/xiao-chan/dialog/XcDialogV2.vue";
|
|
|
import {
|
|
|
getEmrTree,
|
|
|
} from "@/api/zhu-yuan-yi-sheng/emr-patient";
|
|
|
+import {addRule, getAvailableObjects} from '@/api/zhu-yuan-yi-sheng/emr-control-rule'
|
|
|
|
|
|
const data: Ref<Array<any>> = ref([])
|
|
|
const dialog: Ref<boolean> = ref(true)
|
|
|
const emrTree = ref([])
|
|
|
+const ruleDataElement: Ref<Array<any>> = ref([])
|
|
|
|
|
|
const defaultProps = {
|
|
|
children: 'children',
|
|
|
label: 'name',
|
|
|
- value: '_id'
|
|
|
+ value: '_id',
|
|
|
+ disabled: (data) => {
|
|
|
+ return data.children && data.children.length > 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
interface ruleFormClass {
|
|
|
- // 入参
|
|
|
- ginseng: string,
|
|
|
+ medicalRecord: Map<string, any>,
|
|
|
// 病历编码
|
|
|
- medicalRecordCode: Array<any>,
|
|
|
- // 时效
|
|
|
- prescription: string,
|
|
|
-
|
|
|
+ medicalRecordCode: Array<string>,
|
|
|
+ type: number,
|
|
|
+ data: any,
|
|
|
+ offOrOnRule: number
|
|
|
+ promptStatement: string
|
|
|
}
|
|
|
|
|
|
const ruleForm: Ref<ruleFormClass> = ref({
|
|
|
- ginseng: '',
|
|
|
- medicalRecordCode: [],
|
|
|
- prescription: '',
|
|
|
+ type: 1,
|
|
|
+ medicalRecord: {},
|
|
|
+ medicalRecordCode: {},
|
|
|
+ data: {},
|
|
|
+ offOrOnRule: 1,
|
|
|
+ promptStatement: '超过了 24 小时无法创建'
|
|
|
+})
|
|
|
+
|
|
|
+const timeRule = ref({
|
|
|
+ sqlId: null,
|
|
|
+ prescription: '24',
|
|
|
})
|
|
|
|
|
|
+/**
|
|
|
+ * 全选
|
|
|
+ * @param list
|
|
|
+ */
|
|
|
+const selectAll = (list) => {
|
|
|
+ list.forEach(data => {
|
|
|
+ ruleForm.value.medicalRecord[data._id] = {
|
|
|
+ code: data.code,
|
|
|
+ name: data.name
|
|
|
+ }
|
|
|
+ if (value.value.indexOf(data._id) === -1) {
|
|
|
+ value.value.push(data._id);
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 编码点击
|
|
|
+ * @param data
|
|
|
+ */
|
|
|
+const nodeClick = (data) => {
|
|
|
+ if (data.children) return
|
|
|
+ if (ruleForm.value.medicalRecord[data._id]) {
|
|
|
+ uncheck(data._id)
|
|
|
+ } else {
|
|
|
+ ruleForm.value.medicalRecord[data._id] = {
|
|
|
+ code: data.code,
|
|
|
+ name: data.name
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 移除标签
|
|
|
+ * @param data
|
|
|
+ */
|
|
|
+const removeTag = (data) => {
|
|
|
+ uncheck(data)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 删除数据
|
|
|
+ * @param value
|
|
|
+ */
|
|
|
+const uncheck = (value) => {
|
|
|
+ delete ruleForm.value.medicalRecord[value]
|
|
|
+}
|
|
|
+
|
|
|
+const selectRef = ref(null)
|
|
|
+const selectChange = async () => {
|
|
|
+ await nextTick()
|
|
|
+}
|
|
|
+
|
|
|
+const confirm = () => {
|
|
|
+ let temp = new Set()
|
|
|
+ for (let key in ruleForm.value.medicalRecord) {
|
|
|
+ temp.add(ruleForm.value.medicalRecord[key].code)
|
|
|
+ }
|
|
|
+ ruleForm.value.medicalRecordCode = Array.from(temp)
|
|
|
+ ruleForm.value.type = 1
|
|
|
+ ruleForm.value.data = JSON.stringify(timeRule.value)
|
|
|
+ addRule(ruleForm.value)
|
|
|
+ console.log(ruleForm.value)
|
|
|
+}
|
|
|
+
|
|
|
+const value: Ref<Array<string>> = ref([])
|
|
|
|
|
|
onMounted(() => {
|
|
|
getEmrTree('hosp').then((res) => {
|
|
|
- console.log(res)
|
|
|
- emrTree.value = res.all
|
|
|
+ emrTree.value = res.all[0].children
|
|
|
+ })
|
|
|
+
|
|
|
+ getAvailableObjects().then((res) => {
|
|
|
+ ruleDataElement.value = res
|
|
|
})
|
|
|
|
|
|
- console.log(data.value);
|
|
|
})
|
|
|
|
|
|
</script>
|
|
|
@@ -96,4 +212,34 @@ onMounted(() => {
|
|
|
color: black;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.select_div {
|
|
|
+ min-height: 20px;
|
|
|
+ width: 100%;
|
|
|
+ border: 1px solid;
|
|
|
+ border-radius: 4px;
|
|
|
+
|
|
|
+ table-layout: fixed;
|
|
|
+ word-break: break-all;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ .select_input {
|
|
|
+ margin-left: 3px;
|
|
|
+ }
|
|
|
+
|
|
|
+ span {
|
|
|
+ border-radius: 2px;
|
|
|
+ background-color: #f0f2f5;
|
|
|
+ padding: 0 5px;
|
|
|
+ margin: 4px;
|
|
|
+
|
|
|
+ i {
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 12px;
|
|
|
+ width: 14px;
|
|
|
+ height: 14px;
|
|
|
+ border-radius: 50%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|