18 changed files with 708 additions and 80 deletions
@ -1,8 +1,8 @@ |
|||||
VUE_APP_NODE_ENV=development |
VUE_APP_NODE_ENV=development |
||||
VUE_APP_BASE_URL=https://test.tall.wiki |
VUE_APP_BASE_URL=https://www.tall.wiki |
||||
VUE_APP_API_URL=https://test.tall.wiki/gateway |
VUE_APP_API_URL=https://www.tall.wiki/gateway |
||||
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
||||
VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall |
VUE_APP_PROJECT_PATH=https://www.tall.wiki/carBasicTall |
||||
VUE_APP_QUESTION_PATH=https://test.tall.wiki/carbasics |
VUE_APP_QUESTION_PATH=https://www.tall.wiki/carbasics |
||||
VUE_APP_VERSION=v3.1.0 |
VUE_APP_VERSION=v3.1.0 |
||||
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
||||
|
@ -1,8 +1,8 @@ |
|||||
VUE_APP_NODE_ENV=production |
VUE_APP_NODE_ENV=production |
||||
VUE_APP_BASE_URL=https://test.tall.wiki |
VUE_APP_BASE_URL=https://www.tall.wiki |
||||
VUE_APP_API_URL=https://test.tall.wiki/gateway |
VUE_APP_API_URL=https://www.tall.wiki/gateway |
||||
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
||||
VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall |
VUE_APP_PROJECT_PATH=https://www.tall.wiki/carBasicTall |
||||
VUE_APP_QUESTION_PATH=https://test.tall.wiki/carbasics |
VUE_APP_QUESTION_PATH=https://www.tall.wiki/carbasics |
||||
VUE_APP_VERSION=v3.1.0 |
VUE_APP_VERSION=v3.1.0 |
||||
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
||||
|
@ -0,0 +1,90 @@ |
|||||
|
<template> |
||||
|
<view class="volume-box"> |
||||
|
<scroll-view scroll-x style="height: 100%; width: 100%"> |
||||
|
<view class="flex justify-evenly"> |
||||
|
<view |
||||
|
class="flex flex-col items-center justify-center" |
||||
|
style="width: 159rpx; flex-shrink: 0" |
||||
|
v-for="(item, index) in btnList" |
||||
|
:key="index" |
||||
|
@click="jumpV(item.url)" |
||||
|
> |
||||
|
<!-- <img class="volume-img" src="@/static/image.png" alt="" /> --> |
||||
|
<img class="volume-img" :src="item.iconUrl || '@/static/image.png'" alt="" /> |
||||
|
<span class="mt-2" style="color: #40adff">{{ item.name }}</span> |
||||
|
</view> |
||||
|
</view> |
||||
|
</scroll-view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapGetters } from 'vuex'; |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
name: '', |
||||
|
url: '', |
||||
|
btnList: [], |
||||
|
}; |
||||
|
}, |
||||
|
computed: { |
||||
|
...mapState('user', ['user']), |
||||
|
...mapGetters('user', ['userId']), |
||||
|
}, |
||||
|
created() { |
||||
|
this.getInfo(); |
||||
|
}, |
||||
|
methods: { |
||||
|
// 获取按钮信息及跳转路径 |
||||
|
async getInfo() { |
||||
|
if (!this.user) { |
||||
|
setTimeout(() => { |
||||
|
this.getInfo(); |
||||
|
}, 10); |
||||
|
return; |
||||
|
} |
||||
|
const that = this; |
||||
|
const data = await that.$u.api.getQueryButton({}); |
||||
|
this.btnList = data; |
||||
|
console.log('data: ', data); |
||||
|
if (data && data.length) { |
||||
|
that.name = data[0].name; |
||||
|
that.url = data[0].url; |
||||
|
} else if (data && data.name) { |
||||
|
that.name = data.name; |
||||
|
that.url = data.url; |
||||
|
} else if (!data) { |
||||
|
setTimeout(() => { |
||||
|
that.getInfo(); |
||||
|
}, 500); |
||||
|
} |
||||
|
}, |
||||
|
// 跳转到问卷调查 |
||||
|
jumpV(url) { |
||||
|
if (this.user.phone) { |
||||
|
console.log('this.userId: ', this.userId); |
||||
|
debugger; |
||||
|
this.$u.route('pages/questionnaire-webview/questionnaire-webview', { u: this.userId, url: url }); |
||||
|
} else { |
||||
|
// this.$u.route('/pages/get-phone-power/get-phone-power'); |
||||
|
this.$u.route('/pages/phone-bind/phone-bind'); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.volume-img { |
||||
|
height: 100rpx; |
||||
|
width: 100rpx; |
||||
|
/* border-radius: 50%; */ |
||||
|
} |
||||
|
.volume-box { |
||||
|
width: 700rpx; |
||||
|
margin: 25rpx; |
||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.125); |
||||
|
border-radius: 8rpx; |
||||
|
padding: 32rpx; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,120 @@ |
|||||
|
<template> |
||||
|
<view class="volume-box"> |
||||
|
<swiper |
||||
|
class="swiper" |
||||
|
circular |
||||
|
:autoplay="autoplay" |
||||
|
:interval="interval" |
||||
|
:duration="duration" |
||||
|
previous-margin="45rpx" |
||||
|
next-margin="45rpx" |
||||
|
@change="changeCard" |
||||
|
> |
||||
|
<swiper-item v-for="(item, index) in itemList" :key="item.id" @click="openProject(item)"> |
||||
|
<view |
||||
|
class="swiper-item flex items-center justify-center" |
||||
|
:class="['card-item', currentCardIndex === index ? 'card-item-current' : 'card-item-default']" |
||||
|
style="transition: all 0.3s" |
||||
|
>{{ item.name }}</view |
||||
|
> |
||||
|
</swiper-item> |
||||
|
</swiper> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapGetters, mapMutations } from 'vuex'; |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
autoplay: false, |
||||
|
interval: 2000, |
||||
|
duration: 500, |
||||
|
itemList: [], |
||||
|
currentCardIndex: 0, |
||||
|
}; |
||||
|
}, |
||||
|
watch: { |
||||
|
projects(val) { |
||||
|
this.itemList = val; |
||||
|
this.itemList.forEach(item => { |
||||
|
item.showBorder = false; |
||||
|
item.showSubBorder = false; |
||||
|
item.showTopBorder = false; |
||||
|
}); |
||||
|
console.log('this.itemList: ', this.itemList); |
||||
|
}, |
||||
|
}, |
||||
|
computed: { |
||||
|
...mapState('user', ['user']), |
||||
|
...mapState('project', ['projects']), |
||||
|
...mapGetters('user', ['userId']), |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.$nextTick(function () { |
||||
|
this.itemList = this.projects; |
||||
|
this.itemList.forEach(item => { |
||||
|
item.showBorder = false; |
||||
|
item.showSubBorder = false; |
||||
|
item.showTopBorder = false; |
||||
|
}); |
||||
|
}); |
||||
|
}, |
||||
|
methods: { |
||||
|
...mapMutations('carbasics', ['setGlobalData']), |
||||
|
...mapMutations('task', ['setPermanents', 'setDailyTasks']), |
||||
|
changeCard(e) { |
||||
|
this.currentCardIndex = e.detail.current; |
||||
|
}, |
||||
|
// 打开项目详情 |
||||
|
openProject(project) { |
||||
|
const { name, id, url, templateCode } = project; |
||||
|
url && (uni.$t.domain = url); |
||||
|
if (templateCode === 'carbasics') { |
||||
|
// 跳转项目时,清空当前的插件缓存 |
||||
|
this.setGlobalData({}); |
||||
|
this.setPermanents(null); |
||||
|
this.setDailyTasks(null); |
||||
|
uni.navigateTo({ url: `/pages/task-page/task-page?u=${this.userId}&p=${id}&pname=${name}&url=${encodeURIComponent(url)}` }); |
||||
|
} else { |
||||
|
this.$u.route('pages/project-webview/project-webview', { |
||||
|
u: this.userId, |
||||
|
p: id, |
||||
|
pname: name, |
||||
|
url: encodeURIComponent(url), |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.card-item-default { |
||||
|
transform: scale(0.96, 0.96) translateY(8.5rpx); |
||||
|
} |
||||
|
.swiper { |
||||
|
height: 240rpx; |
||||
|
/* background: rgba(255, 255, 255, 0); */ |
||||
|
} |
||||
|
.swiper-item { |
||||
|
font-size: 32rpx; |
||||
|
color: #fff; |
||||
|
font-weight: bold; |
||||
|
border-radius: 8rpx; |
||||
|
height: 100%; |
||||
|
width: 100%; |
||||
|
background: url('https://www.tall.wiki/gateway/carbasics/v4.0/uploads/project.png'); |
||||
|
background-size: 100% 100%; |
||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); |
||||
|
} |
||||
|
.volume-box { |
||||
|
width: 700rpx; |
||||
|
height: 120px; |
||||
|
margin: 0 25rpx 25rpx 25rpx; |
||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); |
||||
|
border-radius: 8rpx; |
||||
|
/* overflow: hidden; */ |
||||
|
/* background: #f9fafb; */ |
||||
|
/* padding: 32rpx; */ |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,197 @@ |
|||||
|
<template> |
||||
|
<div class="flex flex-col"> |
||||
|
<div class="mt-2" style="position: relative"> |
||||
|
<div class="w-full"> |
||||
|
<p class="title-p title-one">山西省急性缺血性脑卒中数据汇总表</p> |
||||
|
<p class="title-p title-two">2021年7月-12月收治急性脑梗死患者相关数据</p> |
||||
|
</div> |
||||
|
<!-- <div class="flex items-center justify-center mr-2" style="position: absolute; right: 2px; top: 12px"> |
||||
|
<a href="tel:13485387689" id="tel-a" style="display: none"> </a> |
||||
|
</div> --> |
||||
|
</div> |
||||
|
<div class="p-4"> |
||||
|
<u-form :model="form" ref="uForm" label-width="150"> |
||||
|
<u-form-item label="市/县" class="flex"> |
||||
|
<u-input v-model="form.county" @click="show = true" placeholder="请选择市/县" /> |
||||
|
</u-form-item> |
||||
|
<u-form-item label="医院名称"><u-input v-model="form.intro" /></u-form-item> |
||||
|
<u-form-item label="性别"><u-input v-model="form.sex" type="select" /></u-form-item> |
||||
|
<u-form-item label="水果"> |
||||
|
<u-checkbox-group> |
||||
|
<u-checkbox v-model="item.checked" v-for="(item, index) in checkboxList" :key="index" :name="item.name"> |
||||
|
{{ item.name }} |
||||
|
</u-checkbox> |
||||
|
</u-checkbox-group> |
||||
|
</u-form-item> |
||||
|
<u-form-item label="味道"> |
||||
|
<u-radio-group v-model="radio"> |
||||
|
<u-radio v-for="(item, index) in radioList" :key="index" :name="item.name" :disabled="item.disabled"> |
||||
|
{{ item.name }} |
||||
|
</u-radio> |
||||
|
</u-radio-group> |
||||
|
</u-form-item> |
||||
|
<u-form-item label="开关"><u-switch slot="right" v-model="switchVal"></u-switch></u-form-item> |
||||
|
</u-form> |
||||
|
</div> |
||||
|
<u-select |
||||
|
v-model="show" |
||||
|
value-name="id" |
||||
|
label-name="name" |
||||
|
child-name="child" |
||||
|
mode="mutil-column-auto" |
||||
|
:list="list" |
||||
|
@confirm="chooseArea" |
||||
|
></u-select> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import Mixin from './mixin'; |
||||
|
import { mapState } from 'vuex'; |
||||
|
export default { |
||||
|
mixins: [Mixin], |
||||
|
data() { |
||||
|
return { |
||||
|
form: { |
||||
|
county: '', |
||||
|
countyId: '', |
||||
|
intro: '', |
||||
|
sex: '', |
||||
|
}, |
||||
|
show: false, |
||||
|
list: [], |
||||
|
isSearch: false, |
||||
|
hosList: [], |
||||
|
checkboxList: [ |
||||
|
{ |
||||
|
name: '苹果', |
||||
|
checked: false, |
||||
|
disabled: false, |
||||
|
}, |
||||
|
{ |
||||
|
name: '雪梨', |
||||
|
checked: false, |
||||
|
disabled: false, |
||||
|
}, |
||||
|
{ |
||||
|
name: '柠檬', |
||||
|
checked: false, |
||||
|
disabled: false, |
||||
|
}, |
||||
|
], |
||||
|
radioList: [ |
||||
|
{ |
||||
|
name: '鲜甜', |
||||
|
disabled: false, |
||||
|
}, |
||||
|
{ |
||||
|
name: '麻辣', |
||||
|
disabled: false, |
||||
|
}, |
||||
|
], |
||||
|
radio: '', |
||||
|
switchVal: false, |
||||
|
}; |
||||
|
}, |
||||
|
computed: mapState('user', ['user']), |
||||
|
created() { |
||||
|
this.getList(); |
||||
|
// this.getPosition(); |
||||
|
this.getArea(); |
||||
|
this.getHosName(); |
||||
|
}, |
||||
|
methods: { |
||||
|
// 选择了地区 |
||||
|
chooseArea(e) { |
||||
|
let str = ''; |
||||
|
let ids = ''; |
||||
|
for (let i = 0; i < e.length; i++) { |
||||
|
str += e[i].label + (i < e.length - 1 ? '>' : ''); |
||||
|
ids += e[i].value + (i < e.length - 1 ? ',' : ''); |
||||
|
} |
||||
|
this.form.county = str; |
||||
|
this.form.countyId = ids; |
||||
|
}, |
||||
|
async getHosName() { |
||||
|
try { |
||||
|
const params = {}; |
||||
|
const res = await this.$u.api.hospitalNameEcho(params); |
||||
|
if (res) { |
||||
|
console.log('res: ', res); |
||||
|
} |
||||
|
} catch (error) {} |
||||
|
}, |
||||
|
async searchHosList(name) { |
||||
|
try { |
||||
|
if (this.isSearch) { |
||||
|
return; |
||||
|
} |
||||
|
this.isSearch = true; |
||||
|
this.hosList = []; |
||||
|
const params = { |
||||
|
area: this.form.countyId, |
||||
|
name, |
||||
|
}; |
||||
|
const res = await this.$u.api.queryHospitalList(params); |
||||
|
if (res) { |
||||
|
console.log(res); |
||||
|
res.forEach(item => { |
||||
|
this.data.push(item.name); |
||||
|
}); |
||||
|
} else { |
||||
|
this.$t.ui.showToast('医院搜索失败,请手动输入'); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
this.$t.ui.showToast('医院搜索失败,请手动输入'); |
||||
|
} |
||||
|
this.isSearch = false; |
||||
|
}, |
||||
|
// 查询地区数组 |
||||
|
async getArea() { |
||||
|
try { |
||||
|
const params = { id: '140000' }; |
||||
|
const res = await this.$u.api.searchArea(params); |
||||
|
if (res) { |
||||
|
this.list = [...res]; |
||||
|
} else { |
||||
|
this.$t.ui.showToast(msg); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
this.$t.ui.showToast('网络异常,请检查您的网络!'); |
||||
|
} |
||||
|
}, |
||||
|
// 查询职位 |
||||
|
async getPosition() { |
||||
|
try { |
||||
|
const params = { param: {} }; |
||||
|
const res = await this.$u.api.searchPosition(params); |
||||
|
const { code, msg, data } = res.data; |
||||
|
if (code === 200) { |
||||
|
let list = []; |
||||
|
for (var i = 0; i < data.length; i++) { |
||||
|
list.push(data[i].name); |
||||
|
} |
||||
|
console.log('职位list: ', list); |
||||
|
} else { |
||||
|
console.log(msg); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.title-one { |
||||
|
font-size: 18px; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
.title-two { |
||||
|
font-size: 12px; |
||||
|
color: #666; |
||||
|
} |
||||
|
.title-p { |
||||
|
margin-bottom: 2px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,113 @@ |
|||||
|
const mixin = { |
||||
|
data() { |
||||
|
return { |
||||
|
codeValue: { |
||||
|
'CITY-COUNTY': [], |
||||
|
'HOS-NAME': null, |
||||
|
'HOS-LEVEL': [], |
||||
|
'HOS-GRADE': null, |
||||
|
'HOS-KESHI': null, |
||||
|
'HOS-ZHIWU': null, |
||||
|
'HOS-MAN': null, |
||||
|
'HOS-TEL': null, |
||||
|
}, |
||||
|
list: [], |
||||
|
}; |
||||
|
}, |
||||
|
methods: { |
||||
|
// 试题类型:type: 1:省市区三级下拉 11:医院等级 2:输入框模糊搜索 3:下拉菜单 5:输入框
|
||||
|
getList() { |
||||
|
this.list = [ |
||||
|
{ |
||||
|
name: '', |
||||
|
testList: [ |
||||
|
{ |
||||
|
secondName: '', |
||||
|
contentList: [ |
||||
|
{ |
||||
|
name: '市/县', |
||||
|
code: 'CITY-COUNTY', |
||||
|
value: this.codeValue['CITY-COUNTY'], |
||||
|
type: 1, |
||||
|
itemList: [], |
||||
|
}, |
||||
|
{ |
||||
|
name: '医院名称', |
||||
|
code: 'HOS-NAME', |
||||
|
value: this.codeValue['HOS-NAME'], |
||||
|
type: 2, |
||||
|
}, |
||||
|
{ |
||||
|
name: '医院等级', |
||||
|
code: 'HOS-LEVEL', |
||||
|
value: this.codeValue['HOS-LEVEL'], |
||||
|
type: 11, |
||||
|
itemList: [ |
||||
|
{ |
||||
|
value: '二级', |
||||
|
label: '二级', |
||||
|
children: [ |
||||
|
{ |
||||
|
value: '甲等', |
||||
|
label: '甲等', |
||||
|
}, |
||||
|
{ |
||||
|
value: '乙等', |
||||
|
label: '乙等', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
value: '三级', |
||||
|
label: '三级', |
||||
|
children: [ |
||||
|
{ |
||||
|
value: '甲等', |
||||
|
label: '甲等', |
||||
|
}, |
||||
|
{ |
||||
|
value: '乙等', |
||||
|
label: '乙等', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
{ |
||||
|
name: '科室', |
||||
|
code: 'HOS-KESHI', |
||||
|
value: this.codeValue['HOS-KESHI'], |
||||
|
type: 3, |
||||
|
itemList: ['神经内科', '内科', '神经外科'], |
||||
|
}, |
||||
|
{ |
||||
|
name: '职务', |
||||
|
code: 'HOS-ZHIWU', |
||||
|
value: this.codeValue['HOS-ZHIWU'], |
||||
|
type: 3, |
||||
|
// itemList: [],
|
||||
|
itemList: ['科主任', '副主任', '卒中质控医生', '医生'], |
||||
|
}, |
||||
|
{ |
||||
|
name: '联系人', |
||||
|
code: 'HOS-MAN', |
||||
|
value: this.codeValue['HOS-MAN'], |
||||
|
type: 5, |
||||
|
}, |
||||
|
{ |
||||
|
name: '联系电话', |
||||
|
code: 'HOS-TEL', |
||||
|
value: this.codeValue['HOS-TEL'], |
||||
|
disable: true, |
||||
|
type: 5, |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
]; |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
export default mixin; |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 146 KiB |
After Width: | Height: | Size: 190 KiB |
After Width: | Height: | Size: 139 KiB |
Loading…
Reference in new issue