mch 2 years ago
parent
commit
2aaf44ba1f
  1. 8
      src/components/customerOrg/ContactPerson.vue
  2. 23
      src/components/customerOrg/customerOrgEdit.vue
  3. 2
      src/components/customerOrg/customerOrgRegister.vue
  4. 2
      src/components/customerOrg/customerOrgTree.vue
  5. 2
      src/components/patientRegister/Camera.vue
  6. 38
      src/components/patientRegister/PatientRegisterEdit.vue
  7. 13
      src/components/patientRegister/PatientRegisterList.vue
  8. 1
      src/store/index.js
  9. 12
      src/utlis/proFunc.js
  10. 222
      src/views/fee-settings/Item.vue

8
src/components/customerOrg/ContactPerson.vue

@ -202,7 +202,7 @@ export default {
add() {
//this.$message.success(" addContactPerson");
if (!this.customerOrg.customerOrgId) {
alert("没有体检单位信息");
this.$message.warning("没有体检单位信息");
return;
}
this.form = { customerOrgId: this.customerOrg.customerOrgId };
@ -215,10 +215,10 @@ export default {
edit() {
//this.$message.success(" editContactPerson");
if (!this.customerOrg.customerOrgId) {
alert("没有体检单位信息");
this.$message.warning("没有体检单位信息");
return;
} else if (!this.personId) {
alert("请先选择要编辑的联系人");
this.$message.warning("请先选择要编辑的联系人");
return;
}
this.dialogContactPerson = true;
@ -229,7 +229,7 @@ export default {
del() {
//this.$message.success(" delContactPerson");
if (!this.personId) {
alert("请先选择要编辑的联系人");
this.$message.warning("请先选择要编辑的联系人");
return;
}

23
src/components/customerOrg/customerOrgEdit.vue

@ -15,12 +15,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="单位名称" prop="displayName">
<el-input v-model="form.displayName" placeholder="请输入单位名称" />
<el-input v-model="form.displayName" placeholder="请输入单位名称" :disabled="customerOrg.oprStatus ? false:true"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="单位简称" prop="shortName">
<el-input v-model="form.shortName" placeholder="请输入单位简称" />
<el-input v-model="form.shortName" placeholder="请输入单位简称" :disabled="customerOrg.oprStatus ? false:true"/>
</el-form-item>
</el-col>
<el-col :span="8">
@ -190,7 +190,7 @@
>
</div>
<div class="btnList">
<el-button type="success" @click="onSubmit('form')" class="btnClass"
<el-button type="success" @click="btnSubmit('form')" class="btnClass"
>保存</el-button
>
</div>
@ -406,7 +406,7 @@ export default {
},
//
onSubmit(formName) {
btnSubmit(formName) {
let body = {};
console.log("vuex data", this.customerOrg.customerOrgRd);
this.$refs[formName].validate((valid, fields) => {
@ -446,6 +446,7 @@ export default {
this.customerOrg.customerOrgId = res.data.id;
this.customerOrg.customerOrgRd = res.data;
this.getCustomerOrgTree("insert", res.data);
this.customerOrg.oprStatus = 'edit'
}
});
} else {
@ -456,6 +457,7 @@ export default {
this.$message.success("更新 操作成功");
let lbody = { id: this.customerOrg.customerOrgRd.id, ...body };
this.getCustomerOrgTree("update", lbody);
this.customerOrg.oprStatus = 'edit'
}
}
);
@ -465,10 +467,16 @@ export default {
//
async add(formName, child) {
await this.$refs[formName].resetFields();
//console.log('this.peisid',this.peisid)
if(!this.peisid || this.peisid == 'null'){
this.$message.warning("该用户未选归属体检中心,不能执行此操作!");
return
}
if (child) {
if (!this.customerOrg.customerOrgId) {
this.$message.info("请先选择单位");
this.$message.warning("请先选择上级单位");
this.customerOrg.oprStatus = ''
return;
}
this.customerOrg.customerOrgRd.id = "";
@ -486,6 +494,7 @@ export default {
parentId: null,
};
}
this.customerOrg.oprStatus = 'add'
objCopy(this.customerOrg.customerOrgRd, this.form);
this.customerOrg.customerOrgId = "";
@ -516,8 +525,10 @@ export default {
this.customerOrg.customerOrgRegisterList = []
this.customerOrg.contactPersonList = []
this.customerOrg.contactMethodList = []
this.setData({ key: "customerOrg.customerOrgRd", value: { id: "" } });
this.setData({ key: "customerOrg.customerOrgRd", value: { id: "" } });
this.$refs[formName].resetFields();
this.customerOrg.oprStatus = ''
this.customerOrg.customerOrgId = ''
}
})
.catch((err) => {

2
src/components/customerOrg/customerOrgRegister.vue

@ -98,7 +98,7 @@ export default {
setOrgRegisterState(IsComplete) {
if (!this.customerOrg.customerOrgId || !this.customerOrgRegisterId) {
console.log(this.customerOrg.customerOrgId, this.customerOrgRegisterId);
alert("请选中要操作的体检次数");
this.$message.warning("请选中要操作的体检次数");
return;
}
//console.log(`/api/app/customer-org-register/${this.customerOrgRegisterId}/state`)

2
src/components/customerOrg/customerOrgTree.vue

@ -119,9 +119,11 @@ export default {
//
treeclick(data) {
//this.$message.success(data.id + " " + data.displayName);// api/app/customer-org/3a0c0439-a5ca-8a63-b2b9-e0eb24cb58b1
this.customerOrg.oprStatus = 'edit'
this.customerOrg.customerOrgId = data.id;
this.getCustomerOrgRd(data.id);
//
let firstId = data.id //ID
if(data.parentId){

2
src/components/patientRegister/Camera.vue

@ -165,7 +165,7 @@ export default {
this.videoHeight
);
// base64url
this.imgSrc = this.thisCancas.toDataURL("image/png");
this.imgSrc = this.thisCancas.toDataURL("image/jpeg"); // jpeg png
console.log('this.imgSrc',this.imgSrc);
},
//

38
src/components/patientRegister/PatientRegisterEdit.vue

@ -336,7 +336,7 @@
<el-button type="primary" class="btnClass" @click="rdCopy">复制新增</el-button>
</div>
<div class="btn">
<el-button type="success" class="btnClass" @click="Onsubmit('form', true)">保存</el-button>
<el-button type="success" class="btnClass" @click="btnSubmit('form', true)">保存</el-button>
</div>
<div class="btn">
<el-button type="primary" class="btnClass" @click="lisRequest">检验单申请</el-button>
@ -375,22 +375,22 @@
<!--查询条件-->
<div style="position: absolute;top:40px;left:160px;display: flex; flex-wrap: wrap; height:60px;">
<div class="query">
<span>查找&nbsp;&nbsp;条码号</span>
<span class="querySpan">查找&nbsp;&nbsp;条码号</span>
<el-input placeholder="条码号" v-model="query.patientRegisterNo" size="small"
clearable style="width: 140px" @change="quickQuery('patientRegisterNo')"/>
</div>
<div class="query">
<span>档案号</span>
<span class="querySpan">档案号</span>
<el-input placeholder="档案号" v-model="query.patientNo" size="small"
clearable style="width: 100px" @change="quickQuery('patientNo')" />
</div>
<div class="query">
<span>姓名</span>
<span class="querySpan">姓名</span>
<el-input placeholder="姓名" v-model="query.patientName" size="small"
clearable style="width: 80px" @change="quickQuery('patientName')" />
</div>
<div class="query">
<span>手机号</span>
<span class="querySpan">手机号</span>
<el-input placeholder="预约手机号" v-model="query.tel" size="small"
clearable style="width: 120px" @change="quickQuery('tel')" />
</div>
@ -623,7 +623,7 @@ import { mapState } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import mm from "../../utlis/mm";
import { objCopy, setNull, dddw, parseID, birthdayToAge, deepCopy, arrayFilter, parsIcCardtoLocal, photoParse, savePeoplePhoto } from "../../utlis/proFunc";
import { objCopy, setNull, dddw, parseID, birthdayToAge, deepCopy, arrayFilter, parsIcCardtoLocal, photoParse, savePeoplePhoto, arrayExistObj } from "../../utlis/proFunc";
import Camera from "./Camera.vue";
import PatientRegisterItem from "./PatientRegisterItem.vue";
import LisRequest from "./LisRequest.vue";
@ -913,13 +913,13 @@ export default {
//
changeCustomerOrgGroupId() {
this.patientRegister.customerOrgGroupChange++;
if (this.form.id) this.Onsubmit('form', false);
if (this.form.id) this.btnSubmit('form', false);
},
//
changeMedicalPackageId() {
this.patientRegister.medicalPackageChange++;
if (this.form.id) this.Onsubmit('form', false);
if (this.form.id) this.btnSubmit('form', false);
},
//
@ -1045,7 +1045,7 @@ export default {
},
//
Onsubmit(formName, msgTip) {
btnSubmit(formName, msgTip) {
this.$refs[formName].validate((valid) => {
if (valid) {
//
@ -1095,14 +1095,17 @@ export default {
objCopy(res.data, this.form);
// this.patientRegister.prList.push(res.data); //
this.patientRegister.patientRegisterId = res.data.id;
this.patientRegister.patientRegisterId = res.data.id;
this.patientRegister.patientRegisterRd = res.data;
//this.patientRegister.query.times++;
this.patientRegister.prList.push(res.data)
//
this.patientRegister.patientRegisterAbs.forEach(e => {
e.patientRegisterId = res.data.id;
return e;
});
this.patientRegister.patientRegisterRd = res.data;
this.patientRegister.query.times++;
this.patientRegister.saveTimes++;
}
}
@ -1115,7 +1118,11 @@ export default {
if (msgTip) this.$message.success("更新 操作成功");
//
if (this.patientRegister.photo.indexOf("data:image") > -1) savePeoplePhoto(this.form.id, this.patientRegister.photo);
this.patientRegister.query.times++;
//this.patientRegister.query.times++;
let lfind = arrayExistObj(this.patientRegister.prList, 'id', this.form.id)
if(lfind > - 1) objCopy(this.form,this.patientRegister.prList[lfind])
//this.patientRegister.saveTimes++; //
}
});
@ -1485,4 +1492,7 @@ export default {
.query {
margin-left: 10px;
}
.querySpan {
margin-right: 2px;
}
</style>

13
src/components/patientRegister/PatientRegisterList.vue

@ -475,6 +475,7 @@ export default {
},
data() {
return {
peisid:null,
startPoint: -1, // -1
endPoint: -1, // -1
@ -555,6 +556,9 @@ export default {
//
mounted() {
this.quickAsb = this.dict.asbItemAll;
this.peisid = window.sessionStorage.getItem('peisid');
//
this.dropCol = this.columnDrop(this.dropCol);
},
@ -778,7 +782,12 @@ export default {
},
//
add() {
add() {
if(!this.peisid || this.peisid == 'null'){
this.$message.warning("该用户未选归属体检中心,不能执行此操作!");
return
}
let customerOrgId = this.patientRegister.query.customerOrgId;
if (!customerOrgId) {
alert("请选择单位或个人");
@ -896,7 +905,7 @@ export default {
//
async Query() {
this.patientRegister.prList = [];
let body = {};
let body = {maxResultCount:500};
console.log(`this.patientRegister.query`, this.patientRegister.query);
if (this.patientRegister.query.customerOrgFlag) {

1
src/store/index.js

@ -29,6 +29,7 @@ export default new Vuex.Store({
},
customerOrg: {
//体检单位设置
oprStatus:'',//空,add,edit 三种状态
customerOrgTree: [], //体检单位列表
defaultExpandedKeys:[], //当前选中树的节点
treeCurrentNodekey:'', //当前选中树的节点

12
src/utlis/proFunc.js

@ -15,13 +15,13 @@ function tcdate(date) {
};
exports.tcdate = tcdate;
//json 对像赋值 只从 from 对象 赋值 to 中有的 key 项 add by pengjun
function objCopy(from, to) {
if (from && to) {
let keys = Object.keys(to);
//json 对像赋值 只从 provide/提供 对象 赋值到 receive/接收 中有的 key 项 add by pengjun receive provide
function objCopy(provide, receive) {
if (provide && receive) {
let keys = Object.keys(receive);
for (let key in keys) {
if (from[keys[key]] !== undefined) {
to[keys[key]] = from[keys[key]];
if (provide[keys[key]] !== undefined) {
receive[keys[key]] = provide[keys[key]];
}
}
}

222
src/views/fee-settings/Item.vue

@ -204,6 +204,7 @@
v-model="form.unitId"
placeholder="请选择"
style="width: 100%"
filterable
>
<el-option
v-for="item in unitId"
@ -213,6 +214,15 @@
>
</el-option>
</el-select>
<!-- <el-autocomplete
class="inline-input"
v-model="unitIdName"
:fetch-suggestions="querySearch"
value-key="displayName"
placeholder="请输入内容"
@select="handleSelect"
>
</el-autocomplete> -->
</el-form-item>
</el-col>
<el-col :span="4">
@ -253,7 +263,9 @@
<el-input
v-model="form.diagnosisFunction"
:disabled="disableddiagnosisFunction"
></el-input>
>
<el-button slot="append" icon="el-icon-more" v-if="isDiagnosisFunctionBox" @click="diagnosisFunctionBox=true"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
@ -283,9 +295,11 @@
<el-checkbox v-model="isCalculationItemBox" @change="changeBox('isCalculationItem')" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="8">
<el-form-item label="计算函数" prop="">
<el-input v-model="form.calculationFunction"></el-input>
<el-input v-model="form.calculationFunction" :disabled="true">
<el-button slot="append" icon="el-icon-more" v-if="isCalculationItemBox" @click="calculationFunctionBox=true"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
@ -293,7 +307,7 @@
<el-input v-model="form.inputCheck"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="3">
<el-form-item label="继续处理" prop="isContinueProcess">
<el-checkbox v-model="isContinueProcessBox" @change="changeBox('isContinueProcess')" />
</el-form-item>
@ -462,30 +476,32 @@
</template>
</el-table-column>
<el-table-column label="诊断">
<template> </template>
<template slot-scope="scope">
{{scope.row.diagnosisId}}
</template>
</el-table-column>
</el-table>
</div>
<div style="margin-top: 5px; margin-left: 15px">
<el-button type="primary" @click="increase">添加1</el-button>
<el-button type="primary" @click="increase" style="width:100%;">添加</el-button>
<div style="margin-top: 5px">
<el-button type="primary" @click="resultediting">编辑</el-button>
<el-button type="primary" @click="resultediting" style="width:100%;">编辑</el-button>
</div>
<div style="margin-top: 5px">
<el-button type="primary" @click="delemtdelite">删除</el-button>
<el-button type="primary" @click="delemtdelite" style="width:100%;">删除</el-button>
</div>
<!-- <div style="margin-top: 5px">
<el-button type="primary" @click="templatecategory"
>模板类别</el-button
>
</div> -->
<div style="margin-top: 5px">
<el-button type="primary" @click="diagnosticmatching"
>诊断匹配</el-button
<div style="margin-top: 5px;margin-bottom:14px;">
<el-button type="primary" @click="diagnosticmatching" style="width:100%;">诊断匹配</el-button
>
</div>
</div>
</div>
<el-divider></el-divider>
<span slot="footer" class="dialog-footer">
<el-button @click="rurestdialogVisible = false"> </el-button>
<el-button type="primary" @click="rurestdialogVisible = false"
@ -522,7 +538,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="诊断编号">
<el-select v-model="rusetform.diagnosisId" placeholder="请选择">
<el-select v-model="rusetform.diagnosisId" placeholder="请选择" filterable>
<el-option
v-for="item in diagnosisId"
:key="item.id"
@ -533,43 +549,22 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="4">
<el-form-item label="小结名称">
<el-select
v-model="rusetform.isNameIntoSummary"
placeholder="请选择"
>
<el-option
v-for="item in isNameIntoSummary"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-checkbox v-model="rusetform.isNameIntoSummary" true-label="Y" false-label="N"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="4">
<el-form-item label="进入小结">
<el-select
v-model="rusetform.isResultIntoSummary"
placeholder="请选择"
>
<el-option
v-for="item in isResultIntoSummary"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-checkbox v-model="rusetform.isResultIntoSummary" true-label="Y" false-label="N" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="9">
<el-form-item label="结果状态">
<el-select
v-model="rusetform.resultStatusId"
placeholder="请选择"
filterable
>
<el-option
v-for="item in resultStatusId"
@ -583,6 +578,7 @@
</el-col>
</el-row>
</el-form>
<el-divider></el-divider>
<span slot="footer" class="dialog-footer">
<el-button @click="ruesttieledialogVisible = false"> </el-button>
<el-button type="primary" @click="rusteronsubmit"> </el-button>
@ -882,8 +878,48 @@
>
</span>
</el-dialog>
<!-- -->
<!-- 诊断函数弹框 -->
<el-dialog
title="诊断函数设置"
:visible.sync="diagnosisFunctionBox"
width="50%"
:close-on-click-modal="false"
>
<el-form label-width="110px">
<el-row>
<el-col :span="24">
<el-form-item label="诊断函数">
<el-input type="textarea" v-model="diagnosisFunctionText"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="diagnosisFunctionBox = false,diagnosisFunctionText=''"> </el-button>
<el-button type="primary" @click="OnsubmitDiagnosis"> </el-button>
</span>
</el-dialog>
<!-- 计算函数弹框 -->
<el-dialog
title="计算函数设置"
:visible.sync="calculationFunctionBox"
width="50%"
:close-on-click-modal="false"
>
<el-form label-width="110px">
<el-row>
<el-col :span="24">
<el-form-item label="诊断函数">
<el-input type="textarea" v-model="calculationFunctionText"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="calculationFunctionBox = false,calculationFunctionText=''"> </el-button>
<el-button type="primary" @click="OnsubmitCalculation"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
@ -943,8 +979,8 @@ export default {
itemId: "",
result: "",
diagnosisId: "",
isNameIntoSummary: "",
isResultIntoSummary: "",
isNameIntoSummary: "N",
isResultIntoSummary: "Y",
resultStatusId: "",
simpleCode: "",
}, //
@ -1012,6 +1048,9 @@ export default {
isCalculationItemBox:false,
isContinueProcessBox:false,
isActiveBox:true,
// unitIdName:"",
diagnosisFunctionBox:false,
calculationFunctionBox:false,
form: {
displayName: "",
englishShortName: "",
@ -1030,7 +1069,7 @@ export default {
isContinueProcess: "",
resultTemplateTypeFlag: "",
inputCheck: "",
isActive: "",
isActive: ""
},
referenceRangeTypeFlag: [
@ -1234,6 +1273,14 @@ export default {
value: "4",
label: "无",
},
{
value: "5",
label: "(—)",
},
{
value: "6",
label: "­-",
},
], //
ssdate: [],
fssubdex: "",
@ -1241,8 +1288,10 @@ export default {
scopediagnostic: [], //
reference: [], //
resulttemp: [], //
disableddiagnosisFunction: false,
disableddiagnosisFunction: true,
curRow: {},
diagnosisFunctionText:"",
calculationFunctionText:""
};
},
created() {
@ -1486,19 +1535,21 @@ export default {
// this.result = res.data.items;
this.resultStatusId = res.data.items;
});
postapi("/api/app/diagnosis/getlistinfilter").then((res) => {
console.log(res);
this.diagnosisId = res.data.items;
// let diagnosisObj={
// itemTypeId:this.form.itemTypeId
// }
postapi("/api/app/diagnosis/getlistinsuggestion").then((res) => {
this.diagnosisId = res.data;
});
},
//
increase() {
this.addoredit();
this.ruesttiele = 1;
Object.assign(this.$data.rusetform, this.$options.data().rusetform)
this.rusetform.itemId = this.form.id;
console.log(this.rusetform.id);
this.ruesttieledialogVisible = true;
// this.rusetform = {};
console.log(this.rusetform)
},
//
getmedicalconclusionlist() {
@ -1580,13 +1631,14 @@ export default {
cb(tableDatas);
},
resultlist() {
getapi("/api/app/item-result-template").then((res) => {
this.reusttableData = res.data.items;
console.log(res);
});
getapi(`/api/app/item-result-template/in-item-id/${this.form.id}`).then(
(res) => {
this.reusttableData = res.data;
}
);
},
resulttemplate() {
this.form = { ...this.curRow };
if (this.form.id == undefined) {
this.$message.warning("请选择操作的数据");
} else {
@ -1594,15 +1646,12 @@ export default {
getapi(`/api/app/item-result-template/in-item-id/${this.form.id}`).then(
(res) => {
this.reusttableData = res.data;
console.log("2222222222222222");
console.log(res);
}
);
////
getapi("/api/app/item-type/by-code-all").then((res) => {
this.resultitemtype = res.data;
console.log(res);
});
// //
// getapi("/api/app/item-type/by-code-all").then((res) => {
// this.resultitemtype = res.data;
// });
}
},
//
@ -1714,15 +1763,20 @@ export default {
if (this.form.id == undefined) {
this.$message.warning("请选择操作的数据");
} else {
this.$nextTick(()=>{
this.$refs.form.resetFields();
})
this.form.price = Number(this.form.price);
this.addorgropdata();
this.title = 2;
this.dialogVisible = true;
if (this.$refs.form !== undefined){
this.$refs.form.resetFields()
}
posjrctid(this.form.id).then((res) => {
this.form = res.data;
// this.unitId.forEach((item)=>{
// if(res.data.unitId==item.id){
// this.unitIdName=item.displayName
// }
// })
if (res.data.isProduceSummary == 'Y') {
this.isProduceSummaryBox = true;
} else {
@ -1760,13 +1814,38 @@ export default {
//
changeBox(type) {
//
console.log(type)
if(this[type+'Box']){
this.form[type] = 'Y';
}else{
this.form[type] = 'N';
}
},
// querySearch(queryString, cb) {
// var restaurants = this.unitId;
// var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
// // callback
// cb(results);
// },
// createFilter(queryString) {
// return (restaurant) => {
// return (restaurant.displayName.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
// };
// },
// handleSelect(item) {
// this.form.unitId=item.id
// },
OnsubmitDiagnosis(){
this.form.diagnosisFunction=this.diagnosisFunctionText
this.diagnosisFunctionText=''
this.diagnosisFunctionBox=false
this.$message.success("设置诊断函数成功");
},
OnsubmitCalculation(){
this.form.calculationFunction=this.calculationFunctionText
this.calculationFunctionText=''
this.calculationFunctionBox=false
this.$message.success("设置计算函数成功");
},
//
Onsubmit() {
this.$refs.form.validate((v) => {
@ -1793,19 +1872,19 @@ export default {
},
//
add() {
this.$nextTick(()=>{
this.$refs.form.resetFields();
})
this.form.price = Number(this.form.price);
this.title = 1;
this.dialogVisible = true;
this.form = {};
if (this.$refs.form !== undefined){
this.$refs.form.resetFields()
}
this.isProduceSummaryBox=true,
this.isNameIntoSummaryBox=true,
this.isDiagnosisFunctionBox=false,
this.isCalculationItemBox=false,
this.isContinueProcessBox=false,
this.isActiveBox=true,
// this.unitIdName=""
this.$nextTick(() => {
this.$refs.refinput.focus();
});
@ -1896,4 +1975,7 @@ export default {
:deep .downText{
display: flex!important;
}
:deep .el-input-group__append {
padding: 0 11px;
}
</style>
Loading…
Cancel
Save