<!doctype html>
|
<html>
|
<head>
|
<meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache">
|
<title>授权医院</title>
|
|
<script type="text/javascript">
|
var pageVue = null;
|
function loadJsCss(callback) {
|
var jscss_urls = [];
|
window.top.initJsCss(document, jscss_urls, callback);
|
};
|
|
function initVue() {
|
new FormVue({
|
el: "#vbody",
|
data: {
|
dataname: "md_org_hospital",
|
title: "授权医院",
|
formAttr: {
|
istitle: false,
|
title: "表单名称",
|
columnnumber: 2,
|
labelwidth: "140px",
|
labelposition: "left",//"left",// right//top
|
size: "mini",
|
border: "10px solid #c6c6c600"
|
},
|
|
default_formFields: [
|
{isshow: "T", field: "authorization_type", name: "授权类型", type: "select", options:[
|
{code:"long-term",value:"长期授权"},
|
{code:"temp-term",value:"临时授权"},
|
]},
|
],
|
formFields: [],
|
|
newformData: {
|
//id: uuid_short(),
|
// code: createCode("BA"),
|
create_time: createDatetime(),
|
},
|
formData: {},
|
|
dataRequest: [
|
{
|
name: "product_group",
|
dataname: "md_product_authorize",
|
// url: "root/data/newEntity",
|
// paramsobj: {dataname: "md_org_data", type_code:"Distributor"},
|
isnotoption: false, //true:不是选项
|
code:"id",//是下拉选项时设置
|
label:"name",//是下拉选项时设置
|
filter: "",
|
orderby: "order_no"
|
}
|
],
|
product_group_all: [],
|
product_group_map_all: [],
|
|
product_group: [],
|
product_group_map: {},
|
old_org_product: [],
|
|
//按键权限设置
|
isedit: false,//提交前编辑,保存/提交
|
isrefuseedit: false,//拒绝后编辑,保存/再次提交
|
isapproval: false,//审批,同意/拒绝/转办/退回
|
|
iscommit: false,//提交标记
|
|
//弹窗参数
|
popupParames: {},
|
//字段设置
|
tablefieldClick: {},
|
formfieldClick: {},
|
|
isConnect : false,
|
connectCode : "",
|
filterList : [],
|
state_code: "",
|
//关联经销商的授权医院开始/截止日期
|
connectOpenDate: "",
|
connectEndDate: "",
|
|
//一级经销商保存原授权日期范围,以限制变更范围只能扩大
|
oldOpenDate: null,
|
oldEndDate: null,
|
|
t_height: null,
|
|
isAdmin: false,
|
filterH: null,
|
tableFields: [
|
{isshow: "T", field: "field1", name: "医院编码",width:"120"},
|
{isshow: "T", field: "field2", name: "医院名称",width:"120"},
|
{isshow: "T", field: "field3", name: "医院等级",width:"120"},
|
{isshow: "T", field: "field4", name: "省份"},
|
{isshow: "T", field: "field5", name: "城市"},
|
{isshow: "T", field: "field6", name: "区县"},
|
],
|
tableData: [],
|
tableHeight: 200,
|
|
},
|
created() {
|
this.popupParames = clone(Root.popupParames);
|
this.title = this.popupParames.title || this.popupParames.text
|
if (this.popupParames.data) {
|
this.formData = clone(this.popupParames.data);
|
}
|
if (this.popupParames.delta) {
|
console.log(this.popupParames.delta);
|
this.product_group = clone(this.popupParames.delta.product_group);
|
this.product_group_map = clone(this.popupParames.delta.product_group_map);
|
this.isConnect = clone(this.popupParames.delta.isConnect);
|
this.connectCode = clone(this.popupParames.delta.connectCode);
|
this.state_code = clone(this.popupParames.delta.state_code);
|
this.oldOpenDate = this.formData.begin_date;
|
this.oldEndDate = this.formData.end_date;
|
|
if(this.popupParames.delta.idList) {
|
this.filterList = clone(this.popupParames.delta.idList);
|
}
|
|
//Brooke
|
if(this.popupParames.delta.isAdmin) {
|
this.isAdmin = true;
|
}
|
if(this.popupParames.delta.filter) {
|
this.filterH = clone(this.popupParames.delta.filter);
|
console.log(this.filterH);
|
}
|
}
|
|
if (this.popupParames.sceneCode) {
|
if (this.popupParames.sceneCode == "add") {//新增
|
if (this.newformData) {
|
let formData_ = clone(this.formData);
|
|
for (var k in this.newformData) {
|
formData_[k] = this.newformData[k];
|
}
|
this.formData = formData_;
|
}
|
this.isedit = true;
|
}
|
else if (this.popupParames.sceneCode == "browse") {//只读
|
this.formAttr.disabled = true;
|
}
|
else if (this.popupParames.sceneCode == "edit") {//编辑
|
this.isedit = true;
|
}
|
}
|
},
|
|
mounted() {
|
var me = this;
|
me.t_height = 352;
|
//预加载数据
|
if (this.dataRequest && this.dataRequest.length) {
|
var result = {};
|
this.loadRequestData(this.dataRequest, result, function(data) {
|
me.dataRequestObj = data;
|
//预加载数据后给哪些字段设置options或formatterjson
|
|
if (me.dataRequestObj.product_group) {
|
console.log(me.dataRequestObj);
|
me.product_group_all = me.dataRequestObj.product_group;
|
me.product_group_map_all = me.dataRequestObj.map.product_group;
|
|
if (!me.product_group) {
|
me.product_group = me.dataRequestObj.product_group
|
}
|
|
if (me.product_group.length) {
|
var product_group_f_ = [];
|
me.product_group_all.map(p=>{
|
// if (me.product_group_map[p.code]) {
|
product_group_f_.push(p);
|
// }
|
})
|
me.product_group = clone(product_group_f_);
|
}
|
}
|
me.initData();
|
});
|
}
|
else {
|
this.initData();
|
}
|
|
// 以服务的方式调用的 Loading 需要异步关闭
|
this.$nextTick(() => {
|
hideLoading();
|
//重新设置弹窗宽高
|
this.$nextTick(function(){
|
// let w_ = this.$refs.popup_body.offsetWidth + "px";
|
let w_ = "1000px";
|
let h_ = this.$refs.popup_body.offsetHeight + "px";
|
Root.setPopupWH(w_, h_);
|
})
|
});
|
},
|
|
methods:{
|
//关闭弹窗
|
closeDialog() {
|
var me = this;
|
if (me.popupParames.totab){
|
Root.tab.removeItem(Root.tab.selected);
|
Root.tab.open(me.popupParames.parentOption, false);
|
}
|
else {
|
Root.hidePopup();
|
}
|
},
|
//关闭前调回调
|
saveAfter() {
|
var me = this;
|
if(me.popupParames.callback) {
|
let obj = {
|
row: me.formData
|
}
|
me.popupParames.callback(obj, function() {
|
me.closeDialog();
|
});
|
}
|
else {
|
me.closeDialog();
|
}
|
},
|
|
initData() {
|
let me = this;
|
var id_ = null;
|
if (this.formData.id) {
|
id_ = this.formData.id;
|
}
|
this.getRowDataById(id_, function(result) {//查询后的回调,用于获取字段的
|
if (result.meta && result.meta[me.dataname] && result.meta[me.dataname].fields) {
|
var metas = clone(result.meta[me.dataname].fields);
|
var formFields_ = [];
|
|
console.log(metas);
|
console.log(me.isConnect);
|
|
metas.map(f=>{
|
f.isshow = "T";
|
|
if (f.field == "category_name") {
|
f.isshow = "F";
|
f.options = me.product_group
|
}
|
|
if (f.field == "certificate_material_code" || f.field == "certificate_material_name") {
|
f.isshow = "F";
|
}
|
|
formFields_.push(clone(f));
|
})
|
var f1_ = {isshow: "T", field: "field_cpx", name: "产品线", type: "checkboxobj", options: [
|
{code: "RESTORE", value: "RESTORE"},
|
{code: "APERTO", value: "APERTO"},
|
], colspan: 4, required: true};
|
|
var f2_ = {isshow: "T", field: "field_cp", name: "产品", type: "checkboxobj", options: [
|
{code: "P001-001", value: "紫杉醇释放冠脉球囊扩张导管"},
|
{code: "P002-001", value: "紫杉醇释放高压分流球囊扩张导管"},
|
], colspan: 4, required: true};
|
|
formFields_.push(clone(f1_));
|
formFields_.push(clone(f2_));
|
|
var ftcompany_ = {isshow: "T", field: "company_name", name: "公司", type: "select",
|
options:[
|
{code: "凯德诺", value: "凯德诺"},
|
]};
|
var ftbu_ = {isshow: "T", field: "bu", name: "BU", type: "select",options:[
|
{code: "冠脉", value: "冠脉"},
|
]};
|
formFields_.unshift(ftbu_);
|
formFields_.unshift(ftcompany_);
|
|
me.$set(me.formData, "company_name", "凯德诺 ");//冠脉
|
me.$set(me.formData, "bu", "冠脉");//冠脉
|
if (me.rowData.md_org_hospital_category) {
|
me.old_org_product = clone(me.rowData.md_org_hospital_category);
|
var md_org_hospital_category_ = [];
|
me.rowData.md_org_hospital_category.map(p=>{
|
md_org_hospital_category_.push(p.category_id);
|
})
|
me.$set(me.formData, "category_name", md_org_hospital_category_);
|
|
}
|
else {
|
me.$set(me.formData, "category_name", []);
|
}
|
|
console.log(me.formData);
|
|
if (!me.formFields || (me.formFields && me.formFields.length == 0)) {
|
// me.formFields = clone(me.default_formFields);
|
me.formFields = clone(formFields_);
|
|
//字段数组转字段obj,目的为了筛选时获取字段属性
|
me.fieldsToFieldsObj();
|
|
//设置字段事件
|
me.tableFieldClick();
|
}
|
}
|
})
|
},
|
|
tableFieldClick() {
|
var me = this;
|
//表格字段事件设置
|
this.tablefieldClick = {
|
|
};
|
|
//表单字段事件设置
|
this.formfieldClick = {
|
name: {
|
popup: {
|
onclick: function(obj) {//弹窗点击事件
|
|
if(me.isConnect) {
|
me.openConnectHospital(me.connectCode);
|
}
|
|
else {
|
me.openHospitalList();
|
}
|
}
|
},
|
},
|
|
begin_date: {//开始日期
|
val: {
|
onchange: function(obj) {
|
//已开户经销商—管理员修改(变更)—授权医院的授权时间范围只能扩大不能缩小
|
if(me.oldOpenDate && obj.data.begin_date && me.isAdmin && (me.state_code == 'Open' || me.state_code == 'open')) {
|
if(new Date(obj.data.begin_date.replace(/-/g, '/')) > new Date (me.oldOpenDate)) {
|
Root.message({
|
type: 'warning',
|
message: '开始日期不能延后'
|
});
|
obj.data.begin_date = me.oldOpenDate;
|
}
|
}
|
//开始日期要早于截止日期
|
if (obj.data.begin_date && obj.data.end_date) {
|
if (new Date(obj.data.begin_date) > new Date(obj.data.end_date)) {
|
Root.message({
|
type: 'warning',
|
message: '开始日期不能晚于截止日期'
|
});
|
obj.data.begin_date = null;
|
}
|
}
|
//关联经销商授权日期限制
|
if (me.connectOpenDate && obj.data.begin_date) {
|
if (new Date(obj.data.begin_date.replace(/-/g, '/')) < new Date(me.connectOpenDate)) {
|
Root.message({
|
type: 'warning',
|
message: '开始日期不能早于所关联的一级经销商开始日期'
|
});
|
obj.data.begin_date = me.connectOpenDate;
|
}
|
}
|
}
|
}
|
},
|
|
end_date: {//截止日期
|
val: {
|
onchange: function(obj) {
|
//已开户经销商—管理员修改(变更)—授权医院的授权时间范围只能扩大不能缩小
|
if(me.oldEndDate && obj.data.end_date && me.isAdmin && (me.state_code == 'Open' || me.state_code == 'open')) {
|
if(new Date(obj.data.end_date.replace(/-/g, '/')) < new Date (me.oldEndDate)) {
|
Root.message({
|
type: 'warning',
|
message: '截止日期不能提前'
|
});
|
obj.data.end_date = me.oldEndDate;
|
}
|
}
|
//截止日期要晚于开始日期
|
if (obj.data.begin_date && obj.data.end_date) {
|
if (new Date(obj.data.begin_date) > new Date(obj.data.end_date)) {
|
Root.message({
|
type: 'warning',
|
message: '截止日期不能早于开始日期'
|
});
|
obj.data.end_date = null;
|
}
|
}
|
//关联经销商授权日期限制
|
if (me.connectEndDate && obj.data.end_date) {
|
if (new Date(obj.data.end_date.replace(/-/g, '/')) > new Date(me.connectEndDate)) {
|
Root.message({
|
type: 'warning',
|
message: '截止日期不能晚于所关联的一级经销商截止日期'
|
});
|
obj.data.end_date = me.connectEndDate;
|
}
|
}
|
}
|
}
|
},
|
};
|
},
|
|
openConnectHospital(code) {
|
var me = this;
|
var filter_ = "org_code ='" + code + "'";
|
|
if(me.filterH) {
|
filter_ += "and " + me.filterH;
|
}
|
console.log(me.filterH);
|
|
var config = {
|
totab: false, //true: 以Tab导航的方式打开
|
width: "950px",
|
height: "500px",
|
icon: "icon-product",
|
text: "关联授权医院选择",
|
id: "connect_org_hospital_list" + "add",//totab: true时需设置,用于判断是否已打开此页面
|
url: "module/md/page/customer/page/popup/connect_org_hospital_list.html",
|
filter: filter_,
|
sceneCode: "add",//"edit", //"add"//"browse",
|
callback: function(obj, callback) {
|
var formData = clone(me.formData);
|
console.log(obj);
|
|
formData.category_name = [];
|
formData.category_id = [];
|
|
formData.authorization_type = clone(obj.row.authorization_type);
|
formData.begin_date = me.connectOpenDate = clone(obj.row.begin_date);
|
formData.end_date = me.connectEndDate = clone(obj.row.end_date);
|
|
formData.hospital_id = obj.row.hospital_id;
|
formData.code = obj.row.code;
|
formData.name = obj.row.name;
|
formData.province = obj.row.province;
|
formData.city = obj.row.city;
|
formData.county = obj.row.county;
|
formData.level = obj.row.level;
|
formData.grade = obj.row.grade;
|
|
let param = {
|
dataname: "md_org_hospital",
|
id: obj.row.id,
|
}
|
|
Server.call("root/data/getEntity", param, function(result) {
|
if(result && result.data && result.data.md_org_hospital_category) {
|
// console.log(((result.data.md_org_hospital_category).map(e => e.category_id)));
|
var selections = (result.data.md_org_hospital_category).map(e => e.category_id);
|
|
var formFields = clone(me.formFields);
|
|
var selection_limit;
|
formFields.map(f => {
|
if(f.field == "category_name") {
|
selection_limit = clone(f.options.map(o => o.code));
|
console.log(selection_limit);
|
}
|
})
|
|
// formData.category_name = clone((result.data.md_org_hospital_category).map(e => e.category_id));
|
|
// formData.category_name.map(s => {
|
// if(selection_limit.includes(s)) {
|
// var option = {
|
// code: s,
|
// value: me.product_group_map[s]
|
// }
|
// options_.push(s);
|
// }
|
// })
|
|
let intersection = selection_limit.filter(function (val) { return (selections.indexOf(val) > -1) });
|
|
var options_ = [];
|
|
intersection.map(o => {
|
var option = {
|
code: o,
|
value: me.product_group_map[o],
|
}
|
options_.push(option);
|
})
|
|
formFields.map(f => {
|
if(f.field == "category_name") {
|
f.options = options_;
|
console.log(f.options);
|
if(f.options.length < 1) {
|
Root.message({
|
type: 'warning',
|
message: '无可选授权产品,请更换授权医院或关联的开户经销商'
|
});
|
}
|
}
|
})
|
}
|
me.formFields = clone(formFields);
|
me.formData = clone(formData);
|
|
if (callback) {
|
callback();
|
}
|
})
|
}
|
};
|
me.doPopupByPublic(config);
|
},
|
|
openHospitalList() {
|
var me = this;
|
if(me.filterH) {
|
var filter_ = me.filterH;
|
}
|
console.log(me.filterH);
|
|
var config = {
|
totab: false, //true: 以Tab导航的方式打开
|
width: "950px",
|
height: "500px",
|
icon: "icon-product",
|
text: "医院选择",
|
filter: filter_,
|
id: "terminal_list",//totab: true时需设置,用于判断是否已打开此页面
|
// url: "module/md/page/customer/page/popup/terminal_list.html",
|
url: "module/md/page/customer/page/popup/hospital_grant_list.html",
|
data: {},
|
delta: {},
|
// filter: "state_code!='UnderApproval'",
|
sceneCode: "add",//"edit", //"add"//"browse",
|
callback: function(obj, callback) {
|
var formData = clone(me.formData);
|
|
// if(formData.hospital_id != obj.row.id){
|
formData.authorization_type = '';
|
formData.category_name = [];
|
formData.begin_date = null;
|
formData.end_date = null;
|
// }
|
|
formData.hospital_id = obj.row.id;
|
formData.code = obj.row.code;
|
formData.name = obj.row.name;
|
formData.province = obj.row.province;
|
formData.city = obj.row.city;
|
formData.county = obj.row.county;
|
formData.level = obj.row.level;
|
formData.grade = obj.row.grade;
|
|
me.formData = formData;
|
if (callback) {
|
callback();
|
}
|
}
|
};
|
me.doPopupByPublic(config);
|
},
|
|
saveRowTable() {
|
var me = this;
|
me.loading_save = true;
|
var operator_ = "saveEntity";//保存
|
|
var bo = me.$refs.form1.checkForm();
|
|
if(!bo) {
|
Root.message({
|
type: 'warning',
|
message: '请填写必填项'
|
});
|
me.loading_save = false;
|
return;
|
}
|
|
if(me.iscommit) {
|
operator_ = "commit";//提交
|
}
|
|
var entity_ = me.formData;
|
|
var entity = {};
|
var product_category_ = [];
|
for (var r in entity_) {
|
if (r == "category_name") {
|
product_category_ = entity_[r];
|
}
|
else if (entity_[r] || entity_[r] == "" || entity_[r] == false || entity_[r] == 0) {
|
entity[r] = entity_[r];
|
}
|
}
|
|
//Brooke—保存时传sceneCode
|
if(me.popupParames.sceneCode == "add") {
|
entity.operate_type = 'insert';
|
}else if (me.popupParames.sceneCode == "edit") {
|
entity.operate_type = 'update';
|
}
|
|
//子表授权产品
|
var product_group_ = [];
|
product_category_.map(pcid=>{
|
var pcobj_name = me.product_group_map[pcid];
|
var row_pcobj = {
|
category_id: pcid,
|
category_name: pcobj_name
|
}
|
product_group_.push(row_pcobj);
|
|
})
|
me.old_org_product.map(old_p=>{
|
var del_row_pcobj = {
|
id: old_p.id,
|
_operator: "delete"
|
}
|
product_group_.push(del_row_pcobj);
|
})
|
|
let param = {
|
dataname: this.dataname,
|
data: {},
|
}
|
param.data[this.dataname] = entity;
|
param.data["md_org_hospital_category"] = product_group_;
|
|
console.log(param);
|
|
//Brooke - admin修改,弹出提示及修改接口
|
if(me.isAdmin && (me.state_code == "Open" || me.state_code == "open") ) {
|
Root.confirm('将修改客户授权信息,并更新授权书', '修改提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
me.adminSaveRowTable(param, me.popupParames.sceneCode);//等待接口完善
|
// console.log("test admin")
|
}).catch(() => {
|
Root.message({
|
type: 'info',
|
message: '已取消修改'
|
});
|
me.loading_save = false;
|
});
|
}
|
else {
|
Server.call("root/data/" + operator_, param, function(result) {
|
me.loading_save = false;
|
console.log(result);
|
if (result.success) {
|
if(me.iscommit){
|
me.iscommit = false;
|
Root.message({
|
type: 'success',
|
message: '提交成功'
|
});
|
me.saveAfter();
|
}
|
else {
|
Root.message({
|
type: 'success',
|
message: '保存成功'
|
});
|
me.saveAfter();
|
}
|
}
|
}, function(error) {
|
me.loading_save = false;
|
Root.message({
|
type: 'error',
|
message: '保存失败'
|
});
|
});
|
|
// Root.confirm('将修改客户授权信息', '修改提示', {
|
// confirmButtonText: '确定',
|
// cancelButtonText: '取消',
|
// type: 'warning'
|
// }).then(() => {
|
// Server.call("root/data/" + operator_, param, function(result) {
|
// me.loading_save = false;
|
// console.log(result);
|
// if (result.success) {
|
// if(me.iscommit){
|
// me.iscommit = false;
|
// Root.message({
|
// type: 'success',
|
// message: '提交成功'
|
// });
|
// me.saveAfter();
|
// }
|
// else {
|
// Root.message({
|
// type: 'success',
|
// message: '保存成功'
|
// });
|
// me.saveAfter();
|
// }
|
// }
|
// }, function(error) {
|
// me.loading_save = false;
|
// Root.message({
|
// type: 'error',
|
// message: '保存失败'
|
// });
|
// });
|
// }).catch(() => {
|
// Root.message({
|
// type: 'info',
|
// message: '已取消修改'
|
// });
|
// me.loading_save = false;
|
// });
|
}
|
},
|
|
//Brooke,等待接口完善
|
adminSaveRowTable(param, sceneCode) {
|
var me = this;
|
|
let param_admin = clone(param);
|
|
if(sceneCode == "add") {
|
param_admin.data[me.dataname].operate_type = 'insert';
|
}else if (sceneCode == "edit") {
|
param_admin.data[me.dataname].operate_type = 'update';
|
}
|
|
Server.call("root/data/saveEntity", param, function(result) {
|
if (result.success) {
|
// console.log("admin saved!");
|
//等待接口接入
|
Server.call("root/orgBizLogic/authorizationBook", param_admin, function(result) {
|
if(result.success) {
|
me.loading_save = false;
|
Root.message({
|
type: 'success',
|
message: '客户授权信息及授权书更新成功'
|
});
|
me.saveAfter();
|
}
|
}, function(error) {
|
me.loading_save = false;
|
Root.message({
|
type: 'error',
|
message: '授权书更新失败'
|
});
|
});
|
}
|
}, function(error) {
|
me.loading_save = false;
|
Root.message({
|
type: 'error',
|
message: '客户授权信息保存失败'
|
});
|
});
|
},
|
}
|
});
|
};
|
|
loadJsCss(function () {
|
initVue();
|
});
|
</script>
|
<style>
|
/* 在vue.js中 v-cloak 这个指令是防止页面加载时出现 vuejs 的变量名而设计的 */
|
[v-cloak] {
|
display: none !important;
|
}
|
</style>
|
|
</head>
|
|
<body style="margin: 0px;">
|
<div v-cloak id="vbody">
|
<div id="page_root">
|
<div ref="popup_body" style="padding: 0 20px;">
|
<div class="popup_el-dialog__header">
|
<div class="dialog-title">
|
<i class="iconfont icon-customermanagement"></i>
|
<span> {{title}}</span>
|
</div>
|
</div>
|
<div :style="{height: t_height +'px', 'overflow-y': 'auto'}">
|
<!-- <div style="overflow-y: auto;"> -->
|
<div class="el-dialog__body">
|
<h-form
|
ref="form1"
|
:form-attr="formAttr"
|
:table-fields="formFields"
|
:form-data="formData"
|
:table-field-click="formfieldClick"
|
>
|
</h-form>
|
|
<div style="text-align: right; width: 100%;">
|
<el-button @click="" :icon="buttonsconfig.add.icon">{{buttonsconfig.add.name}}</el-button>
|
</div>
|
|
<h-table
|
v-if="tableFields"
|
ref="table4"
|
:table-fields="tableFields"
|
:table-data="tableData"
|
:table-height="tableHeight"
|
:is-pagination="false"
|
>
|
</h-table>
|
|
</div>
|
</div>
|
<div class="el-dialog__footer">
|
<el-button size="small" type="default" @click="closeDialog">取 消</el-button>
|
<el-button size="small" v-if="isedit || isrefuseedit" type="primary" :loading="loading_save" @click="saveRowTable">保 存</el-button>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 50vh;">
|
<div class="spinner">
|
<div class="cube1"></div>
|
<div class="cube2"></div>
|
</div>
|
</div>
|
</body>
|
</html>
|