AddForm.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. <template>
  2. <Dialog
  3. style="max-width: 100vw; min-width: 96vw"
  4. v-model="dialogVisible"
  5. :title="title"
  6. scroll
  7. class="OutwardRegistrationBak"
  8. noPaddingEL="OutwardRegistrationBak"
  9. >
  10. <el-form v-loading="loading" ref="formRef" :model="dataForm" :rules="isDetail?[]:dataRule" :label-width="labelWidth">
  11. <div class="info-wrap">
  12. <el-row>
  13. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  14. <el-form-item label="长者姓名" prop="elderId">
  15. <search-the-elderly ref="selectElderRef" :disabled="isDetail" @update_elder="elderUp" v-model="dataForm.elderName" :tId="dataForm.tenantId"/>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  19. <el-form-item label="档案号" prop="fileNumber">
  20. <el-input v-if="!isDetail" v-model="dataForm.fileNumber" disabled />
  21. <el-text v-else >{{dataForm.fileNumber}}</el-text>
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. <el-row>
  26. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  27. <el-form-item label="性别" prop="elderSex">
  28. <el-input v-if="!isDetail" v-model="dataForm.elderSex" disabled />
  29. <el-text v-else >{{dataForm.elderSex}}</el-text>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  33. <el-form-item label="年龄" prop="elderAge">
  34. <el-input v-if="!isDetail" v-model="dataForm.elderAge" disabled />
  35. <el-text v-else >{{dataForm.elderAge}}</el-text>
  36. </el-form-item>
  37. </el-col>
  38. </el-row>
  39. <el-row>
  40. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  41. <el-form-item label="入院日期" prop="checkInTime">
  42. <el-input v-if="!isDetail" :model-value="dayjs(dataForm.checkInTime).format('YYYY-MM-DD')=='Invalid Date'?'':dayjs(dataForm.checkInTime).format('YYYY-MM-DD')" disabled />
  43. <el-text v-else >{{dayjs(dataForm.checkInTime).format('YYYY-MM-DD')}}</el-text>
  44. </el-form-item>
  45. </el-col>
  46. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  47. <el-form-item label="床位号" prop="bedName">
  48. <el-input v-if="!isDetail" v-model="dataForm.bedName" disabled />
  49. <el-text v-else disabled="">{{dataForm.bedName}}</el-text>
  50. </el-form-item>
  51. </el-col>
  52. </el-row>
  53. <el-row>
  54. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  55. <el-form-item label="护理级别" prop="nurseLevelName">
  56. <el-input v-if="!isDetail" v-model="dataForm.nurseLevelName" disabled />
  57. <el-text v-else>{{dataForm.nurseLevelName}}</el-text>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  61. <el-form-item label="记录月份" prop="recordMonth">
  62. <el-date-picker
  63. size="default"
  64. style="width: 100%"
  65. v-if="!isDetail"
  66. v-model="dataForm.recordMonth"
  67. type="month"
  68. :clearable="false"
  69. :editable="false"
  70. placeholder="选择记录月份"
  71. value-format="YYYY-MM"
  72. format="YYYY-MM"
  73. date-format="YYYY-MM"
  74. />
  75. <el-text v-else>{{dataForm.recordMonth}}</el-text>
  76. </el-form-item>
  77. </el-col>
  78. </el-row>
  79. <el-row>
  80. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  81. <el-form-item label="执行人" prop="operator">
  82. <el-input v-if="!isDetail" v-model="dataForm.operator" />
  83. <el-text v-else disabled="">{{dataForm.operator}}</el-text>
  84. </el-form-item>
  85. </el-col>
  86. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
  87. <el-form-item label="监督人" prop="supervisor">
  88. <el-input v-if="!isDetail" v-model="dataForm.supervisor" />
  89. <el-text v-else disabled="">{{dataForm.supervisor}}</el-text>
  90. </el-form-item>
  91. </el-col>
  92. </el-row>
  93. </div>
  94. </el-form>
  95. <el-table
  96. style="width: 100%;"
  97. :data="dataForm.items"
  98. :header-cell-style="tableHeaderColor"
  99. @selection-change="handleSelectionChange"
  100. ref="multipleTableRef"
  101. >
  102. <el-table-column prop="bedName" header-align="center" align="center" label="服务风险" width="130">
  103. <template #default="scope">
  104. <el-text>{{scope.row.serviceRisk}}</el-text>
  105. </template>
  106. </el-table-column>
  107. <el-table-column prop="bedName" header-align="center" align="center" label="风险等级" width="130">
  108. <template #default="scope">
  109. <select v-if="!isDetail" v-model="scope.row.riskLevel" class="native-select-risk">
  110. <option value="">请选择</option>
  111. <option value="无风险">无风险</option>
  112. <option value="低风险">低风险</option>
  113. <option value="中风险">中风险</option>
  114. <option value="高风险">高风险</option>
  115. </select>
  116. <span v-else class="risk-value">{{ scope.row.riskLevel || '-' }}</span>
  117. </template>
  118. </el-table-column>
  119. <el-table-column prop="bedName" header-align="center" align="center" label="预防措施" width="380">
  120. <template #default="scope">
  121. <el-text>{{scope.row.preventiveMeasure}}</el-text>
  122. </template>
  123. </el-table-column>
  124. <el-table-column prop="bedName" label="执行情况">
  125. <template #default="scope">
  126. <div v-if="isReady" style="display:flex;flex-direction: row;flex-wrap: wrap;align-items: center;gap: 8px;">
  127. <div v-for="(item,index) in scope.row.executionStatus" :key="index" style="display:flex;align-items:center;">
  128. <span style="min-width: 26px; text-align: right; margin-right: 6px; color: #303133; font-size: 12px; font-weight: 600;">
  129. {{ String(index + 1).padStart(2, '0') }}日:
  130. </span>
  131. <select v-if="!isDetail" v-model="scope.row.executionStatus[index]" class="native-select-prevention">
  132. <option value="">请选择</option>
  133. <option value="正常">正常</option>
  134. <option value="请假外出">请假外出</option>
  135. <option value="退住">退住</option>
  136. </select>
  137. <span v-else class="prevention-value">{{ scope.row.executionStatus[index] || '-' }}</span>
  138. </div>
  139. </div>
  140. </template>
  141. </el-table-column>
  142. </el-table>
  143. <template #footer>
  144. <el-button @click="handleClosed">关闭</el-button>
  145. <el-button v-loading="formLoading" type="primary" v-show="!isDetail" @click="submitForm">确定</el-button>
  146. </template>
  147. </Dialog>
  148. </template>
  149. <script lang="ts" setup>
  150. import { computed, nextTick, ref } from 'vue'
  151. import { FormRules } from 'element-plus'
  152. import { useMediaQuery } from '@vueuse/core'
  153. const { isValidNumberDis } = useValidator()
  154. import { useValidator } from '@/hooks/web/useValidator'
  155. import SelectBed from "@/views/preSalesManage/BookBed/SelectBed.vue";
  156. import dayjs from 'dayjs'
  157. import { useUserStore } from '@/store/modules/user'
  158. import {tableHeaderColor} from "@/utils/table";
  159. import {
  160. nineRestraintCreate,
  161. nineRestraintGetById,
  162. nineRestraintUpdate
  163. } from "@/api/elderly/nursing/keep-fit";
  164. const message = useMessage() // 消息弹窗
  165. const { t } = useI18n() // 国际化
  166. const discountAmount = ref()
  167. const discount = ref()
  168. const selectBedRef = ref()
  169. const title = ref('')
  170. const dialogVisible = ref(false) // 弹窗
  171. const loading = ref(false) // 弹窗
  172. const formRef = ref() // 表单 Ref
  173. const radio = ref(1) // 表单 Ref
  174. const selectElderRef = ref() // 表单 Ref
  175. const isDetail = ref(false) // 是否详情打开
  176. const isReady = ref(false) // 内容是否准备好渲染,用于性能优化
  177. const jsonDataList = ref([])
  178. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  179. const userStore = useUserStore()
  180. const removeElementsFromA = (a, b) => {
  181. // 使用Set来存储B中的元素,以提高查找效率
  182. const bSet = new Set(b)
  183. // 遍历A,使用filter来过滤掉那些在B中也存在的元素
  184. const filtered = a.filter((item) => !bSet.has(item))
  185. // 返回过滤后的数组
  186. return filtered
  187. }
  188. const multipleSelection = ref([])
  189. const handleSelectionChange = (val) => {
  190. multipleSelection.value = val
  191. console.log(multipleSelection.value)
  192. }
  193. const deleteItems = () => {
  194. dataForm.value.items = removeElementsFromA(dataForm.value.items, multipleSelection.value)
  195. }
  196. let dataForm = ref({
  197. // 表单字段
  198. id: undefined,
  199. idCard: '',
  200. fileNumber: '', //档案号
  201. elderName: '',//长者姓名
  202. bedName: '', //床位号
  203. elderAge: '', //年龄
  204. elderSex: '', //性别
  205. checkInTime: '', //入院日期
  206. elderId: '',
  207. operator: '',
  208. supervisor: '',
  209. recordMonth: dayjs().format('YYYY-MM'), // 记录时间,默认当前时间
  210. items: [], //时间数组
  211. tenantId: undefined
  212. })
  213. // 表单规则
  214. const dataRule = reactive<FormRules>({
  215. recordTime: [{ required: true, message: '记录时间不能为空', trigger: 'blur' }],
  216. elderId: [{ required: true, message: '长者姓名不能为空', trigger: 'blur' }],
  217. phone: [{ required: true, message: '联系方式不能为空', trigger: 'blur' },
  218. { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }],
  219. sourceChannel: [{ required: true, message: '来源渠道不能为空', trigger: 'blur' }],
  220. elderId: [{ required: true, message: '长者姓名不能为空', trigger: 'blur' }],
  221. })
  222. const elderUp = (e) => {
  223. dataForm.value.elderName = e.elderName
  224. dataForm.value.elderId = e.id
  225. dataForm.value.elderSex = e.elderSex === 1 ? '男' : '女'
  226. dataForm.value.bedName = e.bedName||''
  227. dataForm.value.checkInTime = e.checkInTime
  228. dataForm.value.fileNumber = e.fileNumber
  229. dataForm.value.elderAge = e.elderAge
  230. dataForm.value.nurseLevelName = e.nurseLevelName
  231. }
  232. // 计算窗口大小
  233. const currentWidth = useMediaQuery('(max-width: 800px)')
  234. // 计算文字大小
  235. const labelWidth = computed(() => {
  236. return currentWidth.value ? '130px' : '130px'
  237. })
  238. /** 打开弹窗 */
  239. const open = async (tenantId, id?: any, detail: boolean = false) => {
  240. resetForm()
  241. isReady.value = false
  242. dialogVisible.value = true
  243. dataForm.value.id = id || undefined
  244. dataForm.value.tenantId = tenantId
  245. isDetail.value = detail
  246. await nextTick()
  247. requestAnimationFrame(() => {
  248. isReady.value = true
  249. })
  250. if(id){
  251. title.value = "编辑-九防记录"
  252. }else {
  253. title.value = "新增-九防记录"
  254. }
  255. if (detail) {
  256. title.value = "详情-九防记录"
  257. }
  258. if (id) {
  259. try {
  260. loading.value = true
  261. const res = await nineRestraintGetById(id)
  262. dataForm.value = res
  263. try {
  264. for (const re of dataForm.value.items) {
  265. re.executionStatus = re.executionStatus.split('^')
  266. }
  267. }catch (e){}
  268. loading.value = false
  269. const elderRes = await selectElderRef.value.upData(res.elderName, res.elderId)
  270. elderUp(elderRes)
  271. } catch (err) { loading.value = false}
  272. }else {
  273. //新增
  274. dataForm.value.items=[
  275. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  276. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'2、昼夜加强巡视。',executionStatus:[]},
  277. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'3、必要时遵医嘱协助使用保护性约束。',executionStatus:[]},
  278. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'4、嘱长者有事可使用紧急呼叫铃。',executionStatus:[]},
  279. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'5、老人在床休息时使用床护栏。',executionStatus:[]},
  280. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'6、协助老人上、下床。',executionStatus:[]},
  281. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'7、检查床单元及居室安全。',executionStatus:[]},
  282. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'8、观察老人服用药物后的反应。',executionStatus:[]},
  283. {serviceRisk:'防坠床防跌倒',riskLevel:'',preventiveMeasure:'9、行动不便老人起床、行走、如厕时进行辅助。',executionStatus:[]},
  284. {serviceRisk:'防噎食',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  285. {serviceRisk:'防噎食',riskLevel:'',preventiveMeasure:'2、餐食类型:①普食②软食③烂碎④硬碎⑤糊状。',executionStatus:[]},
  286. {serviceRisk:'防噎食',riskLevel:'',preventiveMeasure:'3、在进食情况下有护理人员看护。',executionStatus:[]},
  287. {serviceRisk:'防噎食',riskLevel:'',preventiveMeasure:'4、进食速度不宜过快,需提示细嚼慢咽',executionStatus:[]},
  288. {serviceRisk:'防噎食',riskLevel:'',preventiveMeasure:'5、无法独立进食长者专人进行协助,出现呛咳或进食后声音改变,立即停止喂食。',executionStatus:[]},
  289. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  290. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'2、严格遵医嘱用药说明服药,由工作人员按时按量派发药物。',executionStatus:[]},
  291. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'4、委托发药长者,协助服药到口。',executionStatus:[]},
  292. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'4、进食速度不宜过快,需提示细嚼慢咽',executionStatus:[]},
  293. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'5、将易误食物品进行收纳,由工作人员代为管理。',executionStatus:[]},
  294. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'6、每周两次检查食品,防止老年人误食过期或变质食品。',executionStatus:[]},
  295. {serviceRisk:'防食品药品误食',riskLevel:'',preventiveMeasure:'7、每周两次检查药品,防止老年人误食过期药品。',executionStatus:[]},
  296. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  297. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'2、根据长者实际情况,提醒或协助变换体位。',executionStatus:[]},
  298. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'3、勤换片,保持皮肤清洁,干燥。',executionStatus:[]},
  299. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'4、设立翻身卡,定期协助长者翻身。',executionStatus:[]},
  300. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'5、使用便器时,须将老人进行抬离床面,避免拉、拽、减少摩擦力和避免便器刮伤。',executionStatus:[]},
  301. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'6、按需使用气垫床,翻身床,翻身枕等。',executionStatus:[]},
  302. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'7、保持床单平整,干燥,清洁。',executionStatus:[]},
  303. {serviceRisk:'防压疮',riskLevel:'',preventiveMeasure:'8、保持营养的食物搭配。',executionStatus:[]},
  304. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  305. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'2、暖瓶类放置在安全区域内,统一集中管理。',executionStatus:[]},
  306. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'3、由工作人员帮忙打开水。',executionStatus:[]},
  307. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'4、协助洗漱、洗浴水温适宜。',executionStatus:[]},
  308. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'5、避免老人饮用、进食高温饮食。',executionStatus:[]},
  309. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'6、使用取暖设备,应在工作人员的协助下进行。',executionStatus:[]},
  310. {serviceRisk:'防烫伤',riskLevel:'',preventiveMeasure:'7、开水房、饮水机热水开关设置安全锁。',executionStatus:[]},
  311. {serviceRisk:'防他伤和自伤',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  312. {serviceRisk:'防他伤和自伤',riskLevel:'',preventiveMeasure:'2、定期检查长者居室安全。',executionStatus:[]},
  313. {serviceRisk:'防他伤和自伤',riskLevel:'',preventiveMeasure:'3、昼夜加强巡视。',executionStatus:[]},
  314. {serviceRisk:'防他伤和自伤',riskLevel:'',preventiveMeasure:'4、时刻察觉老人情绪变化。',executionStatus:[]},
  315. {serviceRisk:'防他伤和自伤',riskLevel:'',preventiveMeasure:'5、危险物品放置于规定区域,专人进行管理。',executionStatus:[]},
  316. {serviceRisk:'防走失',riskLevel:'',preventiveMeasure:'1、床头挂警示标识。',executionStatus:[]},
  317. {serviceRisk:'防走失',riskLevel:'',preventiveMeasure:'2、昼夜加强巡视。',executionStatus:[]},
  318. {serviceRisk:'防走失',riskLevel:'',preventiveMeasure:'3、严格加强交接班制度,中高风险长者重点床头交接。',executionStatus:[]},
  319. {serviceRisk:'防走失',riskLevel:'',preventiveMeasure:'4、认知症长者,有游走行为需要居住在有门禁的楼层。',executionStatus:[]},
  320. {serviceRisk:'防走失',riskLevel:'',preventiveMeasure:'5、关注长者心理变化,避免长者独自外出。',executionStatus:[]},
  321. {serviceRisk:'防走失',riskLevel:'',preventiveMeasure:'6、外出请假、须有家属或监护人陪同老人外出。',executionStatus:[]},
  322. ]
  323. dataForm.value.items.map((item)=>{
  324. for (let i=1;i<=31;i++){
  325. item.executionStatus.push('')
  326. }
  327. })
  328. }
  329. }
  330. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  331. /** 提交表单 */
  332. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  333. const submitForm = async () => {
  334. if(formLoading.value){
  335. return
  336. }
  337. formLoading.value = true
  338. // 提交请求
  339. try {
  340. // 校验表单
  341. if (!formRef.value) return
  342. const valid = await formRef.value.validate()
  343. if (!valid) return
  344. const tempParams = JSON.parse(JSON.stringify(dataForm.value));
  345. for (const item of tempParams.items) {
  346. item.executionStatus = item.executionStatus.join('^')
  347. }
  348. if(dataForm.value.id) {
  349. const res = await nineRestraintUpdate(tempParams)
  350. if (res) {
  351. message.success(t('common.updateSuccess'))
  352. dialogVisible.value = false
  353. // 发送操作成功的事件
  354. emit('success')
  355. }
  356. }else {
  357. const res = await nineRestraintCreate(tempParams)
  358. if (res) {
  359. message.success(t('common.updateSuccess'))
  360. dialogVisible.value = false
  361. // 发送操作成功的事件
  362. emit('success')
  363. }
  364. }
  365. } finally {
  366. setTimeout(()=>{
  367. formLoading.value = false
  368. },500)
  369. }
  370. }
  371. /** 重置表单 */
  372. const resetForm = () => {
  373. dataForm.value = {
  374. // 表单字段
  375. id: undefined,
  376. idCard: '',
  377. fileNumber: '', //档案号
  378. elderName: '',//长者姓名
  379. bedName: '', //床位号
  380. elderAge: '', //年龄
  381. elderSex: '', //性别
  382. checkInTime: '', //入院日期
  383. elderId: '',
  384. operator: '',
  385. supervisor: '',
  386. recordMonth: dayjs().format('YYYY-MM'), // 记录时间,默认当前时间
  387. items: [], //时间数组
  388. tenantId: undefined
  389. }
  390. formRef.value?.resetFields()
  391. jsonDataList.value=[]
  392. radio.value=1
  393. }
  394. // 关闭表单
  395. const handleClosed = () => {
  396. dialogVisible.value = false
  397. resetForm()
  398. }
  399. </script>
  400. <style lang="scss" scoped>
  401. .OutwardRegistrationBak {
  402. .el-form {
  403. padding: 15px 0 !important;
  404. }
  405. // 原生选择器样式
  406. .native-select-prevention {
  407. width: 85px;
  408. height: 26px;
  409. padding: 0 18px 0 6px;
  410. font-size: 12px;
  411. border: 1px solid #dcdfe6;
  412. border-radius: 4px;
  413. background-color: #fff;
  414. text-align: center;
  415. cursor: pointer;
  416. appearance: none;
  417. background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
  418. background-repeat: no-repeat;
  419. background-position: right 3px center;
  420. background-size: 12px;
  421. &:focus {
  422. border-color: #409eff;
  423. outline: none;
  424. }
  425. option {
  426. font-size: 12px;
  427. }
  428. }
  429. .prevention-value {
  430. display: inline-block;
  431. width: 85px;
  432. height: 26px;
  433. line-height: 26px;
  434. font-size: 12px;
  435. text-align: center;
  436. color: #606266;
  437. }
  438. // 风险等级选择器样式
  439. .native-select-risk {
  440. width: 100px;
  441. height: 28px;
  442. padding: 0 20px 0 8px;
  443. font-size: 12px;
  444. border: 1px solid #dcdfe6;
  445. border-radius: 4px;
  446. background-color: #fff;
  447. text-align: center;
  448. cursor: pointer;
  449. appearance: none;
  450. background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
  451. background-repeat: no-repeat;
  452. background-position: right 4px center;
  453. background-size: 14px;
  454. &:focus {
  455. border-color: #409eff;
  456. outline: none;
  457. }
  458. option {
  459. font-size: 12px;
  460. }
  461. }
  462. .risk-value {
  463. display: inline-block;
  464. width: 100px;
  465. height: 28px;
  466. line-height: 28px;
  467. font-size: 12px;
  468. text-align: center;
  469. color: #606266;
  470. }
  471. .info-title {
  472. min-width: 75px;
  473. max-width: 180px;
  474. padding: 15px;
  475. font-weight: bolder;
  476. background-color: #f3f6fb;
  477. border-top-right-radius: 50px;
  478. border-bottom-right-radius: 50px;
  479. }
  480. .info-wrap {
  481. margin: 15px;
  482. }
  483. .title-bg {
  484. background-color: #f2f5fa;
  485. border-top-right-radius: 25px;
  486. border-bottom-right-radius: 25px;
  487. display: flex;
  488. align-items: center;
  489. justify-content: center;
  490. color: #333;
  491. margin-top: 1px;
  492. font-size: 16px;
  493. font-weight: 800;
  494. width: 140px;
  495. height: 50px;
  496. }
  497. .row {
  498. display: flex;
  499. align-items: center;
  500. flex-direction: row;
  501. }
  502. }
  503. </style>