Browse Source

新试题修改

210plan
aBin 3 years ago
parent
commit
a1bcd46488
  1. 5
      src/apis/carbasics.js
  2. 985
      src/components/Test/Test copy.vue
  3. 188
      src/components/Test/Test.vue
  4. 43
      src/pages/MoreCar/detail.vue
  5. 33
      src/pages/MoreCar/index.vue
  6. 411
      src/pages/inner/inner-old.vue
  7. 53
      src/pages/inner/inner.vue
  8. 50
      src/pages/patientLine/patientLine.vue
  9. BIN
      src/static/news/logo-car.png

5
src/apis/carbasics.js

@ -3,6 +3,7 @@ const fileUrl = process.env.VUE_APP_BASE_URL;
export const carbasics = `${apiUrl}/carbasics/v4.0`; export const carbasics = `${apiUrl}/carbasics/v4.0`;
export const filedeal = `${fileUrl}/filedeal`; export const filedeal = `${fileUrl}/filedeal`;
const patient = `${carbasics}/patient`; // 患者相关接口 const patient = `${carbasics}/patient`; // 患者相关接口
const plugin = `${carbasics}/plugin`; // 插件相关接口
const firstAid = `${carbasics}/firstAid`; // 急救数据相关接口 const firstAid = `${carbasics}/firstAid`; // 急救数据相关接口
const screening = `${carbasics}/screening`; // 高危人群筛查相关接口 const screening = `${carbasics}/screening`; // 高危人群筛查相关接口
const questionnaire = `${carbasics}/questionnaire`; // 调查问卷相关接口 const questionnaire = `${carbasics}/questionnaire`; // 调查问卷相关接口
@ -128,6 +129,10 @@ const install = (Vue, vm) => {
`); `);
// 查询平车绑定患者的当前环节信息 // 查询平车绑定患者的当前环节信息
vm.$u.api.getStep = params => vm.$u.post(`${firstAid}/step`, params); vm.$u.api.getStep = params => vm.$u.post(`${firstAid}/step`, params);
// 查询患者信息的目录列表
vm.$u.api.queryParentCode = params => vm.$u.post(`${plugin}/queryParentCode`, params);
// 根据目录类型查询类型下的题目
vm.$u.api.queryQuestionCode = params => vm.$u.post(`${plugin}/queryQuestionCode`, params);
}; };
export default { install }; export default { install };

985
src/components/Test/Test copy.vue

