dai 3 years ago
parent
commit
cba6e565de
  1. 13
      src/assets/scss/buttonstyle.scss
  2. 18
      src/views/components/resiForm.vue
  3. 59
      src/views/components/resiInfo.vue
  4. 4
      src/views/components/resiSearch.vue
  5. 7
      src/views/modules/base/community/community.vue
  6. 2
      src/views/modules/base/community/communityExportInfo.vue
  7. 6
      src/views/modules/base/diyInfo.vue
  8. 50
      src/views/modules/base/resi.vue
  9. 289
      src/views/modules/commonDemand/commonDemand.vue
  10. 176
      src/views/modules/commonDemand/commonDemandForm.vue

13
src/assets/scss/buttonstyle.scss

@ -39,7 +39,9 @@
border: none !important;
}
.diy-button--blue:hover{
background: #0042a3 !important;
}
//黄色
.diy-button--yellow {
background: linear-gradient(0deg, #FAA700 0%, #FFBF28 100%) !important;
@ -95,15 +97,18 @@
font-size: 14px !important;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #0056D6 !important;
color: #0056d6 !important;
// line-height: 22px !important;
min-width: 60px !important;
height: 32px !important;
// padding:0 8px !important;
background: #FFFFFF !important;
border-radius: 2px !important;
border: 1px solid #0056D6 !important;
border: 1px solid #0056d6 !important;
}
.diy-button--white:hover{
border: 1px solid #0042a3 !important;
color: #0042a3 !important;
}
// 普通按钮
.diy-button--common {

18
src/views/components/resiForm.vue

@ -195,6 +195,7 @@
:multiple="itemk.formName=='specialCategoryCode'"
:collapse-tags="itemk.formName=='specialCategoryCode'"
clearable
:style="{'width':itemk.formName=='specialCategoryCode'?'183px':''}"
class="u-item-width-normal">
<el-option v-for="items in itemk.opction"
:key="items.value"
@ -294,6 +295,7 @@ export default {
activeName: 'groupeduInfoDto',
validateFlag:null,
disabilityCategoryCode:[],
tabFlag:true,
// input
basicInformation: [
{
@ -1221,7 +1223,11 @@ export default {
watch: {
form:{
handler (val, val2) {
for(let i in this.form){
if(typeof(this.form[i]) === "object"){
this.tabFlag = false
}
}
},
deep:true,
immediate:true
@ -1498,7 +1504,7 @@ export default {
handleTabShow(val,e){
if(e == 1){
if(val.formName == 'partyFlag'){
this.tabsList.push({label:'党员信息',id:'0',groupId:'parymemberInfoDto'})
this.tabsList.push({label:'党员',id:'0',groupId:'parymemberInfoDto'})
}else if(val.formName == 'ensureHouseFlag'){
this.tabsList.push({label:'保障房信息',id:'1',groupId:'ensureHouseDto'})
}else if(val.formName == 'unemployedFlag'){
@ -1675,7 +1681,7 @@ export default {
} else {
await this.residentBirthRecord(this.form.resiId)
}
} else if (tab._props.label == '党员信息') {
} else if (tab._props.label == '党员') {
if (!this.form.resiId) {
this.newForm.parymemberInfoDto = this.form.parymemberInfoDto
} else {
@ -1907,7 +1913,7 @@ export default {
this.form.floatingFlag = data.categoryInfo.floatingFlag.toString()
this.form.liveAloneFlag = data.categoryInfo.liveAloneFlag.toString()
if(this.form.partyFlag == '1') this.tabsList.push({label:'党员信息',id:'0',groupId:'parymemberInfoDto'})
if(this.form.partyFlag == '1') this.tabsList.push({label:'党员',id:'0',groupId:'parymemberInfoDto'})
if(this.form.ensureHouseFlag == '1') this.tabsList.push({label:'保障房信息',id:'1',groupId:'ensureHouseDto'})
if(this.form.unemployedFlag == '1') this.tabsList.push({label:'失业',id:'2',groupId:'unemployedDto'})
if(this.form.veteranFlag == '1') this.tabsList.push({label:'退役军人',id:'3',groupId:'veteranDto'})
@ -2012,7 +2018,7 @@ export default {
},
//
getHealthInfoDetailById(id) {
this.$http.post(`/actual/base/residentHealthInfo/getHealthInfoDetailById/${id}`).then(({ data: res }) => {
this.$http.post(`/actual/base/residentHealthInfo/getHealthInfoDetailById/${id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
@ -2039,6 +2045,7 @@ export default {
this.newForm.healthDto = this.form.healthDto
}
})
},
//
residentWorkInfo(id) {
@ -2457,4 +2464,5 @@ export default {
.f-bto0{
margin-bottom: 0px !important;
}
</style>

59
src/views/components/resiInfo.vue

@ -444,36 +444,6 @@
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="死亡人员" >
<el-row>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">死亡时间 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.deathDate?residentDeathRecordObj.deathDate.substr(0,10):'--':'--'}}</span>
</div>
</el-col>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">加入原因 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.deathReason ?residentDeathRecordObj.deathReason :'--':'--'}}</span>
</div>
</el-col>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">移除时间 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.removeDate ?residentDeathRecordObj.removeDate.substr(0,10) :'--':'--'}}</span>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">移除原因 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.removeReason?residentDeathRecordObj.removeReason:'--':'--'}}</span>
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="迁出" >
<el-row>
<el-col :span="8">
@ -856,6 +826,35 @@
--
</span>
</section>
</el-tab-pane> <el-tab-pane label="" v-if="resiDetailObj.deathFlag">
<el-row>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">死亡时间 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.deathDate?residentDeathRecordObj.deathDate.substr(0,10):'--':'--'}}</span>
</div>
</el-col>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">加入原因 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.deathReason ?residentDeathRecordObj.deathReason :'--':'--'}}</span>
</div>
</el-col>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">移除时间 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.removeDate ?residentDeathRecordObj.removeDate.substr(0,10) :'--':'--'}}</span>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="f-flex f-bto16 f-top24">
<div class="f-labels">移除原因 :</div>
<span class="f-left8 f-font-color">{{residentDeathRecordObj?residentDeathRecordObj.removeReason?residentDeathRecordObj.removeReason:'--':'--'}}</span>
</div>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>

4
src/views/components/resiSearch.vue

@ -39,10 +39,10 @@
</el-date-picker>
</el-form-item>
<el-form-item label="居民年龄" >
<el-input v-model="form.ageStart" class="u-item-width-resiAge" placeholder="请输入" clearable size="small">
<el-input v-model="form.ageStart" class="u-item-width-daterange" placeholder="请输入" clearable size="small">
</el-input>
<span class="u-data-tag"></span>
<el-input v-model="form.ageEnd" class="u-item-width-resiAge u-data-tag" placeholder="请输入" clearable size="small">
<el-input v-model="form.ageEnd" class="u-item-width-daterange u-data-tag" placeholder="请输入" clearable size="small">
</el-input>
</el-form-item>
<el-form-item label="文化程度" >

7
src/views/modules/base/community/community.vue

@ -19,6 +19,7 @@
:filter-node-method="filterNode"
@node-click="handleNodeClick"
lazy
:default-expanded-keys="autoOpenArr"
:load="lazyLoadTree">
<span slot-scope="{ node, data }"
@ -303,7 +304,6 @@ import { Loading } from 'element-ui' // 引入Loading服务
import nextTick from 'dai-js/tools/nextTick'
import debounce from "lodash/debounce";
import deepClone from "@/utils/deepClone.js";
let loading //
export default {
data () {
@ -322,6 +322,7 @@ export default {
return time.getTime() > nowData
}
return {
autoOpenArr:[],
boxHeight: true,
searchHeight: 190,
filterText: '',
@ -538,15 +539,17 @@ export default {
this.startLoading()
this.$refs.ref_tree.$data.store.lazy = !this.filterText
if(this.filterText.length > 0 && this.filterText!=''){
const url = `/actual/base/communityBuilding/tree/search?keyword=${this.filterText}`
const url = `/actual/base/communityBuilding/tree/search?keyword=${this.filterText}`
const {data,code,msg} = await requestGet(url)
if(data[0].children.length>0){
this.treeData = data
this.autoOpenArr.push(this.treeData[0].id);
}else{
this.treeData = []
setTimeout(() => {
this.loadTree()
}, 5)
this.$message.error('暂未找到!')
}
}else {

2
src/views/modules/base/community/communityExportInfo.vue

@ -328,7 +328,7 @@ export default {
this.exportTemplate(id)
},
async exportTemplate (id) {
let url = "/epmetuser/icresiuser/exportExcelCustom"
let url = "/actual/base/communityHouse/exportExcelCustom"
let params = {
templateId: id || '',

6
src/views/modules/base/diyInfo.vue

@ -310,14 +310,14 @@ export default {
this.exportTemplate(id)
},
async exportTemplate(id) {
let url = "/epmetuser/icresiuser/exportExcelCustom"
let url = "/actual/base/residentBaseInfo/exportExcelCustom"
let params = {
templateId: id || '',
searchForm: {...this.search},
exportConfig: {
...this.form,
formCode: 'resi_base_info',
formCode: 'resident_base_info',
itemList: this.rightList.map(item => {
return {
itemId: item.id,
@ -355,7 +355,7 @@ export default {
},
async getTemplateList () {
let params = {
formCode: 'resi_base_info'
formCode: 'resident_base_info'
}
await this.$http
.post('/oper/customize/icExportTemplate/templateList', params)

50
src/views/modules/base/resi.vue

@ -16,7 +16,7 @@
style="margin-left: 10px"
size="small"
plain
class=" f-right5"
class=" f-right5 diy-button--white"
@click="resetSearchForm"
>重置</el-button>
<el-button
@ -56,6 +56,7 @@
v-if="btnAuths.ic_resi_export"
style="margin-left: 10px"
size="small"
class="diy-button--white"
@click="diyExport"
plain
>导出</el-button
@ -64,6 +65,7 @@
v-if="btnAuths.ic_resi_export"
style="margin-left: 10px"
size="small"
class="diy-button--white"
@click=""
plain
>核对</el-button
@ -106,6 +108,7 @@
style="margin-left: 10px"
v-if="btnAuths.ic_resi_batch_del"
size="small"
class="diy-button--white"
plain
@click="deleteBatch"
>批量删除</el-button
@ -398,7 +401,7 @@
ref="ref_diy"
:list="exportList"
:search="{
formCode: 'resi_base_info',
formCode: 'resident_base_info',
pageNo: currentPage,
pageSize: pageSize,
conditions: conditions,
@ -639,7 +642,7 @@ export default {
categoryKey: "resi_info",
paramMap: {
searchForm: {
formCode: "resi_base_info",
formCode: "resident_base_info",
pageNo: this.currentPage,
pageSize: this.pageSize,
conditions: this.conditions,
@ -650,12 +653,14 @@ export default {
},
handleSearchFrom() {
let obj = this.$refs.myResiSearch.form
if (typeof obj.categoryKey == 'object'&&obj.categoryKey .length != 0) {
let categoryArr = this.$refs.myResiSearch.form.categoryKey
let agencyId = this.$refs.myResiSearch.form.agencyId
if (typeof obj.categoryKey == 'object'&&obj.categoryKey.length != 0) {
obj.categoryKey = obj.categoryKey.join(',')
} else {
obj.categoryKey = "";
}
if (typeof obj.agencyId == 'object'&&obj.agencyId .length != 0) {
if (typeof obj.agencyId == 'object'&&obj.agencyId.length != 0) {
obj.agencyId = obj.agencyId.join(',')
} else {
obj.agencyId = "";
@ -663,7 +668,8 @@ export default {
this.currentPage = 1
console.log(obj);
this.getTableData(obj)
this.$refs.myResiSearch.form.categoryKey = categoryArr
this.$refs.myResiSearch.form.agencyId = agencyId
},
//
checkSelectable(row, index) {
@ -892,7 +898,7 @@ export default {
this.exportBtn = true;
this.exportBtnTitle = "正在导出...";
let params = {
formCode: "resi_base_info",
formCode: "resident_base_info",
conditions: this.conditions,
};
@ -1034,17 +1040,17 @@ export default {
await this.residentBaseInfo();
},
//
// residentBaseInfo () {
// this.$http.post(`/actual/base/residentBaseInfo/detail/${this.editUserId}`).then(({ data: res }) => {
// if (res.code !== 0) {
// return this.$message.error(res.msg);
// } else {
// this.$refs.baseForm.old_from(res.data);
// }
// }).catch((err) => {
// return this.$message.error("");
// });
// },
residentBaseInfo () {
this.$http.post(`/actual/base/residentBaseInfo/detail/${this.editUserId}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.$refs.baseForm.old_from(res.data);
}
}).catch((err) => {
return this.$message.error("网络错误");
});
},
handlerReset() {
this.$refs.baseForm.resetForm();
},
@ -1324,7 +1330,7 @@ export default {
getrowInfo(id) {
let params = {
formCode: "resi_base_info",
formCode: "resident_base_info",
icResiUserId: id,
};
this.$http
@ -1402,7 +1408,7 @@ export default {
let options = [];
// console.log('getOptionsList----', url)
await this.$http
.post(url, { formCode: "resi_base_info" })
.post(url, { formCode: "resident_base_info" })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
@ -1435,7 +1441,7 @@ export default {
async getFormList(type) {
await this.$http
.post("/oper/customize/icform/getcustomerform", {
formCode: "resi_base_info",
formCode: "resident_base_info",
dynamic: true,
})
.then(({ data: res }) => {
@ -1479,7 +1485,7 @@ export default {
async getExportList(type) {
const url = "/oper/customize/icformitemgroup/list";
let params = {
formCode: "resi_base_info",
formCode: "resident_base_info",
};
const { data, code, msg } = await requestPost(url, params);

289
src/views/modules/commonDemand/commonDemand.vue

@ -0,0 +1,289 @@
<template >
<div class="g-main">
<div class="m-table">
<div class="u-table-btn2">
<div class="u-table-btn2-left">
<el-button style=""
size="small"
class="diy-button--blue"
icon="el-icon-plus"
@click="handleAdd({},'add')">新增分类</el-button>
</div>
</div>
<div class="m-table-item">
<el-table ref="ref_table"
:data="tableData"
border
row-key="id"
default-expand-all
:height="tableHeight"
style="width: 100%"
:tree-props="{children: 'childrenList', hasChildren: 'hasChildren'}"
>
<el-table-column
prop="name"
label="分类名称"
>
</el-table-column>
<el-table-column
prop="sort"
label="排序"
>
</el-table-column>
<el-table-column label="操作"
fixed="right"
header-align="center"
align="center"
class="operate">
<template slot-scope="scope">
<el-button
v-if="scope.row.pid==0"
type="text"
class="div-table-button--blue"
size="small"
@click="handleAdd(scope.row,'add0')">添加二级分类</el-button>
<el-button
type="text"
class="div-table-button--blue"
size="small"
@click="handleAdd(scope.row,'edit')">修改</el-button>
<el-button
type="text"
class="div-table-button--blue"
size="small"
@click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="pageSize"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</div>
</div>
<el-dialog :visible.sync="formShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="670px"
top="5vh"
class="dialog-h"
@closed="diaClose">
<commonDemand-form ref="ref_form"
@dialogCancle="addFormCancle"
@dialogOk="addFormOk"></commonDemand-form>
</el-dialog>
</div>
</template>
<script>
import commonDemandForm from './commonDemandForm'
import { requestPost,requestGet } from "@/js/dai/request";
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import axios from 'axios'
let loading //
export default {
data () {
return {
searchHeight: 0,//,
pageNo:0,
pageSize:20,
total:0,
formTitle:"",
formShow:false,
tableData: [],
}
},
components: {
commonDemandForm
},
activated () {
},
async mounted () {
this.loadTable()
},
methods: {
async loadTable () {
const url = "/governance/commonServiceType/treeList"
let {data,msg,code } = await requestGet(url)
if(code == 0){
this.tableData = data
}else{
this.$message.error(msg)
}
},
diaClose () {
this.$refs.ref_form.resetData()
this.formShow = false
},
addFormOk () {
this.formShow = false
this.loadTable()
},
addFormCancle () {
this.formShow = false
},
async handleDetail (row) {
this.detailShow = true
const _data = await this.detail(row)
this.$nextTick(() => {
this.$refs.ref_form_detail.initForm(_data)
})
},
handleAdd (row,type) {
if(type=="add"){
console.log(row.id);
this.formTitle = '新增分类'
this.formShow = true
this.$nextTick(() => {
this.$refs.ref_form.initForm(type, row)
})
}else if(type=="add0"){
this.formTitle = '新增分类'
this.formShow = true
this.$nextTick(() => {
this.$refs.ref_form.initForm(type, row)
})
}else if(type == 'edit'){
this.formTitle = '修改分类'
this.formShow = true
this.$nextTick(() => {
this.$refs.ref_form.initForm(type, row)
})
}
},
selectAll (selection) {
this.selection = selection
},
selectionChange (selection) {
this.selection = selection
},
async handleDelete (row) {
this.$confirm("确认删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.deleteDemand(row)
})
.catch(err => {
if (err == "cancel") {
this.$message({
type: "info",
message: "已取消删除"
});
}
});
},
async deleteDemand (row) {
const url = `/governance/commonServiceType/delete/${row.id}`
const { data, code, msg } = await requestPost(url)
if (code === 0) {
this.$message({
type: "success",
message: "删除成功"
});
this.loadTable()
} else if (code > 8000) {
this.$message({
message: msg,
duration: 0
})
this.loadTable()
} else {
this.$message.error(msg)
}
},
handleDiyClose () {
this.diyDialog = false;
},
handleClose (done) {
this.diyDialog = false
},
handleSizeChange (val) {
this.pageSize = val
this.pageNo = 1
this.loadTable()
},
handleCurrentChange (val) {
this.pageNo = val
this.loadTable()
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
tableHeight () {
console.log(this.searchHeight)
let height = this.searchHeight + 270
return this.$store.state.inIframe ? this.clientHeight - height + this.iframeHeight : this.clientHeight - height
},
...mapGetters(['clientHeight', 'iframeHeight'])
},
watch: {
},
props: {
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/list-main.scss";
</style>
<style >
.el-message.is-closable .el-message__content {
line-height: 20px;
}
</style>

176
src/views/modules/commonDemand/commonDemandForm.vue

@ -0,0 +1,176 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<div >
<el-form ref="ref_form"
:inline="true"
:model="dataForm"
:rules="dataRule"
label-width="150px"
class="g-edit-form">
<el-form-item prop="name" label="名称">
<el-input v-model="dataForm.name" placeholder="请输入名称" ></el-input>
</el-form-item>
<el-form-item prop="sort" :label="$t('dept.sort')">
<el-input-number v-model="dataForm.sort" @change="handleChangeSortNum" :min="0" :label="$t('dept.sort')" ></el-input-number>
</el-form-item>
</el-form>
</div>
</div>
<div class="m-edit-btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
class="diy-button--blue"
@click="handleComfirm"> </el-button>
</div>
</div>
</template>
<script>
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
import { number } from 'echarts'
let loading //
export default {
data () {
return {
formType: 'add', // addeditdetail
searchOptions: [],
searchValue: '',
resultList: [],
loading: false,
dataForm: {
name:"",
sort:0,
pid:0,
type:""
},
propertyFormShow: false,
keyWords: '',
}
},
components: {},
mounted () {
},
methods: {
async initForm (type, row) {
this.$refs.ref_form.resetFields();
this.type = type
this.formType = type
if(type == "add0"){
this.dataForm.pid =row.id
}else if(type =='add'){
console.log(row.id);
this.dataForm.pid = 0
}else if(type =='edit'){
this.dataForm = JSON.parse(JSON.stringify(row))
}
},
handleAddProperty () {
this.propertyForm.name = ''
this.propertyFormShow = true
},
async handleComfirm () {
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
} else {
this.addComClass()
}
})
},
async addComClass(){
const url = "/governance/commonServiceType/save"
const updateUrl = "/governance/commonServiceType/update"
let params = {
pid :this.type=='edit'? this.dataForm.id:this.dataForm.pid,
name:this.dataForm.name,
sort:this.dataForm.sort
}
let updateParms = {
id :this.type=='edit'? this.dataForm.id:this.dataForm.pid,
name:this.dataForm.name,
sort:this.dataForm.sort
}
console.log(params);
let {data,code,msg} = await requestPost(this.type=='edit'?updateUrl:url,this.type=='edit'?updateParms:params)
if(code == 0){
this.$emit('dialogOk')
this.$message({
type: "success",
message: '操作成功',
duration: 1
})
}else{
this.$message({
type: "error",
message:msg,
duration: 0
})
}
},
handleCancle () {
this.$emit('dialogCancle')
},
resetData () {
this.propertyFormShow = false
},
handleChangeSortNum(value) {
this.dataForm.sort = value
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
name: [
{ required: true, message: '分类名称不能为空', trigger: 'blur' },
{
min: 1,
max: 50,
message: '分类名称长度在 1 到 50个字符',
trigger: 'blur'
}
],
sort: [
{ required: true, message: '分类顺序不能为空', trigger: 'blur' },
],
}
},
},
props: {}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/edit-main.scss";
</style>
Loading…
Cancel
Save