You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

426 lines
14 KiB
HTML

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
/>
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link type="image/x-icon" rel="shortcut icon" href="./favicon.png" />
<link rel="stylesheet" href="./assets/import/element-plus.css" />
<link rel="stylesheet" href="./assets/import/element.css" />
<link href="./assets/import/tailwind.min.css" rel="stylesheet" />
<script src="./assets/import/vue.js"></script>
<script src="./assets/import/element-plus.js"></script>
<link rel="stylesheet" href="./assets/import/icon/style.css" />
<script src="./assets/import/axios.js"></script>
<title>体检登记</title>
<style>
[v-cloak] {
display: none;
}
.cursor-pointer {
cursor: pointer;
}
.page_wrapper {
width: calc(100vw - 40px);
margin: 0 auto;
display: flex;
justify-content: space-between;
padding: 20px 0;
}
.input_box_wrapper {
width: 300px;
}
.select_box_wrapper {
width: calc(100% - 300px - 20px);
}
.select_input_wrapper {
display: flex;
justify-content: space-between;
}
.price_wrapper {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
}
.price_value_wrapper {
font-size: 18px;
color: rgb(201, 90, 90);
}
</style>
<script></script>
</head>
<body>
<div id="app">
<el-config-provider :button="button_config">
<div class="page_wrapper">
<div class="input_box_wrapper">
<el-form label-width="80px">
<el-form-item label="院区">
<el-select
v-model="input_data.hospital"
placeholder="请选择院区"
>
<el-option label="海南现代妇幼" value="1"></el-option>
<el-option label="府城院区" value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="input_data.name" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="身份证号">
<el-input
@change="idNumberUpdate"
v-model="input_data.id_number"
placeholder="请输入身份证号"
/>
</el-form-item>
<el-form-item label="手机号">
<el-input
v-model="input_data.phone"
placeholder="请输入手机号"
/>
</el-form-item>
<el-form-item label="性别">
<el-select v-model="input_data.gender" placeholder="请选择性别">
<el-option label="男" value="1"></el-option>
<el-option label="女" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出生日期">
<el-date-picker
v-model="input_data.birthday"
type="date"
placeholder="请选择出生日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
</el-form>
</div>
<div class="select_box_wrapper">
<div class="select_input_wrapper">
<div>
<el-form label-width="40px" inline>
<el-form-item label="简拼">
<el-input
v-model="search_input"
placeholder=""
/> </el-form-item
></el-form>
</div>
<div>
<el-button type="primary">选择套餐</el-button>
</div>
</div>
<div>
<el-table
border
@selection-change="itemSelectionChange"
row-class-name="cursor-pointer"
highlight-current-row
@row-click="tableRowClick"
ref="item_table_ref"
show-overflow-tooltip
:data="item_list_computed"
style="width: 100%"
height="calc(50vh - 100px)"
>
<el-table-column type="selection" width="38"></el-table-column>
<el-table-column
property="title"
label="项目名称"
width="120"
></el-table-column>
<el-table-column
property="price"
label="价格"
width="80"
></el-table-column>
<el-table-column
property="group"
label="科室"
width="80"
></el-table-column>
<el-table-column property="desc" label="备注"></el-table-column>
<el-table-column
property="id"
label="项目ID"
width="120"
></el-table-column>
</el-table>
</div>
<div class="mt-3">
<el-table
border
:data="select_table_computed"
style="width: 100%"
height="calc(50vh - 45px)"
>
<el-table-column type="selection" width="38"></el-table-column>
<el-table-column
property="title"
label="项目名称"
width="120"
></el-table-column>
<el-table-column
property="price"
label="价格"
width="120"
></el-table-column>
<el-table-column
property="group"
label="科室"
width="120"
></el-table-column>
<el-table-column property="desc" label="备注"></el-table-column>
<el-table-column
property="id"
label="项目ID"
width="120"
></el-table-column>
</el-table>
</div>
<div class="price_wrapper">
<div class="price_value_wrapper">合计价格:¥ 9999.99</div>
<div>
<el-button type="primary">预约登记</el-button>
</div>
</div>
</div>
</div>
</el-config-provider>
</div>
</body>
<script>
const { createApp, onMounted, ref, nextTick, computed } = Vue;
const { ElLoading, ElMessage, ElMessageBox } = ElementPlus;
</script>
<script src="./assets/mounting.js"></script>
<script>
const App = {
setup() {
const button_config = {
autoInsertSpace: true,
};
const search_input = ref("");
const select_items_deep = ref("");
const select_data_default = {
combo: "",
items: "",
};
const select_data = ref(
JSON.parse(JSON.stringify(select_data_default))
);
const formatDatetime = (datetime, format = "YYYY-MM-DD HH:mm:ss") => {
let date = new Date(datetime);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;
if (hour < 10) hour = "0" + hour;
if (minute < 10) minute = "0" + minute;
if (second < 10) second = "0" + second;
return format
.replace("YYYY", year)
.replace("MM", month)
.replace("DD", day)
.replace("HH", hour)
.replace("mm", minute)
.replace("ss", second);
};
const input_data_default = {
hospital: "1",
name: "",
id_number: "",
phone: "",
gender: "1",
birthday: formatDatetime(new Date(), "YYYY-MM-DD"),
};
const api_map = {
ItemGetList: "/api/Web/ItemGetList",
ComboGetList: "/api/Web/ComboGetList",
BuyInfo: "/api/Web/BuyInfo",
Create: "/api/Web/Create",
};
const $api = (key) => {
return api_map[key];
};
const item_list = ref([]);
const item_list_computed = computed(() => {
if (!!search_input.value) {
let il = [];
for (let i in item_list.value) {
let item = item_list.value[i];
if (!!item.pinyin.includes(search_input.value.toUpperCase())) {
il.push(item);
}
}
if (!select_items_deep.value) {
select_items_deep.value = select_data.value.items;
}
return il;
} else {
if (!select_items_deep.value) {
select_items_deep.value = select_data.value.items;
}
return item_list.value;
}
});
const getItemGetList = async () => {
const response = await axios.post($api("ItemGetList"));
window.$response(response.data, () => {
let il_map = response.data.data.list;
let il = [];
for (let i in il_map) {
for (let j in il_map[i].children) {
il.push({
...il_map[i].children[j],
group: il_map[i].title,
group_id: il_map[i].id,
});
}
}
item_list.value = il;
});
};
const input_data = ref(JSON.parse(JSON.stringify(input_data_default)));
const idNumberUpdate = () => {
input_data.value.id_number = input_data.value.id_number.toUpperCase();
let id_number = input_data.value.id_number;
if (id_number.length !== 15 && id_number.length !== 18) {
return;
}
let birthday = "";
switch (id_number.length) {
case 15:
birthday = "19" + id_number.substr(6, 6);
break;
case 18:
birthday = id_number.substr(6, 8);
break;
}
birthday = formatDatetime(
new Date(
birthday.substr(0, 4) +
"-" +
birthday.substr(4, 2) +
"-" +
birthday.substr(6, 2) +
" 00:00:00"
),
"YYYY-MM-DD"
);
!!birthday && (input_data.value.birthday = birthday);
let gender = "";
switch (id_number.substr(-2, 1)) {
case "1":
case "3":
case "5":
case "7":
case "9":
gender = "1";
break;
case "2":
case "4":
case "6":
case "8":
gender = "2";
break;
}
!!gender && (input_data.value.gender = gender);
};
const getQueryData = () => {
let query = {};
let query_str = location.search.substr(1);
let query_arr = query_str.split("&");
query_arr.forEach((item) => {
let item_arr = item.split("=");
query[item_arr[0]] = decodeURIComponent(item_arr[1]);
});
for (let i in input_data_default) {
input_data.value[i] = query[i] || input_data_default[i];
}
for (let i in select_data_default) {
select_data.value[i] = query[i] || select_data_default[i];
}
};
const item_table_ref = ref(false);
const select_table_computed = computed(() => {
console.log("item_table_ref", item_table_ref.value);
return [];
});
const tableRowClick = (e, index) => {
const select_rows = item_table_ref.value.getSelectionRows();
let is_exist = false;
select_rows.forEach((item) => {
if (item.id === e.id) {
is_exist = true;
}
});
item_table_ref.value.toggleRowSelection(e, !is_exist);
};
const itemSelectionChange = () => {
if (select_items_deep.value !== "") {
const sid = select_items_deep.value;
const sl = JSON.parse(JSON.stringify(item_list_computed.value));
select_items_deep.value = "";
const select_items_array = sid.split(",");
for (let i in sl) {
if (select_items_array.includes(sl[i].id)) {
item_table_ref.value.toggleRowSelection(sl[i], true);
}
}
}
const select_items = item_table_ref.value.getSelectionRows();
let ids = [];
select_items.forEach((item) => {
if(!ids.includes(item.id)){
ids.push(item.id);
}
});
select_data.value.items = ids.join(",");
console.log("select_data.value.items", select_data.value.items);
};
onMounted(() => {
getQueryData();
getItemGetList();
});
return {
itemSelectionChange,
idNumberUpdate,
tableRowClick,
item_list_computed,
select_table_computed,
item_table_ref,
item_list,
search_input,
select_data,
input_data,
button_config,
};
},
};
const app = createApp(App);
app.use(ElementPlus);
app.mount("#app");
</script>
</html>