@ -0,0 +1,985 @@
<template>
<div class="test">
<div bordered class="list-box" v-for="(item, index) in test" :key="index">
<template v-for="(listItem, listIndex) in item">
<template v-if="listItem.code === 'ZQTH-SJ'">
<Talk :key="listIndex" @changeHeigt="changeHeigt" />
</template>
<template v-else>
<div
class="bg-white list-item"
:key="listIndex"
v-if="
itemIsShow(listItem.Fcode, listItem.isShow, listItem.level) && itemNoShow(listItem.NFcode, listItem.noShow, listItem.level)
"
>
<div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.title" style="font-size: 16px">
<!-- {{ listItem.title }}
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> -->
<div class="flex items-center" v-if="listItem.type !== -1">
<view class="putong-title">{{ listItem.title }}</view>
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div>
<div class="flex items-center" v-else>
<view class="shu"></view>
<view class="shu-title">{{ listItem.title }}</view>
</div>
</div>
<div class="flex flex-1 justify-end" :style="{marginLeft: listItem.title ? '' : '24rpx'}">
<!-- 自动计算 -->
<span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)">
{{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }}
</span>
<!-- 输入框 -->
<template v-else-if="listItem.type === 1">
<u-input
:border="true"
:clearable="false"
style="width: 200rpx"
placeholder="请输入"
input-align="right"
:value="listItem.value"
@blur="changeIpt($event, listItem.code, index, listIndex)"
/>
</template>
<!-- 单选 -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 2" style="margin-right: -24rpx">
<u-radio
@change="changeRadio($event, listItem.code, index, listIndex)"
v-for="radioValue in listItem.itemList"
:key="radioValue"
:name="radioValue"
>
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span>
</u-radio>
</u-radio-group>
<!-- 单选(竖向排列) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 21" class="flex flex-col w-full">
<div v-for="radioValue in listItem.itemList" :key="radioValue" style="width: 105%">
<view class="flex justify-between">
<view class="flex-1">
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span>
</view>
<u-radio
style="display: block;margin-left: 0; height: 40px; line-height: 40px"
:name="radioValue"
:key="radioValue"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
</u-radio>
</view>
<div
v-if="
listItem.code === 'ZLFA-FBJZ' &&
listItem.value === '其他原因所致的缺血性卒中(SOE)' &&
radioValue === '其他原因所致的缺血性卒中(SOE)'
"
class="flex ml-2 mb-2 items-center"
>
<div>是否烟雾病:</div>
<u-radio-group :value="listItem.ywbValue">
<u-radio @change="changeYWBRadio($event, listItem.ywbCode, index, listIndex)" name="是"> </u-radio>
<u-radio @change="changeYWBRadio($event, listItem.ywbCode, index, listIndex)" name="否"> </u-radio>
</u-radio-group>
</div>
</div>
</u-radio-group>
<!-- 单选(横向三列) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 22" class="flex w-full">
<div
v-for="(radioValue, radioIndex) in listItem.itemList"
:key="radioValue"
style="width: 105%"
class="flex"
:class="{
'text-left': radioIndex % 3 === 0,
'text-center': (radioIndex - 1) % 3 === 0,
'text-right': (radioIndex + 1) % 3 === 0,
'flex-wrap': radioIndex > 3,
'flex-nowrap': radioIndex <= 3,
}"
>
<view class="flex-1" :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</view>
<u-radio
@change="changeRadio($event, listItem.code, index, listIndex)"
style="margin-left: 0; height: 40px; line-height: 40px"
:name="radioValue"
>
</u-radio>
</div>
</u-radio-group>
<!-- 单选(带分数输入框) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 23" class="flex flex-col flex-wrap w-full">
<template v-if="listItem.code !== 'JRZL-SQ-ASPECT'">
<div
v-for="(radioValue, radioIndex) in listItem.listItem"
:key="radioIndex"
class="flex flex-1 items-center"
style="height: 44px"
>
<u-radio
style="margin-left: 0; height: 40px; line-height: 40px"
:style="{ color: listItem.value === radioValue ? '#1890ff' : '' }"
:value="radioValue.type"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
{{ radioValue.name }}
</u-radio>
<div v-if="radioValue.showIpt">
<u-input
:border="true"
:clearable="false"
:value="radioValue.value"
placeholder="请输入"
style="width: 100rpx !important"
@click="iptChangeRadio('score', listItem.code, index, listIndex)"
@blur="changeScroeNum($event, radioValue.min, radioValue.max, radioValue.code, index, listIndex, radioIndex)"
/>
</div>
</div>
</template>
<div v-else style="flex flex-nowrap items-center">
<div style="height: 44px;line-height: 44px">
<u-radio
style="margin-left: 0"
:style="{ color: listItem.value === 'score' ? '#1890ff' : '' }"
name="score"
@change="changeRadio('score', listItem.code, index, listIndex)"
>
<div class="flex items-center" :style="{ color: listItem.value === 'score' ? '#1890ff' : '' }">
CT<u-input
:border="true"
:clearable="false"
:value="listItem.listItem[0].value"
placeholder="请输入"
style="width: 100rpx !important"
@click="iptChangeRadio('score', listItem.code, index, listIndex)"
@blur="
changeScroeNum(
$event,
listItem.listItem[0].min,
listItem.listItem[0].max,
listItem.listItem[0].code,
index,
listIndex,
0,
)
"
/>MRI<u-input
:border="true"
:clearable="false"
:value="listItem.listItem[1].value"
placeholder="请输入"
style="width: 100rpx !important"
@click="iptChangeRadio('score', listItem.code, index, listIndex)"
@blur="
changeScroeNum(
$event,
listItem.listItem[1].min,
listItem.listItem[1].max,
listItem.listItem[1].code,
index,
listIndex,
1,
)
"
/>
</div>
</u-radio>
</div>
<u-radio
style="margin-left: 0; height: 40px; line-height: 40px"
name="noScore"
@change="changeRadio('noScore', listItem.code, index, listIndex)"
>
<span :style="{ color: listItem.value === 'noScore' ? '#1890ff' : '' }">未评</span>
</u-radio>
</div>
</u-radio-group>
<!-- 单选(竖向排列带分数输入框) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 24" class="flex flex-col w-full">
<div class="flex items-center justify-between" style="width: 105%" v-for="(radioValue, radioIndex) in listItem.itemList" :key="radioIndex">
<view class="flex items-center flex-1" style="height: 78rpx;line-height: 78rpx">
<view>{{ radioValue.name }}</view>
<div v-if="radioValue.showIpt" class="flex items-center ml-1 mr-1">
<!-- :disabled="listItem.value !== radioValue.name" -->
<u-input
:clearable="false"
:value="radioValue.value"
:type="radioValue.unit ? 'number' : 'text'"
:placeholder="radioValue.min && radioValue.max ? `请输入${radioValue.min}-${radioValue.max}` : '请输入'"
style="width: 300rpx !important"
:custom-style="{fontSize: '28rpx'}"
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)"
@blur="
changeRadioScore(
$event,
radioValue.code,
index,
listIndex,
radioIndex,
radioValue.unit,
radioValue.min,
radioValue.max,
)
"
/>
<span>{{ radioValue.unit }}</span>
</div>
</view>
<u-radio
class="flex items-center"
label-size="28"
:style="{ color: listItem.value === radioValue ? '#1890ff' : '' }"
:name="radioValue.name"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
</u-radio>
</div>
</u-radio-group>
<!-- 多选 -->
<u-checkbox-group
v-else-if="listItem.type === 3"
@change="changeCheck($event, listItem.code, index, listIndex, false, listItem.showOther)"
:class="{ 'justify-between': listItem.checkType - 0 === 4 }"
class="w-full flex flex-row flex-wrap"
>
<div
v-for="(check, checkIndex) in listItem.itemIsChecked"
:key="checkIndex"
:style="{ minWidth: listItem.checkType - 0 === 3 ? '33%' : listItem.checkType - 0 === 2 ? '50%' : 0 }"
class="w-full my-2 flex flex-1 flex-col items-start justify-center"
>
<view class="flex">
<view :style="{ color: check.isChecked ? '#1890ff' : '' }" style="width: 628rpx">
{{ listItem.itemList[checkIndex] }}
</view>
<u-checkbox v-model="check.isChecked" :name="listItem.itemList[checkIndex]">
</u-checkbox>
</view>
<u-input
:border="true"
:clearable="false"
:value="listItem.iptValue"
v-if="listItem.showIpt && listItem.showIptItem === listItem.itemList[checkIndex]"
@blur="changeOther($event, listItem.iptCode, index, listIndex)"
placeholder="请输入"
style="width: 200rpx"
/>
</div>
</u-checkbox-group>
<!-- 多选特殊类型 -->
<div v-else-if="listItem.type === 31" class="w-full">
<div v-for="(checkTest, checkIndex) in listItem.checkList" :key="checkTest.title">
<div>{{ checkTest.title }}</div>
<u-checkbox-group
:class="{ 'justify-between': listItem.checkType - 0 === 4 }"
class="w-full flex flex-row flex-wrap"
@change="changeCheck($event, checkTest.code, index, listIndex, checkIndex)"
>
<div
style="min-width: 33%"
class="my-2 flex items-center"
v-for="(check, isCheckIndex) in checkTest.itemIsChecked"
:key="check"
>
<u-checkbox v-model="check.isChecked" :name="checkTest.itemList[isCheckIndex]">
<!-- itemIsChecked,itemList -->
<span :style="{ color: check.isChecked ? '#1890ff' : '' }">
{{ check }}
</span>
</u-checkbox>
<u-input
:border="true"
:clearable="false"
@bulr="changeCheckIpt($event, checkTest.iptCode, index, listIndex, checkIndex)"
:value="checkTest.iptValue"
placeholder="请输入"
style="width: 200rpx"
v-if="checkTest.showIpt && checkTest.showValue === checkTest.itemList[isCheckIndex]"
/>
</div>
</u-checkbox-group>
</div>
</div>
<!-- 时间选择 -->
<div
v-else-if="listItem.type === 4"
@click="openTimeSelect(listItem.title, listItem.code, index, listIndex, listItem.value)"
class="flex items-center"
>
<span class="mr-3" v-if="listItem.value">
{{ $moment(+listItem.value).format('YYYY-MM-DD HH:mm') }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<!-- <img src="@/static/icon/time.png" style="height: 20px" /> -->
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
<!-- 展开底部下拉框 -->
<div
v-else-if="listItem.type === 5"
style="min-width: 160px; width: auto; justify-content: flex-end; height: 30px"
class="flex items-center"
@click="openDropDown(listItem.title, listItem.itemList, listItem.code, index, listIndex, listItem.value)"
>
<span style="margin-right: 10px;color: #bbb" v-if="listItem.value">{{ listItem.value }}</span>
<span style="margin-right: 10px;color: #bbb" v-else>请选择</span>
<!-- <img src="@/static/icon/right.png" style="height: 20px" /> -->
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
<!-- 带有最大最小值限制的输入框 -->
<div v-else-if="listItem.type === 7" class="flex items-center">
<div v-if="numIndex === index && numItemIndex === listIndex" class="mr-1 font-12 text-red">
<span v-if="exceed === 'max'"> 超过最大值{{ listItem.max }} </span>
<span v-else-if="exceed === 'min'"> 超过最小值{{ listItem.min }} </span>
</div>
<span v-if="listItem.beforeUnit">{{ listItem.beforeUnit }}</span>
<u-input
input-align="right"
:clearable="false"
type="number"
:value="listItem.value"
placeholder="请输入"
style="width: 200rpx"
@change="changeNum($event, listItem.min, listItem.max, listItem.code, index, listIndex)"
@blur="inputNumBlur($event, listItem.code, listItem.min, listItem.max, index, listIndex)"
/>
<span v-if="listItem.unit">{{ listItem.unit }}</span>
</div>
<!-- 带已评输入框的单选 -->
<u-radio-group
:class="{ 'w-full': !listItem.title }"
v-else-if="listItem.type === 71"
:value="listItem.value"
class="flex-1 flex items-center"
>
<u-radio
:name="radioValue.name"
v-for="(radioValue, radioIndex) in listItem.listItem"
:key="radioValue.name"
class="ipt-radio"
style="height: 40px;line-height: 40px"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
<u-input
:border="true"
:clearable="false"
v-if="radioValue.name === '已评'"
:style="{
color: listItem.value !== '已评' ? 'rgba(0,0,0,0.25)' : '',
background: listItem.value !== '已评' ? '#eee' : '',
}"
type="number"
:value="radioValue.value"
placeholder="请输入"
class="ipt-radio"
style="width: 200rpx"
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)"
@blur="changeScroeNum($event, listItem.min, listItem.max, radioValue.code, index, listIndex, radioIndex)"
/>
<view v-else style="height: 40px;line-height: 40px" :style="{ color: listItem.value === radioValue.name ? '#1890ff' : '' }">{{ radioValue.name }}</view>
</u-radio>
</u-radio-group>
</div>
</div>
</div>
</template>
</template>
</div>
<u-picker mode="time" v-model="show" :title="title" :params="timeSelectparams" @confirm="chooseTime"></u-picker>
<u-picker mode="selector" v-model="showDrop" :range="dropList" :default-selector="[0]" @confirm="chooseSelector"></u-picker>
<u-toast ref="uToast" />
</div>
</template>
<script>
import { mapState } from 'vuex';
import Talk from './component/Talk.vue'
export default {
components: { Talk },
props: {
testIndex: {
type: Number,
default: 0,
},
list: {
type: Array,
default: () => [],
},
answerList: {
type: Object,
default: () => {},
},
canChange: {
type: Boolean,
default: false,
},
},
data: () => ({
test: [], //
radioStyle: {
//
display: 'block',
width: '100%',
marginLeft: '0',
height: '40px',
lineHeight: '40px',
},
timeValue: '',
title: '', //
timeIndex: 0, // index
timeItemIndex: 0, // index
timeCode: '', // code
show: false, //
ZQTHSJ: null, //
timeSelectparams: {
//
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: false,
},
dropTitle: '',
dropList: [],
dropCode: '',
dropIndex: '',
dropItemIndex: '',
dValue: '',
showDrop: false,
numIndex: '',
numItemIndex: '',
exceed: '',
}),
computed: {
...mapState('carbasics', ['firstAidId']),
getBMI() {
let height = 0;
let weight = 0;
for (let key in this.test) {
for (let i in this.test[key]) {
if (this.test[key][i].code === 'RYPG-height' && this.test[key][i].value) {
height = this.test[key][i].value - 0;
} else if (this.test[key][i].code === 'RYPG-weight' && this.test[key][i].value) {
weight = this.test[key][i].value - 0;
}
}
}
if (height && weight) {
return (weight / (((height / 100) * height) / 100)).toFixed(2);
} else {
return 0;
}
},
getCount() {
let num = 0;
for (let key in this.test) {
for (let i in this.test[key]) {
if (this.test[key][i].code === 'TSCX-AVM-SIZE') {
// ['<3cm1 ', '3-6cm2 ', '>6cm3 ']
if (this.test[key][i].value === '<3cm(1 分)') {
num += 1;
} else if (this.test[key][i].value === '3-6cm(2 分)') {
num += 2;
} else if (this.test[key][i].value === '>6cm(3 分)') {
num += 3;
}
} else if (this.test[key][i].code === 'TSCX-AVM-features') {
// ['0 ', '1 ']
if (this.test[key][i].value === '大脑非功能区(0 分)') {
num += 0;
} else if (this.test[key][i].value === '大脑功能区(1 分)') {
num += 1;
}
} else if (this.test[key][i].code === 'TSCX-AVM-SEAT') {
// ['0 ', '1 ']
if (this.test[key][i].value === '浅表部(0 分)') {
num += 0;
} else if (this.test[key][i].value === '深部(1 分)') {
num += 1;
}
}
}
}
return num;
},
},
methods: {
changeHeigt() {
// this.$emit('getCollaoseHeight', this.testIndex);
},
/**
* 判断当前 item 是否显示
* 根据 显示条件: isShow 是否和父级code: Fcode 的值相等判断
* 如果 Fcode isShow 都不存在,则直接返回true,显示当前item
* 如果 Fcode isShow 都存在,而且 (父级code存在且父级code的value和isShow值相等) 则返回ture
* 否则返回false
*/
itemIsShow(code, isShow, level) {
if (!level) {
if (code && isShow) {
for (let i = 0; i < this.test.length; i++) {
const item = this.test[i];
if (item) {
for (let j = 0; j < item.length; j++) {
const jtem = item[j];
if (jtem.code === code && jtem.value === isShow) {
return true;
} else if (i === this.test.length - 1 && j === item.length) {
return false;
}
}
}
}
} else {
return true;
}
} else {
if (this.answerList && this.answerList[code]) {
const value = this.answerList[code];
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) {
if (value[i] === isShow) {
return true;
} else if (i === value.length - 1) {
return false;
}
}
} else {
return value === isShow;
}
} else {
return true;
}
}
},
/**
* 判断当前试题是否显示
* 不是根据父级试题选了哪一项而显示,而是根据父级试题没选哪一项而显示
* 比如 选了 '死亡',不能再出现'出院带药'等试题,选了其他选项则可以出现
* 需要根据 @param level 来判断父级试题与当前题是否处于同一分类下
* 并且 父级 题目的 答案不一定是字符串,也有可能是数组
*/
itemNoShow(NFcode, noShow, level) {
if (level && NFcode && noShow) {
for (let i = 0; i < this.test.length; i++) {
const item = this.test[i];
for (let j = 0; j < item.length; j++) {
const jtem = item[j];
if (jtem.code === NFcode) {
return this.judgeType(jtem.value, noShow);
} else if (i === this.test.length - 1 && j === item.length) {
return false;
}
}
}
} else {
return true;
}
},
// , true
// false
judgeType(Fvalue, value) {
if (Array.isArray(Fvalue)) {
for (var i = 0; i < Fvalue.length; i++) {
if (Fvalue[i] === value) {
return false;
} else if (i === Fvalue.length - 1) {
return true;
}
}
} else {
return Fvalue !== value;
}
},
/**
* 修改输入框内容
* 先获取到 this.test 数组props接收的值不能在当前界面修改,所以用将list的值赋值给了 test ,渲染界面也是用的 test
* 通过 index 修改掉 test 数组后,存储答案给服务端
*/
changeIpt(e, code, index, itemIndex) {
this.Rerender(e, index, itemIndex);
this.setAnswer(code, e);
},
/**
* 修改单选框内容
* 和输入框操作一样
*/
changeRadio(e, code, index, itemIndex) {
this.Rerender(e, index, itemIndex);
// if (this.canChange) {
// this.$emit('getCollaoseHeight', this.testIndex);
// }
this.setAnswer(code, e);
},
// ,
changeYWBRadio(e, code, index, itemIndex) {
let Arr = [...this.test];
Arr[index][itemIndex].ywbValue = e;
this.test = [...Arr];
this.setAnswer(code, e);
},
// ,test,
Rerender(value, index, itemIndex) {
let Arr = [...this.test];
Arr[index][itemIndex].value = value;
console.log('Arr[index][itemIndex].value: ', Arr[index][itemIndex].value);
this.test = [...Arr];
},
//
changeRadioScore(e, code, index, itemIndex, radioIndex, unit, min, max) {
let num = e;
if (unit && max) {
if (num || num - 0 === 0) {
if (num < min) {
// this.$message.warning('' + min);
this.$refs.uToast.show({
title: '最低数值为:' + min,
type: 'warning',
});
num = min;
} else if (num > max) {
// this.$message.warning('' + max);
this.$refs.uToast.show({
title: '最高数值为:' + max,
type: 'warning',
});
num = max;
}
}
}
let Arr = [...this.test];
Arr[index][itemIndex].itemList[radioIndex].value = num;
this.test = [...Arr];
this.setAnswer(code, num);
},
/**
* 修改多选框内容
* 因为多选的类型有分成了几种特殊类型
* 所以需要判断某些参数是否存在
*/
changeCheck(e, code, index, itemIndex, checkIndex, other) {
let val = [...e];
if (!checkIndex && checkIndex !== 0) {
let Arr = [...this.test];
const answerList = Arr[index][itemIndex]
val = [];
for(let i = 0; i < Arr[index][itemIndex].itemList.length; i++) {
if(answerList.itemIsChecked[i].isChecked) {
val.push(Arr[index][itemIndex].itemList[i])
}
}
// if (other && e.length) {
// for (let i = 0; i < e.length; i++) {
// if (e[i] === other) {
// val = [other];
// }
// }
// }
Arr[index][itemIndex].value = [...val];
this.Rerender(val, index, itemIndex);
} else {
let Arr = [...this.test];
Arr[index][itemIndex].checkList[checkIndex].value = val;
this.test = [...Arr];
}
const codeAndAnswerList = [
{
questionCode: code,
answer: val,
},
];
const setParams = {
codeAndAnswerList,
firstAidId: this.firstAidId,
};
uni.$u.api.setRecord(setParams);
},
//
isDisabled(check, value, other) {
let status = false;
if (value.length && other) {
for (let i = 0; i < value.length; i++) {
if (value[i] && value[i] === other) {
status = true;
}
}
}
if (check === other) {
return false;
} else {
return status;
}
},
//
getCheckIsCheck(list, value) {
let status = true;
for (let key in list) {
if (list[key] === value) {
status = true;
}
}
return status;
},
//
changeOther(e, code, index, itemIndex) {
let Arr = [...this.test];
Arr[index][itemIndex].iptValue = e;
this.test = [...Arr];
this.setAnswer(code, e);
},
//
changeCheckIpt(e, code, index, listIndex, checkIndex) {
let Arr = [...this.test];
Arr[index][listIndex].checkList[checkIndex].iptValue = e;
this.test = [...Arr];
this.setAnswer(code, e);
},
//
async openTimeSelect(title, code, index, listIndex, time) {
this.timeValue = time ? time : 0;
this.title = title;
this.timeIndex = index;
this.timeItemIndex = listIndex;
this.timeCode = code;
this.show = true;
if (code === 'YJJL-CTendTime') {
const codeList = ['ZQTH-SJ'];
const param = {
codeList,
firstAidId: this.firstAidId,
};
const data = await this.$u.api.getRecord(param);
this.ZQTHSJ = data.record['ZQTH-SJ'] && data.record['ZQTH-SJ'].length ? data.record['ZQTH-SJ'][0] : null;
}
},
//
chooseTime(time) {
const timeValue = this.$moment(`${time.year}-${time.month}-${time.day} ${time.hour}:${time.minute}:00`).valueOf();
if (this.timeCode === 'YJJL-CTendTime' && this.ZQTHSJ && timeValue - 0 < this.ZQTHSJ - 0) {
// this.$message.error('CT,');
this.$refs.uToast.show({
title: 'CT完成时间不能晚于签署知情同意书时间,请重新选择',
type: 'warning',
});
return;
}
this.Rerender(timeValue, this.timeIndex, this.timeItemIndex);
this.setAnswer(this.timeCode, timeValue);
this.show = false;
},
//
openDropDown(title, list, code, index, itemIndex, value) {
this.dropTitle = title;
this.dropList = list;
this.dropCode = code;
this.dropIndex = index;
this.dropItemIndex = itemIndex;
this.dValue = value;
this.showDrop = true;
},
//
chooseSelector(e) {
this.Rerender(this.dropList[e], this.dropIndex, this.dropItemIndex);
this.setAnswer(this.dropCode, this.dropList[e]);
},
/**
* 修改数字输入框,存在最大最小值
* 小于最小值,则存储最小值
* 大于最大值,则存储最大值
* 否则存储当前拿到的值
*/
changeNum(e, min, max, code, index, itemIndex) {
let num = 0;
if (e || e - 0 === 0) {
if (e < min) {
this.numIndex = index;
this.numItemIndex = itemIndex;
this.exceed = 'min';
num = min;
} else if (e > max) {
this.numIndex = index;
this.numItemIndex = itemIndex;
this.exceed = 'max';
num = max;
} else {
this.numIndex = null;
this.numItemIndex = null;
this.exceed = '';
num = e;
}
}
this.Rerender(num, index, itemIndex);
},
// ,,/
inputNumBlur(e, code, min, max, index, itemIndex) {
this.changeNum(e, min, max, code, index, itemIndex)
this.numIndex = null;
this.numItemIndex = null;
this.exceed = '';
if (code) {
if (code === 'RYPG-systolicPressure') {
//
const maxNum = this.getPressure(1); //
if (e < maxNum && maxNum) {
// this.$message.error(',');
this.$refs.uToast.show({
title: '收缩压必须大于舒张压,请重新填写',
type: 'warning',
});
return;
}
} else if (code === 'RYPG-diastolicPressure') {
//
const minNum = this.getPressure(0); //
if (e > minNum && minNum) {
// this.$message.error(',');
this.$refs.uToast.show({
title: '舒张压必须小于收缩压,请重新填写',
type: 'warning',
});
return;
}
}
this.setAnswer(code, e);
}
},
// / 0:,1:
getPressure(type) {
const { list } = this;
let num = 0;
for (let i = 0; i < list.length; i++) {
const item = list[i];
for (let k = 0; k < item.length; k++) {
const obj = item[k];
if ((obj.code === 'RYPG-systolicPressure' && type === 0) || (obj.code === 'RYPG-diastolicPressure' && type === 1)) {
num = obj.value - 0;
return num;
}
}
}
},
//
changeScroeNum(e, min, max, code, index, itemIndex, radioIndex) {
let num = 0;
if (e || e - 0 === 0) {
if (e < min) {
num = min;
} else if (e > max) {
num = max;
} else {
num = e;
}
}
let Arr = [...this.test];
Arr[index][itemIndex].listItem[radioIndex].value = num;
this.test = [...Arr];
this.setAnswer(code, num);
},
// ,
iptChangeRadio(value, code, index, itemIndex) {
this.Rerender(value, index, itemIndex);
this.setAnswer(code, value);
},
//
setAnswer(questionCode, value) {
const params = {
codeAndAnswerList: [
{
questionCode,
answer: [value],
},
],
firstAidId: this.firstAidId,
};
uni.$u.api.setRecord(params);
},
},
watch: {
list: {
handler() {
this.test = [...this.list];
},
deep: true,
},
},
// --
mounted() {
const that = this
this.$nextTick(()=> {
that.changeHeigt();
})
},
created() {
this.test = [...this.list];
},
// --
beforeUpdate() {},
// --
updated() {},
// --()
activated() {},
// --()
deactivated() {},
// --
beforeDestroy() {},
};
</script>
<style scoped>
/deep/.u-radio__label {
margin-left: 0 !important;
margin-right: 0 !important;
}
.putong-title {
margin-left: 24rpx;
font-size: 32rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.ipt-radio view {
height: 33px;
line-height: 33px;
}
.list-box {
border-radius: 4px;
overflow: hidden;
box-sizing: border-box;
margin: 0;
padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
line-height: 1.5;
list-style: none;
font-feature-settings: 'tnum';
position: relative;
}
.list-item {
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 24rpx 0;
border-bottom: 1px solid #eee;
}
</style>

188
src/components/Test/Test.vue

@ -1,7 +1,7 @@
<template> <template>
<div class="test"> <div class="test">
<div bordered class="list-box" v-for="(item, index) in test" :key="index"> <div bordered class="list-box" v-for="(listItem, listIndex) in test" :key="listIndex">
<template v-for="(listItem, listIndex) in item"> <!-- <template v-for="(listItem, listIndex) in item"> -->
<template v-if="listItem.code === 'ZQTH-SJ'"> <template v-if="listItem.code === 'ZQTH-SJ'">
<Talk :key="listIndex" @changeHeigt="changeHeigt" /> <Talk :key="listIndex" @changeHeigt="changeHeigt" />
</template> </template>
@ -10,23 +10,23 @@
class="bg-white list-item" class="bg-white list-item"
:key="listIndex" :key="listIndex"
v-if=" v-if="
itemIsShow(listItem.Fcode, listItem.isShow, listItem.level) && itemNoShow(listItem.NFcode, listItem.noShow, listItem.level) itemIsShow(listItem.relevanceQuestionCode, listItem.relevanceShowValue)
" "
> >
<div class="w-full flex flex-nowrap justify-between items-center"> <div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.title" style="font-size: 16px"> <div class="flex items-center" v-if="listItem.content" style="font-size: 16px">
<!-- {{ listItem.title }} <!-- {{ listItem.title }}
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> --> <span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> -->
<div class="flex items-center" v-if="listItem.type !== -1"> <div class="flex items-center" v-if="listItem.type !== -1">
<view class="putong-title">{{ listItem.title }}</view> <view class="putong-title">{{ listItem.content }}</view>
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> <span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div> </div>
<div class="flex items-center" v-else> <div class="flex items-center" v-else>
<view class="shu"></view> <view class="shu"></view>
<view class="shu-title">{{ listItem.title }}</view> <view class="shu-title">{{ listItem.content }}</view>
</div> </div>
</div> </div>
<div class="flex flex-1 justify-end" :style="{marginLeft: listItem.title ? '' : '24rpx'}"> <div class="flex flex-1 justify-end" :style="{marginLeft: listItem.content ? '' : '24rpx'}">
<!-- 自动计算 --> <!-- 自动计算 -->
<span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)"> <span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)">
{{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }} {{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }}
@ -39,19 +39,19 @@
style="width: 200rpx" style="width: 200rpx"
placeholder="请输入" placeholder="请输入"
input-align="right" input-align="right"
:value="listItem.value" :value="listItem.answer[0]"
@bulr="changeIpt($event, listItem.code, index, listIndex)" @blur="changeIpt($event, listItem.code, listIndex)"
/> />
</template> </template>
<!-- 单选 --> <!-- 单选 -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 2" style="margin-right: -24rpx"> <u-radio-group :value="listItem.answer[0]" v-else-if="listItem.type === 2" style="margin-right: -24rpx">
<u-radio <u-radio
@change="changeRadio($event, listItem.code, index, listIndex)" @change="changeRadio($event, listItem.code, listIndex)"
v-for="radioValue in listItem.itemList" v-for="radioValue in listItem.optionList"
:key="radioValue" :key="radioValue.optionContent"
:name="radioValue" :name="radioValue.optionContent"
> >
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span> <span :style="{ color: listItem.answer[0] === radioValue.optionContent ? '#1890ff' : '' }">{{ radioValue.optionContent }}</span>
</u-radio> </u-radio>
</u-radio-group> </u-radio-group>
<!-- 单选(竖向排列) --> <!-- 单选(竖向排列) -->
@ -306,14 +306,25 @@
<!-- 时间选择 --> <!-- 时间选择 -->
<div <div
v-else-if="listItem.type === 4" v-else-if="listItem.type === 4"
@click="openTimeSelect(listItem.title, listItem.code, index, listIndex, listItem.value)" @click="openTimeSelect(listItem.content, listItem.code, listIndex, listItem.answer[0])"
class="flex items-center" class="flex items-center"
> >
<span class="mr-3" v-if="listItem.value"> <span class="mr-3" v-if="listItem.value">
{{ $moment(+listItem.value).format('YYYY-MM-DD HH:mm') }} {{ $moment(+listItem.answer[0]).format('YYYY-MM-DD HH:mm') }}
</span>
<span class="mr-3 gray-text" v-else>请选择时间</span>
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div>
<!-- 日期选择 -->
<div
v-else-if="listItem.type === 41"
@click="openTimeSelect1(listItem.content, listItem.code, listIndex, listItem.answer[0])"
class="flex items-center"
>
<span class="mr-3" v-if="listItem.answer[0]">
{{ $moment(+listItem.answer[0]).format('YYYY-MM-DD') }}
</span> </span>
<span class="mr-3 gray-text" v-else>请选择时间</span> <span class="mr-3 gray-text" v-else>请选择时间</span>
<!-- <img src="@/static/icon/time.png" style="height: 20px" /> -->
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon> <u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div> </div>
<!-- 展开底部下拉框 --> <!-- 展开底部下拉框 -->
@ -321,9 +332,9 @@
v-else-if="listItem.type === 5" v-else-if="listItem.type === 5"
style="min-width: 160px; width: auto; justify-content: flex-end; height: 30px" style="min-width: 160px; width: auto; justify-content: flex-end; height: 30px"
class="flex items-center" class="flex items-center"
@click="openDropDown(listItem.title, listItem.itemList, listItem.code, index, listIndex, listItem.value)" @click="openDropDown(listItem.content, listItem.optionList, listItem.code, listIndex, listItem.answer[0])"
> >
<span style="margin-right: 10px;color: #bbb" v-if="listItem.value">{{ listItem.value }}</span> <span style="margin-right: 10px;color: #bbb" v-if="listItem.answer.length">{{ listItem.answer[0] }}</span>
<span style="margin-right: 10px;color: #bbb" v-else>请选择</span> <span style="margin-right: 10px;color: #bbb" v-else>请选择</span>
<!-- <img src="@/static/icon/right.png" style="height: 20px" /> --> <!-- <img src="@/static/icon/right.png" style="height: 20px" /> -->
<u-icon name="arrow-right" color="#70798C" size="28"></u-icon> <u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
@ -385,9 +396,10 @@
</div> </div>
</div> </div>
</template> </template>
</template> <!-- </template> -->
</div> </div>
<u-picker mode="time" v-model="show" :title="title" :params="timeSelectparams" @confirm="chooseTime"></u-picker> <u-picker mode="time" v-model="show" :title="title" :params="timeSelectparams" @confirm="chooseTime"></u-picker>
<u-picker mode="time" v-model="dateShow" :title="title" :params="timeSelectparams1" @confirm="chooseTime"></u-picker>
<u-picker mode="selector" v-model="showDrop" :range="dropList" :default-selector="[0]" @confirm="chooseSelector"></u-picker> <u-picker mode="selector" v-model="showDrop" :range="dropList" :default-selector="[0]" @confirm="chooseSelector"></u-picker>
<u-toast ref="uToast" /> <u-toast ref="uToast" />
</div> </div>
@ -433,6 +445,7 @@ export default {
timeItemIndex: 0, // index timeItemIndex: 0, // index
timeCode: '', // code timeCode: '', // code
show: false, // show: false, //
dateShow: false, //
ZQTHSJ: null, // ZQTHSJ: null, //
timeSelectparams: { timeSelectparams: {
// //
@ -443,6 +456,15 @@ export default {
minute: true, minute: true,
second: false, second: false,
}, },
timeSelectparams1: {
//
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false,
},
dropTitle: '', dropTitle: '',
dropList: [], dropList: [],
dropCode: '', dropCode: '',
@ -518,63 +540,20 @@ export default {
* 如果 Fcode isShow 都存在,而且 (父级code存在且父级code的value和isShow值相等) 则返回ture * 如果 Fcode isShow 都存在,而且 (父级code存在且父级code的value和isShow值相等) 则返回ture
* 否则返回false * 否则返回false
*/ */
itemIsShow(code, isShow, level) { itemIsShow(code, isShow) {
if (!level) {
if (code && isShow) { if (code && isShow) {
for (let i = 0; i < this.test.length; i++) { for (let i = 0; i < this.test.length; i++) {
const item = this.test[i]; const item = this.test[i];
if (item) { // if (item) {
for (let j = 0; j < item.length; j++) { // for (let j = 0; j < item.length; j++) {
const jtem = item[j]; // const jtem = item[j];
if (jtem.code === code && jtem.value === isShow) { if (item.code === code && item.answer[0] === isShow) {
return true;
} else if (i === this.test.length - 1 && j === item.length) {
return false;
}
}
}
}
} else {
return true; return true;
} } else if (i === this.test.length - 1) {
} else {
if (this.answerList && this.answerList[code]) {
const value = this.answerList[code];
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) {
if (value[i] === isShow) {
return true;
} else if (i === value.length - 1) {
return false; return false;
} }
} // }
} else { // }.
return value === isShow;
}
} else {
return true;
}
}
},
/**
* 判断当前试题是否显示
* 不是根据父级试题选了哪一项而显示,而是根据父级试题没选哪一项而显示
* 比如 选了 '死亡',不能再出现'出院带药'等试题,选了其他选项则可以出现
* 需要根据 @param level 来判断父级试题与当前题是否处于同一分类下
* 并且 父级 题目的 答案不一定是字符串,也有可能是数组
*/
itemNoShow(NFcode, noShow, level) {
if (level && NFcode && noShow) {
for (let i = 0; i < this.test.length; i++) {
const item = this.test[i];
for (let j = 0; j < item.length; j++) {
const jtem = item[j];
if (jtem.code === NFcode) {
return this.judgeType(jtem.value, noShow);
} else if (i === this.test.length - 1 && j === item.length) {
return false;
}
}
} }
} else { } else {
return true; return true;
@ -600,19 +579,17 @@ export default {
* 先获取到 this.test 数组props接收的值不能在当前界面修改,所以用将list的值赋值给了 test ,渲染界面也是用的 test * 先获取到 this.test 数组props接收的值不能在当前界面修改,所以用将list的值赋值给了 test ,渲染界面也是用的 test
* 通过 index 修改掉 test 数组后,存储答案给服务端 * 通过 index 修改掉 test 数组后,存储答案给服务端
*/ */
changeIpt(e, code, index, itemIndex) { changeIpt(e, code, index) {
this.Rerender(e, index, itemIndex); console.log('e, code, index: ', e, code, index);
// this.Rerender(e, index, itemIndex);
this.setAnswer(code, e); this.setAnswer(code, e);
}, },
/** /**
* 修改单选框内容 * 修改单选框内容
* 和输入框操作一样 * 和输入框操作一样
*/ */
changeRadio(e, code, index, itemIndex) { changeRadio(e, code, index) {
this.Rerender(e, index, itemIndex); this.Rerender([e], index);
// if (this.canChange) {
// this.$emit('getCollaoseHeight', this.testIndex);
// }
this.setAnswer(code, e); this.setAnswer(code, e);
}, },
// , // ,
@ -623,10 +600,9 @@ export default {
this.setAnswer(code, e); this.setAnswer(code, e);
}, },
// ,test, // ,test,
Rerender(value, index, itemIndex) { Rerender(value, index) {
let Arr = [...this.test]; let Arr = [...this.test];
Arr[index][itemIndex].value = value; Arr[index].answer = [...value];
console.log('Arr[index][itemIndex].value: ', Arr[index][itemIndex].value);
this.test = [...Arr]; this.test = [...Arr];
}, },
// //
@ -739,10 +715,9 @@ export default {
this.setAnswer(code, e); this.setAnswer(code, e);
}, },
// //
async openTimeSelect(title, code, index, listIndex, time) { async openTimeSelect(title, code, listIndex, time) {
this.timeValue = time ? time : 0; this.timeValue = time ? time : 0;
this.title = title; this.title = title;
this.timeIndex = index;
this.timeItemIndex = listIndex; this.timeItemIndex = listIndex;
this.timeCode = code; this.timeCode = code;
this.show = true; this.show = true;
@ -756,34 +731,43 @@ export default {
this.ZQTHSJ = data.record['ZQTH-SJ'] && data.record['ZQTH-SJ'].length ? data.record['ZQTH-SJ'][0] : null; this.ZQTHSJ = data.record['ZQTH-SJ'] && data.record['ZQTH-SJ'].length ? data.record['ZQTH-SJ'][0] : null;
} }
}, },
//
async openTimeSelect1(title, code, listIndex, time) {
this.timeValue = time ? time : 0;
this.title = title;
this.timeItemIndex = listIndex;
this.timeCode = code;
this.dateShow = true;
},
// //
chooseTime(time) { chooseTime(time) {
const timeValue = this.$moment(`${time.year}-${time.month}-${time.day} ${time.hour}:${time.minute}:00`).valueOf(); console.log('time: ', time);
if (this.timeCode === 'YJJL-CTendTime' && this.ZQTHSJ && timeValue - 0 < this.ZQTHSJ - 0) { // const timeValue = this.$moment(`${time.year}-${time.month}-${time.day} ${time.hour}:${time.minute}:00`).valueOf();
// this.$message.error('CT,'); // if (this.timeCode === 'YJJL-CTendTime' && this.ZQTHSJ && timeValue - 0 < this.ZQTHSJ - 0) {
this.$refs.uToast.show({ // // this.$message.error('CT,');
title: 'CT完成时间不能晚于签署知情同意书时间,请重新选择', // this.$refs.uToast.show({
type: 'warning', // title: 'CT,',
}); // type: 'warning',
return; // });
} // return;
this.Rerender(timeValue, this.timeIndex, this.timeItemIndex); // }
this.setAnswer(this.timeCode, timeValue); // this.Rerender(timeValue, this.timeIndex, this.timeItemIndex);
this.show = false; // this.setAnswer(this.timeCode, timeValue);
// this.show = false;
}, },
// //
openDropDown(title, list, code, index, itemIndex, value) { openDropDown(title, list, code, itemIndex, value) {
console.log('title, list, code, itemIndex, value: ', title, list, code, itemIndex, value);
this.dropTitle = title; this.dropTitle = title;
this.dropList = list; this.dropList = list.map(item=> {return item.optionContent});
this.dropCode = code; this.dropCode = code;
this.dropIndex = index; this.dropIndex = itemIndex;
this.dropItemIndex = itemIndex;
this.dValue = value; this.dValue = value;
this.showDrop = true; this.showDrop = true;
}, },
// //
chooseSelector(e) { chooseSelector(e) {
this.Rerender(this.dropList[e], this.dropIndex, this.dropItemIndex); this.Rerender([this.dropList[e]], this.dropIndex);
this.setAnswer(this.dropCode, this.dropList[e]); this.setAnswer(this.dropCode, this.dropList[e]);
}, },
/** /**
@ -902,6 +886,7 @@ export default {
list: { list: {
handler() { handler() {
this.test = [...this.list]; this.test = [...this.list];
console.log('this.test: ', this.test);
}, },
deep: true, deep: true,
}, },
@ -916,6 +901,7 @@ export default {
}, },
created() { created() {
this.test = [...this.list]; this.test = [...this.list];
console.log('this.test: ', this.test);
}, },
// -- // --
beforeUpdate() {}, beforeUpdate() {},

43
src/pages/MoreCar/detail.vue

@ -5,46 +5,53 @@
class="car-box bor-left-lv" class="car-box bor-left-lv"
v-if="car" v-if="car"
:class="{ :class="{
'bor-left-lv': car.carStatus === 0, 'bor-left-lv': car.carStatus === 1,
'bor-left-zhan': car.carStatus === 1, 'bor-left-zhan': car.carStatus === 0 || car.carStatus === 3,
'bor-left-xian': car.carStatus === 2, 'bor-left-xian': car.carStatus === 2,
'bor-left-dian': car.carStatus === 3,
'bor-left-li': car.carStatus === 4,
}" }"
@click="openDetail" @click="openDetail"
> >
<!-- 'bor-left-dian': car.carStatus === 3,
'bor-left-li': car.carStatus === 4, -->
<view class="car-title flex items-center"> <view class="car-title flex items-center">
<view class="car-no">{{ car.carNo }}</view> <view class="car-no">{{ car.carNo }}</view>
<view style="margin-right: 16rpx; font-size: 32rpx">{{ car.nursesName || '患者姓名' }}</view> <view style="margin-right: 16rpx; font-size: 32rpx">{{
car.nursesName ? car.nursesName : car.carStatus === 3 ? '无病历' : '无名氏'
}}</view>
<view style="margin-right: 16rpx; font-size: 32rpx">{{ car.gender === 0 ? '女' : car.gender === 1 ? '男' : '性别' }}</view> <view style="margin-right: 16rpx; font-size: 32rpx">{{ car.gender === 0 ? '女' : car.gender === 1 ? '男' : '性别' }}</view>
<view>{{ car.age || '年龄' }}</view> <view style="font-size: 32rpx">{{ car.age || '年龄' }}</view>
</view> </view>
<view class="info-box flex items-center"> <view class="info-box flex items-center">
<view class="car-no flex items-center"> <view class="car-no flex items-center">
<img v-if="car.carStatus === 0" src="@/static/news/绿.png" style="width: 60rpx; height: 60rpx" alt="" /> <img v-if="car.carStatus === 1" src="@/static/news/绿.png" style="width: 60rpx; height: 60rpx" alt="" />
<img v-else-if="car.carStatus === 1" src="@/static/news/占.png" style="width: 60rpx; height: 60rpx" alt="" /> <img
v-else-if="car.carStatus === 0 || car.carStatus === 3"
src="@/static/news/占.png"
style="width: 60rpx; height: 60rpx"
alt=""
/>
<img v-else-if="car.carStatus === 2" src="@/static/news/闲.png" style="width: 60rpx; height: 60rpx" alt="" /> <img v-else-if="car.carStatus === 2" src="@/static/news/闲.png" style="width: 60rpx; height: 60rpx" alt="" />
<img v-else-if="car.carStatus === 3" src="@/static/news/电.png" style="width: 60rpx; height: 60rpx" alt="" /> <!-- <img v-else-if="car.carStatus === 3" src="@/static/news/电.png" style="width: 60rpx; height: 60rpx" alt="" />
<img v-else-if="car.carStatus === 4" src="@/static/news/离.png" style="width: 60rpx; height: 60rpx" alt="" /> <img v-else-if="car.carStatus === 4" src="@/static/news/离.png" style="width: 60rpx; height: 60rpx" alt="" /> -->
</view> </view>
<view> <view>
<view class="flex"> <view class="flex">
<view <view
class="bing" class="bing"
:class="{ :class="{
lv: car.carStatus === 0, lv: car.carStatus === 1,
zhan: car.carStatus === 1, zhan: car.carStatus === 0 || car.carStatus === 3,
xian: car.carStatus === 2, xian: car.carStatus === 2,
dian: car.carStatus === 3,
li: car.carStatus === 4,
}" }"
v-for="(medical, mIndex) in car.medicalHistoryList" v-for="(medical, mIndex) in car.medicalHistoryList"
:key="mIndex" :key="mIndex"
> >
<!-- dian: car.carStatus === 3,
li: car.carStatus === 4, -->
{{ medical }} {{ medical }}
</view> </view>
</view> </view>
<view class="id-card">身份证{{ car.idcard }}</view> <view class="id-card">身份证{{ car.idcard || '暂无' }}</view>
</view> </view>
</view> </view>
</view> </view>
@ -125,6 +132,7 @@ export default {
onLoad(options) { onLoad(options) {
console.log('options: ', options); console.log('options: ', options);
this.car = JSON.parse(options.info); this.car = JSON.parse(options.info);
console.log('this.car: ', this.car);
this.getSteps(); this.getSteps();
}, },
// --0 // --0
@ -211,6 +219,11 @@ export default {
.car-no { .car-no {
width: 140rpx; width: 140rpx;
margin-right: 10rpx; margin-right: 10rpx;
overflow: hidden;
text-overflow: ellipsis;
/* display: -webkit-box; */
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
} }
.id-card { .id-card {
font-size: 28rpx; font-size: 28rpx;

33
src/pages/MoreCar/index.vue

@ -12,6 +12,7 @@
> >
</u-tabs> </u-tabs>
</view> </view>
<template v-if="carList.length">
<scroll-view scroll-y style="height: calc(100% - 84rpx); margin-top: 4rpx; padding: 0 16rpx"> <scroll-view scroll-y style="height: calc(100% - 84rpx); margin-top: 4rpx; padding: 0 16rpx">
<div style="height: 1rpx; width: 100%"></div> <div style="height: 1rpx; width: 100%"></div>
<view <view
@ -29,9 +30,11 @@
> >
<view class="title flex items-center"> <view class="title flex items-center">
<view class="car-no">{{ car.carNo }}</view> <view class="car-no">{{ car.carNo }}</view>
<view style="margin-right: 16rpx; font-size: 32rpx">{{ car.nursesName || '患者姓名' }}</view> <view style="margin-right: 16rpx; font-size: 32rpx">{{
car.nursesName ? car.nursesName : car.carStatus === 3 ? '无病历' : '无名氏'
}}</view>
<view style="margin-right: 16rpx; font-size: 32rpx">{{ car.gender === 0 ? '女' : car.gender === 1 ? '男' : '性别' }}</view> <view style="margin-right: 16rpx; font-size: 32rpx">{{ car.gender === 0 ? '女' : car.gender === 1 ? '男' : '性别' }}</view>
<view>{{ car.age || '年龄' }}</view> <view style="font-size: 32rpx">{{ car.age || '年龄' }}</view>
</view> </view>
<view class="info-box flex items-center"> <view class="info-box flex items-center">
<view class="car-no flex items-center"> <view class="car-no flex items-center">
@ -52,11 +55,20 @@
{{ medical }} {{ medical }}
</view> </view>
</view> </view>
<view class="id-card">身份证{{ car.idcard || '' }}</view> <view class="id-card">身份证{{ car.idcard || '暂无' }}</view>
</view> </view>
</view> </view>
<u-icon
name="arrow-right"
class="car-right-icon"
size="50"
color="#70798c"
v-if="(status === 0 || status === 1) && car.carStatus !== 3"
></u-icon>
</view> </view>
</scroll-view> </scroll-view>
</template>
<u-empty v-else src="http://test.tall.wiki/gateway1/carbasics/v4.0/uploads/carlogo.png" text="暂无平车数据"></u-empty>
</div> </div>
</template> </template>
@ -94,12 +106,12 @@ export default {
computed: {}, computed: {},
methods: { methods: {
detailCar(info) { detailCar(info) {
console.log('info: ', info); if ((this.status === 0 || this.status === 1) && info.carStatus !== 3) {
if (this.status === 0 || this.status === 1) {
uni.navigateTo({ url: `/pages/MoreCar/detail?info=${JSON.stringify(info)}` }); uni.navigateTo({ url: `/pages/MoreCar/detail?info=${JSON.stringify(info)}` });
} }
}, },
change(index) { change(index) {
this.carList = [];
this.status = index; this.status = index;
this.getData(); this.getData();
}, },
@ -141,9 +153,19 @@ export default {
</script> </script>
<style scoped> <style scoped>
.car-right-icon {
position: absolute;
right: 32rpx;
top: 69rpx;
}
.car-no { .car-no {
width: 140rpx; width: 140rpx;
margin-right: 10rpx; margin-right: 10rpx;
overflow: hidden;
text-overflow: ellipsis;
/* display: -webkit-box; */
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
} }
.id-card { .id-card {
font-size: 28rpx; font-size: 28rpx;
@ -187,6 +209,7 @@ export default {
overflow: hidden; overflow: hidden;
} }
.car-box { .car-box {
position: relative;
height: 188rpx; height: 188rpx;
width: calc(100% - 64rpx); width: calc(100% - 64rpx);
box-sizing: border-box; box-sizing: border-box;

411
src/pages/inner/inner-old.vue

@ -0,0 +1,411 @@
<template>
<div class="inner" style="padding-top: 42px; padding-bottom: 50rpx">
<Demonstration />
<div class="w-full" v-for="(item, index) in testList" :key="index">
<template v-if="item.testType === 1">
<Test
:testIndex="index"
@getCollaoseHeight="getCollaoseHeight"
:can-change="false"
:answer-list="answerList"
v-if="type"
class="w-full"
:list="item.content"
/>
</template>
<template v-if="item.testType === 2">
<view class="list-item">
<view class="flex items-center">
<view class="shu"></view>
<view class="shu-title">{{ item.testTitle }}</view>
</view>
</view>
<!-- <u-collapse
:head-style="headerStyle"
:item-style="itemStyle"
class="mb-2 w-full"
v-if="item.testType === 2"
:bordered="false"
expand-icon-position="right"
:ref="'collapseView' + index"
> -->
<!-- <template #expandIcon="props">
<u-icon type="down" :rotate="props.isActive ? 0 : -180" />
</template> -->
<!-- <u-collapse-item :open="true" class="w-full" :title="item.testTitle" :style="customStyle"> -->
<Test
:testIndex="index"
@getCollaoseHeight="getCollaoseHeight"
:can-change="true"
:answer-list="answerList"
v-if="type"
class="w-full"
:list="item.content"
/>
<!-- </u-collapse-item>
</u-collapse> -->
</template>
</div>
<div class="ocr-open-box" @click="openOcr">OCR</div>
<u-modal v-model="showBasic" title="确定选择后将提交识别到的内容" :show-cancel-button="true" @confirm="submitBasicData">
<view class="slot-content">
<scroll-view scroll-y style="height: 750rpx">
<div v-for="(item, index) in basicList" :key="index" class="modal-content flex justify-between items-center">
<u-checkbox v-model="item.checked" :name="item.questionCode">
<div>{{ item.name }}</div>
</u-checkbox>
<div class="flex items-center fz-16">{{ item.answer }}</div>
</div>
</scroll-view>
</view>
</u-modal>
</div>
</template>
<script>
import { mapState } from 'vuex';
import Mixin from './mixin';
import cloneDeep from 'lodash/cloneDeep';
import Demonstration from 'components/Demonstration/Demonstration';
export default {
components: { Demonstration },
mixins: [Mixin],
data: () => ({
testList: [],
customStyle: 'background: #fff;border-radius: 4px;border: 0;overflow: hidden',
headerStyle: {
height: '54px',
lineHeight: '30px',
fontSize: '18px',
padding: '0 16px',
/* color: #1890ff; */
color: 'rgba(0, 0, 0, 0.65)',
fontWeight: 'bold',
backgroundColor: '#fff',
},
itemStyle: { marginBottom: '8px' },
type: 'RYPG',
afterStr: '主要治疗',
beforeStr: '基本信息',
answerList: {},
showBasic: false,
codeAndTitle: [],
basicList: [],
}),
computed: { ...mapState('carbasics', ['InputCode', 'firstAidId', 'isRefresh', 'basicData', 'detailValueType']) },
methods: {
// ocr
openOcr() {
uni.navigateTo({ url: '/pages/camera/camera' });
},
// code,
async getAnswer() {
const codeList = [];
for (let key in this.codeValue) {
if (key === this.type) {
for (let value in this.codeValue[key]) {
codeList.push(value);
}
}
}
const param = {
codeList,
firstAidId: this.firstAidId,
};
const answer = await this.$u.api.getRecord(param);
this.answerList = answer.record;
this.reassign(answer.record);
},
// ()
reassign(recordList) {
for (let key in this.codeValue[this.type]) {
for (let value in recordList) {
if (key === value) {
if (Array.isArray(this.codeValue[this.type][key])) {
this.codeValue[this.type][key] = recordList[value];
break;
} else {
this.codeValue[this.type][key] = recordList[value][0];
break;
}
}
}
}
// list
this.reassignList();
// checkedList,,list,list
this.changeCheckStatus();
// codetitle
this.getAllCodeAndTitle();
// type
this.getTest();
},
// ,ture
changeCheckStatus() {
for (let i = 0; i < this.list.length; i++) {
const item = this.list[i];
if (item.testList.length) {
for (let j = 0; j < item.testList.length; j++) {
const itemJ = item.testList[j];
if (itemJ.content.length) {
for (let k = 0; k < itemJ.content.length; k++) {
const itemK = itemJ.content[k];
if (itemK.length) {
for (let m = 0; m < itemK.length; m++) {
if (Array.isArray(itemK[m].value)) {
for (let n = 0; n < itemK[m].itemList.length; n++) {
const itemN = itemK[m].itemList[n];
itemK[m].itemIsChecked[n].isChecked = this.getCheckedStatus(itemN, itemK[m].value);
}
}
}
}
}
}
}
}
}
},
//
getCheckedStatus(item, valueList) {
for (let i = 0; i < valueList.length; i++) {
if (valueList[i] === item) {
return true;
} else if (i === valueList.length - 0) {
return false;
}
}
},
//
// codeListcode value
// codeList,getTest
getTest() {
for (let i = 0; i < this.list.length; i++) {
if (this.list[i].name === this.type) {
this.testList = [...this.list[i].testList];
break;
}
}
},
// code
getAllCodeAndTitle() {
let Arr = [];
for (let i = 0; i < this.list.length; i++) {
const item = this.list[i];
if (item.testList.length) {
for (let j = 0; j < item.testList.length; j++) {
const itemJ = item.testList[j];
if (itemJ.content.length) {
for (let k = 0; k < itemJ.content.length; k++) {
const itemK = itemJ.content[k];
if (itemK.length) {
for (let m = 0; m < itemK.length; m++) {
const itemM = itemK[m];
const itemMm = itemK[m - 1];
let obj = null;
if (itemM.code && itemM.title) {
obj = {
code: itemM.code,
title: itemM.title,
};
} else if (itemM.code && !itemM.title) {
obj = {
code: itemM.code,
title: itemMm.title,
};
}
if (obj) {
Arr.push(obj);
}
}
}
}
}
}
}
}
this.codeAndTitle = Arr;
},
// code,title
getNameByCode() {
let Arr = [...this.basicList];
for (let k = 0; k < Arr.length; k++) {
for (let i = 0; i < this.codeAndTitle.length; i++) {
const item = this.codeAndTitle[i];
if (Arr[k].questionCode === item.code) {
Arr[k].name = item.title;
}
}
}
this.basicList = [...Arr];
},
// ,, //
getAnswerByType(obj) {
let answer = obj.answer;
if (typeof (answer - 0) === 'number') {
obj.type === 0; //
answer = this.$moment(answer - 0).format('YYYY-MM-DD HH:mm');
} else if (Array.isArray(answer)) {
let str = '';
for (let i = 0; i < answer.length; i++) {
if (i === answer.length - 0) {
str += answer[i];
} else {
str = str + answer[i] + ',';
}
}
obj.type === 1; //
answer = str;
} else {
obj.type === 2; //
}
obj.answer = answer;
return obj;
},
//
getCollaoseHeight(index) {
const that = this;
//
this.$nextTick(() => {
that.$refs[`collapseView${index}`][0].init();
setTimeout(() => {
that.$refs[`collapseView${index}`][0].init();
}, 200);
});
},
// modal,,
//
async submitBasicData() {
let codeAndAnswerList = [];
for (let i = 0; i < this.basicList.length; i++) {
const item = this.basicList[i];
if (item.checked) {
let obj = {
questionCode: item.questionCode,
answer: this.basicData[i].answer,
};
codeAndAnswerList.push(obj);
}
}
const param = {
codeAndAnswerList,
firstAidId: this.firstAidId,
};
await this.$u.api.setRecord(param);
this.getAnswer();
},
},
watch: {
isRefresh() {
let Arr = [];
const basicData = cloneDeep(this.basicData);
for (let i = 0; i < basicData.length; i++) {
Arr.push(basicData[i]);
}
for (let i = 0; i < Arr.length; i++) {
Arr[i] = this.getAnswerByType(Arr[i]);
}
this.basicList = [...Arr];
this.getNameByCode();
this.showBasic = true;
},
},
// --
onLoad(query) {
if (query.name) {
uni.setNavigationBarTitle({
title: query.name,
});
}
this.type = this.InputCode;
console.log('this.type: ', this.type);
// if (this.type === 'RYPG') {
// this.afterStr = '';
// this.beforeStr = '';
// } else if (this.type === 'SSXG') {
// this.afterStr = '';
// this.beforeStr = '';
// } else if (this.type === 'CYJL') {
// this.afterStr = '';
// this.beforeStr = '';
// }
// this.tips = '...';
this.getAnswer();
},
// --
onReady() {},
// --(not-nvue)
onShow() {},
// --
onHide() {},
// --
onUnload() {},
// --
onPullDownRefresh() {
uni.stopPullDownRefresh();
},
// --
onReachBottom() {},
// --(not-nvue)
/* onPageScroll(event) {}, */
// --
/* onShareAppMessage(options) {}, */
};
</script>
<style scoped>
.list-item {
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 24rpx 0;
margin: 0 32rpx;
border-bottom: 1px solid #eee;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.modal-content {
padding: 16px;
}
.slot-content {
font-size: 28rpx;
color: rgba(0, 0, 0, 0.85);
padding-left: 30rpx;
}
.ocr-open-box {
z-index: 11;
position: fixed;
right: 0;
top: 40%;
height: 40px;
width: 40px;
font-size: 16px;
background: #1890ff;
color: white;
display: flex;
align-items: center;
justify-content: center;
border-radius: 20px 20px 0 20px;
box-shadow: 0 0 4px #1890ff;
}
.inner {
/* background-color: #ededed; */
min-height: 100vh;
}
</style>

53
src/pages/inner/inner.vue

@ -1,8 +1,8 @@
<template> <template>
<div class="inner" style="padding-top: 42px; padding-bottom: 50rpx"> <div class="inner" style="padding-top: 42px; padding-bottom: 50rpx">
<Demonstration /> <Demonstration />
<div class="w-full" v-for="(item, index) in testList" :key="index"> <!-- <div class="w-full" v-for="(item, index) in testList" :key="index"> -->
<template v-if="item.testType === 1"> <!-- <template v-if="item.testType === 1"> -->
<Test <Test
:testIndex="index" :testIndex="index"
@getCollaoseHeight="getCollaoseHeight" @getCollaoseHeight="getCollaoseHeight"
@ -10,29 +10,16 @@
:answer-list="answerList" :answer-list="answerList"
v-if="type" v-if="type"
class="w-full" class="w-full"
:list="item.content" :list="testList"
/> />
</template> <!-- </template> -->
<template v-if="item.testType === 2"> <!-- <template v-if="item.testType === 2">
<view class="list-item"> <view class="list-item">
<view class="flex items-center"> <view class="flex items-center">
<view class="shu"></view> <view class="shu"></view>
<view class="shu-title">{{ item.testTitle }}</view> <view class="shu-title">{{ item.testTitle }}</view>
</view> </view>
</view> </view>
<!-- <u-collapse
:head-style="headerStyle"
:item-style="itemStyle"
class="mb-2 w-full"
v-if="item.testType === 2"
:bordered="false"
expand-icon-position="right"
:ref="'collapseView' + index"
> -->
<!-- <template #expandIcon="props">
<u-icon type="down" :rotate="props.isActive ? 0 : -180" />
</template> -->
<!-- <u-collapse-item :open="true" class="w-full" :title="item.testTitle" :style="customStyle"> -->
<Test <Test
:testIndex="index" :testIndex="index"
@getCollaoseHeight="getCollaoseHeight" @getCollaoseHeight="getCollaoseHeight"
@ -42,10 +29,8 @@
class="w-full" class="w-full"
:list="item.content" :list="item.content"
/> />
<!-- </u-collapse-item> </template> -->
</u-collapse> --> <!-- </div> -->
</template>
</div>
<div class="ocr-open-box" @click="openOcr">OCR</div> <div class="ocr-open-box" @click="openOcr">OCR</div>
<u-modal v-model="showBasic" title="确定选择后将提交识别到的内容" :show-cancel-button="true" @confirm="submitBasicData"> <u-modal v-model="showBasic" title="确定选择后将提交识别到的内容" :show-cancel-button="true" @confirm="submitBasicData">
<view class="slot-content"> <view class="slot-content">
@ -99,6 +84,16 @@ export default {
openOcr() { openOcr() {
uni.navigateTo({ url: '/pages/camera/camera' }); uni.navigateTo({ url: '/pages/camera/camera' });
}, },
async getAllTest() {
try {
const param = { parentCode: this.type };
const res = await this.$u.api.queryQuestionCode(param);
console.log('res: ', res);
this.testList = [...res];
} catch (error) {
console.log('error: ', error);
}
},
// code, // code,
async getAnswer() { async getAnswer() {
const codeList = []; const codeList = [];
@ -321,18 +316,8 @@ export default {
}); });
} }
this.type = this.InputCode; this.type = this.InputCode;
// if (this.type === 'RYPG') { this.getAllTest();
// this.afterStr = ''; // this.getAnswer();
// this.beforeStr = '';
// } else if (this.type === 'SSXG') {
// this.afterStr = '';
// this.beforeStr = '';
// } else if (this.type === 'CYJL') {
// this.afterStr = '';
// this.beforeStr = '';
// }
// this.tips = '...';
this.getAnswer();
}, },
// -- // --
onReady() {}, onReady() {},

50
src/pages/patientLine/patientLine.vue

@ -6,9 +6,9 @@
<view class="title">患者信息</view> <view class="title">患者信息</view>
</view> </view>
<view class="flex items-center patient-info"> <view class="flex items-center patient-info">
<view>{{ patient.name }}</view> <view>{{ patient.name || '' }}</view>
<view class="ml-2">{{ patient.gender === 0 ? '女' : '男' }}</view> <view class="ml-2">{{ patient.gender === 0 ? '女' : patient.gender === 1 ? '男' : '-' }}</view>
<view class="ml-2">{{ patient.age }}</view> <view class="ml-2">{{ patient.age || '-' }}</view>
</view> </view>
</view> </view>
<template v-if="showLine"> <template v-if="showLine">
@ -17,24 +17,16 @@
:key="index" :key="index"
class="flex flex-row item-box mb-2" class="flex flex-row item-box mb-2"
:class="index < 2 ? (index === 1 ? 'red' : 'green') : 'gray'" :class="index < 2 ? (index === 1 ? 'red' : 'green') : 'gray'"
@click="jump(item.code, item.path, item.name)" @click="jump(item.code, item.content)"
> >
<!-- <div class="flex flex-col items-center mr-1" style="width: 36px">
<img src="./png/播放.png" alt="" style="width: 36px; height: 36px" />
<div class="mt-1 flex-1" style="border-right: 2px solid rgb(209, 213, 219)"></div>
<div v-if="index === innerList.length - 1" class="end-ric mt-2"></div>
</div> -->
<view class="mulu-title"> 目录{{ getText(index + 1) }} </view> <view class="mulu-title"> 目录{{ getText(index + 1) }} </view>
<div class="flex flex-1 flex-col"> <div class="flex flex-1 flex-col">
<!-- <div class="w-full time-box flex items-center">
{{ item.time }}
</div> -->
<div class="flex"> <div class="flex">
<div class="name-box flex justify-between items-center"> <div class="name-box flex justify-between items-center">
<view class="mulu-title" style="font-size: 32rpx">{{ item.name }}</view> <view class="mulu-title" style="font-size: 32rpx">{{ item.content }}</view>
</div> </div>
</div> </div>
<view class="flex"> <!-- <view class="flex">
<view <view
class="flex flex-nowrap items-center justify-center status-con mt-2 mr-1" class="flex flex-nowrap items-center justify-center status-con mt-2 mr-1"
v-for="(tag, tagInd) in item.tags" v-for="(tag, tagInd) in item.tags"
@ -43,7 +35,7 @@
> >
<view>{{ tag }}</view> <view>{{ tag }}</view>
</view> </view>
</view> </view> -->
</div> </div>
<u-icon name="arrow-right" size="28" color="#70798C" /> <u-icon name="arrow-right" size="28" color="#70798C" />
</div> </div>
@ -154,9 +146,19 @@ export default {
} }
this.getData(); this.getData();
this.showLine = true; this.showLine = true;
this.getLine();
}, },
methods: { methods: {
...mapMutations('carbasics', ['setInputCode']), ...mapMutations('carbasics', ['setInputCode']),
async getLine() {
try {
const res = await this.$u.api.queryParentCode();
console.log('res: ', res);
this.innerList = [...res];
} catch (error) {
console.log('error: ', error);
}
},
// //
async getData() { async getData() {
try { try {
@ -168,9 +170,9 @@ export default {
console.log('error: ', error); console.log('error: ', error);
} }
}, },
jump(code, path, name) { jump(code, name) {
this.setInputCode(code ? code : 'RYPG'); this.setInputCode(code ? code : 'RYPG');
uni.navigateTo({ url: `${path}?name=${name}` }); uni.navigateTo({ url: `/pages/inner/inner?name=${name}` });
}, },
getText(index) { getText(index) {
switch (index) { switch (index) {
@ -188,6 +190,20 @@ export default {
return '六'; return '六';
case 7: case 7:
return '七'; return '七';
case 8:
return '八';
case 9:
return '九';
case 10:
return '十';
case 11:
return '十一';
case 12:
return '十二';
case 13:
return '十三';
case 14:
return '十四';
} }
}, },
}, },

BIN
src/static/news/logo-car.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Loading…
Cancel
Save